SAUSAGE中改进后的算法如下:
- 计算总刚的全局索引,记为Gi,Gi包含比如整体刚度矩阵的非零元数量和稀疏结构等信息。
- 利用Gi和一些已知输入信息预分配好刚度矩阵和其它一些数据的空间。
- for( stage = 0 to n_stages-1 )
{
- 计算当前施工阶段的组集索引,其中包括与之相邻的上一个施工阶段。结点之间没有耦合和相互耦合的两部分,记为Li = Si + Ci。
- 利用Gi和Ci更新红色部分的刚度矩阵,利用Gi和Si组集绿色部分的刚度矩阵。
- 求解大小为n_nodes_stages[stage] x n_nodes_stages[stage]的方程组。
- 将结果累加到结点位移数组上。
}
在求解竖向载荷加载过程中形成的方程组时,我们使用PCG算法,其优点是适合并行,可以很好的移植到CUDA架构上,且存储需求较之直接解法要少很多,我们也对PCG迭代过程中几个关键性能的步骤针对CUDA架构进行了大量的优化,使得求解效率较CPU提高了数倍。