第 2 章 教程-静态休止角测试

  • (第一部分)使用圆筒和托盘设置并运行SAOR测试案例。

  • (第二部分)使用两种方法计算生成的SAOR:手动使用Cross Plot和自动使用Python脚本。

  • (第三部分)通过在Rocky Scheduler中运行多个案例,研究SAOR在不同的颗粒到颗粒静态和动态摩擦值下的行为方式。

2.1. 第一部分:项目设置与处理

2.1.1. 目标

本教程的目的是使用不同的材料和相互作用参数运行静态休止角(SAOR)测试案例,以验证未来仿真的DEM系数。

您将了解如何:

  • 设置附着力模型

  • 更改材料值

  • 通过Volumetric Inlet注入颗粒

您将使用这些功能:

  • MaterialsMaterials Interactions

  • Volumetric Inlet


重要:  尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。


2.1.2. 前提条件

  • 本教程假设您已经熟悉Rocky用户界面(UI)和项目工作流程。

  • 如果不是这种情况,请在开始本教程之前,参考教程01-传送槽了解关于Rocky用法的基本介绍。

  • 本教程使用SI Units作为默认单位。

2.1.3. 几何结构

 

本教程中的几何结构由以下部分组成:

  • (1)容器圆筒

  • (2)上层托盘

在教程目录中,可以找到每个.stl文件。

2.1.4. 项目创建

要开始本教程,让我们创建一个新项目:

  • 此处下载dem_tut02_files.zip文件。

  • dem_tut02_files.zip解压缩到您的工作目录。

  • 打开Rocky 2025 R1。(在程序菜单中查找Rocky2025 R1或使用桌面快捷方式)。

  • 从Rocky程序中,单击New Project按钮,或者从File菜单中,单击New Project(Ctrl+N)。

     

2.1.5. 项目详细信息

Study实体涵盖了仿真设置的第一步。目的是为项目定义任何有用的信息。

 

  1. Data面板中,单击Study

  2. Data Editors面板中,输入项目信息。

     

2.1.6. 物理定义

对于Physics步骤,我们将添加滚动阻力模型和附着力,并降低软化因子以减少仿真时间。

 

  1. Data面板中,选择Physics。

  2. Data Editors面板中,选择Momentum子选项卡,然后定义以下所有内容:

     


    重要:  降低软化因子可能会导致颗粒之间以及颗粒与边界之间过度重叠。


2.1.7. 几何结构导入

对于Geometries步骤,我们将导入.stl格式的几何结构文件。

 

  1. Data面板中,右键单击Geometries,然后单击Import Wall

     

  2. Select file to import对话框中,导航到您之前下载的dem_tut02_files文件夹,找到geometry文件夹,然后在按下CtrlShift键的同时,多选以下所有文件,然后单击Open

    • Container_Cylinder.stl

    • Upper_Tray.stl

  3. (如果您尚未保存项目,请现在保存。)

  4. Import File Info对话框中,选择mm作为Import Unit,确保Convert Y and Z axes选项被清除(未选中),然后单击OK(如图所示)。

     

2.1.8. 查看几何结构-更改投影

导入几何结构后,您可以在3D View窗口中查看结果:

  1. Geometries实体从Data面板拖放到工作区。将出现一个新的3D View窗口,显示了您导入的几何结构。

     

2.1.9. 边界运动

在本教程中,当圆柱体容器装满颗粒后,它会慢慢向上移动并远离托盘,这使得颗粒散开并成堆。

 

 

2.1.10. 运动坐标系-平移

要计算边界运动,需要选择Translation类型的运动坐标系。

选择平移后,以下选项将可用:

  • Fixed Velocity:将在局部坐标中定义恒定速度。

  • Initial and Final Velocity:将在局部坐标中定义Start TimeStop Time的速度,并计算Acceleration

  • Initial Velocity and Acceleration:确定了Stop Time后,将在局部坐标中定义Start Time的速度和Acceleration,并计算Final Velocity的速度。


注意:  以下过程包括如何创建运动坐标系的逐步说明。


2.1.11. 运动坐标系

