- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试优化某种 Material 的孔隙率分布。我想可视化结果。我可以使用'visualize->material'来可视化不同的 Material ,但是他给每种 Material 随机颜色。我希望密度最小的 Material 是蓝色的,密度最大的是红色的。因此与应力图相同。
有没有办法在 Abaqus 中做到这一点?
如果在 GUI 中没有简单的方法来执行此操作,我想知道是否可以通过使用脚本来实现?我尝试更改一种颜色,结果产生了以下代码:
session.viewports['Viewport: 1'].enableMultipleColors()
session.viewports['Viewport: 1'].setColor(initialColor='#BDBDBD')
cmap=session.viewports['Viewport: 1'].colorMappings['Material']
session.viewports['Viewport: 1'].setColor(colorMapping=cmap)
session.viewports['Viewport: 1'].disableMultipleColors()
session.viewports['Viewport: 1'].enableMultipleColors()
session.viewports['Viewport: 1'].setColor(initialColor='#BDBDBD')
cmap = session.viewports['Viewport: 1'].colorMappings['Material']
cmap.updateOverrides(overrides={'IMPLANT_MATERIAL0':(True, '#FF0000',
'Default', '#FF0000')})
session.viewports['Viewport: 1'].setColor(colorMapping=cmap)
session.viewports['Viewport: 1'].disableMultipleColors()
session.viewports['Viewport: 1'].enableMultipleColors()
session.viewports['Viewport: 1'].setColor(initialColor='#BDBDBD')
cmap = session.viewports['Viewport: 1'].colorMappings['Material']
session.viewports['Viewport: 1'].setColor(colorMapping=cmap)
session.viewports['Viewport: 1'].disableMultipleColors()
最佳答案
如果您正在寻找应力图可视化之类的东西,则必须编写自己的 FieldOutput
数据。将数据直接输出到外部可视化器通常更容易,但在 Abaqus 中也可以(如果不是有点复杂的话)执行此操作。
一般的流程是这样的:
生成一个FieldOutput
对象;语法是 FO = odbModel.steps.values()[-1].frames[-1].FieldOutput(name=data_name, description=data_description, type=SCALAR)
,其中
odbModel
是一个打开的Odb
对象,steps.values()[-1]
或命名步骤 steps[...]
是您要输出到的步骤,frames[-1]
是您要在此步骤中输出到的最后一帧(或您选择的一帧),data_name
和 data_description
是字符串(对于应力等值线图,data_name
相当于标签 S
在 odb 输出中)SCALAR
是来自 abaqusConstants
模块的参数获取 rootAssembly.instance
对象,以及它们的关联元素 elementSet
和 sectionAssignment
,它们具有指向 section
与具有 density
属性的 material
。
addData
命令更新 FieldOutput
对象;语法是 addData(position=CENTROID, instance=instance, labels=labels, data=data)
CENTROID
是来自 abaqusConstants
模块的参数(假设您只想在元素质心处获得元素密度;您也可以将它们粘贴在积分点上,如果您真的很想要)instance
是与元素集相关联的实例(或者更一般地,分配给该 Material 的 region
)labels
是整数的可迭代(list
、tuple
),指定数据要用于的关联实例的元素标签写于data
是 float
的可迭代对象的可迭代对象,用于指定数据。在您的情况下,单个密度值意味着 data
是长度为 1 的可迭代对象的可迭代对象,每个可迭代对象包含一个密度值。 data
的长度必须等于labels
的长度,因为data
的每个成员都与elementLabel
完全对应> 在 labels
中的相同位置。下面的示例脚本(警告:强烈建议备份 .odb
以防出现问题)
import odbAccess
from abaqusConstants import SCALAR, CENTROID # Import constants
odbModel = odbAccess.openOdb(odb_file_path) # Put the file path of the `odb` in odb_file_path
FO = odbModel.steps.values()[-1].frames[-1].FieldOutput(name='Density', description='', type=SCALAR)
# Loop through `rootAssembly.instances`
for instance in odbModel.rootAssembly.instances.values():
valid_materials = [] # Valid material names which have `density`
# Loop through `instance.sectionAssignments` to check if the associated `section` has a `material` with the attribute `density`
for i in range(len(instance.sectionAssignments)):
sectionName = instance.sectionAssignments[i].sectionName
matName = odbModel.sections[sectionName].material
if hasattr(odbModel.materials[matName], 'density'):
valid_materials.append(matName)
sectionNames = [] # Build list of valid section names which are associated with a material which has the attribute `density`
for s in odbModel.sections.values():
if s.material in valid_materials:
sectionNames.append(s.name)
if sectionNames:
# Loop through `sectionAssignments` and get all the `elementLabels` in the `region` of the `sectionAssignment`
for sa in instance.sectionAssignments:
sa_labels = []
if sa.sectionName in sectionNames:
# Get labels
if sa.region.elements is not None:
for e in sa.region.elements:
sa_labels.append(e.label)
# Get material
matName = odbModel.sections[sa.sectionName].material
sa_data = [(odbModel.materials[matName].density.table[0][0],)]*len(sa_labels)
# Update `fieldOutput` object
FO.addData(position=CENTROID, instance=instance, labels=sa_labels, data=sa_data)
# Save odb model. The FieldOutput object only exists as reference from `FO` unless the odb model is saved.
odbModel.save()
odbModel.close()
odbModel = odbAccess.openOdb(odb_file_path) # Reopen the model for visualisation. If you can't find the data_name in the list, expand the model to the step and frame for which the data is saved.
我不使用密度,但这是一个模型的杨氏模量输出示例,该模型将两种 Material 分配给各种元素。
关于python - Abaqus 可视化密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49509158/
当我尝试使用以下命令从 Windows 命令行运行 Abaqus PDE(Python 开发环境)时: abaqus cae -pde 我在命令行中收到以下错误: pde:atxGuiSvr.ipcS
我正在对一些 Abaqus 模拟进行参数化扫描,因此我正在使用 waitForCompletion()防止脚本过早运行的功能。然而,有时参数组合会导致模拟在扫描中的一个或两个参数上挂起大约半小时到一个
我正在尝试在 Abaqus 中应用塑性应变初始条件,如下所示: ** ----------------------------------------------------------------
我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是从壳中提取的)。我似乎无法获得面部物体。根据scripting reference guide这应该是语法: mdb.models[
我正在尝试优化某种 Material 的孔隙率分布。我想可视化结果。我可以使用'visualize->material'来可视化不同的 Material ,但是他给每种 Material 随机颜色。我
我正在尝试制作一个 python 脚本来从 ODB 文件(来自 abaqus)中提取节点坐标。到目前为止,我已经想出了下面附加的代码(不要介意我放在#后面的额外信息,有时它只是为了让我可以跟踪我在做什
我将 Abaqus 2020 链接到英特尔 oneAPI ifort 编译器,它运行正常,直到出现此问题。当我尝试使用 /iface:cref 时出现“错误 LNK2019:函数 umat.R 中引用
我是 Abaqus Python 脚本新手。我的脚本中的以下代码行引发关键字错误(类型错误:mergeWire 上的关键字错误)。 myPart.WirePolyLine(points = myPoi
有没有办法用abaqus测量/计算生成模型的表面积? 我熟悉 abaqus CAE 或脚本版本中的工具 -> 查询... -> 质量属性: from abaqus import * prop=mdb.
我在 Abaqus 中编写脚本,在那里我用切圆(如奶酪)粉碎圆形和正方形。我需要在部件之间放置 Contact,所以我需要 Surface。 宏管理器生成: s1 = a.instances['kol
Abaqus 无法找到 C++ 编译器。我需要在 Abaqus 和 Intel Parallel Studio 之间设置一个需要 Visual Studio 的接口(interface)。无论我使用什
我用 python 编写了一个脚本,用于在 Abaqus 中对一组文件进行后处理。该脚本按顺序打开abaqus输出数据库文件,读取多个节点的结果,将这些结果写入.txt文件中并关闭odbs(输出数据库
我想为 Abaqus 创建一个 Python 脚本,其中将使用 Scipy 库。不幸的是,Abaqus 没有那个库。它可以安装,但我想以不同的方式进行。 我的想法是编写一个函数,该函数将接受参数,将其
我正在使用 Abaqus/Python 进行有限元分析。我遇到了以下问题:我有一个 3D 域,它由包含边和圆段的 2D 域组成,并且在三维中拉伸(stretch)。现在我想对该域进行网格划分,约束条件
Abaqus 选择的默认元素是 C3D8R,我想将其更改为 C3D8I。我知道如何在 CAE 中更改元素类型,甚至使用 Python 递归更改元素类型,但不知道如何更改默认值。 问题是,当我分区和重新
我正在尝试使用 abaqus-ython 脚本来提取节点坐标。为此,我首先提取原始节点位置,然后添加位移值。 但是对于我的 abaqus 模型之一,我注意到我提取的位移值与我在 abaqus 中找到的
在ubuntu上安装Abaqus CAE,选择安装目录后继续,出现如下错误 Creating child process failed. Log ID is 0001 Action LaunchAPp
当我运行时 call abaqus job=some_name interactive 可能会发生两件事: 如果这是我第一次运行该作业,则不会进行任何查询。 但是,如果工作存在,我会收到此消息: O
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我是一名优秀的程序员,十分优秀!