(OpenNovation) RISC-V × 有限元分析: 在 RevyOS 上运行 CalculiX

大家好,我是 PLCT 丁丑小队 J129 开发板软件生态联合观测岗位的一名实习生。我们会定期在本版介绍 RuyiSDK 支持矩阵(GitHub - ruyisdk/support-matrix: RISC-V Board and OS Support Matrix, 网页版可以访问 https://matrix.ruyisdk.org/ )的近期进展、开发板系统/软件支持情况、性能测试结果、软件生态进展同步等内容。


在上周,丁丑小队完成了对 OpenNovation (opennovation.org) 上收集软件的测试,覆盖了各类工程软件/科学计算软件在 RISC-V 平台上的可用情况,本期为该系列的第一篇,这次我们聚焦于在 RevyOS 上运行 CalculiX 的可行性与实践过程。

CalculiX 是一个免费开源的有限元分析 (FEA) 软件包,用于解决结构力学、热分析、动态分析等工程中的数值场问题。采用 GPL 授权方式,代码公开,用户可自由使用、修改和分发。

我们重点测试了其求解器组件 CCX 在 RevyOS 环境下的安装与运行情况,以下是具体的安装与运行流程:

首先,需要用 apt 来安装构建 CalculiX 所需的一些基础组件:

$ sudo apt update
$ sudo apt install build-essential gfortran make libarpack2-dev libopenblas-dev

它们包括:

  • C / Fortran 编译器(gcc / gfortran)
  • make、编译相关头文件
  • 线性代数支持库(ARPACK, OpenBLAS)

接下来,从官网下载 CCX 的源码包,并解压:

$ wget https://www.dhondt.de/ccx_2.22.src.tar.bz2
$ tar -xvjf ccx_2.22.src.tar.bz2

随后是比较复杂的一步,CalculiX 默认使用一个特定版本的 SPOOLES 做稀疏矩阵求解。为了编译成功,我们需要手动构建 SPOOLES 2.2


首先下载 SPOOLES 的源码:

$ sudo mkdir -p /usr/local/spooles
$ cd /usr/local/spooles
$ sudo wget http://netlib.org/linalg/spooles/spooles.2.2.tgz
$ sudo tar -xvzf spooles.2.2.tgz

接下来需要对源码作修改,以兼容 RevyOS 的编译环境,我将需要修改的地方整理为了两条命令行语句:

$ sudo sed -i 's/drawTree\.c/draw.c/' Tree/src/makeGlobalLib
$ sudo find . -type f -name '*.c' -exec sed -i -E 's/IVinit\(([^,]+),[[:space:]]*NULL\)/IVinit(\1, 0)/g' {} +

然后就可以开始构建 SPOOLES 了:

$ cd /usr/local/spooles/spooles.2.2
$ sudo make global

成功之后,会生成 CalculiX 需要的静态库依赖 spooles.a


接下来,需要回到 ccx_2.22/src 目录,并对 Makefile 进行必要修改,使其能链接 SPOOLES、OpenBLAS 等库,这里有一份示例的 Makefile 文件:

debian@revyos-lpi4a:~/CalculiX/ccx_2.22/src$ cat Makefile

include Makefile.inc

SCCXMAIN = ccx_2.22.c

OCCXF = $(SCCXF:.f=.o)
OCCXC = $(SCCXC:.c=.o)
OCCXMAIN = $(SCCXMAIN:.c=.o)

DIR=/usr/local/spooles.2.2

LIBS = \
       $(DIR)/spooles.a \
        -larpack -lopenblas \
        -lpthread -lm -lc

ccx_2.22: $(OCCXMAIN) ccx_2.22.a  $(LIBS)
        ./date.pl; $(CC) $(CFLAGS) -c ccx_2.22.c; $(FC)  -Wall -O2 -o $@ $(OCCXMAIN) ccx_2.22.a $(LIBS) -fopenmp

ccx_2.22.a: $(OCCXF) $(OCCXC)

        ar vr $@ $?

一切就绪,可以愉快地编译了:

$ make

编译完成后,可以在当前目录找到 ./ccx_2.22 这个可执行文件。


在测试中,我们使用一个简单的立方体结构模型作为可用性测试程序(带节点、元素、边界条件等)来验证运行效果,CalculiX 的求解器给出了以下的正确结果:

debian@revyos-lpi4a:~/CalculiX/ccx_2.22/src$ cat achtel.dat

                        S T E P       1


                                INCREMENT     1


 displacements (vx,vy,vz) for set SET1 and time  0.1000000E+01

         1  0.000000E+00  0.000000E+00  0.000000E+00
         2 -1.723861E-04  0.000000E+00  0.000000E+00
         3  2.463875E-04 -1.723861E-04  1.138229E-03
         4  4.187735E-04 -1.723861E-04  0.000000E+00
         5 -4.651418E-04 -4.651418E-04  3.591649E-04
         6 -6.375279E-04 -6.730874E-04  9.266397E-04
         7 -4.267000E-04 -8.454735E-04  1.497394E-03
         8 -2.543139E-04 -6.375279E-04  9.266397E-04
         9  8.177554E-06 -5.930963E-05  1.494931E-04
         .....

证明 CalculiX 在 RevyOS 上具有基本可用性。


更详细的安装过程,测试程序与输出日志,可以参考仓库中的测试报告: engineering-riscv/FEA/CalculiX/README_zh.md at main · QA-Team-lo/engineering-riscv · GitHub

欢迎各位复现/吐槽丁丑小队的所有测试结果。

如果有对我们的测试方法/结果有任何建议/问题,欢迎直接在 GitHub 开 issue,或者在论坛 @ 我、回帖询问

4 个赞