首页/文章/ 详情

Abaqus脚本升级:From Python 2 to Python 3

10小时前浏览124


您是否在 Abaqus 2024 版本中运行 Python 脚本时遇到问题?可能是的。也许您已经知道,我们必须在 Abaqus 2024 中从 Python 2 升级到 Python 3。
Abaqus 2024开始,CAE中的Python版本是3.10!这是一个期待已久的更新(从 Python 2.7 到 3.10),它增加了 FEA 的更多可能性,并将模拟工作流程推向新的极限。  
从现在开始,我们可以利用 Python 2.7 中不可用的许多Python 3.10 功能,例如:f 字符串、数据类、模式匹配、数据类型、更好的错误消息、更轻松的调试、性能改进等等。  
此重要更新可能需要您更新“旧”Python 脚本。虽然听起来很麻烦,但在大多数情况下,如果有必要的话,改变会很小。  
Abaqus 2024在 Python 环境方面引入了重大更新。从现在开始,Abaqus 将 Python 2.7 抛在一边, Python 3.10 崛起!  
“我可以像以前一样使用Python 2.7 脚本和插件吗?”  
我建议您在 Abaqus 2024 中尝试脚本并评估它们是否仍然有效。尽管更新听起来像是一个巨大的变化,但实际上并非如此,并且您的许多脚本可能仍然可以正常工作。但…  

“如果我的旧 Python 2.7脚本无法Abaqus 2024中运行怎么办?” 

 

1、有两个方法来升级 Python 脚本。  

1.1.自动升级您的脚本

Abaqus 提供了一个转换工具,可以自动将脚本从 Python 2.7 升级到 Python 3。该实用程序 ( abqPy2to3 ) 可以从 Abaqus/CAE命令行执行。  
 
我们可以从目录中批量升级脚本,也可以选择单个文件。例如,在图中,我正在将脚本从 Abaqus 2019 升级到 Abaqus 2024,并且我将保留原始文件的备份。升级之前,我们可以在浏览器上“预览更改” :  

就我而言,唯一改变的行解决了 zip 函数的问题。在 Python 3.10 中, zip函数不返回列表,而是返回“可迭代”对象。这就是升级程序实用程序在我的脚本中进行更改的原因,将可迭代对象显式转换为列表。  
检查更改后,我们可以单击“升级脚本” ,就是这样!  
注意:会弹出一个带有日志信息的辅助窗口,其中包含进程的详细信息和备份文件的名称。  
在我看来,通过预览运行此自动升级程序是了解 Python 脚本中最相关更改的最佳方式:  


    

>> abaqus python -m abqPy2to3 <files/directories>
   
 

请注意,“ abaqus ”命令取决于您的 Abaqus 2024 设置(例如 abq2024、abq24...)。此命令接受文件列表目录列表(相对或绝对路径)。在后一种情况下,它将递归遍历所有子文件夹寻找Python文件(带有'py'扩展名) 。

在极少数情况下,自动升级实用程序可能无法按预期工作。例如,在涉及其他模块或库的复杂脚本中。这些 Python 程序需要用户进行一些手动干预。

1.2.手动升级您的脚本

在极少数情况下,自动升级实用程序可能无法按预期工作。例如,在涉及其他模块或库的复杂脚本中。这些 Python 程序需要用户进行一些手动干预。  
根据我的经验,将脚本从 Python 2 升级到 Python 3.10 最常见的更改如下:  
  • print语句已被弃用,取而代之的是 print 作为函数。
  • Python

# Python 2 accepts both forms
print 'Hello World!'   # print statement
print('Hello World!')  # print function


# Python 3 only accepts print as a function
print('Hello World!')
 

 复制

  • zipdict.keysdict.values等函数返回

  • Python

