159599516SKenneth E. Jansen subroutine itrPr1 (ien, Binv, uBrg, uBtmp, code) 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc---------------------------------------------------------------------- 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc This routine preconditions a given vector, element-by-element. 659599516SKenneth E. Jansenc The preconditioner used is Gauss-Siedel. 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc input: 9*513954efSKenneth E. Jansenc ien (npro,nshl) : element nodal connectivity 1059599516SKenneth E. Jansenc Binv (npro,nedof,nedof) : LHS element preconditioner matrices 1159599516SKenneth E. Jansenc code : preconditioning code 1259599516SKenneth E. Jansenc .eq. 'R_Pcond ', Right precond. 1359599516SKenneth E. Jansenc .eq. 'L_Pcond ', Left precond. 1459599516SKenneth E. Jansenc 1559599516SKenneth E. Jansenc output: 1659599516SKenneth E. Jansenc uBrg (nshg,nflow) : preconditioned vector (uBrg) 1759599516SKenneth E. Jansenc 1859599516SKenneth E. Jansenc Farzin Shakib, Winter 1987. 1959599516SKenneth E. Jansenc---------------------------------------------------------------------- 2059599516SKenneth E. Jansenc 2159599516SKenneth E. Jansen include "common.h" 2259599516SKenneth E. Jansenc 2359599516SKenneth E. Jansen dimension Binv(npro,nedof,nedof), uBrg(nshg,nflow), 24*513954efSKenneth E. Jansen & uBrgl(npro,nshl*nflow), ien(npro,nshl), 2559599516SKenneth E. Jansen & uBtmp(nshg,nflow) 2659599516SKenneth E. Jansenc 2759599516SKenneth E. Jansen character*8 code 2859599516SKenneth E. Jansenc 2959599516SKenneth E. Jansenc.... --------------------> Right Pre-condition <-------------------- 3059599516SKenneth E. Jansenc 3159599516SKenneth E. Jansen if (code .eq. 'R_Pcond ') then 3259599516SKenneth E. Jansenc 3359599516SKenneth E. Jansenc.... perform the upper triangular solve 3459599516SKenneth E. Jansenc 3559599516SKenneth E. Jansen call localt (uBrg, uBrgl, abs(ien), nflow, 'gather ' ) 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansen do i = nedof-1, 1, -1 3859599516SKenneth E. Jansen do j = i+1, nedof 3959599516SKenneth E. Jansen uBrgl(:,i) = uBrgl(:,i) - Binv(:,i,j) * uBrgl(:,j) 4059599516SKenneth E. Jansen enddo 4159599516SKenneth E. Jansen enddo 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansen call localt (uBrg, uBrgl, abs(ien), nflow, 'globaliz') 4459599516SKenneth E. Jansenc 4559599516SKenneth E. Jansen return 4659599516SKenneth E. Jansenc 4759599516SKenneth E. Jansen endif 4859599516SKenneth E. Jansenc 4959599516SKenneth E. Jansenc.... --------------------> Left Pre-condition <--------------------- 5059599516SKenneth E. Jansenc 5159599516SKenneth E. Jansen if (code .eq. 'L_Pcond ') then 5259599516SKenneth E. Jansenc 5359599516SKenneth E. Jansenc.... perform the lower triangular solve (in reverse order) 5459599516SKenneth E. Jansenc 5559599516SKenneth E. Jansen call localt (uBrg, uBrgl, abs(ien), nflow, 'gather ') 5659599516SKenneth E. Jansenc 5759599516SKenneth E. Jansen do i = 2, nedof 5859599516SKenneth E. Jansen do j = 1, i-1 5959599516SKenneth E. Jansen uBrgl(:,i) = uBrgl(:,i) - Binv(:,i,j) * uBrgl(:,j) 6059599516SKenneth E. Jansen enddo 6159599516SKenneth E. Jansen enddo 6259599516SKenneth E. Jansen 6359599516SKenneth E. Jansen call localt (uBrg, uBrgl, abs(ien), nflow, 'globaliz') 6459599516SKenneth E. Jansenc 6559599516SKenneth E. Jansen return 6659599516SKenneth E. Jansenc 6759599516SKenneth E. Jansen endif 6859599516SKenneth E. Jansenc 6959599516SKenneth E. Jansenc.... error handling 7059599516SKenneth E. Jansenc 7159599516SKenneth E. Jansen call error ('itrPr1 ', code, iGMRES) 7259599516SKenneth E. Jansenc 7359599516SKenneth E. Jansenc.... end 7459599516SKenneth E. Jansenc 7559599516SKenneth E. Jansen end 76