xref: /phasta/phSolver/compressible/spsi3pre.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine Spsi3pre (BDiag,  lhsK,  col, row)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc------------------------------------------------------------------------------
4*59599516SKenneth E. Jansenc This is the initialization routine for the Sparse-GMRES solver.
5*59599516SKenneth E. Jansenc It pre-preconditions the LHS mass matrix and sets up the
6*59599516SKenneth E. Jansenc sparse preconditioners. (pre-preconditioning is block diagonal
7*59599516SKenneth E. Jansenc scaling).
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc input:
10*59599516SKenneth E. Jansenc     BDiag  (nshg,nflow,nflow)    : block diagonal scaling matrix
11*59599516SKenneth E. Jansenc                                  which is already LU factored.
12*59599516SKenneth E. Jansenc     lhsK(nflow*nflow,nnz_tot) : sparse LHS mass matrix
13*59599516SKenneth E. Jansenc
14*59599516SKenneth E. Jansenc output:
15*59599516SKenneth E. Jansenc     lhsK(nflow*nflow,nnz_tot)  : pre-preconditioned (scaled) mass matrix
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansenc Nahid Razmara, Spring 2000.	(Sparse Matrix)
18*59599516SKenneth E. Jansenc------------------------------------------------------------------------------
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansen      use pointer_data
21*59599516SKenneth E. Jansen
22*59599516SKenneth E. Jansen      include "common.h"
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansen        integer col(nshg+1),  row(nnz*nshg)
25*59599516SKenneth E. Jansen        integer sparseloc, c, c1
26*59599516SKenneth E. Jansen        real*8 lhsK(nflow*nflow,nnz_tot)
27*59599516SKenneth E. Jansen
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansen
30*59599516SKenneth E. Jansen      dimension  BDiag(nshg,nflow,nflow)
31*59599516SKenneth E. Jansen
32*59599516SKenneth E. Jansen
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansenc.... block-diagonal pre-precondition LHS
35*59599516SKenneth E. Jansenc
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansenc.... reduce by columns, (left block diagonal preconditioning)
38*59599516SKenneth E. Jansenc
39*59599516SKenneth E. Jansenc     lhsK  <-- inverse(L^tilde) lhsK
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansen      if(nflow.ne.5) then
43*59599516SKenneth E. Jansen         write(*,*)' spsi3pre.f assumed nflow=5'
44*59599516SKenneth E. Jansen         stop
45*59599516SKenneth E. Jansen      endif
46*59599516SKenneth E. Jansen        do i = 1, nshg
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansen            do k = col(i), col(i+1)-1
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansen                  lhsK(2,k) = lhsK(2,k)
51*59599516SKenneth E. Jansen     &                 - BDiag(i,2,1) * lhsK(1,k)
52*59599516SKenneth E. Jansen                  lhsK(7,k) = lhsK(7,k)
53*59599516SKenneth E. Jansen     &                 - BDiag(i,2,1) * lhsK(6,k)
54*59599516SKenneth E. Jansen                  lhsK(12,k) = lhsK(12,k)
55*59599516SKenneth E. Jansen     &                 - BDiag(i,2,1) * lhsK(11,k)
56*59599516SKenneth E. Jansen                  lhsK(17,k) = lhsK(17,k)
57*59599516SKenneth E. Jansen     &                 - BDiag(i,2,1) * lhsK(16,k)
58*59599516SKenneth E. Jansen                  lhsK(22,k) = lhsK(22,k)
59*59599516SKenneth E. Jansen     &                 - BDiag(i,2,1) * lhsK(21,k)
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen                  lhsK(3,k) = lhsK(3,k)
62*59599516SKenneth E. Jansen     &                 - BDiag(i,3,1) * lhsK(1,k)
63*59599516SKenneth E. Jansen     &                 - BDiag(i,3,2) * lhsK(2,k)
64*59599516SKenneth E. Jansen                  lhsK(8,k) = lhsK(8,k)
65*59599516SKenneth E. Jansen     &                 - BDiag(i,3,1) * lhsK(6,k)
66*59599516SKenneth E. Jansen     &                 - BDiag(i,3,2) * lhsK(7,k)
67*59599516SKenneth E. Jansen                  lhsK(13,k) = lhsK(13,k)
68*59599516SKenneth E. Jansen     &                 - BDiag(i,3,1) * lhsK(11,k)
69*59599516SKenneth E. Jansen     &                 - BDiag(i,3,2) * lhsK(12,k)
70*59599516SKenneth E. Jansen                  lhsK(18,k) = lhsK(18,k)
71*59599516SKenneth E. Jansen     &                 - BDiag(i,3,1) * lhsK(16,k)
72*59599516SKenneth E. Jansen     &                 - BDiag(i,3,2) * lhsK(17,k)
73*59599516SKenneth E. Jansen                  lhsK(23,k) = lhsK(23,k)
74*59599516SKenneth E. Jansen     &                 - BDiag(i,3,1) * lhsK(21,k)
75*59599516SKenneth E. Jansen     &                 - BDiag(i,3,2) * lhsK(22,k)
76*59599516SKenneth E. Jansenc
77*59599516SKenneth E. Jansen                  lhsK(4,k) = lhsK(4,k)
78*59599516SKenneth E. Jansen     &                 - BDiag(i,4,1) * lhsK(1,k)
79*59599516SKenneth E. Jansen     &                 - BDiag(i,4,2) * lhsK(2,k)
80*59599516SKenneth E. Jansen     &                 - BDiag(i,4,3) * lhsK(3,k)
81*59599516SKenneth E. Jansen                  lhsK(9,k) = lhsK(9,k)
82*59599516SKenneth E. Jansen     &                 - BDiag(i,4,1) * lhsK(6,k)
83*59599516SKenneth E. Jansen     &                 - BDiag(i,4,2) * lhsK(7,k)
84*59599516SKenneth E. Jansen     &                 - BDiag(i,4,3) * lhsK(8,k)
85*59599516SKenneth E. Jansen                  lhsK(14,k) = lhsK(14,k)
86*59599516SKenneth E. Jansen     &                 - BDiag(i,4,1) * lhsK(11,k)
87*59599516SKenneth E. Jansen     &                 - BDiag(i,4,2) * lhsK(12,k)
88*59599516SKenneth E. Jansen     &                 - BDiag(i,4,3) * lhsK(13,k)
89*59599516SKenneth E. Jansen                  lhsK(19,k) = lhsK(19,k)
90*59599516SKenneth E. Jansen     &                 - BDiag(i,4,1) * lhsK(16,k)
91*59599516SKenneth E. Jansen     &                 - BDiag(i,4,2) * lhsK(17,k)
92*59599516SKenneth E. Jansen     &                 - BDiag(i,4,3) * lhsK(18,k)
93*59599516SKenneth E. Jansen                  lhsK(24,k) = lhsK(24,k)
94*59599516SKenneth E. Jansen     &                 - BDiag(i,4,1) * lhsK(21,k)
95*59599516SKenneth E. Jansen     &                 - BDiag(i,4,2) * lhsK(22,k)
96*59599516SKenneth E. Jansen     &                 - BDiag(i,4,3) * lhsK(23,k)
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen                  lhsK(5,k) = lhsK(5,k)
99*59599516SKenneth E. Jansen     &                 - BDiag(i,5,1) * lhsK(1,k)
100*59599516SKenneth E. Jansen     &                 - BDiag(i,5,2) * lhsK(2,k)
101*59599516SKenneth E. Jansen     &                 - BDiag(i,5,3) * lhsK(3,k)
102*59599516SKenneth E. Jansen     &                 - BDiag(i,5,4) * lhsK(4,k)
103*59599516SKenneth E. Jansen                  lhsK(10,k) = lhsK(10,k)
104*59599516SKenneth E. Jansen     &                 - BDiag(i,5,1) * lhsK(6,k)
105*59599516SKenneth E. Jansen     &                 - BDiag(i,5,2) * lhsK(7,k)
106*59599516SKenneth E. Jansen     &                 - BDiag(i,5,3) * lhsK(8,k)
107*59599516SKenneth E. Jansen     &                 - BDiag(i,5,4) * lhsK(9,k)
108*59599516SKenneth E. Jansen                  lhsK(15,k) = lhsK(15,k)
109*59599516SKenneth E. Jansen     &                 - BDiag(i,5,1) * lhsK(11,k)
110*59599516SKenneth E. Jansen     &                 - BDiag(i,5,2) * lhsK(12,k)
111*59599516SKenneth E. Jansen     &                 - BDiag(i,5,3) * lhsK(13,k)
112*59599516SKenneth E. Jansen     &                 - BDiag(i,5,4) * lhsK(14,k)
113*59599516SKenneth E. Jansen                  lhsK(20,k) = lhsK(20,k)
114*59599516SKenneth E. Jansen     &                 - BDiag(i,5,1) * lhsK(16,k)
115*59599516SKenneth E. Jansen     &                 - BDiag(i,5,2) * lhsK(17,k)
116*59599516SKenneth E. Jansen     &                 - BDiag(i,5,3) * lhsK(18,k)
117*59599516SKenneth E. Jansen     &                 - BDiag(i,5,4) * lhsK(19,k)
118*59599516SKenneth E. Jansen                  lhsK(25,k) = lhsK(25,k)
119*59599516SKenneth E. Jansen     &                 - BDiag(i,5,1) * lhsK(21,k)
120*59599516SKenneth E. Jansen     &                 - BDiag(i,5,2) * lhsK(22,k)
121*59599516SKenneth E. Jansen     &                 - BDiag(i,5,3) * lhsK(23,k)
122*59599516SKenneth E. Jansen     &                 - BDiag(i,5,4) * lhsK(24,k)
123*59599516SKenneth E. Jansen               enddo
124*59599516SKenneth E. Jansen            enddo
125*59599516SKenneth E. Jansen
126*59599516SKenneth E. Jansen        do i = 1, nshg
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansen            do k = col(i), col(i+1)-1
129*59599516SKenneth E. Jansen                j = row(k)
130*59599516SKenneth E. Jansenc
131*59599516SKenneth E. Jansenc.... reduce by rows, (right block diagonal preconditioning)
132*59599516SKenneth E. Jansenc
133*59599516SKenneth E. Jansenc     lhsK   <-- lhsK  inverse(U^tilde)
134*59599516SKenneth E. Jansenc
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansen
137*59599516SKenneth E. Jansen                       lhsK(1,k)  = BDiag(j,1,1)*lhsK(1,k)
138*59599516SKenneth E. Jansen                       lhsK(2,k)  = BDiag(j,1,1)*lhsK(2,k)
139*59599516SKenneth E. Jansen                       lhsK(3,k)  = BDiag(j,1,1)*lhsK(3,k)
140*59599516SKenneth E. Jansen                       lhsK(4,k)  = BDiag(j,1,1)*lhsK(4,k)
141*59599516SKenneth E. Jansen                       lhsK(5,k)  = BDiag(j,1,1)*lhsK(5,k)
142*59599516SKenneth E. Jansen
143*59599516SKenneth E. Jansen                  lhsK(6,k) = BDiag(j,2,2)*( lhsK(6,k)
144*59599516SKenneth E. Jansen     &                 - BDiag(j,1,2) * lhsK(1,k) )
145*59599516SKenneth E. Jansen                  lhsK(7,k) = BDiag(j,2,2)*( lhsK(7,k)
146*59599516SKenneth E. Jansen     &                 - BDiag(j,1,2) * lhsK(2,k) )
147*59599516SKenneth E. Jansen                  lhsK(8,k) = BDiag(j,2,2)*( lhsK(8,k)
148*59599516SKenneth E. Jansen     &                 - BDiag(j,1,2) * lhsK(3,k) )
149*59599516SKenneth E. Jansen                  lhsK(9,k) = BDiag(j,2,2)*( lhsK(9,k)
150*59599516SKenneth E. Jansen     &                 - BDiag(j,1,2) * lhsK(4,k) )
151*59599516SKenneth E. Jansen                  lhsK(10,k) = BDiag(j,2,2)*( lhsK(10,k)
152*59599516SKenneth E. Jansen     &                 - BDiag(j,1,2) * lhsK(5,k) )
153*59599516SKenneth E. Jansenc
154*59599516SKenneth E. Jansen                  lhsK(11,k) = BDiag(j,3,3)*( lhsK(11,k)
155*59599516SKenneth E. Jansen     &                 - BDiag(j,1,3) * lhsK(1,k)
156*59599516SKenneth E. Jansen     &                 - BDiag(j,2,3) * lhsK(6,k) )
157*59599516SKenneth E. Jansen                  lhsK(12,k) = BDiag(j,3,3)*( lhsK(12,k)
158*59599516SKenneth E. Jansen     &                 - BDiag(j,1,3) * lhsK(2,k)
159*59599516SKenneth E. Jansen     &                 - BDiag(j,2,3) * lhsK(7,k) )
160*59599516SKenneth E. Jansen                  lhsK(13,k) = BDiag(j,3,3)*( lhsK(13,k)
161*59599516SKenneth E. Jansen     &                 - BDiag(j,1,3) * lhsK(3,k)
162*59599516SKenneth E. Jansen     &                 - BDiag(j,2,3) * lhsK(8,k) )
163*59599516SKenneth E. Jansen                  lhsK(14,k) = BDiag(j,3,3)*( lhsK(14,k)
164*59599516SKenneth E. Jansen     &                 - BDiag(j,1,3) * lhsK(4,k)
165*59599516SKenneth E. Jansen     &                 - BDiag(j,2,3) * lhsK(9,k) )
166*59599516SKenneth E. Jansen                  lhsK(15,k) = BDiag(j,3,3)*( lhsK(15,k)
167*59599516SKenneth E. Jansen     &                 - BDiag(j,1,3) * lhsK(5,k)
168*59599516SKenneth E. Jansen     &                 - BDiag(j,2,3) * lhsK(10,k) )
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen                  lhsK(16,k) = BDiag(j,4,4)*( lhsK(16,k)
171*59599516SKenneth E. Jansen     &                 - BDiag(j,1,4) * lhsK(1,k)
172*59599516SKenneth E. Jansen     &                 - BDiag(j,2,4) * lhsK(6,k)
173*59599516SKenneth E. Jansen     &                 - BDiag(j,3,4) * lhsK(11,k) )
174*59599516SKenneth E. Jansen                  lhsK(17,k) = BDiag(j,4,4)*( lhsK(17,k)
175*59599516SKenneth E. Jansen     &                 - BDiag(j,1,4) * lhsK(2,k)
176*59599516SKenneth E. Jansen     &                 - BDiag(j,2,4) * lhsK(7,k)
177*59599516SKenneth E. Jansen     &                 - BDiag(j,3,4) * lhsK(12,k) )
178*59599516SKenneth E. Jansen                  lhsK(18,k) = BDiag(j,4,4)*( lhsK(18,k)
179*59599516SKenneth E. Jansen     &                 - BDiag(j,1,4) * lhsK(3,k)
180*59599516SKenneth E. Jansen     &                 - BDiag(j,2,4) * lhsK(8,k)
181*59599516SKenneth E. Jansen     &                 - BDiag(j,3,4) * lhsK(13,k) )
182*59599516SKenneth E. Jansen                  lhsK(19,k) = BDiag(j,4,4)*( lhsK(19,k)
183*59599516SKenneth E. Jansen     &                 - BDiag(j,1,4) * lhsK(4,k)
184*59599516SKenneth E. Jansen     &                 - BDiag(j,2,4) * lhsK(9,k)
185*59599516SKenneth E. Jansen     &                 - BDiag(j,3,4) * lhsK(14,k) )
186*59599516SKenneth E. Jansen                  lhsK(20,k) = BDiag(j,4,4)*( lhsK(20,k)
187*59599516SKenneth E. Jansen     &                 - BDiag(j,1,4) * lhsK(5,k)
188*59599516SKenneth E. Jansen     &                 - BDiag(j,2,4) * lhsK(10,k)
189*59599516SKenneth E. Jansen     &                 - BDiag(j,3,4) * lhsK(15,k) )
190*59599516SKenneth E. Jansenc
191*59599516SKenneth E. Jansen                  lhsK(21,k) = BDiag(j,5,5)*( lhsK(21,k)
192*59599516SKenneth E. Jansen     &                 - BDiag(j,1,5) * lhsK(1,k)
193*59599516SKenneth E. Jansen     &                 - BDiag(j,2,5) * lhsK(6,k)
194*59599516SKenneth E. Jansen     &                 - BDiag(j,3,5) * lhsK(11,k)
195*59599516SKenneth E. Jansen     &                 - BDiag(j,4,5) * lhsK(16,k) )
196*59599516SKenneth E. Jansen                  lhsK(22,k) = BDiag(j,5,5)*( lhsK(22,k)
197*59599516SKenneth E. Jansen     &                 - BDiag(j,1,5) * lhsK(2,k)
198*59599516SKenneth E. Jansen     &                 - BDiag(j,2,5) * lhsK(7,k)
199*59599516SKenneth E. Jansen     &                 - BDiag(j,3,5) * lhsK(12,k)
200*59599516SKenneth E. Jansen     &                 - BDiag(j,4,5) * lhsK(17,k) )
201*59599516SKenneth E. Jansen                  lhsK(23,k) = BDiag(j,5,5)*( lhsK(23,k)
202*59599516SKenneth E. Jansen     &                 - BDiag(j,1,5) * lhsK(3,k)
203*59599516SKenneth E. Jansen     &                 - BDiag(j,2,5) * lhsK(8,k)
204*59599516SKenneth E. Jansen     &                 - BDiag(j,3,5) * lhsK(13,k)
205*59599516SKenneth E. Jansen     &                 - BDiag(j,4,5) * lhsK(18,k) )
206*59599516SKenneth E. Jansen                  lhsK(24,k) = BDiag(j,5,5)*( lhsK(24,k)
207*59599516SKenneth E. Jansen     &                 - BDiag(j,1,5) * lhsK(4,k)
208*59599516SKenneth E. Jansen     &                 - BDiag(j,2,5) * lhsK(9,k)
209*59599516SKenneth E. Jansen     &                 - BDiag(j,3,5) * lhsK(14,k)
210*59599516SKenneth E. Jansen     &                 - BDiag(j,4,5) * lhsK(19,k) )
211*59599516SKenneth E. Jansen                  lhsK(25,k) = BDiag(j,5,5)*( lhsK(25,k)
212*59599516SKenneth E. Jansen     &                 - BDiag(j,1,5) * lhsK(5,k)
213*59599516SKenneth E. Jansen     &                 - BDiag(j,2,5) * lhsK(10,k)
214*59599516SKenneth E. Jansen     &                 - BDiag(j,3,5) * lhsK(15,k)
215*59599516SKenneth E. Jansen     &                 - BDiag(j,4,5) * lhsK(20,k) )
216*59599516SKenneth E. Jansen               enddo
217*59599516SKenneth E. Jansen            enddo
218*59599516SKenneth E. Jansenc
219*59599516SKenneth E. Jansen      return
220*59599516SKenneth E. Jansen
221*59599516SKenneth E. Jansen      end
222*59599516SKenneth E. Jansen
223*59599516SKenneth E. Jansen
224