Я использую компилятор Intel Fortran в WSL с его установочным каталогом /opt/intel
. Я хочу использовать разреженные функции BLAS. ссылка на документацию Intel по библиотеке .
Вот часть связанного кода.
double complex, allocatable :: H(:,:),Hvert(:,:),Hstar(:,:)
allocate(H(dimH,dimH),Hvert(dimH,dimH),Hstar(dimH,dimH))
! initialization of Hstar
info = mkl_sparse_z_create_coo(Hstar, SPARSE_INDEX_BASE_ONE, m**L, m**L, 2**L, ind(1,:), ind(2,:), Hele)
! initialization of empty matrix
ind = 0
info = mkl_sparse_z_create_coo(Hvert, SPARSE_INDEX_BASE_ONE, m**L, m**L, 0, ind(1,1), ind(2,1), H)
! add A and B to form the final matrix
info = mkl_sparse_z_add(SPARSE_OPERATION_NON_TRANSPOSE, Hstar, 1d0, Hvert, H)
Когда я компилирую его с помощью следующей команды
ifort -xHost -parallel full.f90 -o output -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_spblas -lmkl_core -liomp5 -lpthread -lm -qopenmp && ./output
это дало мне следующую ошибку, даже если я получил библиотеки
source /opt/intel/bin/ifortvars.sh -arch intel64 -platform linux
source /opt/intel/bin/compilervars.sh -arch intel64 -platform linux
full.f90(146): error #6404: This name does not have a type, and must have an explicit type. [MKL_SPARSE_Z_CREATE_COO]
info = mkl_sparse_z_create_coo(Hvert, SPARSE_INDEX_BASE_ONE, m**L, m**L, 2**L, ind(1,:), ind(2,:), Hele)
------------^
full.f90(226): error #6404: This name does not have a type, and must have an explicit type. [MKL_SPARSE_Z_ADD]
info = mkl_sparse_z_add(SPARSE_OPERATION_NON_TRANSPOSE, Hstar, 1d0, Hvert, H)
------------^
full.f90(240): error #6404: This name does not have a type, and must have an explicit type. [MKL_SPARSE_Z_MV]
info = mkl_sparse_z_mv(SPARSE_OPERATION_NON_TRANSPOSE, 1d0, H, SPARSE_MATRIX_TYPE_HERMITIAN, psi(a,:), 0d0, dummy)
--------------^
compilation aborted for full.f90 (code 1)
Я думаю, что это вызвано моей неправильной связью с соответствующей библиотекой, а также инициализацией матриц какпростые выделяемые массивы.
Что я должен сделать, чтобы использовать эти функции?
Кроме того, я понятия не имею, что означают переменные верхнего регистра SPARSE_INDEX_BASE_ONE
. Должен ли я использовать это таким образом?