要添加一个新的运动坐标系,请执行以下操作:

 

  1. Data面板中,右键单击Motion Frames,然后选择Create Motion Frame

     

  2. 从Data面板中,在Motion Frames下方选择新添加的Frame <01>条目。

  3. Data Editors面板中,在Frame选项卡上定义参数,如下一节所示。

2.1.12. 运动坐标系–编辑技巧

此时,默认情况下,您可能看不到整个Data Editors面板(如图所示)。

 


提示:  要显示面板的更多内容,您可以通过标题拖放面板,双击面板或单击蓝色按钮使其浮动。这有利于实现字段的可视化。


 

2.1.13. 运动坐标系–容器圆筒

  1. 定义NameContainer Cylinder Motion

  2. 要为此坐标系创建新的运动,请执行以下操作:

    • 单击绿色加号按钮(Add motion)。

    • Type设置为Translation运动(默认)。

    • 为了在圆筒上升之前使其内部的颗粒沉降下来,我们希望这个运动有轻微的延迟。因此,定义Start Time、Stop TimeVelocity

     

2.1.14. 运动坐标系

当创建完Motion Frame后,可以将其分配给Cylinder几何结构:

  1. Data面板中,在Geometries下方选择Container_Cylinder

  2. Data Editors面板中,在Wall选项卡上,从Motion Frame下拉列表中选择Container Cylinder Motion(如图所示)。

     

2.1.15. 运动预览

对于本教程,由于几何结构有一个分配了位移的运动,可以使用Motion Preview窗口预览该运动。

  1. Data面板中,选择Motion Frames

  2. Data Editors面板中,单击Preview(如图所示)。将出现一个显示了几何结构和已创建坐标系的新窗口。

     

     


提示:  您可以使用Default axes size参数定义轴尺寸,以获得更好的可视化。


Time工具栏可用于播放预览。黄色的滑块表示尚未处理仿真。

 

2.1.16. 材料定义

对于Materials步骤,将只使用两种材料:一种用于所有几何结构部分(Default Boundary),另一种用于颗粒(Default Particle)。

按如下方式修改这两种材料:

  1. Data面板中,在Materials下方选择Default Boundary,然后从Data Editors面板中,更改以下内容:DensityYoung's Modulus

     

  2. Data面板中,在Materials下方选择Default Particles,然后从Data Editors面板中,更改以下内容:Bulk Density。

     

2.1.17. 材料之间的相互作用

现在让我们设置材料的相互作用属性:

 

  1. 从Data面板中选择Materials InteractionsData Editors面板会显示可编辑的参数。

     

  2. 从左侧下拉列表中,选择Default Particles,并从右侧下拉列表中,选择其中的一对:Default BoundaryDefault Particles

  3. 根据如下图所示的值调整每对组合的参数:

     

     

2.1.18. 颗粒组定义

对于Particles步骤,我们将创建一个新的球形颗粒组,并增加一些滚动阻力。

 

  1. Data面板中,右键单击Particles,然后选择Create Particle。在Particles下创建一个新的颗粒组。

     

  2. 选择新创建的Particle <01>条目,然后在Data Editors面板中,按照以下步骤中的指定值修改参数。

  3. Size子选项卡中,定义Size(以m为单位)。

     

  4. Movement子选项卡中,定义Rolling Resistance

     

  5. 要可视化新颗粒,请单击View。将出现一个新的Particle Details窗口,显示了(透明)颗粒几何结构、其几何中心(黄点)和质心(蓝点)。

     


    注意:  当整个颗粒的密度均匀时,几何中心和质心重合(如图所示)。


2.1.19. 颗粒输入–体积入口

对于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定义周期注入停止时的仿真时间。

2.1.20. 入口和出口定义

