[发明专利]一种基于GPU端的有限元刚度矩阵模拟方法有效
申请号: | 201811439272.6 | 申请日: | 2018-11-29 |
公开(公告)号: | CN109753682B | 公开(公告)日: | 2020-12-22 |
发明(设计)人: | 童哲铭;高杰;童水光 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F30/23 | 分类号: | G06F30/23;G06F119/14 |
代理公司: | 杭州天昊专利代理事务所(特殊普通合伙) 33283 | 代理人: | 何碧珩 |
地址: | 310027*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 gpu 有限元 刚度 矩阵 模拟 方法 | ||
1.一种基于GPU端的有限元刚度矩阵模拟方法,针对弹性体变形的求解问题,首先依据静力学原理建立其平衡方程,并基于有限元方法对其动力学方程进行离散,从而将微分方程求解转化为线性方程组的求解,该线性方程组即为需要求解的刚度方程Ax=b,其中A为刚度矩阵,x为位移向量,b为节点力向量,具体包括以下步骤:
(1)建立变形体的静力学方程,基于有限元方法对其离散成刚度方程Ax=b
(2)刚度矩阵A的分裂处理;
(3)对应分配GPU显存;
(4)将CPU端初始化数据复制到GPU上;
(5)调用计时函数开始计时;
(6)调用设备端多项式预优共轭梯度算法进行计算;
(7)将计算结果从GPU上复制回CPU端,用于前端显示;
(8)释放CPU与GPU显存;
A.刚度方程Ax=b的初始化,其中x为待求解向量,初始化为0,其中取h=0.002,具体实现方法为:
A1.使用CPU端malloc函数对矩阵A,基于对角预优方法获得分裂阵M1、N1,并对临时矩阵进行动态内存分配以及初始化,作为中间变量;其中分裂阵M1=0,N1=0;
A2.使用CPU端malloc函数对向量动态内存分配以及初始化;
A3.构造单位阵
步骤(2)中,刚度矩阵A分裂处理的实现方法是:
B1.选取M1为刚度矩阵A的对角预优矩阵;
B2.对M1的对角线元素取倒数,复制回M1,以节约内存;
B3.构造N1矩阵,使
步骤(3)中,分配GPU显存的实现方法为:使用cudaMalloc函数为上述矩阵和向量分配GPU端显存;
步骤(4)中,将CPU端初始化数据复制到GPU上的实现方法为:使用cublasSetVector函数进行将CPU端初始化数据复制到GPU上;
步骤(5)中,调用计时函数开始计时的实现方法为:
E1.使用CUDA事件来对GPU段运算进行计时,
E2.将待处理数据指针传输到PPcg_device函数的参数里;
步骤(6)中,调用设备端多项式预优共轭梯度算法进行计算的实现方法为:
F1.使用cudaMalloc函数为设备端中间矩阵temp、J、G以及中间向量temp,r动态分配内存;
F2.初始化参数cublas库函数参数alpha=1.0,_alpha=-1.0以及变量浮点型beta=0.0,q0=0.0,q1=0.0,error_norm=0;
F3.使用cublasScopy函数将b向量复制到r向量,
F4.使用cublasSgemv计算r=Ax-r;
F5.使用cublasSgemm函数计算G=M1*N1;
F6.使用cudaMemcpy函数将I矩阵复制到矩阵
F7.使用cublasSdot函数计算向量r与自身的内积并将结果复制到error_norm上;
F8.预优共轭梯度算法;
F9.释放GPU显存;
步骤(7)的具体实现方法:使用cudaGetVector函数复制会计算结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811439272.6/1.html,转载请声明来源钻瓜专利网。