program test_matmul3 use kinds use formatmul use forunittest implicit none real(rk), allocatable :: A(:,:), B(:,:) real(rk), allocatable :: C_ref(:,:), C(:,:) integer :: m, n, o type(unit_test) :: ut ! C(m,o) = A(m,n).B(n,o) m = 300 n = 200 o = 100 allocate(A(m,n),B(n,o)) call random_number(A) call random_number(B) A = A*100.0_rk B = B*100.0_rk C_ref = matmul(A,B) C = matmul(A,B) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.1') C = matmul(A,B, option='m1') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.2') C = matmul(A,B, option='m2') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.3') C = matmul(A,B, option='m3') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.4') C = matmul(A,B, option='m4') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.5') C = matmul(A,B, option='m5') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.6') C = matmul(A,B, option='m6') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.7') C = matmul(A,B, option='m7') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.8') C = matmul(A,B, option='m8') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.9') C = matmul(A,B, option='m9') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.10') ! C = matmul(A,B, option='m10') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.11') ! C = matmul(A,B, option='m11') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.12') C = matmul(A,B, option='m12') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.13') C = matmul(A,B, option='m13') call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.14') C = matmul(A,B, nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.15') C = matmul(A,B, option='m1', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.16') C = matmul(A,B, option='m2', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.17') C = matmul(A,B, option='m3', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.18') C = matmul(A,B, option='m4', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.19') C = matmul(A,B, option='m5', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.20') C = matmul(A,B, option='m6', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.21') C = matmul(A,B, option='m7', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.22') C = matmul(A,B, option='m8', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.23') C = matmul(A,B, option='m9', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.24') ! C = matmul(A,B, option='m10', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.25') ! C = matmul(A,B, option='m11', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.26') C = matmul(A,B, option='m12', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.27') C = matmul(A,B, option='m13', nblock=4) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.28') C = matmul(A,B, option='m1', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.29') C = matmul(A,B, option='m2', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.30') C = matmul(A,B, option='m3', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.31') C = matmul(A,B, option='m4', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.32') C = matmul(A,B, option='m5', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.33') C = matmul(A,B, option='m6', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.34') C = matmul(A,B, option='m7', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.35') C = matmul(A,B, option='m8', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.36') C = matmul(A,B, option='m9', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.37') ! C = matmul(A,B, option='m10', transA=.false., transB=.false.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.38') ! C = matmul(A,B, option='m11', transA=.false., transB=.false.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.39') C = matmul(A,B, option='m12', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.40') C = matmul(A,B, option='m13', transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.41') C = matmul(A,B, nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.42') C = matmul(A,B, option='m1', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.43') C = matmul(A,B, option='m2', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.44') C = matmul(A,B, option='m3', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.45') C = matmul(A,B, option='m4', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.46') C = matmul(A,B, option='m5', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.47') C = matmul(A,B, option='m6', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.48') C = matmul(A,B, option='m7', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.49') C = matmul(A,B, option='m8', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.50') C = matmul(A,B, option='m9', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.51') ! C = matmul(A,B, option='m10', nblock=4, transA=.false., transB=.false.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.52') ! C = matmul(A,B, option='m11', nblock=4, transA=.false., transB=.false.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.53') C = matmul(A,B, option='m12', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.54') C = matmul(A,B, option='m13', nblock=4, transA=.false., transB=.false.) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.55') end program test_matmul3