文档
介绍
ALSVID-UQ是不确定性的多级蒙特卡罗有限体积解算器高达3维的双曲守恒律系统的量化。
代码是以高效的模块化形式编写的,因此扩展代码相对容易。
如果您有一些建议或想报告错误,请联系我:jonas.sukys@sam.math.ethz.ch
安装
要求
您需要有一个C++编译器(GCC可以工作,但不一定会生成最快的可执行文件)。
您需要安装最新版本的蟒蛇(2.5或更高版本)。要使用捆绑的脚本来显示输出,您还需要numpy公司和马特普洛特利布包装。
用于使用多个CPU内核或群集并行运行ALSVID-UQ安装MPI库实现所需的计算机,(例如开放MPI).
这些软件包中的许多都将被安装或预构建以安装在任何最新的Linux发行版上(例如Debian和Ubuntu在其软件包数据库中都有上述内容)。
这些软件包的MacOS X发行版可从其网页上获得,并且易于安装(也许除了MayaVi)。
我们没有尝试在Windows下运行ALSVID-UQ,但所有这些软件包的版本都是可用的,所以这应该是可能的。
下载和安装
从下载最新版本的ALSVID-UQhttp://www.sam.math.ethz.ch/alsvid-uq/downloads.html,并解压缩.tar.gz文件。
对于串行(1核)模拟,无需再进行安装。
测试模拟
对于简单的MLMC-FVM测试,运行(在终端中):
cd alsvid-uq/运行蟒蛇/make.py型号:orszagtang ML=4 L=2
这将在二维中用随机扰动的初始磁场建立并运行Orzag-Tang涡旋。
可以使用包含的脚本将结果可视化:
蟒蛇-我/绘图.py
然后,在Python提示符中键入:
r=运行()r.plot(欧盟RHO)
编译和运行
“make.py”脚本用于构建和运行代码。
该脚本计算出特定运行需要哪些源文件,并只将这些文件编译为可执行文件。
make过程比普通软件更复杂,因为为了提高效率,运行的所有设置都是在编译时指定的。
这意味着每次新的运行都需要一个新的编译,但在不到10年的计算机上,这不会花费很长时间。
该脚本将在当前目录中生成两个文件:
1) 可执行文件'alsvid-uq'
2) 配置文件“config.py”包含用于此运行的替代项和参数
脚本选项'--姓名“”可用于设置不同的名称,而不是“config.py”。
运行可执行文件(除非另有规定,否则由脚本完成)将至少再生成三个文件:
文件名 |
描述 |
何时生成 |
输出.dat |
一个二进制文件,包含每个保存的时间步长的保守变量和额外变量的平均值 |
总是 |
时间.py |
包含生成输出的时间 |
总是 |
运行时.py |
包含模拟的运行时(对于MPI运行,有几个条目可用) |
总是 |
变量输出.dat |
是一个二进制文件,包含每个保存的时间步长的保守变量和额外变量的方差 |
仅适用于随机模拟(L>0或ML>1) |
样品.py |
包含用于每个网格级别的采样数 |
总是 |
平衡器.txt |
包含每个多采样器的估计负载(格式化表格) |
仅用于并行模拟 |
平衡器.dat |
包含每个多采样器的估计负载(python列表) |
仅用于并行仿真 |
装载.dat |
包含每个多采样器的估计负载(python列表) |
仅用于并行仿真和估算_负荷=1,即对于balacer:自适应 |
历史数据.py |
包含直方图数据 |
只为组织结构=1 |
上述文件的默认名称也由脚本选项“--姓名'.
如果参数WRITE_LEVEL_DATAFILES=1,然后还生成每个网格分辨率级别和类型(0或1)的MC-FVM估计的输出文件。
文件夹'平衡器.txt'和'平衡器.dat'在模拟开始之前生成,并可用于分析失败的运行。
选择
运行ALSVID-UQ可用的替代方案主要有(与问题相关的)“方程式”、“通量”、“模型”、“求解器”、“空间”、“统计”和(与实现相关的)“rng”、“multi”、“balancer”。
这些选项选择要编译的源代码文件。
“通量”、“模型”和“求解器”备选方案的可用选择取决于为“方程”选择的备选方案。
还有一些特定于方程的替代方案,例如“地形”和“材料”。
要查看每个备选方案的所有可用值的列表,请使用--询问脚本选项。
下表提供了每个备选方案的简要说明:
备选方案 |
解释 |
示例 |
违约 |
方程式 |
要模拟的守恒定律(选择守恒变量)。 |
mhd、euler、sw、burgers、平流、波浪、bl |
磁流体动力学 |
通量 |
指定流量是:确定性('det')还是随机性。 取决于“方程式”。 |
欧拉:规格 bl(黑色):渗透率、扰动、粘度 汉堡:kl,kl-exp,扰动 |
det(探测) |
模型 |
指定要运行的模型,即: 域大小、初始数据、边界条件、时间范围。 取决于“方程式”。 |
多种型号可选;使用--询问脚本选项 |
取决于“方程式” |
统计数据 |
指定要计算的统计估计。 |
平均值、平均值var、平均-方差、平均峰度、平均-var函数、平均值ar-不稳定、直方图、阈值sw(方程:仅sw) |
均值-方差 |
解算器 |
指定要用于模拟的解算器。取决于“方程式”。 |
欧拉:hll3,hll3L 磁流体动力学:hll3,hll3L,hll3GR,hll5 开关:ec、es-roe、es-rusanov 波动:fdm(分钟) |
hll公司 |
空间 |
指定空间和时间的实现。 |
第一个订单:o1,o1fdm 第二个订单:o2central、o2minmod、o2eno、o2enof、o2eno、o2enof、o2ecminmod、o2ecno 第三个订单:o3weno、o3wenof、o3norec |
o1号机组 |
天然气 |
指定随机数生成器。 |
512a井、19937a井、mt19937井、lcg井 |
512a井 |
地形 |
[仅适用于方程式:sw]指定底部地形。 |
平坦、海岸、凸起、凸起2d、hr、hr-iso、hr2d、hr2d-iso |
平的 |
材料 |
[仅适用于方程:波浪]材料系数。 |
const,logn-kl,logn-kl2d,logn-kl2d-int,logn-kl3d-int,logn-fft(-mpi),logn-fft per(-mpi),logn-fft per int(-mpi),logu-kl,多层,黎曼 |
常数 |
在命令行上用“:”符号指定替代项,即。
蟒蛇/make.py方程:mhd模型:orszagtang解算器:hll3空间:o2weno
参数
也可以设置一些参数。
其中一些是针对所做的替代选择(尤其是“模型”),而有些则适用于所有跑步项目。
要查看所有可用参数的列表,请使用--询问脚本选项。
下表提供了每个参数的简要说明:
参数 |
违约 |
解释 |
(FVM部分) |
西北、纽约、新西兰 |
1 |
X、Y和Z方向上的单元格数 |
紧凑型荧光灯 |
0.9 |
用于选择时间步长的CFL编号 |
保存0 |
0 |
求解的快照,t=0? |
NSAVES公司 |
1 |
要保存的解决方案的快照数 |
初始_ ATA_标定 |
1 |
初始数据的缩放 |
初始_ ATA_偏移 |
0 |
初始数据的偏移(缩放后应用) |
(MLMC部分) |
毫升 |
1 |
MC样品的数量(如果L=0)或最高级的样品数量(如果L>0)。如果设置为“-1”,则从文件中读取样本数ML.txt文件. |
L(左) |
0 |
级别为0、1、…、的多级MC的最高级别数。。。,L.将L=0设置为使用ML样本的常规MC。 |
USE_OPTIMAL_NUMBER_OF_样本 |
0 |
使用渐近优化(而不是平衡)的样本数(删除误差收敛估计中的对数项)。 |
读取样本源文件 |
0 |
从文件samples_file中读取每个级别的样本数。 |
样本_编号_文件 |
“Ml.txt” |
应从中读取每个级别的样本数的文件。 |
平滑_解决方案 |
0 |
解决方案是否平滑(连续)?如果不是,有效的FVM收敛速度是形式精度阶的一半(并且永远不会大于1)。 |
计算机_变更 |
1 |
是否应计算方差? |
RUN_NUMBER(运行编号) |
0 |
用于在执行多个运行以计算某些平均数量时随机化运行:错误、运行时等。 |
样本_偏移 |
0 |
仅使用samples_OFFSET之后的样本。(容错分析所需) |
美国_主要_种子 |
0 |
在播种PRNG之前,将种子映射到质数数组 |
PRIME_SHIFT(主换档) |
0 |
质数种子数组中的移位 |
(输出自定义) |
打印_t |
1 |
打印所有模拟时间和时间步 |
写入数据文件 |
1 |
写出数据文件(*.dat) |
写入级别数据文件 |
0 |
写出每个MLMC级别和类型的数据文件(*.dat) |
数据_路径 |
"" |
数据文件的路径(*.dat) |
(特定于方程式) |
鲍威尔 |
1 |
[仅适用于方程式:mhd]设置为0以关闭Powell-Gudenov源项。hll2解算器始终表现为POWELL=0。 |
防泄漏(_A) |
1 |
[仅适用于方程:sw]“hr”和“hr2d”底部地形的抗锯齿 |
粘性的 |
0 |
[仅适用于方程式:汉堡]启用粘度 |
粘度 |
1e-3号机组 |
[仅适用于方程式:burgers]设置粘度值 |
参数在命令行上用“=”符号指定,即。
蟒蛇/make.py方程:mhd模型:orszagtang NX=256 NY=256
脚本选项
可以使用以下选项修改make.py脚本的行为:
脚本选项 |
解释 |
-a、 --询问 |
告诉脚本向用户查询备选方案的值。如果此选项出现两次,则脚本也会向用户查询参数值。 |
-c文件,--config=file |
指定一个配置文件,用于指定要用于运行的备选方案和参数。命令行上指定的替代项和参数将覆盖这些选项。 |
-g、 --调试 |
告诉编译器生成适合于调试器使用的输出。 |
-n名称,--名称=名称 |
修改生成的文件的名称以包含此名称。如果要将多个运行的结果存储在单个目录中,则非常有用。 |
-r、 --重新运行 |
使用现有的config.py配置文件。请参见-c选项。 |
-x、 --诺伦 |
仅编译。不要运行生成的可执行文件。 |
-s、 --模拟 |
模拟“make”(无实际编译或运行)。 |
-q、 --安静 |
安静运行:不要将信息写入标准输出。 |
-v、 --详细 |
显示参数值、编译器输出和作业提交查询。 |
-l、 --日志 |
将输出记录到文件。 |
编译器
如果您希望使用GCC以外的编译器,那么您应该在与'制作.py'打电话'本地.py'.
复制中的一个示例文件'配置'目录,并根据您的需求修改它(如果需要)。
并行模拟
对于在多核计算机和集群上运行大型模型,ALSVID-UQ支持并行运行。
要使用此功能,您应该为“多个”备选方案。
目前唯一可用的是MPI实现'多:mpi'。为此,需要MPI库。
MPI标准有几种实现。ALSVID-UQ已通过OpenMPI测试。
对于并行模拟,可以使用几种负载平衡算法,方法是指定'平衡器'备选方案。
目前,'平衡器:静态'和'平衡器:自适应'都是并行的。
自适应负载平衡的开销稍大,但更普遍,并允许相同采样器的不同并行配置:
对于小样本,区域分解并行化被MC并行化取代,强制执行指定的最小CELLS_PER_CORE这样大大提高了效率。
自适应负载平衡器是贪婪负载平衡算法的推广,适用于执行速度不均匀的工人,
ans基于关于每个时间步长的先验FVM工作估计的综合知识(如静态)以及计算(可能是随机的)时间步长(基于CFL)。
以下参数用于并行运行:
参数 |
违约 |
解释 |
MULTIX公司 |
1 |
在X方向使用的进程数 |
MULTIY公司 |
1 |
在Y方向使用的进程数 |
MULTIZ公司 |
1 |
Z方向上要使用的进程数 |
MULTIM公司 |
1 |
“采样器”的数量(处理器组计算一系列样本) |
多分辨率 |
0 |
要使用的进程总数(如果指定,则忽略MULTIX、MULTIY、MULTYZ和MULTIM) |
确保并行性和可复制性 |
1 |
确保最终结果不依赖于并行化配置或负载平衡(可能会降低效率) |
备注:多核>0与不兼容'平衡器:静态'.备注:即使确保并联可重复性=0,如果没有修改参数,则始终确保再现性。
配置
在MPI模式下运行需要更多配置,而在单进程模式下运行则不需要这些配置。必须向'本地.py'配置文件。
首先,必须添加一个编译器规范,指定在何处查找MPI库,或者使用编译器的MPI前端(mpiCC)。
其次,在超级计算机和集群上,通常使用作业队列系统,并且需要一个脚本文件来指定作业。
make脚本'制作.py'将根据提供的模板生成合适的文件。
第三,需要指定用于运行MPI版本的命令。直接运行可执行文件将不起作用。
此命令可以是“mpiexec”或“mpirun”,也可以是将作业提交到作业队列的命令。
由于这些细节在很大程度上取决于所使用的MPI实现以及所运行系统的其他方面
(例如,正在使用的作业队列管理软件),此信息不能与ALSVID-UQ一起提供,但必须为每个系统指定。
各种类型的示例'本地.py'文件位于'配置'目录,其中一个最能满足你需求的应该被复制和修改。
配置文件已可用(请参阅'配置'目录)用于以下群集:
姓名 |
描述 |
文件名 |
本地(Linux) |
GNU编译器和调试器 |
gnu本地.py |
布鲁特斯(苏黎世联邦理工学院) |
GNU编译器和调试器 |
布鲁图斯·洛卡尔.py |
罗莎(CSCS卢加诺) |
GNU编译器和调试器、CrayPat探查器 |
rosa-gnu-craypat-local.py公司 |
罗莎(CSCS卢加诺) |
英特尔编译器与调试器、CrayPat探查器 |
rosa-icc-craypat-local.py公司 |
罗莎(CSCS卢加诺) |
PGI编译器和调试器、CrayPat探查器 |
rosa-pgi-craypat-local.py公司 |
罗莎(CSCS卢加诺) |
CCE编译器和调试器、CrayPat探查器 |
rosa-cce-craypat-local公司 |
托迪(CSCS卢加诺) |
GNU编译器和调试器、CrayPat探查器 |
todi-gnu-craypat-local.py公司 |
托迪(CSCS卢加诺) |
英特尔编译器与调试器、CrayPat探查器 |
todi-icc-craypat-local.py公司 |
托迪(CSCS卢加诺) |
PGI编译器和调试器、CrayPat探查器 |
todi-pgi-craypat-local.py公司 |
托迪(CSCS卢加诺) |
CCE编译器和调试器、CrayPat探查器 |
todi-cce-craypat-local公司 |
作业提交的脚本选项
脚本选项 |
违约 |
解释 |
-w、 --墙壁时间 |
1 |
预期运行时数(小时),或者HH。MM表示小时和分钟(MM以59为界) |
-m、 --存储器 |
1024 |
每个内核所需内存(RAM)的数量(MB) |
-t、 --佩蒂尔 |
32 |
每个节点的核数(当每个核需要更多内存(RAM)时很有用) |
-p、 --配置文件 |
- |
启用分析 |
-o、 --xopts |
- |
指定作业提交的额外选项 |
的自定义(依赖于群集)默认值-宽-米-吨可以在中指定'本地.py'文件。
并联输出
而不是只生成一个'输出.dat'文件,并行运行会为每个进程生成一个文件。
这些进程的坐标由“”分隔附加到输出文件名。
有一个python脚本(需要numpy),可以将这些脚本组合成一个二进制文件:
蟒蛇/组合.py
将合并运行中的输出文件--姓名提供脚本选项,以及:
蟒蛇/组合.py myrun
如果“我的跑步”以名称的形式给出--姓名脚本选项。
这些命令假定当前目录包含输出文件,并且是ALSVID-UQ主目录的下一级目录,例如,在run子目录中。
Combine使用由编写的配置文件中的信息'制作.py'.
绘图
文件中提供了所有可用绘图例程的概述'绘图.py'.脚本可用于:
- 根据ALSVID-UQ模拟的结果(平均值、方差、直方图)绘制1d、2d和3d图
- 生成模拟的电影(以三维形式查看时间演化或旋转结果)
- 将输出数据输出到Matlab文件
脚本'绘图.py'可以使用以下命令运行:
蟒蛇-我/绘图.py
这假设您在主ALSVID-UQ目录下一级,并且在所有模拟数据所在的目录中。
脚本将运行配置加载到名为“r”并留下一个Python提示符。
如果您使用了“--名称”选项,则应将您使用的名称指定为例程的参数'运行()':
r=跑步(“myrun”)
如果要比较多个运行,这尤其有用,可以将它们加载到不同的Python变量中(而不是“r”).
要根据结果绘制图形,可以使用“绘图”例行程序:
均方根曲线(mhd.RHO,5)
这将绘制第五次快照时MHD方程(方程:MHD)的密度(RHO)(前提是参数“NSAVES”大于5)。
有关可以从输出文件加载并绘制的变量的完整列表,请参阅文件'变量.py'.
如果运行是1d运行,它将是1d绘图;如果运行是2d运行,这将是2d绘图;而如果运行是3d运行,那将是3d绘图。
如果需要,绘制参数'切割切片'可用于从2d或3d图中获取1d图,从3d图中获得2d图。
如果未指定快照编号,则使用最终快照(在最后一次)。
为了在相同的绘图(仅适用于1d和2d绘图),可以使用
r.plot0(mhd.RHO)
要将绘图保存到文件,可以将文件名指定为“绘图”和'绘图0'日常工作:
r.plot(mhd.RHO,save='RHO_final.png')
可以使用其他几种输出格式(如PDF)。文件扩展名指定格式。
有关已识别格式的完整列表,请参阅matplotlib文档。
还可以将一个变量的值加载到Python数组中(快照编号为必修的在这种情况下):
rho=r.var(mhd.rho,5)
下面,我们提供了一些非直观参数的表,
其可以在一些绘图例程中使用。
有关参数的默认值,请参阅'绘图.py'脚本。
参数 |
描述 |
例子 |
程度 |
指定值的范围 |
[最小值,最大值] |
剪切_切片 |
在坐标“dir”的位置“pos”处剪切一个切片 |
{'dir':'x','pos':'0.1'}或{'dir:'x],'pos:'0.1','dir2':'z','pos2':'0.6'} |
看法 |
设置三维打印中的指定视图 |
{方位角:45,标高:10,距离:1.5} |
轮廓_水平 |
指定等高线图的计数值 |
[3, 5.6, 7, 9.1, 10] |
削减 |
剪辑一个(或两个)三维图,以便观察内部结构 |
{“原始”:(0.5,0.5,0.5),“法线”:((0,0,1),(0,1,0)或无,无)} |
突出 |
在三维打印中高亮显示具有指定值的轮廓 |
(突出显示平均值,突出显示变量) |
一维和二维绘图
这个'脚本/plot1d.py','脚本/plot2d.py'和'脚本/plot2_histograms.py'脚本使用numpy和matplotlib包。
三维绘图
3d打印有三个主要后台:MayaVi、VisIt和Paraview。相应的脚本是'脚本/plot3d_mayavi.py','脚本/plot3d_visit.py'和'脚本/plot3d_paraview.py'.所选后端必须在中指定'local_visualization.py'文件。
已有几个(可视化)配置文件可用(请参阅'配置'目录):
姓名 |
描述 |
文件名 |
本地(Linux) |
玛雅维 |
本地mayavi_可视化.py |
本地(Linux) |
签证 |
本地访问可视化.py |
艾格(CSCS卢加诺) |
签证 |
eiger-visit-local可视化.py |
对于所选的三维可视化后端,可以通过以下方式在plot命令中指定所需的(并行的、特定于后端的)引擎
rho=r.var(mhd.rho,发动机=发动机(4,2))
其中可以使用相应的功能生成所需的引擎'获取引擎()'在中'local_visualization.py'文件。
其他绘图例程
可以在文件中找到用于一系列实验的(误差、缩放)分析的附加绘图例程'errorplot.py'.脚本可用于:
- 生成多个仿真的误差收敛图(与单元数和运行时的关系)
- 生成多个模拟的并行效率和(强或弱)缩放图
- 将多个仿真的输出数据导出到Matlab文件
其他打印例程可用于处理仿真信息:
例行程序 |
解释 |
plot_inbalance() |
绘制负载平衡结果,包括理论值和测量值 |
plot_loads() |
绘制每个样本的估计负载,仅适用于估算_负荷=1 |
自定义打印
一旦模拟成功完成,模拟结果将存储在二进制文件中,以及一些ASCII元文件。
二进制文件可能非常大,这取决于您所要求的分辨率和您希望保存的时间步数。
运行的参数也会被保存,通用工具可以使用这些参数来了解二进制文件中数据的布局。
如果您希望使用自己的工具处理输出,您应该了解以下内容:
- 对于保存的每个时间步长,二进制文件被划分为一个部分
- 每个部分包含(依赖于方程的)保守变量和额外变量(参见文件'变量.py')
- 每个变量都是一个3d数组,X索引变化最慢(即使用C索引标准而不是Fortran索引标准)
- 变量按顺序排列:首先是所有保守变量,然后是所有额外变量(依赖于方程,请参阅文件'变量.py')
示例
串行MC运行
蟒蛇/make.py方程:欧拉模型:sod-shock-tube ML=16
串行MLMC运行
蟒蛇/make.py方程:欧拉模型:sod-shock-tube ML=16 L=2
并行MC运行
蟒蛇/make.py方程:euler模型:sod-shock-tube multi:mpi MULTIX=2 MULTIM=4 ML=16
并行MLMC运行
蟒蛇/make.py方程:euler模型:sod-shock-tube multi:mpi MULTIX=2 MULTIM=4 ML=16 L=2
二阶空间近似下的MLMC运行
蟒蛇/make.py方程:欧拉模型:sod-shock-tube空间:o2weno ML=16 L=2
启用下采样的MLMC运行
蟒蛇/make.py方程:欧拉模型:sod-shock-tube DOWNSAMPLE=1 ML=16 L=2
延伸ALSVID-UQ
我建议复制和修改模型、通量等的现有文件。请记住几句简短的话:
- 仅限节能无功功率在MPI通信调用期间交换。XtraVars(扩展变量)已计算事后.扩展时请记住'结构.h'.
- 可用边界条件:REPEAT、NEUMANN、ZERO_FLUX和WAVE_REFLECT。