(第一部分)使用圆筒和托盘设置并运行SAOR测试案例。
(第二部分)使用两种方法计算生成的SAOR:手动使用Cross Plot和自动使用Python脚本。
(第三部分)通过在Rocky Scheduler中运行多个案例,研究SAOR在不同的颗粒到颗粒静态和动态摩擦值下的行为方式。
本教程的目的是使用不同的材料和相互作用参数运行静态休止角(SAOR)测试案例,以验证未来仿真的DEM系数。
您将了解如何:
设置附着力模型
更改材料值
通过Volumetric Inlet注入颗粒
您将使用这些功能:
Materials和Materials Interactions
Volumetric Inlet
重要: 尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。
本教程假设您已经熟悉Rocky用户界面(UI)和项目工作流程。
如果不是这种情况,请在开始本教程之前,参考教程01-传送槽了解关于Rocky用法的基本介绍。
本教程使用SI Units作为默认单位。
要开始本教程,让我们创建一个新项目:
在此处下载
dem_tut02_files.zip文件。将
dem_tut02_files.zip解压缩到您的工作目录。打开Rocky 2025 R1。(在程序菜单中查找Rocky2025 R1或使用桌面快捷方式)。
从Rocky程序中,单击New Project按钮,或者从File菜单中,单击New Project(Ctrl+N)。
对于Physics步骤,我们将添加滚动阻力模型和附着力,并降低软化因子以减少仿真时间。
从Data面板中,选择Physics。
从Data Editors面板中,选择Momentum子选项卡,然后定义以下所有内容:
重要: 降低软化因子可能会导致颗粒之间以及颗粒与边界之间过度重叠。
对于Geometries步骤,我们将导入.stl格式的几何结构文件。
从Data面板中,右键单击Geometries,然后单击Import Wall。
从Select file to import对话框中,导航到您之前下载的dem_tut02_files文件夹,找到geometry文件夹,然后在按下Ctrl或Shift键的同时,多选以下所有文件,然后单击Open:
Container_Cylinder.stl
Upper_Tray.stl
(如果您尚未保存项目,请现在保存。)
从Import File Info对话框中,选择“mm”作为Import Unit,确保Convert Y and Z axes选项被清除(未选中),然后单击OK(如图所示)。
导入几何结构后,您可以在3D View窗口中查看结果:
将Geometries实体从Data面板拖放到工作区。将出现一个新的3D View窗口,显示了您导入的几何结构。
要计算边界运动,需要选择Translation类型的运动坐标系。
选择平移后,以下选项将可用:
Fixed Velocity:将在局部坐标中定义恒定速度。
Initial and Final Velocity:将在局部坐标中定义Start Time和Stop Time的速度,并计算Acceleration。
Initial Velocity and Acceleration:确定了Stop Time后,将在局部坐标中定义Start Time的速度和Acceleration,并计算Final Velocity的速度。
注意: 以下过程包括如何创建运动坐标系的逐步说明。
要添加一个新的运动坐标系,请执行以下操作:
从Data面板中,右键单击Motion Frames,然后选择Create Motion Frame。
从Data面板中,在Motion Frames下方选择新添加的Frame <01>条目。
从Data Editors面板中,在Frame选项卡上定义参数,如下一节所示。
此时,默认情况下,您可能看不到整个Data Editors面板(如图所示)。
提示: 要显示面板的更多内容,您可以通过标题拖放面板,双击面板或单击蓝色按钮使其浮动。这有利于实现字段的可视化。
定义Name:Container Cylinder Motion
要为此坐标系创建新的运动,请执行以下操作:
单击绿色加号按钮(Add motion)。
将Type设置为Translation运动(默认)。
为了在圆筒上升之前使其内部的颗粒沉降下来,我们希望这个运动有轻微的延迟。因此,定义Start Time、Stop Time和Velocity。
当创建完Motion Frame后,可以将其分配给Cylinder几何结构:
从Data面板中,在Geometries下方选择Container_Cylinder。
从Data Editors面板中,在Wall选项卡上,从Motion Frame下拉列表中选择Container Cylinder Motion(如图所示)。
对于本教程,由于几何结构有一个分配了位移的运动,可以使用Motion Preview窗口预览该运动。
从Data面板中,选择Motion Frames。
从Data Editors面板中,单击Preview(如图所示)。将出现一个显示了几何结构和已创建坐标系的新窗口。
提示: 您可以使用Default axes size参数定义轴尺寸,以获得更好的可视化。
Time工具栏可用于播放预览。黄色的滑块表示尚未处理仿真。
对于Materials步骤,将只使用两种材料:一种用于所有几何结构部分(Default Boundary),另一种用于颗粒(Default Particle)。
按如下方式修改这两种材料:
从Data面板中,在Materials下方选择Default Boundary,然后从Data Editors面板中,更改以下内容:Density和Young's Modulus。
从Data面板中,在Materials下方选择Default Particles,然后从Data Editors面板中,更改以下内容:Bulk Density。
现在让我们设置材料的相互作用属性:
从Data面板中选择Materials Interactions。Data Editors面板会显示可编辑的参数。
从左侧下拉列表中,选择Default Particles,并从右侧下拉列表中,选择其中的一对:Default Boundary或Default Particles。
根据如下图所示的值调整每对组合的参数:
对于Particles步骤,我们将创建一个新的球形颗粒组,并增加一些滚动阻力。
从Data面板中,右键单击Particles,然后选择Create Particle。在Particles下创建一个新的颗粒组。
选择新创建的Particle <01>条目,然后在Data Editors面板中,按照以下步骤中的指定值修改参数。
在Size子选项卡中,定义Size(以m为单位)。
在Movement子选项卡中,定义Rolling Resistance。
要可视化新颗粒,请单击View。将出现一个新的Particle Details窗口,显示了(透明)颗粒几何结构、其几何中心(黄点)和质心(蓝点)。
注意: 当整个颗粒的密度均匀时,几何中心和质心重合(如图所示)。
对于Inlets and Outlets步骤,我们将创建一个Volumetric Inlet输入,这使我们能够一次将一个类似于球形的密集颗粒球注入到仿真中。
与最初的Particle Inlet方法(教程01中使用的)相比,使用Volumetric Inlet的主要好处是确保在仿真开始时圆柱体中就已经形成了颗粒床。
定义Volumetric Inlet输入时,必须了解以下组件,这一点很重要:
Seed Coordinate:描述了一个点的位置,围绕该点构建了颗粒层。
Gap Scale Factor:当围绕Seed Coordinate构建颗粒层时,颗粒层彼此之间的紧密程度。
Mass:要围绕Seed Coordinate构建的颗粒的目标质量。
Bounds:定义了约束颗粒层的物理限制。具体如下:
限制必须包括Box Bounds,可以使用坐标手动定义,也可以由Rocky使用您选择的一个或多个Geometries的限制自动计算。
这些限制还可能包括仿真中一个或多个Geometries的壁面。
Time:Time子选项卡包含可选的Volumetric Inlets时间设置,其可改善您的仿真项目:
Injection Time:设置出现颗粒注入的仿真时间。
Periodic:启用时,Periodic允许在仿真中周期性地注入颗粒。Period Time定义周期持续时间,Stop Time定义周期注入停止时的仿真时间。
对于本教程,我们将创建一个仅受Cylinder壁面约束的Volumetric Inlet。
从Data面板中,右键单击Inlets and Outlets,然后选择Create Volumetric Inlet。在Inlets and Outlets下创建一个新的Volumetric Inlet <01>条目。
选择新创建的Volumetric Inlet <01>条目,然后从Data Editors面板中,按照下图中的指定值修改参数:
从Particles子选项卡中,单击Add按钮(绿色加号)创建一个条目行。
从下拉列表中选择Particle <01>组名称,然后以kg为单位定义Mass(如图所示)。
将Gap Scale Factor保留为1(默认值),以便颗粒尽可能紧密地一起注入。
从Region子选项卡中,定义Seed Coordinates。
从Geometries框中,启用Container_Cylinder复选框。
启用Use Geometries to Compute复选框。
您可以在3D View窗口中显示您在上一步中配置的Seed Point。
由于Seed Coordinates设置在圆柱体内部,我们首先必须启用其Transparency,才能看到Seed Point。
从工作区选择一个3D View窗口(或创建一个新窗口)。
从Data面板选择Container_Cylinder几何结构。
从Data Editors面板中,选择Coloring选项卡,然后启用Transparency复选框。
从Data面板隐藏Particles并重新选择Volumetric Inlet <01>。
现在,您可以在3D View窗口中可视化Seed Point(蓝点)和几何结构边界(白色方框)。
现在让我们设置Solver参数:
从Data面板点击Solver,然后从Data Editors面板确保选择Solver选项卡。
从Time子选项卡中,定义Simulation Duration。
从General子选项卡中,为Simulation Target选择CPU(或GPU/Multi GPU),然后设置Number of Processors(或Target GPU(s))。对于本教程,由于颗粒数很少,CPU的仿真速度会更快。
单击Start按钮开始处理。
单击Start后,将会显示Simulation Summary窗口。
该窗口将自行消失,然后开始处理。
提示: 您也可以从Solver | Summary选项卡中查看此信息。
要在处理过程中可视化仿真,请执行以下操作:
从Window菜单中,单击New 3D View。
单击Refresh按钮(或使用Auto Refresh复选框)。
仿真速度取决于各种因素,例如:
颗粒形状和用于定义形状的顶点数量
任何时候仿真域中的接触数量
用于定义几何结构的网格单元数量
最小颗粒尺寸和材料硬度
文件输出的频率
这样就完成了本教程的第一部分。
如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。
要访问该手册,从主Toolbar中单击Help,指向Manuals,然后单击User Manual。
本教程的目的是使用两种方法计算静态休止角(SAOR):手动使用Cross Plot和自动使用Python脚本。
我们将从第一部分结束的地方继续。
您将了解如何:
使用交叉图测量SAOR
打开PrePost Script面板
导入并运行已保存的Python脚本
解读已执行的脚本的结果
修改Python脚本
您将使用这些功能:
Cross Plot窗口
PrePost Script面板
PrePost Scripting手册
重要: 尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。
如果您完成了本教程的第一部分,请确保Rocky项目是打开的。(第二部分将从第一部分结束的地方继续。)
如果您没有完成第一部分,请执行以下所有操作:
在此处下载
dem_tut02_files.zip文件。将
dem_tut02_files.zip解压缩至工作目录。打开Rocky 2025 R1。(在程序菜单中查找Rocky2025 R1或使用桌面快捷方式)。
重要: 要使用提供的Rocky项目文件,您必须安装Rocky 2025 R1或更高版本。如果您有Rocky的较早期版本,请将Rocky升级到最新版本或从头开始完成第一部分。
从Rocky程序中,单击Open Project按钮,找到dem_tut02_files文件夹,然后从tutorial_02_pre-processing文件夹中打开tutorial_02_pre-processing.rocky文件。
处理仿真。(从Simulation工具栏点击Start按钮。)
现在项目已经完成处理了,我们可以开始进行分析。我们先从手动的方法开始。
在这种方法中,静态休止角(绿线)将通过以下步骤进行手动计算:
生成沿X和Y方向的颗粒分布图
使用图表比例尺测量长度和高度
使用三角关系计算角度
Cross Plot用于创建散点图,允许您比较给定Output的Particles/Geometry的两个属性,一个在X轴上,另一个在Y轴上。
在本教程中,我们将使用Cross Plot来查看颗粒堆在XY平面上的投影。为此,将根据Particle X-Coordinate绘制Particle Y-Coordinate。
要创建交叉图,请执行以下所有操作:
从Window菜单中,单击New Cross Plot,或使用快捷键Ctrl+R。
从Data面板中,选择Particles,然后从Data Editors面板中,选择Properties选项卡。
点击并将Coordinate: Y拖放到绘图窗口上,然后松开。
在出现的Select Source Curves窗口中,从Domain下拉列表中选择Coordinate: X,然后点击OK。
与(Multi) Time Plot显示所有Particles的每个输出的单个值不同,Cross Plot显示所有Particles的值,但仅显示单个输出。
您可以使用Time工具栏选择要开展分析的具体时刻。
在Time中选择4.6 s来测量静态休止角。
结果如下所示。
Rocky绘图可以通过右键单击绘图网格上的任意位置进行编辑。
Cross Plot
Multi Time plot
Export和Copy:复制绘图或数据;将绘图另存为.png、.bmp或.jpg图像文件;或者保存.csv数据文件。
Title Format:显示/隐藏绘图标题,并对其进行编辑。
Legend Format:显示/隐藏曲线图例,并对其进行编辑。
Canvas Background:更改绘图区域颜色并显示/隐藏网格线。
Curve Colors:选择曲线着色方式:每条曲线采用一种颜色(Unique),相同或不同实体中的相同曲线采用同一种颜色(Particles/Geometries/Processes)(Property Based),或相同实体中的相同或不同曲线采用同一种颜色(Entity Based)。
Axes Colors:根据曲线颜色启用/禁用轴着色。
Axes Layout:在每条曲线的独立轴之间切换(By Property),或者相同单位使用单个轴(By Quantity)。
Time Mark:启用/禁用与Time工具栏中所选时刻同步的垂直虚线。
Annotations:在绘图中的任何XY点上添加自定义文本。
Settings:打开Windows Editors面板,查看其他控件。
现在,让我们修改并重新调节绘图:
右键单击交叉图视图,然后选择Settings。(或者在绘图的左上角,选择Configure Window图标。)
在Window Editors面板中,选择Axes选项卡,然后在Axis下方,对两个属性进行多选。
在Values下方,将Limits选项更改为User Defined。
为两个独立的轴设置Min、Max和Step的值,如下图所示。
SAOR(1):Δx= 0.220 m;Δy= 0.155 m
SAOR(2):Δx= 0.160 m;Δy= 0.150 m
注意: 您最终在项目中得到的值可能与本教程中显示的值略有不同。
测量了这些值之后,就可以在Rocky之外使用电子表格或计算器进行简单的计算:
SAOR(1):Δx= 0.220 m;Δy= 0.155 m
SAOR=atan(0.155/0.220) ~ 35.2°
SAOR(2):Δx= 0.160 m;Δy= 0.150 m
SAOR=atan(0.150/0.160) ~ 43.1°
虽然这些值是使用交叉图的坐标轴刻度测量得到的,但也可以使用鼠标进行测量。为此,按住Shift键,然后单击该绘图以显示光标的值。
您还可以使用Python脚本自动对结果进行后处理。
重要: 提供的脚本可用于颗粒数比本教程中简化的颗粒数更高的情况。因此,教程结果可能会有很大差异。
在这种方法中,静态休止角(SAOR)将使用以下步骤进行计算:
在给定的输出中,平行六面体切片被分成N个垂直单元,并放置在颗粒堆的中心(如图所示)。
在每个单元中,收集最大颗粒高度。
然后,平行六面体切片围绕垂直轴(Y方向)旋转10度,再次收集每个单元的最大高度。这个步骤重复36次。
使用收集到的每个单元最大高度的平均值,创建回归线并计算静态休止角。
在Rocky中,您可以通过以下两种方式自动执行频繁的任务:
在Rocky中,您可以录制您在用户界面中采取的具体步骤的脚本。
在Rocky之外,您可以利用基于PrePost Scripting的Python编程语言编写脚本。
虽然它们是以不同的方式生成的,但这两种方法都可以在PrePost Script面板中播放(执行)。
在本教程中,我们将重点使用之前创建的脚本。
首先,从Tools菜单中选择PrePost Script,以显示该面板。
(1)Scripts shared across projects:列出了可用于任何Rocky项目的脚本。
(2)Project scripts:列出了仅可用于此项目的脚本。
(3)列出了为选定选项卡保存在默认文件夹中的所有可用脚本。
(4)Record Script:通过录制您在用户界面中手动执行的命令来创建脚本。
(5)Playback PrePost Script:执行选定的脚本。
(6)Open PrePost Scripts Directory:根据选定的选项卡,打开保存脚本的默认文件夹。
(7)Reload PrePost Scripts from the Filesystem:根据选定选项卡的默认文件夹刷新可用的脚本列表。
(8)Help:显示了一些PrePost Script帮助内容。
提示: 用户手册中提供了关于PrePost Script面板的更多内容。(从Help菜单中,指向Manuals,然后单击User Manual。)
PrePost Script面板的Scripts shared across projects选项卡将显示您保存在Rocky默认文件夹中的所有脚本:%HOMEPATH%DocumentsRockyScripts。
现在,让我们将提供的脚本添加到这个面板并运行它:
确保选择了Scripts shared across projects选项卡。
单击Open Scripts Directory按钮。这将跳转到上面列出的脚本文件夹。
从您之前下载的dem_tut02_files文件夹中,找到script文件夹,然后将提供的脚本script_calibration_SAOR.py复制并粘贴到您刚刚打开的文件夹中。
注意: 在本Rocky教程中提供的Static Angle of Repose脚本只是一个示例。要查看有关Calibration Suite和SAOR脚本的所有必要信息,请从Ansys Rocky软件点击Help,指向Ready-to-use Scripts并点击Scripts Manual。
新脚本将出现在PrePost Scripts面板的Scripts shared across projects选项卡中(如图所示)。
选择新脚本后,单击Playback Script按钮(如图所示)。
脚本完成计算后,将显示得到的绘图:
虚线回归线用于计算颗粒堆的SAOR。
黑点表示每个垂直单元最大高度的平均值。
深红色区域表示每个垂直单元的最大高度的最小值。
浅红色区域表示每个垂直单元的最大高度的最大值。
注意: 该脚本可用于颗粒数比本教程中简化的颗粒数更高的情况。因此,您的教程结果可能会有很大差异。
此外,系统还会在Rocky项目所在的位置创建一个Results文件夹。
该文件夹包含以下文件:
Experiment_saor.png:脚本的输出图像。
experiment_data_points.csv:包含用于拟合直线的点的文件。
angles.json:包含计算角度的文本文件。
提供的脚本基于Rocky校准套件的Calibration 1: Static Angle of Repose测试。
有关此校准测试或其他可用校准测试的更多信息,请参见Rocky校准套件页面。
如前所示,SAOR由两个线性回归的结果计算得出,一个从颗粒堆的底部开始,另一个从颗粒堆的顶部开始。
最初都是用最少的点数来执行这两种线性回归。然后,更多的点被迭代添加到回归中,直到满足特定条件。这些信息在Calibration 1: Static Angle of Repose文件中进行了说明。
颗粒数越多,结果就越好,From Top计算的SAOR与From Bottom计算的SAOR越接近。
提示: 较小的Particle Size或较大的Cylinder会增加颗粒数量。
对于额外的颗粒校准测试,请考虑使用以下资源,这两种资源均可在客户门户上获得。
Rocky校准套件包含:
八个代表常见测试台测试的预构建Rocky项目
使用前处理脚本简化的项目设置
自动后处理报告
Material Wizard可作为您在校准过程中节省时间的起点。如欲了解更多详情,请访问材料向导页面。
您可以更改脚本中的一些参数,以获得更好的休止角计算分辨率。
注意: 可下载的Static Angle of Repose脚本以及在Rocky教程中用于修改脚本的工作流程只是示例。关于Rocky Calibration Suite及其平台的所有信息,包括SAOR脚本,均可在Scripts Manual中找到。在Ansys Rocky软件中点击Help,指向Ready-to-use Scripts,然后点击Scripts Manual。
主要参数包括:
N_DIVISIONS_FACTOR(第31行):
控制由N_DIVISIONS_FACTOR Particle Size定义的单元尺寸。因此,该因子越高,单元尺寸越大。
默认值为1.5。
N_SAMPLES(第33行):
对于每个SAOR计算,这将定义平行六面体旋转的次数并收集最大高度。
默认值为36,其在每次收集过程中将平行六面体旋转10度。
增加该数字(因此减少旋转的角度)会给您更多的点来求平均值。
LIN_REG_INI(第35行):
用于线性回归的初始点数。
默认值为3。
要修改脚本,请执行以下操作:
从PrePost Script面板中,在Scripts shared across projects选项卡上,单击Open PrePost Scripts Directory按钮。
从目录对话框中,右键单击要编辑的脚本文件,然后用您首选的Python编辑器打开它。(比如Visual Studio Code。)
根据需要进行修改,然后将文件另存为.py扩展名。
重要: 为了让Rocky识别它,脚本文件名必须以script_开头。
有关Rocky Calibration Suite的更多信息,我们建议您搜索Rocky Scripts Manual。
要访问它,请从Rocky Help菜单指向Ready-to-use Scripts,然后点击PrePost Scripting Manual。
通过Rocky Scripts Manual,您可以找到关于Coating Visibility Wizard、Material Wizard、General Scripts以及本教程重点Calibration Suite的信息。
有关Rocky脚本编写的更多信息,我们建议您搜索Rocky PrePost Scripting Manual。
要访问它,从Rocky Help菜单,指向Manuals,然后单击PrePost Scripting Manual。
要查看可用于脚本编写的类别和方法列表,请浏览Class Reference部分。
提示: Rocky软件中提供了额外的脚本编写类别和方法。要访问这些,从Rocky Tools菜单中,启用Python Shell面板。
这样就完成了本教程的第二部分。
如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。
要访问这些选项,从主Toolbar中单击Help,指向Manuals,然后单击User Manual。
本教程的目的是研究在使用不同的颗粒-颗粒相互作用的静态和动态摩擦值时静态休止角(SAOR)的行为方式。
注意: 本教程可以从第一部分或第二部分继续。
您将了解如何:
保存不带仿真结果的项目设置参数
使用输入变量来参数化材料相互作用属性
安排脚本在仿真前后自动运行
使用Rocky Scheduler按顺序运行多个Rocky项目
您将使用这些功能:
输入变量
PrePost脚本
材料相互作用
Rocky Scheduler程序
如果您完成了本教程的第一部分或第二部分,请确保其中一个Rocky项目是打开的。(第三部分可以从这两个部分中的任何一个结束的地方继续。)
如果您没有完成第一部分和第二部分,请确保您已经下载并解压缩了dem_tut02_files文件夹,然后打开tutorial_02_pre-processing.rocky项目。
重要: 要使用提供的Rocky项目文件,您必须安装Rocky 2025 R1或更高版本。如果您有Rocky的较早期版本,请将Rocky升级到最新版本或从头开始完成第一部分的设置部分。
注意: 对于本特定教程,您不需要处理仿真。
在本教程中,我们希望改变颗粒-颗粒相互作用的静态和动态摩擦系数,并看看它如何改变颗粒的行为。
为了做到这一点而不丢失先前仿真的结果,我们将创建多个类似的项目,并在新项目中仅更改两个摩擦值。
为了避免从头开始重新创建这些新项目,我们将创建当前项目设置参数的副本,具体来说是不复制其结果。
从File菜单中,单击Save project as...。
从Save Options对话框中,单击Save as a New Project WITHOUT copying Simulation Results,然后单击OK。
我们希望将项目保存在另一个文件夹中,这样当前的Results文件夹就不会被新创建的项目结果重写。
我们还希望以特定的方式命名这个新文件,以便以后更容易跟踪多个副本。
要完成这些任务,请执行以下操作:
从Save File窗口中,在与原始项目相同的位置创建一个名为friction_03的新文件夹(如图所示)。
双击新文件夹将其打开。
输入tutorial_02_friction_03.rocky作为File name,然后单击Save。
对于本教程,将为Static Friction和Dynamic Friction设置一个Input Variable。
对于Input variables,您可以在参数文本字段中输入单独的变量名称。
这样,您可以创建参数之间的动态关系,然后快速更改和更新占位符值。
首先,从Tools菜单中选择Expressions/Variables,以启用该面板。
从Expressions/Variables面板中,确保选择了Input选项卡,然后点击Add按钮。
在Variable Name对话框中,将Variable Name设置为ff(如图所示),然后单击OK。
从添加的条目行中,双击Value,然后将其设置为0.3(如图所示)。
要将变量分配给相互作用属性,请执行以下操作:
从Data面板点击Materials。从Data Editors面板选择Materials Interactions选项卡,就会显示可编辑的参数。
从左侧下拉列表中,选择Default Particles,并从右侧下拉列表中,选择Default Particles:
在Static Friction文本框中输入ff。
当您在该字段外面单击时,Static Friction字段将显示您为ff变量设置的值(如图所示)。
对Dynamic Friction重复上述步骤。
每当您使用输入变量来定义参数时,Expressions/Variables面板会列出哪些变量适用于哪些参数(如图所示)。
接下来,我们希望自动运行我们在第二部分中使用的脚本,并在仿真处理完成后立即保存输出文件。
为此,我们必须将其保存在Project scripts选项卡中,然后将其定义为Post Script:
保存到Project scripts选项卡的脚本能够以两种方式自动运行:
在仿真开始处理之前(Pre Script)
在仿真完成处理之后(Post Script)
这是通过Solver实体下方Data面板上的PrePost Script子实体完成的(如图所示)。
通过这种方式,您可以进一步自动化您的设置和后处理任务,尤其是在运行许多相似类型的案例时。
现在,我们将该脚本设置为在仿真完成后立即自动运行。
确保PrePost Scripts面板仍然是显示的。(从Tools菜单中,选择PrePost Scripts。)
从PrePost Scripts面板中,选择Project scripts选项卡,然后单击Open Scripts Directory按钮(如图所示)。
从您之前下载的dem_tut02_files文件夹中,找到script文件夹,然后将提供的脚本script_calibration_SAOR.py复制并粘贴到您刚刚打开的目录中。
新脚本将出现在PrePost Scripts面板的Project scripts选项卡中(如图所示)。
现在,我们将该脚本设置为在仿真完成后立即自动运行。
从Data面板中展开Solver实体,然后选择PrePost Scripts。
从Data Editors面板的Run after simulation列表中,启用Calibration 1: SAOR复选框(如图所示)。
保存项目。
对于本教程,除了我们在第二部分中分析的原始案例之外,我们还将运行三个案例。
我们已经定义了第一个副本(tutorial_02_friction_03.rocky),所以现在让我们使用它来创建另外两个项目副本。
在保存原始项目的同一个根文件夹中,创建另一个名为friction_05的新文件夹。
在Rocky中,从File菜单中,单击Save project as...。
从Save File对话框中,找到并打开您刚刚创建的新文件夹,输入tutorial_02_friction_05.rocky作为File name,然后单击Save。
在这个新的副本中,将Input Variable ff更改为0.5(如图所示)。
从File菜单中,单击Save project。
重复此过程,以创建另一个名为Friction_09的文件夹,其中包含另一个名为tutorial_02_friction_09.rocky的项目副本,两个摩擦值(ff)都更改为0.9。(记得保存您的更改。)
现在,您应该保存了以下三个额外的案例:
tutorial_02_friction_03.rocky:两个摩擦值都等于0.3
tutorial_02_friction_05.rocky:两个摩擦值都等于0.5
tutorial_02_friction_09.rocky:两个摩擦值都等于0.9
创建完这些案例之后,您就可以关闭Rocky了。
我们现在将评估休止角在这些案例中是如何表现的。
对于我们在第二部分中分析的原始案例,我们已经有了休止角结果。
如果您没有完成第二部分,您可以在之前解压缩的dem_tut02_files内部的original_case_results文件夹中查看结果。
我们将通过运行Rocky Scheduler来获得这三个新案例的结果。
打开Rocky Scheduler 2025 R1。
Rocky Scheduler是一个独立的程序,允许在特定硬件配置(Resources)上按顺序(一个接一个)处理多个仿真项目(Jobs),而无需使用Rocky用户界面(UI)。
通过这种方式,可以自动运行几个案例,而无需您的持续参与。
每个Job至少需要分配一个Resource。
使用的每个Resource都将需要一个Rocky求解器实例来处理。
因此,一次能够处理的作业数量受Rocky许可证的限制。
大多数用户拥有的是single-instance Rocky许可证,因此一次只能处理一个作业。
只有拥有unnumbered Rocky许可证的用户才能同时处理多个作业。
对于本教程,我们将只添加一个CPU资源,并按顺序运行作业。
要设置Scheduler,从Resources部分,单击Add Resource(绿色加号)按钮。
会出现Add Resource对话框,其中的Resource Type列表会显示计算机上所有所提供的资源(如图所示)。
在Add Resource对话框中将Resource Type设置为CPU,输入Caption和Number of Processors(如图所示),然后点击OK。
您定义的资源现在出现在资源列表中。
接下来,我们将把三个项目添加到作业队列中:
在Jobs部分,单击Add Job(绿色加号)按钮(如图所示)。
从Choose Rocky project files对话框中,选择我们之前创建的tutorial_02_friction_03.rocky项目,然后单击Open。
对tutorial_02_friction_05.rocky和tutorial_02_friction_09.rocky文件重复此过程。三个新的作业出现在队列中(如图所示)。
要将同一个Resource分配给所有三个作业,请执行以下操作:
多选所有三个作业。(按住Shift或Ctrl键,然后单击每个作业将其选中)。
按住Shift键时,双击三个Click to assign resources栏中的最后一个选中的(如图所示)。
从Assign Resources对话框中,启用Main Resource复选框,然后单击OK(如图所示)。
所有三个作业现在应该列出了相同的Resource(如图所示)。
现在,让我们开始仿真:
单击Start Scheduler按钮(如图所示)。
列表中的第一个作业开始处理了。您可以查看Progress栏,了解处理状态和完成百分比。
RUNNING表示当前正在处理该文件(如图所示)。
QUEUED表示当前未处理该文件,但一旦资源可用就会处理。
PAUSED表示已部分运行该文件,但当前未处理。
FINISHED表示处理已完成。
ERROR表示处理因错误而无法继续。
提示: 要按进度类型过滤作业列表,请从Show列表中单击您想要的按钮(如图所示)。若要关闭过滤器,请再次单击同一按钮。
当所有三个作业完成处理后,所有三个进度栏都显示FINISHED 100%,您将看到Results文件夹是在每个已创建的项目文件夹中创建的。
每个文件夹中包含两个文件:angles.json和experiment_data_points.csv。
angles.json文件如下所示。
注意: 使用Scheduler时,不会生成图形。如果您想要生成图形,您必须在Rocky中打开每个项目并再次运行脚本。
可以使用四个.json文件中提供的值在Rocky之外构建图形(如图所示)。
注意:
为了简单起见,本教程减少了颗粒数。
因此,您的实际项目中的角度值可能会与本教程中显示的有很大不同。
这是因为休止角计算对系统分辨率(颗粒尺寸和圆筒尺寸之间的比例)非常敏感。
为了获得更准确的结果,您应该增加颗粒数(减少颗粒尺寸或增加圆筒尺寸)。
这样就完成了本教程的第三部分。
如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。
要访问该手册,从主Toolbar中单击Help,指向Manuals,然后单击User Manual。




