17 integer(kind=kint) :: N, NP, NDOF, NDOF2, NNDOF, NPNDOF
18 integer(kind=kint) :: i, j
19 real(kind=
kreal) :: eigvec(:, :), p(:), beta, chk, sigma
20 real(kind=
kreal),
allocatable :: temp(:)
21 real(kind=
kreal),
pointer :: q(:), mass(:), filter(:)
33 filter => fstreig%filter
39 if(fstreig%is_free)
then
42 hecmat%D(ndof2*(i-1) + (ndof+1)*(j-1) + 1) = hecmat%D(ndof2*(i-1) + (ndof+1)*(j-1) + 1) + sigma * mass(ndof*(i-1) + j)
47 call urand1(nndof, temp, hecmesh%my_rank)
50 temp(i) = temp(i) * filter(i)
55 eigvec(i,1) = mass(i) * temp(i)
60 chk = chk + temp(i) * eigvec(i,1)
62 call hecmw_allreduce_r1(hecmesh, chk,
hecmw_sum)
67 stop
"Self-orthogonal"
81 subroutine evsort(EIG, NEW, NEIG)
84 integer(kind=kint) :: i, j, n, ip, minloc, NEIG, IBAF, NEW(NEIG)
85 real(kind=kreal) :: emin, eig(neig)
94 emin = dabs(eig(new(i)))
97 if(dabs(eig(new(j))).LT.emin)
then
99 emin = dabs(eig(new(j)))
108 subroutine urand1(N, X, SHIFT)
111 real(kind=kreal) :: x(n), invm
112 integer(kind=kint),
parameter :: MM = 1664501
113 integer(kind=kint),
parameter :: LAMBDA = 1229
114 integer(kind=kint),
parameter :: MU = 351750
115 integer(kind=kint) :: i, N, IR, SHIFT
120 ir = mod( lambda * ir + mu, mm)
122 do i = shift+1, shift+n
123 ir = mod( lambda * ir + mu, mm)
124 x(i-shift) = invm * ir