20 integer(kind=kint) :: N
21 real(kind=
kreal),
pointer :: alu(:) => null()
23 logical,
save :: INITIALIZED = .false.
31 integer(kind=kint ) :: np,ndof,ndof2
32 real (kind=
kreal) :: sigma_diag
33 real(kind=
kreal),
pointer:: d(:)
35 real (kind=
kreal):: alutmp(hecmat%NDOF,hecmat%NDOF), pw(hecmat%NDOF)
36 integer(kind=kint ):: i, j, k, ii
39 if (hecmat%Iarray(98) == 0 .and. hecmat%Iarray(97) == 0)
return
50 allocate(alu(ndof2*np))
55 alu(ndof2*(ii-1)+i)=d(ndof2*(ii-1)+i)
65 alutmp(i,j) = alu(ndof2*(ii-1)+(i-1)*ndof+j)
66 if (i==j) alutmp(i,j)=alutmp(i,j)*sigma_diag
70 alutmp(k,k)= 1.d0/alutmp(k,k)
72 alutmp(i,k)= alutmp(i,k) * alutmp(k,k)
74 pw(j)= alutmp(i,j) - alutmp(i,k)*alutmp(k,j)
83 alu(ndof2*(ii-1)+(i-1)*ndof+j)= alutmp(i,j)
97 real(kind=
kreal),
intent(inout) :: ww(:)
98 integer(kind=kint) :: i,j,k,ndof
99 real(kind=
kreal) :: x(ndof)
107 x(j)=ww(ndof*(i-1)+j)
111 x(j)=x(j)-alu(ndof*ndof*(i-1)+ndof*(j-1)+k )*x(k)
116 x(j)=x(j)-alu(ndof*ndof*(i-1)+ndof*(j-1)+k )*x(k)
118 x(j)=alu(ndof*ndof*(i-1)+(ndof+1)*(j-1)+1 )*x(j)
121 ww(ndof*(i-1)+j)=x(j)
132 if (
associated(alu))
deallocate(alu)
134 initialized = .false.