2.3. 运行模拟¶
2.3.1. GUI运行¶
在进入GUI程序后,首先打开工作空间(工作目录 图 2.14 )。
图 2.14 打开工作目录¶
然后,在工作目录在编辑器中打开脚本 ( 图 2.15 )。
图 2.15 双击打开建模脚本¶
打开的脚本文件会在编辑器中处于显示状态( 图 2.16 )。
图 2.16 编辑器中显示的建模脚本¶
接下来,点击工具栏上的 运行此脚本 按钮即可自动在控制台中执行脚本( 图 2.17 )。运行此脚本 默认执行编辑器中处于当前编辑状态的脚本。
图 2.17 控制台运行脚本,初始化模型¶
最后,在控制台输入Python函数命令运行模拟 ( 图 2.18 ),
app.run(10000)
图 2.18 运行脚本,初始化模型¶
程序运行过程中可以实时显示 ( 图 2.19)。
图 2.19 运行模拟,实时显示更新¶
上述实时显示更新会频繁在CPU和GPU间传输数据,往往会影响计算效率。因此,建议显示的刷新时间设置长一些或者关闭实时显示更新 (见 视图设置 )。
2.3.2. 终端运行¶
SudoSim亦可以无需GUI直接在终端中运行,如 图 2.20 。注意:需要将SudoSim加入到环境变量PATH中方可直接运行,否在需要提供SudoSim可执行文件所在路径。
图 2.20 Linux/Ubuntu终端¶
我们在终端下进入一个工作目录,比如 ~/examples/CUDEM/public:
1user@Dell-5820:~/examples/CUDEM/public$ ls
2column_collapse.py debrisflow.py pos_list.txt tmp1.stl
3dc7_dem_1411slide.txt packing.py terrain_stl.stl
然后,可以开启交互Shell:
1user@Dell-5820:~/examples/CUDEM/public$ sudosim -i
2Welcome to SudoSim!
3Python 3.8.0 (default, Dec 9 2021, 17:53:27)
4[GCC 8.4.0] on linux
5
6>>>
可以在上述Shell中一行一行地执行模拟程序。当然,我们也可以直接运行一个建模脚本。需要注意的是,上述GUI中运行的脚本需要如下改动:
1import numpy as np
2gui = False
3sim = None
因此,我们将不需要调用GUI的任何程序。脚本运行如下:
1user@Dell-5820:~/examples/CUDEM/public$ sudosim -i -f packing.py
2Welcome to SudoSim!
3Python 3.8.0 (default, Dec 9 2021, 17:53:27)
4[GCC 8.4.0] on linux
5
6Using GPU 0 of acount:1
7initializing Reorder...
8init Neighborlist
9CUDA version:11020
10walls initilized!
11>>>
随后,在Shell中执行运行脚本函数 sim.RunPthread(10000):
1>>> sim.RunPthread(10000)
注:因为我们不需要调用GUI的相关程序,因此,不再有 app 这个对象。需要指出的时,前述 app.run 函数是封装了这里的 sim.RunPthread。另外,我们也提供 sim.run 函数,但该函数是在同一个线程执行模拟,亦即采用该函数执行模拟后,模拟过程中用户无法通过Shell进行交互。
2.3.3. 远程运行¶
SudoSimGUI提供远程模拟计算,本地查看和执行程序。该功能仍然在测试中。SudoSimGUI会自动在本地监听网络端口,形成一个服务端。客户端可以执行连接服务端,从而客户端即可远程查看和干预服务端的模拟计算。
服务端程序
在命令行执行,
1sudosim -n -s hostname -p port -k key
其中’-n’为不采用gui运行服务端程序; ‘hostname’ 为服务器地址,默认为localhost;‘port’为服务器端口,默认为9091;’key’为客户端与服务端配对密钥。
客户端程序
先在设置中的高级选项进行服务器地址和端口指定,默认分别为localhost和9091 ( 图 2.21 )。
图 2.21 客户端远程设置 (MacOS)¶
点击连接服务器按钮,成功后可像运行本地模拟程序一样执行程序。
点击remote view按钮,程序将自动从远程服务端下载数据并可视化显示 ( 图 2.22 )。
图 2.22 客户端执行模拟脚本¶
按照本地设置的显示刷新频率,程序自动提取远程服务器数据实时更新 ( 图 2.23 )。
图 2.23 客户端数据实时更新¶
注意事项
点击连接服务器后,本地程序自动变为客户端角色,在控制台内执行的命令全部发送到服务器端。为了在客户端模式查看本地程序,保留了lapp对象(表示local app),以该对象开头的命令不被发送到服务端执行。