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