文档

目录

介绍

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'.
脚本可用于:

脚本'绘图.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'.
脚本可用于:
其他打印例程可用于处理仿真信息:
例行程序 解释
plot_inbalance() 绘制负载平衡结果,包括理论值和测量值
plot_loads() 绘制每个样本的估计负载,仅适用于估算_负荷=1

自定义打印

一旦模拟成功完成,模拟结果将存储在二进制文件中,以及一些ASCII元文件。
二进制文件可能非常大,这取决于您所要求的分辨率和您希望保存的时间步数。
运行的参数也会被保存,通用工具可以使用这些参数来了解二进制文件中数据的布局。

如果您希望使用自己的工具处理输出,您应该了解以下内容:

示例

串行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

我建议复制和修改模型、通量等的现有文件。
请记住几句简短的话: