2024 伽辽金边界元数学库开发总结
首先感谢老同学 chaoslawful 在部分算法开发和软件工程方面给予的指点和帮助!同时,定期的讨论交流也使想法和技术方案得以逐渐清晰、稳固。
- 理论与算法
- 解决了基于任务并行的 H-矩阵分解算法的线程死锁问题,从而完成了该算法的编码实现与测试。
- 实现了序列分块算法,可将一组计算任务以最优的负载均衡方式分配于多个线程或计算核心,有效提高了算法的并行性能。
- 实现了任务并行的 H-矩阵与向量乘法。其中,基于希尔伯特曲线的矩阵块遍历是关键。
- 实现了基于高阶单元映射的弯曲单元上的数值积分,从而可让边界元离散数值模型更好地贴合具有复杂弯曲表面的三维实体。
-
完成了多子域伽辽金边界元问题的理论学习与推导,设计并初步实现了基础数据结构。
普通的边界元算法只能处理具有单一、均匀、线性介质的场域,而多数现实仿真问题往往是多种线性介质并存。因此,相关理论能够大大拓展纯边界元算法的工程应用范围。
-
完成了算符预处理的理论学习与推导,并以狄利克雷问题作为案例验证了该方法的有效性,即,预处理后的系统矩阵条件数以及相应的方程求解迭代次数不随网格加密而增加的理想效果。
预处理器是实现高效、稳定、精确求解大规模线性代数方程组的关键技术。基于伪微分算符理论的算符预处理,我们可以直接构建出经过伽辽金边界元离散后的大型线性代数方程组的预处理器,从而解决了构建基于矩阵分解的预处理器算法耗时且不易并行化的问题。
- 通过给索伯列夫空间赋予不同的范数定义,可以控制诺依曼问题的解收敛于算符核空间的不同正交补空间中。
- 软件工程
- 完成了 C++ 模板代码接口与实现的分离,CUDA 相关代码与普通代码的分离。使得代码结构更为合理、清晰,编译性能大幅提高。
- 设计并部分完成了基于模板元编程的配置参数的存取和校验。
- 从 CUDA 11 升级至 CUDA 12,解决了稀疏矩阵算法调用接口不兼容的问题。
- 引入包管理工具,使得第三方软件包的下载、编译、安装、引用更为方便。
- 经验体会
- 对于学习数学理论过程中的百思不得其解,要靠细致的理性思考与分析,要结合多种知识与信息资源(包括专著、文章、搜索、人工智能辅助)、彼此对照佐证方能解决。数学理论问题的最终澄清靠的不是灵感和好运气,而是黑暗中的不懈摸索。
- 对于调试过程中出现的各种错误,要耐心细致地展开内部细节,输出内部数据才能找到问题的根源。算法与程序的正确运行靠的不是好运气,而是细致、清晰的把握。
- 永不自满,保持开放心态,持续学习各种新工具、新方法,并勇于舍弃老工具、旧思想。我们在大学期间学习并在之后一直使用的工具虽然顺手,但很有可能已落后于时代。因此,需要不时地了解当下的优秀编程语言和软件项目,更新自己的工具箱。