尝试从第一个文件中保存的模拟中获取一些数据。
最初我们有:
from ansys.dpf import core as dpf
model = dpf.Model(r'.\file.rst')
我们想要获取 elastic_strain_principal_1 我们创建一个 操作符实例 来执行它:
op = dpf.operators.result.elastic_strain_principal_1()
为了填充该实例的参数,我们将其连接到模型:
op.inputs.data_sources.connect(model.metadata.data_sources)
尽管这是默认设置的,但我们将确保我们得到最后一个时间步中的主应变第一个分量:
time_scoping = model.metadata.time_freq_support.time_frequencies.data[-1]
op.inputs.time_scoping.connect(float(time_scoping))
然后我们使用输出创建一个 filds 容器并获取数据:
result_fields_container = op.outputs.fields_container()
field = result_fields_container[0] #only time considered so [0]
field_data = field.data
据我所知,我们获得了最后一个所有可用节点上的弹性应变主元时间步长,但如果我在 Ansys Deskot 中取
field.data
中的最大值和最大主应变 1(在这种特殊情况下总是发生在仿真结束时),那么到目前为止,这与 Ansys Desktop App 的结果不匹配应用程序存在 1.5 个单位的差异。
我无法理解 PyAnsys 的工作原理以及值不匹配的原因。
此外,在本例中,我正在使用类似的代码结构对
stress_principal_1
执行相同的操作值是正确的,PyAnsys 和 Ansys 桌面应用程序返回相同的值,这会导致更多混乱。
代码看起来不错,你对PyAnsys工作流程的理解也是正确的。然而,主应力和主应变值之间存在细微但至关重要的区别,这可能解释了你在一种情况下观察到的差异而不是另一种情况。该区别在于 结果解释 。
-
主应力 是不依赖于坐标系的方向量。无论你的模型方向如何,最大主应力始终是相同的。这就是为什么你在 PyAnsys 和 Ansys Desktop 中都能获得相同的主应力值。
-
主应变 也是方向量,但它们 依赖于用于计算它们的位移的参考状态 。Ansys Mechanical 可以使用不同的参考状态来计算应变,这取决于你如何设置求解。
以下是你在 PyAnsys 和 Ansys Desktop 之间看到主应变值差异的可能原因:
-
不同的参考状态: 检查 PyAnsys 和 Ansys Desktop 是否使用相同的参考状态来计算应变。这包括初始坐标系和任何应用的预应变。确保两个环境中的“应变选项”设置相同(例如,对数应变、工程应变)。
-
不同的结果解释: Ansys Desktop 可能会对显示的最大主应变值应用额外的处理或解释。这可能包括平均化技术或考虑特定于模型设置的因素。
-
时间历程插值: 你正在从最后一个时间步获取数据。如果你的求解使用非线性材料行为或大的变形,则在时间步之间插值应变会导致轻微差异。
要解决此差异,请尝试以下操作:
-
验证应变定义: 在 PyAnsys 和 Ansys Desktop 中,仔细检查用于计算主应变的精确定义和设置。比较“应变选项”和其他相关参数。
-
检查坐标系: 确保在两个环境中使用相同的坐标系来提取结果。
-
提取特定节点的结果: 不要依赖于最大值,而是尝试从 PyAnsys 和 Ansys Desktop 中的同一个特定节点提取主应变值,然后进行比较。
-
详细输出: 在 Ansys Mechanical 中启用更详细的输出,以了解 Desktop 版本如何计算和报告最大主应变值。
-
简化模型: 尝试使用简化的模型(例如,具有线性材料行为)来查看差异是否仍然存在。
通过仔细检查和协调 PyAnsys 和 Ansys Desktop 中的这些设置和解释,你应该能够确定主应变值差异的原因并确保一致性。
标签:python,pyansys From: 78842229