20 integer(kind=kint) :: N
21 real(kind=
kreal),
pointer :: alu(:) => null()
23 logical,
save :: INITIALIZED = .false.
31 integer(kind=kint ) :: np
32 real (kind=
kreal) :: sigma_diag
33 real(kind=
kreal),
pointer:: d(:)
35 real (kind=
kreal):: alutmp(2,2), pw(2)
36 integer(kind=kint ):: ii, i, j, k
39 if (hecmat%Iarray(98) == 0 .and. hecmat%Iarray(97) == 0)
return
52 alu(4*ii-3) = d(4*ii-3)
53 alu(4*ii-2) = d(4*ii-2)
54 alu(4*ii-1) = d(4*ii-1)
55 alu(4*ii-0) = d(4*ii-0)
58 if (hecmat%cmat%n_val.gt.0)
then
59 do k= 1, hecmat%cmat%n_val
60 if (hecmat%cmat%pair(k)%i.ne.hecmat%cmat%pair(k)%j) cycle
61 ii = hecmat%cmat%pair(k)%i
62 alu(4*ii-3) = alu(4*ii-3) + hecmat%cmat%pair(k)%val(1, 1)
63 alu(4*ii-2) = alu(4*ii-2) + hecmat%cmat%pair(k)%val(1, 2)
64 alu(4*ii-1) = alu(4*ii-1) + hecmat%cmat%pair(k)%val(2, 1)
65 alu(4*ii-0) = alu(4*ii-0) + hecmat%cmat%pair(k)%val(2, 2)
75 alutmp(1,1)= alu(4*ii-3) * sigma_diag
76 alutmp(1,2)= alu(4*ii-2)
77 alutmp(2,1)= alu(4*ii-1)
78 alutmp(2,2)= alu(4*ii-0) * sigma_diag
81 alutmp(k,k)= 1.d0/alutmp(k,k)
83 alutmp(i,k)= alutmp(i,k) * alutmp(k,k)
85 pw(j)= alutmp(i,j) - alutmp(i,k)*alutmp(k,j)
92 alu(4*ii-3)= alutmp(1,1)
93 alu(4*ii-2)= alutmp(1,2)
94 alu(4*ii-1)= alutmp(2,1)
95 alu(4*ii-0)= alutmp(2,2)
101 hecmat%Iarray(98) = 0
102 hecmat%Iarray(97) = 0
108 real(kind=
kreal),
intent(inout) :: ww(:)
109 integer(kind=kint) :: i
110 real(kind=
kreal) :: x1, x2
120 x2= x2 - alu(4*i-1)*x1
122 x1= alu(4*i-3)*( x1 - alu(4*i-2)*x2 )
133 if (
associated(alu))
deallocate(alu)
135 initialized = .false.
real(kind=kreal) function, public hecmw_mat_get_sigma_diag(hecMAT)
subroutine, public hecmw_precond_diag_22_clear()
subroutine, public hecmw_precond_diag_22_setup(hecMAT)
subroutine, public hecmw_precond_diag_22_apply(WW)
integer(kind=4), parameter kreal