对于本教程,我们将创建一个仅受Cylinder壁面约束的Volumetric Inlet。

 

  1. Data面板中,右键单击Inlets and Outlets,然后选择Create Volumetric Inlet。在Inlets and Outlets下创建一个新的Volumetric Inlet <01>条目。

     

  2. 选择新创建的Volumetric Inlet <01>条目,然后从Data Editors面板中,按照下图中的指定值修改参数:

    • Particles子选项卡中,单击Add按钮(绿色加号)创建一个条目行。

    • 从下拉列表中选择Particle <01>组名称,然后以kg为单位定义Mass(如图所示)。

    • Gap Scale Factor保留为1(默认值),以便颗粒尽可能紧密地一起注入。

       

  3. Region子选项卡中,定义Seed Coordinates

  4. Geometries框中,启用Container_Cylinder复选框。

  5. 启用Use Geometries to Compute复选框。

     

您可以在3D View窗口中显示您在上一步中配置的Seed Point

由于Seed Coordinates设置在圆柱体内部,我们首先必须启用其Transparency,才能看到Seed Point。

  1. 从工作区选择一个3D View窗口(或创建一个新窗口)。

  2. 从Data面板选择Container_Cylinder几何结构。

     

  3. Data Editors面板中,选择Coloring选项卡,然后启用Transparency复选框。

     

  4. 从Data面板隐藏Particles并重新选择Volumetric Inlet <01>

     

现在,您可以在3D View窗口中可视化Seed Point(蓝点)和几何结构边界(白色方框)。

 

2.1.21. 求解器定义

现在让我们设置Solver参数:

  1. Data面板点击Solver,然后从Data Editors面板确保选择Solver选项卡。

  2. Time子选项卡中,定义Simulation Duration

     

  3. General子选项卡中,为Simulation Target选择CPU(或GPU/Multi GPU),然后设置Number of Processors(或Target GPU(s))。对于本教程,由于颗粒数很少,CPU的仿真速度会更快。

  4. 单击Start按钮开始处理。

     

单击Start后,将会显示Simulation Summary窗口。

该窗口将自行消失,然后开始处理。

 


提示:  您也可以从Solver | Summary选项卡中查看此信息。


2.1.22. 仿真

要在处理过程中可视化仿真,请执行以下操作:

  1. Window菜单中,单击New 3D View

  2. 单击Refresh按钮(或使用Auto Refresh复选框)。

仿真速度取决于各种因素,例如:

  • 颗粒形状和用于定义形状的顶点数量

  • 任何时候仿真域中的接触数量

  • 用于定义几何结构的网格单元数量

  • 最小颗粒尺寸和材料硬度

  • 文件输出的频率

 

2.1.23. 帮助-用户手册

这样就完成了本教程的第一部分。

如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。

要访问该手册,从主Toolbar中单击Help,指向Manuals,然后单击User Manual

 

2.1.24. 结论

Rocky可用于设置和处理静态休止角(SAOR)测试仿真。


注意:  尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。


在本教程中,您可以:

  • 设置恒定的附着力模型

  • 更改材料和相互作用值

  • 定义体积入口输入

  • 处理仿真

下一步是什么?

  • 现在,您已完成该仿真的设置与处理,随时可进入第二部分,对该项目进行后期处理。

2.2. 第二部分:使用脚本进行后处理

2.2.1. 目标

本教程的目的是使用两种方法计算静态休止角(SAOR):手动使用Cross Plot和自动使用Python脚本。

  • 我们将从第一部分结束的地方继续。

您将了解如何:

  • 使用交叉图测量SAOR

  • 打开PrePost Script面板

  • 导入并运行已保存的Python脚本

  • 解读已执行的脚本的结果

  • 修改Python脚本

您将使用这些功能:

  • Cross Plot窗口

  • PrePost Script面板

  • PrePost Scripting手册


重要:  尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。


2.2.2. 打开项目

  1. 如果您完成了本教程的第一部分,请确保Rocky项目是打开的。(第二部分将从第一部分结束的地方继续。)

  2. 如果您没有完成第一部分,请执行以下所有操作:

    1. 此处下载dem_tut02_files.zip文件。

    2. dem_tut02_files.zip解压缩至工作目录。

    3. 打开Rocky 2025 R1。(在程序菜单中查找Rocky2025 R1或使用桌面快捷方式)。


      重要:  要使用提供的Rocky项目文件,您必须安装Rocky 2025 R1或更高版本。如果您有Rocky的较早期版本,请将Rocky升级到最新版本或从头开始完成第一部分。


    4. 从Rocky程序中,单击Open Project按钮,找到dem_tut02_files文件夹,然后从tutorial_02_pre-processing文件夹中打开tutorial_02_pre-processing.rocky文件。

    5. 处理仿真。(从Simulation工具栏点击Start按钮。)

