问题标签 [abaqus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
248 浏览

python - 如果不存在则自动创建未知类型的变量?

我有不同类型的未知变量(在 ABAQUS 中,它显示“序列”)并希望通过循环将它们组合起来:

现在的问题是,当我用 = [] 初始化 x 时,我收到错误消息

TypeError:只能将列表(不是“序列”)连接到列表。

是否有另一种(简单/高效)方式,例如在第一个循环中自动创建 x ?

0 投票
1 回答
322 浏览

python - 如何处理这些未知/奇怪的变量类型?

使用 Python 的 Abaqus FEM 软件创建自己的变量/列表类型,例如:

['人脸对象', '人脸对象', '人脸对象', ...]

输入'FaceArray'

({'featureName': 'Name-1', 'index': 6, 'instanceName': 'Name-1', 'isReferenceRep': False, 'pointOn': ((0.0, 0.733333, -0.133333),)} )

输入“脸”

当我现在用 初始化x=[]并添加一个“人脸对象”x.append(a[2]),它会导致

[mdb.models['Model-1'].rootAssembly.instances['Instance-1'].faces[2]]

代替

['人脸对象']

如何创建与 a 格式相同的新变量

0 投票
1 回答
5093 浏览

python - 节点使用python命令坐标零件

在此处输入图像描述我需要访问特定节点的坐标。我已经导入了一个孤立网格,当我在 CAE 中使用查询选项并请求节点坐标时,我得到了所需的坐标。但是,当我使用 python 命令请求相同的东西时,我会得到一些不同的坐标。我不确定我的命令有什么不正确以及为什么会有这样的差异。

这是我在请求图中提到的查询时得到的

节点 69 坐标:3.732E-03,-3.118594,1.189815

当我使用以下命令时,我得到一个不同的值

mdb.models['Model-4'].parts['Bio_Mech1_2'].nodes[69].coordinates (-1.37620043754578, -3.04504609107971, 1.26058506965637)

或者即使我从程序集中调用节点

mdb.models['Model-4'].rootAssembly.instances['Bio_Mech1_2-1'].nodes[69].coordinates (-1.37620043754578, -3.04504609107971, 1.26058506965637)

0 投票
1 回答
4789 浏览

python - Abaqus 脚本测量/计算表面积

有没有办法测量/计算生成模型的表面积abaqus

我熟悉工具- >查询...->质量属性abaqus CAE或脚本版本:

但是,我找不到表面积的相等命令。

感谢帮助!

0 投票
1 回答
1520 浏览

python - 在 ABAQUS 中自动删除零件的整个单元格的脚本

如果单元格体积小于给定值,我正在尝试编写一个脚本来删除 ABAQUS 中某个部分的单元格。是否有删除单元格的简单命令?

这是我尝试过的:

谢谢!

0 投票
1 回答
3402 浏览

python - 使用 Abaqus nogui python 接口打印到终端

运行 abaqus nogui python 脚本时,我想将脚本的状态输出到终端。但是当我这样做时,例如:

我也试过:

没有任何东西输出到终端。尽管如此,我的代码运行良好并完成了它应该做的一切。

有谁知道如何解决这个问题?

0 投票
1 回答
1739 浏览

macros - For循环在Python中打开文件

我对 Python 比较陌生,需要通过 Abaqus 运行 python 宏。我正在打开文件,例如“nonsym1、nonsym2、nonsym3”。我正在尝试通过循环来做到这一点。该代码打开 nonsym1(在 abaqus 中)并对其执行一些操作,然后应该循环回并对其他文件执行相同的操作。这是我正在尝试的代码...

我的主要问题来自我认为目录中的 %s ?... 尝试运行此宏时出现错误消息不知道如何最好地解决这个问题,所以任何帮助都会非常感谢!还在学习!

0 投票
1 回答
943 浏览

fortran - 在 Abaqus 中获取与紧固件节点相关的单元编号

我正在尝试根据施加的压力来改变紧固件的刚度。我通过使用字段变量并从.fil文件中提取紧固件中的力来解决这个问题。

问题是我需要将 UFIELD 提供的节点编号与.fil文件中紧固件的元素编号相关联。我知道.fil文件在记录号中包含该信息。1900但是当我为该记录设置if 语句时,它永远不会在我的子程序中被击中。虽然,当我将.fil文件转换为 ASCII 时,我可以在那里看到该信息。

1号记录和495号记录打对了,可以得到其中的元素号和内力。

此外,我尝试在我拥有的节点和元素上都使用GETPARTINFO 。但它返回的数字与我的紧固件节点或元素本身无关。

此外,由于紧固件没有材料点,我无法从节点本身或材料点获得紧固件CTF 。

如果我假设节点和紧固件的顺序相同并且只是匹配它们,那么我的代码在一个小模型中的几个元素上就可以很好地工作。但是在一个有很多紧固件的大型模型中,一切都搞混了。

任何想法如何解决这个问题,或者关于为什么我不能从我的子程序访问密钥 1900或者为什么GETPARTINFO不返回预期的内容的一些评论?

0 投票
1 回答
820 浏览

python - 在 abaqus python 中使用 Element() 构造函数创建零件元素

我无法在 Abaqus 中使用 Part Object 的 Element() 构造函数创建元素。Node() 构造函数没有问题,但是当您尝试使用先前生成的节点创建元素时,它会向您显示以下错误警告:

没有可编辑的网格

在运行脚本之前,零件网格在 Abaqus CAE 树(零件 Recuadro)中显示为空,并且在运行脚本后不再为空,所以我知道网格已经生成。

这是我的脚本:

0 投票
2 回答
1405 浏览

python - 用python替换odb中的状态变量名

在 Abaqus 中,我有自己的材料描述 (VUMAT)。此 VUMAT 生成名为 SDV1、SDV2 等的状态变量。这些变量与 abaqus 中的其他输出数据一起存储在二进制 .odb 文件中。因为我有大量这样的变量,所以我想给它们起有意义的名称,例如 S1、S2、E1、E2 等,因此当在 Abaqus 查看器中查看 .odb 时,会清楚哪个变量是哪个变量。

现在,abaqus 提供了 python 接口来读取和写入该 .odb 文件。但据我所知,我找不到重命名这些变量的方法。当我尝试更改它们时,我得到只读错误。

因此,我尝试使用 Notepad++ 打开 .odb 并发现如果手动将该文件中的所有 SDV 条目替换为我想要的并保存它。这些名称也会在 Abaqus Viewer 中更改。这是非常好的!

但我想自动化这个过程。因此,我编写了一个 python 脚本来读取初始 .odb,替换 SDV 并将更改的 .odb 保存为不同的文件。

但是当我在 abaqus 查看器中打开新的 .odb 时,我收到以下消息:

***错误:Abaqus 数据库文件已损坏。如果此文件是使用 FTP 或同等功能从另一台机器传输的,请确保使用二进制模式而不是 ASCII 模式复制文件。

此外,目前,此代码还替换了 SDV20,如何避免这种情况并仅替换 SDV2 而不是 SDV20、SDV21 等的部分?

我错过了什么?我正在使用python 2.7。

编辑:

如果在 HEX 编辑器中打开 ODB,可以看到以下模式: 对于 SDV9,后跟 SDV10:

可以观察到编码以字符数开头。04 表示 SDV9,05 表示 SDV10,后跟 NULL 值。SDV1 到 SDV9 为 3,其余为 6。我尝试将 SDV9 部分更改为:

它给了我同样的错误,同时将 SDV10 部分更改为:

工作得很好。如果有人熟悉这一点,将不胜感激。

编辑2:

我的代码不起作用,因为新变量的长度应与旧变量的长度完全相同。如果长度匹配,则没有问题。较短的变量后面可以有空格以获得所需的字符长度。

通过使用 SSchneid 建议的代码,我能够匹配精确的 SDV 进行替换,不包括较长的部分。

添加涉及 FieldOutput() 和 addData() 的字段变量的标准方法不是一个好的解决方案,因为它复制了具有不同名称的现有 SDV。对于非常大的分析,它显着增加了 odb 的大小。除非有办法删除旧的。

当然,我们可以通过直接从子例程将所需变量输出到单独的文本文件来走得更远。然后通过使用该文本文件在 odb 中生成新的字段输出。之后可以删除文本文件。而这一切都不需要 SDV 输出。

或者可以将 SDV 输出请求到 .fil 文件,然后可以使用 FieldOutput() 和 addData() 将其组装回 odb。但这些都是非常 hacky 的解决方案,需要大量写入磁盘和大量代码行来解析输出文本文件。

我没有回答这个问题,直到发布完整的解决方案或者我自己弄清楚(在这种情况下,我将发布一个答案野兔)

谢谢您的帮助!