# Some data
px = [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 list
p1, p2, p3 = points   # Unpacking list
for 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 iterables
p1 = list(points)[0]  # Workaround: convert to list
# p1, p2, p3 = points      # Unpacking iterable is NOT allowed
p1, p2, p3 = list(points)  # Workaround: convert to list
for x, y in points:   # Iterating is allowed in iterables
   pass
 

 

  • Python 3 中的整数除法用//表示。整数 (a/b) 之间的常规除法总是会产生浮点数!请看下面代码片段中的第一个示例。

  • Python

# === Python 2 ===
print(8/3)    # Output: 2
print(8./3)   # Output: 2.66666666666667
print(8.//3)  # Output: 2.0

# === Python 3 ===
print(8/3)    # Output: 2.66666666666667
print(8./3)   # Output: 2.66666666666667
print(8.//3)  # Output: 2.0
 

 

2. 在 Abaqus 2024 中使用 Python 3

如果我们将 Python 3.10 与 Python 2.7 进行比较,我们会发现一些新功能将使我们的脚本更加实用和可读!

从Python 3.6开始,我们可以使用所谓的f-strings  
F 字符串有助于通过{ } 占位符将变量包含到字符串中  
代码片段中查看 f 字符串的强大功能和灵活性。  
  • Python

# Example 1 - Basic usage
name = 'Peter'
hello = f'Hello {name}!'
print(hello)
# Output: Hello Peter!

# Example 2 - Format floats
from math import pi
print(f'pi = {pi:f.6}')
# Output: pi = 3.141596

# Example 3 - Inline operations
some_numbers = [2, 4, 8, 16]
print(f'The list contains {len(some_numbers)} items')
# Output: The list contains 4 items

# Example 4 - Debugging variables quick
var1 = 10
var2 = 4
var3 = False
var4 = -1e6
print(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 strings
title = 'Results'
print(f'{title:20}:')
print(f'{title:^20}:')
print(f'{title:-^20}:')
# Output: Results             :
#               Results       :
#         ------Results-------:

# ---End of file---
 


 类型提示




        这个话题对于 Python 用户来说听起来有点麻烦,因为 Python 是一种动态类型语言。这是否意味着我们从现在开始就必须指定数据类型?并不是这样的,我们不必这样做,但我们现在有这个选择

为什么我们要声明变量的类型或函数的参数和输出?  
 
声明数据类型(类型提示)有几个原因:  
  1. 调试。发现一些错误变得更加容易。
  2. 可读性和文档。如果我们读取函数所需的数据类型,就会更容易理解该函数的要求并追踪潜在的错误。
  3. 改进 IDE 和 linting 。如果您在 PyCharm、VS Code 或类似工具中进行编码,那么在使用类型提示时 IDE 将更加有帮助且响应更快。
  4. 写作前要三思。类型提示迫使您提前考虑您的程序:涉及的数据类型、功能方面(重载方法、多个返回类型)等。
  • Python

# Type hinting in a function
def myfunction(x: int) -> str:
   return f"Message: {x + 5}"


# Type hinting of a variable
var: int = 10

print(myfunction(var))
# Output: Message: 15
 
    
   
 

 数据类


如果您通过实现和使用自己的类来进行面向对象编程(OOP),那么您将会喜欢数据类。  
数据类就是这样一个类,专门用于表示:Data 。  
数据类提供了简化对象创建的特定功能,例如:默认值、数据的直接表示 (__repr__)、属性初始化、数据保护(冻结)等等。在下面的代码片段中,您可以看到一些正在发挥作用的主要功能。  
  • Python

# Import required (decorator)
from dataclasses import dataclass

# Declaration of the dataclass
@dataclass
class importedPart:
   file: str
   dims: int = 3   # default value is 3 (3D)
   info: str = ""  # default value is empty

# Create object
mypart = 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 中的这一缺陷,而且确实做到了!  
 
Python  
# Option written by the user
option = 'new'

# Structural pattern matching
match option:
   case 'new':
       print('Creating new file')
   case 'save':
       print('Saving current file')
   case other:
       print('Unknown command: {other}')

# Output: Creating new file
 



   
还有更复杂的选项:  
  • Python

# Option written by the user
option = 'open bolted_joint_4x3_M12'

# Structural pattern matching
match 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
 

 
通过使用类作为匹配模式、可变数量的参数,结构模式匹配更进一步正如我们所看到的,  
Abaqus 2024 中引入的 Python 3.10 涉及我们的 Python 脚本中的一些重要更改。如有  
必要,我们必须对其进行测试和升级  
 


然而,此更新为 Abaqus 的现代 Python 脚本开发带来了更多优势, Abaqus 现在可以导入 pandas、pytorch 等新功能包。   
 


来源:ABAQUS仿真世界
AbaqusUGpythonUM游戏SCL
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-01-17
最近编辑:10小时前
yunduan082
硕士 | 仿真主任工程... Abaqus仿真世界
获赞 160粉丝 247文章 332课程 0
点赞
收藏
作者推荐

《Mechanics of Solid Polymers》4.12.1 客观率

4.12.1 客观率 为了演示二阶张量的时间导数,考虑一种情况,其中当前空间构型中的基向量相对于参考构型随时间旋转:则 。考虑张量 根据链式法则,这个张量的时间导数可以写作定义 为共旋速率,得到这也可以写作如果我们与材料一起旋转(Ω = W),这就变成:其中是一个常用的速率定义,称为Jaumann率。 考虑一个物体于给定变形F导致应力状态σ的情况。现在,考虑另一个物体,除了在施加变形之前旋转了90°外,它与第一个物体完全相同,如图4.13所示。对于某些材料,初始90°旋转(即参考构型的改变)不会影响最终应力状态σ。图4.13 变形过程中材料对称性的示例这些材料被认为具有关于90°旋转的材料对称性。如果材料响应对任何旋转都保持不变,则称该材料为各向同性。不对任意旋转保持不变的材料在不同方向上具有不同的性质,称为各向异性。 从数学角度来说,如果P是从初始构型到替代构型的映射,F是变形梯度,且应力不依赖于初始映射:那么映射P被称为材料的对称群。对称群的应用在第5章中有更详细的讨论。来源:ABAQUS仿真世界

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