为什么SciPy没问题,但英特尔MKL为什么无法解决此特征问题SPARSE_STATUS_ALLOC_FAILED

如何解决为什么SciPy没问题,但英特尔MKL为什么无法解决此特征问题SPARSE_STATUS_ALLOC_FAILED

我正在尝试解决广义特征值问题(我想要特征值和特征向量):

[A]{x} = lambda[B]{x}

或等效形式(有限元方法):

[M]{x} = (1/w^2)[K]{x}

[M]=[A][K]=[B](分别为质量和刚度矩阵)的位置。

我的纯文本文件中同时包含[M][K]。这些矩阵以COO格式存储,基于0的索引,未排序。

我的文件(下载:Google Drive):

kc: where K columns are stored
kr: where K rows are stored
kv: where K values are stored
mc,mr,mv: analogous to K,but for the M matrix

使用文件中的数据,我可以使用SciPy(Python)解决问题。由于这是一个FEA问题,因此我也已经在Abaqus CAE中解决了这个问题,因此我知道在SciPy中正确计算了特征值和特征向量:

MODE    ABAQUS (w^2)    SciPy (w^2)
1       +6.07235E+06    +6.50440E+06
2       +2.28087E+08    +2.44463E+08
3       +1.67357E+09    +1.79572E+09
4       +3.36973E+09    +3.37316E+09
5       +5.88655E+09    +6.32761E+09
(value of 1/lambda = w^2)

我的Python代码:

from scipy.sparse import coo_matrix
from scipy.sparse.linalg import eigs
from numpy import real

rows = 610
cols = 610
a_nnz = 4628
b_nnz = 9266

# read a
with open('./coo/mr') as f: a_row_indx = [int(i) for i in f]
with open('./coo/mc') as f: a_col_indx = [int(i) for i in f]
with open('./coo/mv') as f: a_val_indx = [float(i) for i in f]

# read b
with open('./coo/kr') as f: b_row_indx = [int(i) for i in f]
with open('./coo/kc') as f: b_col_indx = [int(i) for i in f]
with open('./coo/kv') as f: b_val_indx = [float(i) for i in f]

a = coo_matrix((a_val_indx,(a_row_indx,a_col_indx)),shape=(rows,cols))
b = coo_matrix((b_val_indx,(b_row_indx,b_col_indx)),cols))

eigenvalues,eigenvectors = eigs(A=a,M=b,k=10)

val = real(eigenvalues) # to remove "+0j",eigenvalues are real
v = 1.0/val

我的问题是,为什么英特尔MKL无法解决此问题?我尝试修改代码,但总是收到错误或异常:

pm(3) = 1 ! -> Exception thrown at 0x00007FFCE77556EC (mkl_core.dll) in Console1.exe: 0xC0000005: Access violation accessing location 0x0000000000000000.
pm(3) = 2 ! -> STAT = 2 SPARSE_STATUS_ALLOC_FAILED

我的Fortran代码(Visual Studio):

include 'mkl_solvers_ee'
include 'mkl_spblas'

program main

    use mkl_solvers_ee
    use mkl_spblas
    use,intrinsic :: iso_c_binding,only : c_int,c_double
    
    implicit none
    
    type(sparse_matrix_t) :: a
    type(sparse_matrix_t) :: b
    integer(c_int),parameter :: rows = 610
    integer(c_int),parameter :: cols = 610
    integer(c_int),parameter :: a_nnz = 4628
    integer(c_int),parameter :: b_nnz = 9266
    integer(c_int) :: a_row_indx(a_nnz)
    integer(c_int) :: a_col_indx(a_nnz)
    real(c_double) :: a_values(a_nnz)
    integer(c_int) :: b_row_indx(b_nnz)
    integer(c_int) :: b_col_indx(b_nnz)
    real(c_double) :: b_values(b_nnz)
    integer :: stat
    
    character,parameter :: which = 'S'
    integer(c_int) :: pm(128)
    type(matrix_descr),parameter :: descra = matrix_descr(type = sparse_matrix_type_general,mode = sparse_fill_mode_upper,diag = sparse_diag_non_unit)
    type(matrix_descr),parameter :: descrb = matrix_descr(type = sparse_matrix_type_general,diag = sparse_diag_non_unit)
    integer(c_int),parameter :: k0 = 10
    integer(c_int) :: k
    real(c_double) :: e(k0),ee(k0)
    real(c_double) :: x(k0,cols)
    real(c_double) :: res(k0)
    
    type(sparse_matrix_t) :: acsr
    type(sparse_matrix_t) :: bcsr
    
    integer :: i
    
    ! read a
    open(unit=1,file="./coo/mr")
    open(unit=2,file="./coo/mc")
    open(unit=3,file="./coo/mv")
    do i = 1,a_nnz
        read(1,*) a_row_indx(i)
        read(2,*) a_col_indx(i)
        read(3,*) a_values(i)
    end do
    close(unit=1)
    close(unit=2)
    close(unit=3)
    
    ! read b
    open(unit=1,file="./coo/kr")
    open(unit=2,file="./coo/kc")
    open(unit=3,file="./coo/kv")
    do i = 1,b_nnz
        read(1,*) b_row_indx(i)
        read(2,*) b_col_indx(i)
        read(3,*) b_values(i)
    end do
    close(unit=1)
    close(unit=2)
    close(unit=3)
    
    ! 0 to 1 based indexing
    a_row_indx(:) = a_row_indx(:) + 1
    a_col_indx(:) = a_col_indx(:) + 1
    b_row_indx(:) = b_row_indx(:) + 1
    b_col_indx(:) = b_col_indx(:) + 1
    
    stat = mkl_sparse_d_create_coo(a,sparse_index_base_one,rows,cols,a_nnz,a_row_indx,a_col_indx,a_values)
    stat = mkl_sparse_d_create_coo(b,b_nnz,b_row_indx,b_col_indx,b_values)
    stat = mkl_sparse_convert_csr(a,sparse_operation_non_transpose,acsr)
    stat = mkl_sparse_convert_csr(b,bcsr)
    stat = mkl_sparse_ee_init(pm)
    
    !pm(1) = 0
    !pm(2) = 6
    !pm(3) = 2
    !pm(4) = 512
    !pm(5) = 60 ! 10000 
    !pm(6) = 512
    !pm(7) = 0
    !pm(8) = 0
    !pm(9) = 0
    
    !pm(3) = 1 ! -> Exception thrown at 0x00007FFCE77556EC (mkl_core.dll) in Console1.exe: 0xC0000005: Access violation accessing location 0x0000000000000000.
    !pm(3) = 2 ! -> STAT = 2 SPARSE_STATUS_ALLOC_FAILED
    
    stat = mkl_sparse_d_gv(which,pm,acsr,descra,bcsr,descrb,k0,k,e,x,res)
    
    ee(:) = 1.0 / e(:)
    
end program main
    
!   0   SPARSE_STATUS_SUCCESS           The operation was successful.
!   1   SPARSE_STATUS_NOT_INITIALIZED   The routine encountered an empty handle or matrix array.
!   2   SPARSE_STATUS_ALLOC_FAILED      Internal memory allocation failed.
!   3   SPARSE_STATUS_INVALID_VALUE     The input parameters contain an invalid value.
!   4   SPARSE_STATUS_EXECUTION_FAILED  Execution failed.
!   5   SPARSE_STATUS_INTERNAL_ERROR    An error in algorithm implementation occurred.
!   6   SPARSE_STATUS_NOT_SUPPORTED     The requested operation is not supported.

我整天都在看这段代码,我无法分辨自己在做什么错。任何帮助将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res