平台: 所有平台 版本: 所有版本

问题描述

该解决方案描述了如何从命令行中启动参数扫描,批处理扫描或comsolMultiphysics®中的群集扫描模拟。

解决方案

简短的摘要

模型方法作为修改的概念提出参数扫描,,,,批处理, 和簇扫节点通过,例如从文件读取参数案例。这-mode桌面选项可用于从命令行中运行批处理和群集扫描节点,并在输出文件中获得同步解决方案和同步累计探针表。

框架

ComsolMultiphysics®提供了各种可能性,以在连续和分布式模式下控制和运行参数扫描:

参数扫描

参数扫描ComsolMultiphysics®中的功能用于在单一实例的ComsolMultiphysics®实例中运行与几个参数案例的参数研究。参数案例通常是一个接一个地处理的,并且使用分配给单个COMSOLMultiphysics®实例的所有计算资源(过程和内核)。这参数扫描节点控制着相应参数研究的参数范围。您可以通过指定标志来从GUI或命令行中运行研究-std作为comsol批次调用的选项。研究中的解决方案要么作为解决方案序列中的参数值(如果使用参数求解器),或者在参数解决方案节点(如果使用在作业配置下具有附加参数扫描节点的外部扫描;请参见下图)。

模型方法

在ComsolMultiphysics®中进行参数扫描研究有关如何设置参数扫描的视频说明。

分布式参数扫描

如果是参数扫描研究在分布式存储平行环境中进行

  • 作为参数扫描节点与集群计算在研究中的节点,
  • 或在分布式GUI实例中,例如由comsol -nn 4 -nnhost 4(在这种情况下,无需群集计算节点),
  • 或在提交脚本为调度程序启动的集群作业中,

您可以使用分发参数扫描参数扫描的研究扩展部分中的选项(或分布参数求解器固定学习步骤的选项)。启用此选项后,参数扫描的参数案例将在运行的计算过程中分布。运行时,例如两个节点上的四个参数案例,每个节点将处理两个参数案例,并且节点正在同时完成其工作。所有参数的参数解决方案在输出文件(批处理运行)或GUI(用于交互式分布式COMSOL实例)中可用。

批处理

批处理- 与参数扫描- 正在使用多个comsol批处理实例处理参数案例。这些实例是从GUI中进行的批处理研究中作为外部批处理作业推出的。这些工作是彼此独立运行的,如果一项工作失败,另一个工作及其结果也不会受到影响。结果存储在相应的输出文件中。另外,还有选择同步解决方案同步累积的探针表在批处理节点的批处理设置部分中。使用同步解决方案选项,所有作业的参数解决方案都将在GUI中的模型中用于后处理。

模型方法

批次扫描会自动调整用于最佳值的内核数量,但您还可以手动设置作业资源。如果外部作业应仅使用可用内核的子集,则可以设置核心数每个作业(可以在作业配置下的批处理节点上设置;请参见下图)和同时工作的数量(可以在批处理节点上设置)。这两个值的乘积不应超过可用芯的数量。

模型方法

有关批次扫描的其他信息可以在博客中找到批处理的力量

簇扫

A簇扫提供与批处理扫描以及用于集群计算设置以及远程和云访问的接口相同的功能。您可以在集群环境中配置外部作业以进行分布式执行。选项同步解决方案同步累积的探测表在群集扫描节点的批处理设置部分中也可用。博客文章中描述了群集扫描节点的用法和配置如何在comsolMultiphysics®中使用群集扫描节点

模型方法

笔记:需要在分布式内存并行模式下运行comsolMultiphysics®需要浮动网络许可证(FNL)。例如,这适用于研究集群计算节点(对于分布式参数扫描),研究簇扫节点或具有分布式参数扫描的分布式GUI实例(请参阅在群集上并行运行comsol®有关群集执行模式的描述)。

从命令行运行参数扫描

可以从命令行运行包含参数扫描节点的研究,例如通过调用

comsol batch -inputfile mymodel.mph -outputfile out.mph -study std1

如果有分布式参数扫描,例如通过启动

COMSOL批处理-NN 4 -NNHOST 4 -INPUTFILE myModel.mph -Outputfile out.mph -study std1

在这两种情况下,参数扫描都按原样运行;也就是说,它以模型中的参数扫描节点中存储的参数值运行。

如果要从命令行开出一组参数,则可以禁用模型文件中的参数扫描节点并使用标志-pname- 名单要通过命令行输入设置参数,或者您可以使用该文件读取参数-Paramfile旗帜。如果使用这些命令行方法,则为每个参数案例生成不同的输出文件,解决方案不同步到一个文件。

带有参数扫描的应用程序库的示例应用程序是音叉。该模型决定了调谐叉的基本共振频率,其中插脚长度l参数扫描有所不同。例如

comsol batch -inputfile tuning_fork.mph -outputfile tuning_fork_out.mph \ -pname l -plist 8 [cm],10 [cm],12 [cm]

为了扫描参数L = 8 [CM],,,,10 [cm], 和12 [CM](为每个参数产生输出文件)。对于空间分离的参数文件paramfile.dat,其中包含第一行中的参数名称和以下行中的相应参数值元组

l 0.08 0.10

呼吁参数文件受控参数扫描可能看起来像

comsol batch -inputfile tuning_fork.mph -outputfile tuning_fork_out.mph \ -paramfile paramfile.dat

通过模型方法控制参数扫描