2.2.3. 后处理:手动方法

现在项目已经完成处理了,我们可以开始进行分析。我们先从手动的方法开始。

在这种方法中,静态休止角(绿线)将通过以下步骤进行手动计算:

  • 生成沿X和Y方向的颗粒分布图

  • 使用图表比例尺测量长度和高度

  • 使用三角关系计算角度

 

2.2.4. 交叉图

Cross Plot用于创建散点图,允许您比较给定OutputParticles/Geometry的两个属性,一个在X轴上,另一个在Y轴上。

在本教程中,我们将使用Cross Plot来查看颗粒堆在XY平面上的投影。为此,将根据Particle X-Coordinate绘制Particle Y-Coordinate

要创建交叉图,请执行以下所有操作:

  1. Window菜单中,单击New Cross Plot,或使用快捷键Ctrl+R

  2. Data面板中,选择Particles,然后从Data Editors面板中,选择Properties选项卡。

  3. 点击并将Coordinate: Y拖放到绘图窗口上,然后松开。

  4. 在出现的Select Source Curves窗口中,从Domain下拉列表中选择Coordinate: X,然后点击OK

     

与(Multi) Time Plot显示所有Particles的每个输出的单个值不同,Cross Plot显示所有Particles的值,但仅显示单个输出。

您可以使用Time工具栏选择要开展分析的具体时刻。

在Time中选择4.6 s来测量静态休止角。

结果如下所示。

 

2.2.5. 绘图设置

Rocky绘图可以通过右键单击绘图网格上的任意位置进行编辑。

Cross Plot

 

Multi Time plot

 

  • ExportCopy:复制绘图或数据;将绘图另存为.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面板,查看其他控件。

2.2.6. 轴设置

现在,让我们修改并重新调节绘图:

  1. 右键单击交叉图视图,然后选择Settings。(或者在绘图的左上角,选择Configure Window图标。)

  2. Window Editors面板中,选择Axes选项卡,然后在Axis下方,对两个属性进行多选。

  3. Values下方,将Limits选项更改为User Defined

     

  4. 为两个独立的轴设置MinMaxStep的值,如下图所示。

     

     

2.2.7. 测量结果–手动方法

 

  • SAOR(1):Δx= 0.220 m;Δy= 0.155 m

  • SAOR(2):Δx= 0.160 m;Δy= 0.150 m


注意:  您最终在项目中得到的值可能与本教程中显示的值略有不同。


2.2.8. 计算–手动方法

测量了这些值之后,就可以在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键,然后单击该绘图以显示光标的值。

2.2.9. 后处理:自动方法

您还可以使用Python脚本自动对结果进行后处理。


重要:  提供的脚本可用于颗粒数比本教程中简化的颗粒数更高的情况。因此,教程结果可能会有很大差异。


在这种方法中,静态休止角(SAOR)将使用以下步骤进行计算:

  • 在给定的输出中,平行六面体切片被分成N个垂直单元,并放置在颗粒堆的中心(如图所示)。

  • 在每个单元中,收集最大颗粒高度。

  • 然后,平行六面体切片围绕垂直轴(Y方向)旋转10度,再次收集每个单元的最大高度。这个步骤重复36次。

  • 使用收集到的每个单元最大高度的平均值,创建回归线并计算静态休止角。

  

2.2.10. PrePost Script面板

在Rocky中,您可以通过以下两种方式自动执行频繁的任务:

  • 在Rocky中,您可以录制您在用户界面中采取的具体步骤的脚本。

  • 在Rocky之外,您可以利用基于PrePost Scripting的Python编程语言编写脚本。

虽然它们是以不同的方式生成的,但这两种方法都可以在PrePost Script面板中播放(执行)。

在本教程中,我们将重点使用之前创建的脚本。

  1. 首先,从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

