xref: /phasta/phSolver/compressible/i3pcond.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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