1*59599516SKenneth E. Jansen subroutine i3Pcond ( Binv, uBrg, ilwork, code ) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc This routine is the preconditioner driver which calls 5*59599516SKenneth E. Jansenc local routines to perform the right or left EBE preconditioning 6*59599516SKenneth E. Jansenc of a vector. 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansenc input: 9*59599516SKenneth E. Jansenc Binv (numel,nedof,nedof) : element preconditioners 10*59599516SKenneth E. Jansenc uBrg (nshg, nflow) : vector to be preconditioned 11*59599516SKenneth E. Jansenc code : preconditioning code 12*59599516SKenneth E. Jansenc .eq. 'R_Pcond ', Right precond. 13*59599516SKenneth E. Jansenc .eq. 'L_Pcond ', Left precond. 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc output: 16*59599516SKenneth E. Jansenc uBrg (nshg, nflow) : preconditioned vector 17*59599516SKenneth E. Jansenc 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 dimension Binv(numel,nedof,nedof), uBrg(nshg,nflow) 25*59599516SKenneth E. Jansenc 26*59599516SKenneth E. Jansen dimension uBtmp(nshg,nflow), ilwork(nlwork) 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansen character*8 code 29*59599516SKenneth E. Jansenc 30*59599516SKenneth E. Jansenc.... initialize 31*59599516SKenneth E. Jansenc 32*59599516SKenneth E. Jansen uBtmp = zero 33*59599516SKenneth E. Jansenc 34*59599516SKenneth E. Jansenc.... loop over element blocks 35*59599516SKenneth E. Jansenc 36*59599516SKenneth E. Jansen do iblk = 1, nelblk 37*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 38*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 39*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 40*59599516SKenneth E. Jansen inum = iel + npro - 1 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansenc.... right precondition the vector 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen if (code .eq. 'R_Pcond ') then 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansen if (iPcond .eq. 1) then 47*59599516SKenneth E. Jansen call itrPr1 (mien(iblk)%p, Binv(iel:inum,:,:), uBrg, 48*59599516SKenneth E. Jansen & uBtmp, 'R_Pcond ') 49*59599516SKenneth E. Jansen endif 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansenc if (iPcond .eq. 2) then 52*59599516SKenneth E. Jansenc call itrPr2 (mien(iblk)%p, Binv(iel:inum,:,:), uBrg, 53*59599516SKenneth E. Jansenc & 'R_Pcond ') 54*59599516SKenneth E. Jansenc endif 55*59599516SKenneth E. Jansen endif 56*59599516SKenneth E. Jansenc 57*59599516SKenneth E. Jansenc.... left precondition the vector 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansen if (code .eq. 'L_Pcond ') then 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansen if (iPcond .eq. 1) then 62*59599516SKenneth E. Jansen call itrPr1 (mien(iblk)%p, Binv(iel:inum,:,:), uBrg, 63*59599516SKenneth E. Jansen & uBtmp, 'L_Pcond ') 64*59599516SKenneth E. Jansen endif 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansenc if (iPcond .eq. 2) then 67*59599516SKenneth E. Jansenc call itrPr2 (mien(iblk)%p, Binv(iel:inum,:,:), uBrg, 68*59599516SKenneth E. Jansenc & 'L_Pcond ') 69*59599516SKenneth E. Jansenc endif 70*59599516SKenneth E. Jansen endif 71*59599516SKenneth E. Jansenc 72*59599516SKenneth E. Jansen enddo 73*59599516SKenneth E. Jansenc 74*59599516SKenneth E. Jansenc.... update the vector 75*59599516SKenneth E. Jansenc 76*59599516SKenneth E. Jansenc if (iPcond .ne. 0) uBrg = uBtmp 77*59599516SKenneth E. Jansenc 78*59599516SKenneth E. Jansenc.... return 79*59599516SKenneth E. Jansenc 80*59599516SKenneth E. Jansen return 81*59599516SKenneth E. Jansen end 82