trim sources
This commit is contained in:
parent
ed5af19d74
commit
07a030b3d9
@ -1,47 +1,35 @@
|
|||||||
program example
|
program example
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
call dgemm_test
|
|
||||||
print *,'dgemm_test done'
|
integer, parameter :: n = 10
|
||||||
|
|
||||||
|
integer :: i, j
|
||||||
|
|
||||||
|
real(8), allocatable :: a(:, :)
|
||||||
|
real(8), allocatable :: b(:, :)
|
||||||
|
real(8), allocatable :: c(:, :)
|
||||||
|
|
||||||
|
allocate(a(n, n))
|
||||||
|
allocate(b(n, n))
|
||||||
|
allocate(c(n, n))
|
||||||
|
|
||||||
|
a = 1.0d0
|
||||||
|
b = 2.0d0
|
||||||
|
c = 0.0d0
|
||||||
|
|
||||||
|
call dgemm('n', 'n', n, n, n, 1.0d0, a, n, b, n, 0.0d0, c, n)
|
||||||
|
|
||||||
|
do i = 1, n
|
||||||
|
do j = 1, n
|
||||||
|
if ((c(i, j) - 20.0d0) > tiny(0.0d0)) return
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
deallocate(a)
|
||||||
|
deallocate(b)
|
||||||
|
deallocate(c)
|
||||||
|
|
||||||
|
print *, 'dgemm test ok'
|
||||||
|
|
||||||
end program
|
end program
|
||||||
|
|
||||||
subroutine dgemm_test
|
|
||||||
implicit none
|
|
||||||
integer :: i,j,k,AllocateStatus
|
|
||||||
integer :: n=10
|
|
||||||
real*8, allocatable :: A(:,:),B(:,:),C(:,:)
|
|
||||||
real*8 :: diag, offdiag, asde,asode
|
|
||||||
|
|
||||||
allocate (A(n,n),B(n,n),C(n,n),STAT=AllocateStatus)
|
|
||||||
if (AllocateStatus.ne.0) then
|
|
||||||
stop "error in main matrix allocations !"
|
|
||||||
endif
|
|
||||||
|
|
||||||
! fill matrixes A,B,C
|
|
||||||
do i=1,n
|
|
||||||
do j=1,n
|
|
||||||
if (i.eq.j) then ! A is unit matrix
|
|
||||||
A(i,j)=1.0d0
|
|
||||||
else
|
|
||||||
A(i,j)=0.0d0
|
|
||||||
endif
|
|
||||||
B(i,j)=dfloat(i+j) ! B is symmetric matrix
|
|
||||||
C(i,j)=0.0d0
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
call dgemm('n','n',n,n,n,1.0d0,A,n,B,n,-2.0d0,C,n)
|
|
||||||
! check the resulting C matrix
|
|
||||||
diag=0.0d0;offdiag=0.0d0
|
|
||||||
do i=1,n
|
|
||||||
do j=1,n
|
|
||||||
if (i.eq.j) then
|
|
||||||
diag = diag + C(i,j)
|
|
||||||
else
|
|
||||||
offdiag = offdiag + C(i,j)
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
asde=diag/dfloat(n); asode=offdiag/(dfloat(n*n)-dfloat(n))
|
|
||||||
|
|
||||||
end subroutine dgemm_test
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user