从命令行控制参数扫描的另一个选项是使用模型方法用于从输入文件读取所需的参数。在下面的示例中,模型方法读取输入文件并提取参数名称,参数值和参数单元。提取的值用于在参数扫描节点上设置相应的属性。最后,参数扫描是通过在作业配置下运行参数扫描子节点来完成的(假设以前创建了该节点,例如,通过在GUI中运行研究)。以下示例代码可用于在应用程序构建器中定义新的模型方法:

//加载csv参数文件,均为// pname0,pname1,... // punit0,punit1,... // pval00,pval00,... // pval01,pval01,pval11,... // ... // ...,...,... string theStudy =“ std1”;字符串thisFeature =“ param”;//参数扫描(*)字符串thisParam =“ p1”;字符串fileName =“ c:\\ models \\ pfile.csv”;string [] [] [] parr = readcsvfile(filename);int行= parr.length;int cols = parr [0] .length;字符串pnames =“”;字符串punits =“”;字符串[] pvalues = new String [cols]; // Read names from line 0 pNames = pArr[0][0]; for (int col = 1; col < cols; col++) pNames = pNames+","+pArr[0][col]; // Read units from line 1 pUnits = pArr[1][0]; for (int col = 1; col < cols; col++) pUnits = pUnits+","+pArr[1][col]; // Read values from lines 2,3,... for (int col = 0; col < cols; col++) pValues[col] = pArr[2][col]; for (int row = 3; row < rows; row++) for (int col = 0; col < cols; col++) pValues[col] = pValues[col]+","+pArr[row][col]; // Set parameters for thisStudy / thisFeature with(model.study(thisStudy).feature(thisFeature)); set("plistarr", new int[]{}); set("plistarr", pValues); set("pname", new String[]{}); set("pname", pNames); set("punit", new String[]{}); set("punit", pUnits); endwith(); // Run param sweep model.batch(thisParam).run(); // (**)

模型方法

如何使用模型方法加速您的comsol工作流程用于介绍模型方法。在里面模型构建器您可以将方法调用添加到先前定义的模型方法下全球定义通过选择添加方法调用开发人员标签。您可以通过右键单击ModelMethod1节点和选择跑步

模型构建器

参数文件pfile.csv是逗号分隔的文本文件,其中第一行包含参数名称(l),第二行包含参数列的单位(厘米),第三n-Th行包含此参数列的参数值(8,,,,10)。

L CM 8 10

使用此配置,可以通过调用模型方法从命令行中运行参数扫描

comsol batch -inputfile tuning_fork.mph -outputfile tuning_fork_out.mph \ -methodcall methodCall1

带有其他标志-MethodCall MethodCall1。扫描中的参数是由模型方法加载的参数文件中定义的参数。如果要为不同的参数文件运行几次扫描,则可以修改模型方法以加载多个参数文件并连续运行多个扫描,也可以定义几种从命令行连续运行中调用的几种模型方法。当参数文件包含多个列时,会自动设置和使用参数的嵌套环(需要在研究中定义参数)。

如果参数扫描使用参数求解器(请参见下图),模型方法需要运行相应的求解器序列,即需要将线(**)替换为

... model.sol(“ sol1”)。runall();//参数求解器(**)

模型方法

笔记:Windows®操作系统支持应用程序构建器。

从命令行中运行批处理或群集扫描

如果您有一个研究批处理或a簇扫然后,您可以从命令行以批处理模式运行研究,默认情况下,批处理扫描和集群扫描节点被忽略。如果您也想运行这些节点(也就是说,如果要允许批处理过程启动外部流程),则必须添加标志-mode桌面到Windows上的批次调用

comsolbatch.exe -mode桌面-Inputfile tuning_fork.mph -outputfile tuning_fork_out.mph

comsol batch -mode桌面-inputfile tuning_fork.mph -outputfile tuning_fork_out.mph

在Linux或MacOS上(在版本5.3a中,您必须使用- 批次在Linux / MacOS上而不是-mode桌面)。

在这两种情况下,批处理扫描或集群扫描都按原样运行,即在模型文件中定义的参数。如果选项同步解决方案或者同步累积的探针表被检查,同步以与GUI的运行方式相同。这种命令行方法的最大优势是,它允许您从所有外部作业中获得具有同步解决方案的输出文件,以进一步处理。

如果要通过参数文件删除批处理扫描或群集扫描的参数,该参数文件是由提出的模型方法的变体读取的,则需要在示例中修改行(*)并定义

... string thisFeature =“ batsw”;//批处理(*)...

批量扫荡和

...字符串thisFeature =“ clusw”;// cluster扫描(*)...

用于群扫地。此外,线(**)需要用线代替

...字符串thisBatch =“ b1”;//用于批处理 /群集扫描(**)型号。model.batch(thisBatch).feature(“ dadef”)。model.batch(thisParam).run();model.batch(thisBatch).feature(“ dadef”)。run();

在这里,假定相应的研究已经在GUI中进行,并且参数扫描节点P1和批处理节点B1在工作配置下已经生成。另外,假定在生成新的外部进程节点之前要删除两个旧的外部进程节点。

用于启动批处理或由模型方法控制的群集扫描,您必须调用

comsolbatch.exe -mode桌面-Inputfile tuning_fork.mph -outputfile tuning_fork_out.mph \ -methodcall methodcall1

在Windows或

comsol batch -mode桌面-inputfile tuning_fork.mph -Outputfile tuning_fork_out.mph \ -methodcall methodCall1

在Linux或MacOS上(使用- 批次在版本5.3a而不是-mode桌面)。