专业Abaqus仿真与工程计算服务
专注于提供高水平的Abaqus仿真与工程计算解决方案,覆盖从模型搭建到后处理的全流程技术支持,包括但不限于:
ABAQUS模型仿真与文献复现高精度仿真模型构建,精准复现国内外文献中的计算案例,确保科研和工程结果可比性。
收敛性优化与非收敛问题解决提供系统的收敛性调节策略,处理非线性大变形、接触问题及复杂边界条件下的求解难题。
子程序开发与定制功能扩展包括UMAT/UEL/VDLOAD等用户子程序开发,实现材料本构、损伤、断裂及热-机械耦合行为的个性化仿真。
复合材料与多场耦合分析精准模拟复合材料结构的损伤演化、层间分离、裂纹扩展及热应力耦合效应。
结构屈曲与稳定性分析提供线性与非线性屈曲分析,预测复杂结构的失稳模式及临界载荷。
热传递与热-力耦合分析支持稳态/瞬态热传递、热应力及多物理场耦合分析,满足工程热管理和安全评估需求。
岩土工程及裂纹扩展仿真基于离散元和连续介质方法模拟土体、岩石及混凝土裂纹的扩展行为,为边坡、隧道及地下工程提供可靠计算依据。
HyperMesh & ABAQUS联合仿真优化网格划分与接触界面处理,提高计算效率与结果精度,支持复杂工程结构的整体仿真。
会议答疑与课程讲解面向科研与工程团队,提供模型构建思路解析、计算难点指导及仿真方案培训,快速提升团队技术水平。
您在最新版本的 Abaqus 中运行 Python 脚本时遇到问题了吗?很可能是的。也许您已经知道, Abaqus 2024需要将 Python 版本从 2 升级到 3。
从Abaqus 2024开始,CAE 中的 Python 版本为 3.10!这是期待已久的更新(从 Python 2.7 到 3.10),它进一步增强了 FEA 的可能性,并将仿真工作流程推向了新的极限。
从现在开始,我们可以利用Python 3.10 的许多特性,这些特性在 Python 2.7 中是没有的,例如:f-字符串、数据类、模式匹配、数据类型、更好的错误消息、更容易的调试、性能改进等等。
但是……正如有人所说:“能力越大,责任越大”。
这项重要更新可能需要您更新“旧”的 Python 脚本。虽然听起来很麻烦,但在大多数情况下,即使需要更改,也只是很小的改动。
让我们深入探讨一下这次更新的影响,以及如何应对和利用它!
1. 从 Python 2 到 Python 3
Abaqus 2024在 Python 环境方面进行了重大更新。从现在起,Abaqus 将不再支持 Python 2.7,而是采用 Python 3.10!
从实际角度来看,此次更新引发的首要问题之一是:
“我还能像以前一样使用我的Python 2.7 脚本和插件吗?”
我建议您在 Abaqus 2024 中尝试运行您的脚本,并评估它们是否仍然有效。虽然这次更新听起来变化很大,但实际上并非如此,您的许多脚本可能仍然可以正常运行。但是……“如果我以前的 Python 2.7脚本在Abaqus 2024中无法运行怎么办?”
在这种情况下,您需要升级它们。
升级 Python 脚本主要有两种选择。
- 自动升级。
- 手动升级。
1.1. 自动升级脚本
Abaqus 提供了一个转换工具,可以自动将您的脚本从 Python 2.7 升级到 Python 3。该实用程序 ( abqPy2to3 ) 可以从 Abaqus/CAE或命令行执行。
在 Abaqus/CAE 中
转到“插件”→“Abaqus”→“升级脚本…”
我们可以批量升级目录中的脚本,也可以选择单个文件进行升级。例如,图中我正在将一个脚本从 Abaqus 2019 升级到 Abaqus 2024,并且我会保留原始文件的备份。升级前,我们可以在网页浏览器中“预览更改” :
就我而言,唯一改动的代码行是为了解决 zip 函数的一个问题。在 Python 3.10 中, zip函数不再返回 列表,而是返回一个可迭代对象。因此,升级工具在我的脚本中进行了相应的修改,将可迭代对象显式地转换为列表。
检查完更改后,我们可以点击“升级脚本”,就完成了!
注意:会弹出一个辅助窗口,显示日志信息,其中包含进程的详细信息和备份文件的名称。
我认为,使用预览功能运行此自动升级程序是了解我们 Python 脚本中最相关更改的最佳方法。
从命令行
打开命令行并执行以下命令:
>> abaqus python -m abqPy2to3 <files/directories>
请注意,“ abaqus ”命令取决于您的 Abaqus 2024 配置(例如 abq2024、abq24 等)。此命令接受文件列表或目录列表(相对路径或绝对路径)。在后一种情况下,它将递归遍历所有子文件夹,查找 Python 文件 (扩展名为“py”)。
1.2. 手动升级脚本
极少数情况下,自动升级工具可能无法正常工作。例如,在涉及其他模块或库的复杂脚本中。这些 Python 程序需要用户手动干预。
根据我的经验,将脚本从 Python 2 升级到 Python 3.10 时最常见的变化如下:
- print语句已被弃用,建议使用 print 函数。
# Python 2 accepts both formsprint 'Hello World!' # print statementprint('Hello World!') # print function# Python 3 only accepts print as a functionprint('Hello World!')
- 诸如`zip`或`dict.keys`和`dict.values`之类的函数返回的是可迭代对象而不是列表。因此,请注意,在某些情况下,您需要显式地将它们转换为列表。
# Some datapx = [0.0, 0.5, 1.0]py = [0.2, 0.6, 1.0]# === Python 2 ===points = zip(px, py) # List: [(0.0, 0.2), (0.5, 0.6), (1.0, 1.0)]p1 = points[0] # Index listp1, p2, p3 = points # Unpacking listfor x, y in points: # Iterate through the list pass# === Python 3 ===points = zip(px, py) # Iterable: [(0.0, 0.2), (0.5, 0.6), (1.0, 1.0)]# p1 = points[0] # Indexing is NOT allowed in iterablesp1 = list(points)[0] # Workaround: convert to list# p1, p2, p3 = points # Unpacking iterable is NOT allowedp1, p2, p3 = list(points) # Workaround: convert to listfor x, y in points: # Iterating is allowed in iterables pass
- 在 Python 3 中,整数除法用//表示。普通的整数除法(a/b)总是会得到浮点数!请看下面代码片段中的第一个例子。
# === Python 2 ===print(8/3) # Output: 2print(8./3) # Output: 2.66666666666667print(8.//3) # Output: 2.0# === Python 3 ===print(8/3) # Output: 2.66666666666667print(8./3) # Output: 2.66666666666667print(8.//3) # Output: 2.0
2. 在 Abaqus 2024 中充分利用 Python 3 的优势
如果将 Python 3.10 与 Python 2.7 进行比较,我们会发现一些新特性,这些特性将使我们的脚本更具功能性和可读性!
让我们来谈谈这些新功能:
F弦
从 Python 3.6 开始,我们可以使用所谓的f 字符串。
F-strings 允许通过{ } 占位符将变量插入字符串中。很快你就会忘记format方法了。
# Example 1 - Basic usagename = 'Peter'hello = f'Hello {name}!'print(hello)# Output: Hello Peter!# Example 2 - Format floatsfrom math import piprint(f'pi = {pi:f.6}')# Output: pi = 3.141596# Example 3 - Inline operationssome_numbers = [2, 4, 8, 16]print(f'The list contains {len(some_numbers)} items')# Output: The list contains 4 items# Example 4 - Debugging variables quickvar1 = 10var2 = 4var3 = Falsevar4 = -1e6print(f'{var1 = }')print(f'{var1 + var2 = }')print(f'{var3 = }, {var4 = :g}')# Output: var1 = 10# var1 + var2 = 14# var3 = False, var4 = -1e+06# Example 5 - Some tricks with stringstitle = 'Results'print(f'{title:20}:')print(f'{title:^20}:')print(f'{title:-^20}:')# Output: Results :# Results :# ------Results-------:# ---End of file---
类型提示
对于Python用户来说,这个话题听起来有点棘手,因为Python是一种动态类型语言。这是否意味着我们以后都必须指定数据类型呢?
其实不必如此。我们并非必须这样做,但我们现在有了这种选择。
我们为什么要声明变量的类型,或者函数的参数和输出呢?
声明数据类型(类型提示)有几个原因:
- 可读性和文档。如果我们了解函数所需的数据类型,就能更容易地理解该函数的要求,并追踪潜在的错误。
- 改进 IDE 和代码检查功能。如果您在 PyCharm、VS Code 或类似工具中编写代码,使用类型提示时,IDE 会更加实用且响应迅速。
- 编写代码前要三思。类型提示会迫使你提前思考你的程序:涉及的数据类型、功能方面(重载方法、多个返回类型)等等。
在中大型项目中,强烈建议使用类型提示,因为理解数据流至关重要,并且可以在调试阶段节省大量时间。
请注意,类型提示在 Python 解释器中不起作用。类型提示对解释器而言只是注释,不会提高计算效率或其他任何方面。
# Type hinting in a functiondef myfunction(x: int) -> str: return f"Message: {x + 5}"# Type hinting of a variablevar: int = 10print(myfunction(var))# Output: Message: 15
数据类
如果你喜欢通过实现和使用自己的类来进行面向对象编程(OOP),你一定会喜欢数据类。
数据类顾名思义,就是一个专门用于表示数据的类:数据。
数据类提供了一些特定的功能,可以简化对象的创建,例如:默认值、数据的直接表示(__repr__)、属性初始化、数据保护(冻结)等等
# Import required (decorator)from dataclasses import dataclass# Declaration of the dataclass@dataclassclass importedPart: file: str dims: int = 3 # default value is 3 (3D) info: str = "" # default value is empty# Create objectmypart = importedPart(R"C:\CAD\bolt_M3x40.stp", 3, "Bolt M3x40")print(mypart)# Output: importedPart(file='C:\\CAD\\bolt_M3x40.stp', dims=3, info='Bolt M3x40')
结构模式匹配
如果你需要使用switch-case 语句,这将彻底改变你的编程体验。在此之前,我们在 Python 中只能使用 if-else 语句,直到 Python 3.10 版本才有所改变!
结构模式匹配的出现正是为了弥补 Python 中的这一缺陷,而且它确实做到了!
我们可以简单地用它来实现一些简单的菜单选项:
# Option written by the useroption = 'new'# Structural pattern matchingmatch option: case 'new': print('Creating new file') case 'save': print('Saving current file') case other: print('Unknown command: {other}')# Output: Creating new file
还有更高级的选择:
# Option written by the useroption = 'open bolted_joint_4x3_M12'# Structural pattern matchingmatch option.split(): case ['new', filename]: print(f'Creating new file: {filename}') case ['open', filename]: print(f'Opening file: {filename}') case ['quit'|'close']: # Matches ['quit',] or ['close',] print('Bye bye!') case _: # Matches anything else print(f'Unknown command: {option!r}')# Output: Opening file: bolted_joint_4x3_M12
3. 结论
正如我们所见,Abaqus 2024 中引入 Python 3.10 会导致我们的 Python 脚本发生一些重大变化。我们需要进行测试,并在必要时进行升级。
然而,此次更新为开发用于 Abaqus 的现代 Python 脚本带来了更多优势,现在可以导入 pandas、pytorch 等现代软件包。
更重要的是,此次更新巩固了 Python 作为全球各行业有限元分析“事实上的”编程语言的地位。