20 real(kind=
kreal),
allocatable :: ajad(:)
21 integer(kind=kint),
allocatable :: JAJAD(:)
22 integer(kind=kint),
allocatable :: JADORD(:)
23 integer(kind=kint),
allocatable :: IAJAD(:)
24 integer(kind=kint) :: MJAD
25 real(kind=
kreal),
allocatable :: wp(:,:)
26 integer(kind=kint) :: INITIALIZED = 0
32 allocate(wp(hecmat%NDOF,hecmat%NP))
33 allocate(ajad((hecmat%NPL+hecmat%NPU)*hecmat%NDOF*hecmat%NDOF))
34 allocate(jajad(hecmat%NPL+hecmat%NPU))
35 allocate(jadord(hecmat%NP))
36 allocate(iajad(hecmat%NP+1))
37 call repack(hecmat%N, hecmat, mjad, ajad, jajad, iajad, jadord)
53 real(kind=
kreal),
intent(in) :: x(:)
54 real(kind=
kreal),
intent(out) :: y(:)
55 real(kind=
kreal),
intent(inout) :: commtime
56 real(kind=
kreal) :: start_time, end_time
57 real(kind=
kreal),
pointer :: d(:)
58 integer(kind=kint) :: i,idof,jdof,ndof,ndof2
63 commtime = commtime + end_time - start_time
75 y(ndof*(i-1)+idof) = y(ndof*(i-1)+idof) + d(ndof2*(i-1)+ndof*(idof-1)+jdof)*x(ndof*(i-1)+jdof)
81 call matjad(hecmat%N,hecmat%NDOF, mjad, iajad, jajad, ajad, jadord, x, y, wp)
84 subroutine repack(N, hecMAT, MJAD, AJAD, JAJAD, IAJAD, JADORD)
89 integer(kind = kint) :: n, mjad
90 real(kind =
kreal),
dimension(*) :: ajad
91 integer(kind = kint),
dimension(*) :: jajad
92 integer(kind = kint),
dimension(*) :: iajad
93 integer(kind = kint),
dimension(*) :: jadord
95 integer(kind = kint) :: ijad, maxnz, minnz,ndof,ndof2
96 integer(kind = kint) :: i, j, js, je, in, jc
97 integer(kind = kint),
allocatable :: len(:), lenz(:), jadreord(:)
98 ndof = hecmat%NDOF;ndof2=ndof*ndof
100 allocate(jadreord(n))
102 len(i)= hecmat%indexL(i) - hecmat%indexL(i-1) &
103 & + hecmat%indexU(i) - hecmat%indexU(i-1)
105 maxnz=maxval(len(1:n))
106 minnz=minval(len(1:n))
108 allocate(lenz(0:mjad))
111 lenz(len(i))=lenz(len(i))+1
113 do i=maxnz-1,minnz,-1
114 lenz(i)=lenz(i)+lenz(i+1)
117 jadord(i)=lenz(len(i))
118 lenz(len(i))=lenz(len(i))-1
121 jadreord(jadord(i))=i
124 lenz(len(jadreord(i)))=i
127 lenz(i)=max(lenz(i+1),lenz(i))
131 iajad(i+1)=iajad(i)+lenz(i)
136 js= hecmat%indexL(i-1) + 1
137 je= hecmat%indexL(i )
140 len(ijad)=len(ijad)+1
141 jc=iajad(len(ijad))+ijad-1
142 ajad(ndof2*(jc-1)+1:ndof2*(jc)) = hecmat%AL(ndof2*(j-1)+1:ndof2*(j))
148 js= hecmat%indexU(i-1) + 1
149 je= hecmat%indexU(i )
152 len(ijad)=len(ijad)+1
153 jc=iajad(len(ijad))+ijad-1
154 ajad(ndof2*(jc-1)+1:ndof2*(jc)) = hecmat%AU(ndof2*(j-1)+1:ndof2*(j))
161 end subroutine repack
163 subroutine matjad(N, NDOF, MJAD, IAJAD, JAJAD, AJAD, JADORD, X, Y, W)
165 integer(kind=kint) :: N,NDOF, MJAD,NDOF2
166 integer(kind=kint) :: IAJAD(*), JAJAD(*), JADORD(*)
167 real(kind=
kreal) :: ajad(*), x(*), y(*), w(ndof,n)
168 integer(kind=kint) :: I, K, NZ, IXX, idof,jdof
176 do k=iajad(nz),iajad(nz+1)-1
180 w(idof,ixx)=w(idof,ixx)+ajad(ndof2*(k-1)+ndof*(idof-1)+jdof)*x(ndof*(jajad(k)-1)+jdof)
192 y(ndof*(i-1)+idof)=y(ndof*(i-1)+idof)+w(idof,jadord(i))
Jagged Diagonal Matrix storage for vector processors. Original code was provided by JAMSTEC.
subroutine, public hecmw_jad_matvec_nn(hecMESH, hecMAT, X, Y, COMMtime)
subroutine matjad(N, NDOF, MJAD, IAJAD, JAJAD, AJAD, JADORD, X, Y, W)
subroutine, public hecmw_jad_finalize_nn()
subroutine, public hecmw_jad_init_nn(hecMAT)
integer(kind=4), parameter kreal
real(kind=kreal) function hecmw_wtime()
subroutine hecmw_update_r(hecMESH, val, n, m)