现在,让我们将提供的脚本添加到这个面板并运行它:

  1. 确保选择了Scripts shared across projects选项卡。

  2. 单击Open Scripts Directory按钮。这将跳转到上面列出的脚本文件夹。

     

  3. 从您之前下载的dem_tut02_files文件夹中,找到script文件夹,然后将提供的脚本script_calibration_SAOR.py复制并粘贴到您刚刚打开的文件夹中。


    注意:  在本Rocky教程中提供的Static Angle of Repose脚本只是一个示例。要查看有关Calibration SuiteSAOR脚本的所有必要信息,请从Ansys Rocky软件点击Help,指向Ready-to-use Scripts并点击Scripts Manual


  4. 新脚本将出现在PrePost Scripts面板的Scripts shared across projects选项卡中(如图所示)。

  5. 选择新脚本后,单击Playback Script按钮(如图所示)。

     

2.2.11. 脚本结果

脚本完成计算后,将显示得到的绘图:

 

虚线回归线用于计算颗粒堆的SAOR

黑点表示每个垂直单元最大高度的平均值。

深红色区域表示每个垂直单元的最大高度的最小值。

浅红色区域表示每个垂直单元的最大高度的最大值。


注意:  该脚本可用于颗粒数比本教程中简化的颗粒数更高的情况。因此,您的教程结果可能会有很大差异。


2.2.12. 脚本结果

此外,系统还会在Rocky项目所在的位置创建一个Results文件夹。

 

该文件夹包含以下文件:

  • Experiment_saor.png:脚本的输出图像。

  • experiment_data_points.csv:包含用于拟合直线的点的文件。

  • angles.json:包含计算角度的文本文件。

 

2.2.13. 脚本结果

提供的脚本基于Rocky校准套件的Calibration 1: Static Angle of Repose测试。

  • 有关此校准测试或其他可用校准测试的更多信息,请参见Rocky校准套件页面。

如前所示,SAOR由两个线性回归的结果计算得出,一个从颗粒堆的底部开始,另一个从颗粒堆的顶部开始。

最初都是用最少的点数来执行这两种线性回归。然后,更多的点被迭代添加到回归中,直到满足特定条件。这些信息在Calibration 1: Static Angle of Repose文件中进行了说明。

颗粒数越多,结果就越好,From Top计算的SAOR与From Bottom计算的SAOR越接近。


提示:  较小的Particle Size或较大的Cylinder会增加颗粒数量。


2.2.14. 校准套件和材料向导

对于额外的颗粒校准测试,请考虑使用以下资源,这两种资源均可在客户门户上获得。

Rocky校准套件包含:

  • 八个代表常见测试台测试的预构建Rocky项目

  • 使用前处理脚本简化的项目设置

  • 自动后处理报告

 

Material Wizard可作为您在校准过程中节省时间的起点。如欲了解更多详情,请访问材料向导页面。

2.2.15. 修改脚本

您可以更改脚本中的一些参数,以获得更好的休止角计算分辨率。


注意:  可下载的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。

要修改脚本,请执行以下操作:

  1. PrePost Script面板中,在Scripts shared across projects选项卡上,单击Open PrePost Scripts Directory按钮。

  2. 从目录对话框中,右键单击要编辑的脚本文件,然后用您首选的Python编辑器打开它。(比如Visual Studio Code。)

     

  3. 根据需要进行修改,然后将文件另存为.py扩展名。


    重要:  为了让Rocky识别它,脚本文件名必须以script_开头。


2.2.16. 帮助– SCRIPTS手册

有关Rocky Calibration Suite的更多信息,我们建议您搜索Rocky Scripts Manual

要访问它,请从Rocky Help菜单指向Ready-to-use Scripts,然后点击PrePost Scripting Manual

 

通过Rocky Scripts Manual,您可以找到关于Coating Visibility WizardMaterial WizardGeneral Scripts以及本教程重点Calibration Suite的信息。

2.2.17. 帮助–PrePost Scripting手册

有关Rocky脚本编写的更多信息,我们建议您搜索Rocky PrePost Scripting Manual

要访问它,从Rocky Help菜单,指向Manuals,然后单击PrePost Scripting Manual

 

