大家好,我是 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,或者在论坛 @ 我、回帖询问