module gpu_module use iso_c_binding implicit none interface subroutine compute_r2_space_chol_gpu(nO,nV,cholesky_mo_num, t1, t2, tau,& cc_space_v_ov_chol, cc_space_v_vo_chol, cc_space_v_vv_chol, & cc_space_v_oooo, cc_space_v_vooo, cc_space_v_oovv, cc_space_v_vvoo, & cc_space_f_vo, H_vv, r2) bind(C) import c_int, c_double integer(c_int), value :: nO, nV, cholesky_mo_num real(c_double), intent(in) :: t1(nO,nV) real(c_double), intent(in) :: t2(nO,nO,nV,nV) real(c_double), intent(in) :: tau(nO,nO,nV,nV) real(c_double), intent(in) :: cc_space_v_ov_chol(cholesky_mo_num,nO,nV) real(c_double), intent(in) :: cc_space_v_vo_chol(cholesky_mo_num,nV,nO) real(c_double), intent(in) :: cc_space_v_vv_chol(cholesky_mo_num,nV,nV) real(c_double), intent(in) :: cc_space_v_oooo(nO,nO,nO,nO) real(c_double), intent(in) :: cc_space_v_vooo(nV,nO,nO,nO) real(c_double), intent(in) :: cc_space_v_oovv(nO,nO,nV,nV) real(c_double), intent(in) :: cc_space_v_vvoo(nV,nV,nO,nO) real(c_double), intent(in) :: cc_space_f_vo(nV,nO) real(c_double), intent(in) :: H_vv(nV,nV) real(c_double), intent(out) :: r2(nO,nO,nV,nV) end subroutine subroutine compute_g_vir_chol_gpu(nO,nV,cholesky_mo_num, t1, t2, tau,& cc_space_v_ov_chol, cc_space_v_vo_chol, cc_space_v_vv_chol, & cc_space_v_oooo, cc_space_v_vooo, cc_space_v_oovv, cc_space_v_vvoo, & cc_space_f_vo, H_vv, r2) bind(C) import c_int, c_double integer(c_int), value :: nO, nV, cholesky_mo_num real(c_double), intent(in) :: t1(nO,nV) real(c_double), intent(in) :: t2(nO,nO,nV,nV) real(c_double), intent(in) :: tau(nO,nO,nV,nV) real(c_double), intent(in) :: cc_space_v_ov_chol(cholesky_mo_num,nO,nV) real(c_double), intent(in) :: cc_space_v_vo_chol(cholesky_mo_num,nV,nO) real(c_double), intent(in) :: cc_space_v_vv_chol(cholesky_mo_num,nV,nV) real(c_double), intent(in) :: cc_space_v_oooo(nO,nO,nO,nO) real(c_double), intent(in) :: cc_space_v_vooo(nV,nO,nO,nO) real(c_double), intent(in) :: cc_space_v_oovv(nO,nO,nV,nV) real(c_double), intent(in) :: cc_space_v_vvoo(nV,nV,nO,nO) real(c_double), intent(in) :: cc_space_f_vo(nV,nO) real(c_double), intent(in) :: H_vv(nV,nV) real(c_double), intent(out) :: r2(nO,nO,nV,nV) end subroutine subroutine gpu_dgemm(transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc) bind(C) import c_int, c_double, c_char character(c_char), value :: transa, transb integer(c_int), value :: m,n,k,lda,ldb,ldc real(c_double), value :: alpha, beta real(c_double) :: A(lda,*), B(ldb,*), C(ldc,*) end subroutine end interface end module