要查看可用于脚本编写的类别和方法列表,请浏览Class Reference部分。


提示:  Rocky软件中提供了额外的脚本编写类别和方法。要访问这些,从Rocky Tools菜单中,启用Python Shell面板。


2.2.18. 帮助-用户手册

这样就完成了本教程的第二部分。

如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。

要访问这些选项,从主Toolbar中单击Help,指向Manuals,然后单击User Manual

 

2.2.19. 结论

Rocky可用于验证颗粒的休止轮廓,以便计算静态休止角。


注意:  尽管本教程只涉及运行一个SAOR测试,但为了完全校准颗粒模型,必须进行其他仿真。


在本教程中,您可以:

  • 使用交叉图手动测量角度

  • 使用PrePost Script面板运行能够自动测量角度的Python脚本

  • 找到并使用PrePost Scripting Manual来修改Python脚本

下一步是什么?

  • 现在您已经了解了如何设置脚本的基本知识,您可以继续学习第三部分并了解PrePost脚本和Rocky Scheduler。

2.3. 第三部分:批处理

2.3.1. 目标

本教程的目的是研究在使用不同的颗粒-颗粒相互作用的静态和动态摩擦值时静态休止角(SAOR)的行为方式。


注意:  本教程可以从第一部分或第二部分继续。


您将了解如何:

  • 保存不带仿真结果的项目设置参数

  • 使用输入变量来参数化材料相互作用属性

  • 安排脚本在仿真前后自动运行

  • 使用Rocky Scheduler按顺序运行多个Rocky项目

您将使用这些功能:

  • 输入变量

  • PrePost脚本

  • 材料相互作用

  • Rocky Scheduler程序

2.3.2. 项目

  1. 如果您完成了本教程的第一部分或第二部分,请确保其中一个Rocky项目是打开的。(第三部分可以从这两个部分中的任何一个结束的地方继续。)

  2. 如果您没有完成第一部分和第二部分,请确保您已经下载并解压缩了dem_tut02_files文件夹,然后打开tutorial_02_pre-processing.rocky项目。


    重要:  要使用提供的Rocky项目文件,您必须安装Rocky 2025 R1或更高版本。如果您有Rocky的较早期版本,请将Rocky升级到最新版本或从头开始完成第一部分的设置部分。



注意:  对于本特定教程,您不需要处理仿真。


2.3.3. 保存不包含结果的副本

在本教程中,我们希望改变颗粒-颗粒相互作用的静态和动态摩擦系数,并看看它如何改变颗粒的行为。

为了做到这一点而不丢失先前仿真的结果,我们将创建多个类似的项目,并在新项目中仅更改两个摩擦值。

为了避免从头开始重新创建这些新项目,我们将创建当前项目设置参数的副本,具体来说是不复制其结果。

  1. File菜单中,单击Save project as...

     

  2. Save Options对话框中,单击Save as a New Project WITHOUT copying Simulation Results,然后单击OK

     

我们希望将项目保存在另一个文件夹中,这样当前的Results文件夹就不会被新创建的项目结果重写。

我们还希望以特定的方式命名这个新文件,以便以后更容易跟踪多个副本。

要完成这些任务,请执行以下操作:

  1. Save File窗口中,在与原始项目相同的位置创建一个名为friction_03的新文件夹(如图所示)。

     

  2. 双击新文件夹将其打开。

  3. 输入tutorial_02_friction_03.rocky作为File name,然后单击Save

2.3.4. 输入变量

对于本教程,将为Static FrictionDynamic Friction设置一个Input Variable

对于Input variables,您可以在参数文本字段中输入单独的变量名称。

这样,您可以创建参数之间的动态关系,然后快速更改和更新占位符值。

  1. 首先,从Tools菜单中选择Expressions/Variables,以启用该面板。

     

  2. 从Expressions/Variables面板中,确保选择了Input选项卡,然后点击Add按钮。

     

  3. Variable Name对话框中,将Variable Name设置为ff(如图所示),然后单击OK

     

  4. 从添加的条目行中,双击Value,然后将其设置为0.3(如图所示)。

     

