在Windows系统下安装和使用Voronoi生成器Neper
Voronoi单元是UDEC和3DEC内置的一种单元,用于模拟不同尺度的岩石断裂过程。尽管UDEC在V1.5版本(20多年前)就引入了二维Voronoi,但3DEC在V7.0后才引入了三维Voronoi,3DEC V5.2不支持Voronoi,如果要在3DEC V5.2中使用Voronoi,必须通过geometry导入外部软件产生的Voronoi,有这样一个软件Neper可以实现这一点,它是一个开源软件,不过这个软件是在非Windows系统下开发的,不能直接应用于Windows系统。本文描述了如何在Windows下安装和使用Neper,事先说明一下,这是一个非常冗长的操作过程,因为它需要安装许多其它库。
2 Neper简介
Neper是一个用于多晶体(polycrystal)生成和网格划分的软件包。多晶体可以是二维或三维。Neper是围绕四个模块建立的:(1) 模块-T将多晶体生成为镶嵌体(tessellations.);本文主要使用了(1)和(4)的功能,即首先生成一个镶嵌体文件,然后利用这个文件产生出一个png图像。
Neper是用C语言和少量C++语言编写的,它可以在任何类Unix系统(包括macOS)上运行。Neper也可以使用Linux的Windows子系统WSL、Ubuntu或类似的解决方案在微软Windows上运行。由于我们主要使用Windows系统,因此决定不使用双系统启动,而是使用Linux的Windows子系统WSL。在Neper网站上下载源代码文件包neper-main.zip,这个压缩包大约24M。解压后放到C:\Users\m内,必须注意目录名称不能使用neper,否则后来编译时会出错。一般情况下,Windows系统下的文件与Linux系统下的文件是不能互相访问的,必须把这些文件放在Linux系统下,使用WSL的好处是可以在Linux系统下访问Windows系统下的文件。当安装WSL时,并没有默认安装G++编译器,因此需要安装。使用下面的命令:
sudo apt-get update
sudo apt-get install g++
g++ --version
which g++
第一行更新软件包,第二行安装g++, 安装完成后用第三行检查版本号:
g++ (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
第四行检查GNU C++编译器的路径(/usr/bin/g++)。编译Neper需要GSL(GNU Scientific Library)库,因此在编译前必须安装:
sudo apt-get update
sudo apt-get install libgsl-dev
gsl-config --version
最后一行命令用来检查GSL的版本号(2.7.1)。
编译Neper需要Scotch和NLopt库。Scotch是一个用于图形和网格划分的软件包,而NLopt是一个用于非线性优化的库。
sudo apt-get update
sudo apt-get install libscotch-dev libnlopt-dev
在安装完成上述软件包之后,便可以开始编译Neper啦。
cd src
mkdir build
cd build
cmake /mnt/c/Users/m/neperwu/src
make -j
sudo make install
首先进入src目录,建立一个新的子目录build,接着进入到build目录,使用CMake编译,需要注意的是make -j命令,-j的含义是使用多线程编译,如果不使用-j,单线程编译花费的时间会很长。sudo apt install cmake-curses-gui
ccmake ..
make test
测试结果显示共有460个模块,其中91%通过了测试,43项没有通过测试。没有通过测试的为-M模块和-V模块。-M模块主要功能为划分网格,需要安装GMsh软件包,而-V模块需要安装POV-Ray软件包。sudo apt-get update
sudo apt-get install povray
这个命令在build文件夹内生成文件n100-id1.tess。接着使用命令neper -V n100-id1.tess -print img1
输出名为img1.png的图像。产生另一个镶嵌体,文件名为n100-id2.tess:
neper -V n100-id2.tess -print img1b