2.3.5. 材料之间的相互作用

要将变量分配给相互作用属性,请执行以下操作:

  1. Data面板点击Materials。从Data Editors面板选择Materials Interactions选项卡,就会显示可编辑的参数。

  2. 从左侧下拉列表中,选择Default Particles,并从右侧下拉列表中,选择Default Particles

  3. Static Friction文本框中输入ff

     

    当您在该字段外面单击时,Static Friction字段将显示您为ff变量设置的值(如图所示)。

     

  4. Dynamic Friction重复上述步骤。

     

每当您使用输入变量来定义参数时,Expressions/Variables面板会列出哪些变量适用于哪些参数(如图所示)。

 

2.3.6. 预定的PrePost脚本

接下来,我们希望自动运行我们在第二部分中使用的脚本,并在仿真处理完成后立即保存输出文件。

为此,我们必须将其保存在Project scripts选项卡中,然后将其定义为Post Script

  • 保存到Project scripts选项卡的脚本能够以两种方式自动运行:

    • 在仿真开始处理之前(Pre Script

    • 在仿真完成处理之后(Post Script

  • 这是通过Solver实体下方Data面板上的PrePost Script子实体完成的(如图所示)。

     

通过这种方式,您可以进一步自动化您的设置和后处理任务,尤其是在运行许多相似类型的案例时。

2.3.7. 项目脚本

现在,我们将该脚本设置为在仿真完成后立即自动运行。

  1. 确保PrePost Scripts面板仍然是显示的。(从Tools菜单中,选择PrePost Scripts。)

     

  2. PrePost Scripts面板中,选择Project scripts选项卡,然后单击Open Scripts Directory按钮(如图所示)。

     

  3. 从您之前下载的dem_tut02_files文件夹中,找到script文件夹,然后将提供的脚本script_calibration_SAOR.py复制并粘贴到您刚刚打开的目录中。

    新脚本将出现在PrePost Scripts面板的Project scripts选项卡中(如图所示)。

     

2.3.8. 后脚本

现在,我们将该脚本设置为在仿真完成后立即自动运行。

  1. 从Data面板中展开Solver实体,然后选择PrePost Scripts

  2. Data Editors面板的Run after simulation列表中,启用Calibration 1: SAOR复选框(如图所示)。

     

  3. 保存项目。

2.3.9. 保存不包含结果的副本

对于本教程,除了我们在第二部分中分析的原始案例之外,我们还将运行三个案例。

我们已经定义了第一个副本(tutorial_02_friction_03.rocky),所以现在让我们使用它来创建另外两个项目副本。

  1. 在保存原始项目的同一个根文件夹中,创建另一个名为friction_05的新文件夹。

  2. 在Rocky中,从File菜单中,单击Save project as...

  3. Save File对话框中,找到并打开您刚刚创建的新文件夹,输入tutorial_02_friction_05.rocky作为File name,然后单击Save

  4. 在这个新的副本中,将Input Variable ff更改为0.5(如图所示)。

     

  5. File菜单中,单击Save project

  6. 重复此过程,以创建另一个名为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

     

       

  7. 创建完这些案例之后,您就可以关闭Rocky了。

我们现在将评估休止角在这些案例中是如何表现的。

  • 对于我们在第二部分中分析的原始案例,我们已经有了休止角结果。

    • 如果您没有完成第二部分,您可以在之前解压缩的dem_tut02_files内部的original_case_results文件夹中查看结果。

  • 我们将通过运行Rocky Scheduler来获得这三个新案例的结果。

  1. 打开Rocky Scheduler 2025 R1。

2.3.10. Rocky Scheduler

Rocky Scheduler是一个独立的程序,允许在特定硬件配置(Resources)上按顺序(一个接一个)处理多个仿真项目(Jobs),而无需使用Rocky用户界面(UI)。

通过这种方式,可以自动运行几个案例,而无需您的持续参与。

每个Job至少需要分配一个Resource

使用的每个Resource都将需要一个Rocky求解器实例来处理。

因此,一次能够处理的作业数量受Rocky许可证的限制。

  • 大多数用户拥有的是single-instance Rocky许可证,因此一次只能处理一个作业。

  • 只有拥有unnumbered Rocky许可证的用户才能同时处理多个作业。

 

对于本教程,我们将只添加一个CPU资源,并按顺序运行作业。

  1. 要设置Scheduler,从Resources部分,单击Add Resource(绿色加号)按钮。

     

    • 会出现Add Resource对话框,其中的Resource Type列表会显示计算机上所有所提供的资源(如图所示)。

       

  2. Add Resource对话框中将Resource Type设置为CPU,输入CaptionNumber of Processors(如图所示),然后点击OK

     

    您定义的资源现在出现在资源列表中。

     

接下来,我们将把三个项目添加到作业队列中:

  1. Jobs部分,单击Add Job(绿色加号)按钮(如图所示)。

     

  2. Choose Rocky project files对话框中,选择我们之前创建的tutorial_02_friction_03.rocky项目,然后单击Open

  3. tutorial_02_friction_05.rockytutorial_02_friction_09.rocky文件重复此过程。三个新的作业出现在队列中(如图所示)。

     

要将同一个Resource分配给所有三个作业,请执行以下操作:

  1. 多选所有三个作业。(按住ShiftCtrl键,然后单击每个作业将其选中)。

  2. 按住Shift键时,双击三个Click to assign resources栏中的最后一个选中的(如图所示)。

     

  3. Assign Resources对话框中,启用Main Resource复选框,然后单击OK(如图所示)。

     

所有三个作业现在应该列出了相同的Resource(如图所示)。

现在,让我们开始仿真:

  1. 单击Start Scheduler按钮(如图所示)。

     

列表中的第一个作业开始处理了。您可以查看Progress栏,了解处理状态和完成百分比。

  • RUNNING表示当前正在处理该文件(如图所示)。

  • QUEUED表示当前未处理该文件,但一旦资源可用就会处理。

  • PAUSED表示已部分运行该文件,但当前未处理。

  • FINISHED表示处理已完成。

  • ERROR表示处理因错误而无法继续。

 


提示:  要按进度类型过滤作业列表,请从Show列表中单击您想要的按钮(如图所示)。若要关闭过滤器,请再次单击同一按钮。


2.3.11. 结果

当所有三个作业完成处理后,所有三个进度栏都显示FINISHED 100%,您将看到Results文件夹是在每个已创建的项目文件夹中创建的。

每个文件夹中包含两个文件:angles.jsonexperiment_data_points.csv

angles.json文件如下所示。

 


注意:  使用Scheduler时,不会生成图形。如果您想要生成图形,您必须在Rocky中打开每个项目并再次运行脚本。


可以使用四个.json文件中提供的值在Rocky之外构建图形(如图所示)。

 


注意:
  • 为了简单起见,本教程减少了颗粒数。

  • 因此,您的实际项目中的角度值可能会与本教程中显示的有很大不同。

  • 这是因为休止角计算对系统分辨率(颗粒尺寸和圆筒尺寸之间的比例)非常敏感。

  • 为了获得更准确的结果,您应该增加颗粒数(减少颗粒尺寸或增加圆筒尺寸)。


2.3.12. 帮助-用户手册

这样就完成了本教程的第三部分。

如欲了解有关任何主题的更多信息,我们建议您搜索User Manual,其中提供了工具和参数的详细说明。

要访问该手册,从主Toolbar中单击Help,指向Manuals,然后单击User Manual

 

2.3.13. 结论

Rocky Scheduler可用于运行多个项目,并分析当使用不同的颗粒-颗粒动态和静态摩擦时SAOR值的变化情况。


注意:  为了完全校准颗粒模型,必须完成其他仿真。


在本教程中,您可以:

  • 保存不包含结果的项目,以创建仅具有设置参数的副本。

  • 使用Input Variables参数化材料相互作用属性。

  • 添加一个Project Script,然后在处理完成后使用PrePost Scripts自动运行它。

  • 使用Rocky Scheduler按顺序运行多个项目。

下一步是什么?

  • 如果您成功完成了本教程,那么您就可以进入下一个教程了。