这篇文章展示如何将 Python 3 与 Abaqus 结合使用,而且更进一步,让您意识到可以使用任何库、程序或外部应用程序与 Abaqus 交互。
读到这里,我们想到的第一个问题是: 为什么?
为什么需要 Python 3 或其他外部应用程序才能与 Abaqus 配合使用?
Abaqus 是一款出色的数值模拟软件,但它并不是万能的。它不是最好的 CAD 软件,也不是制作高质量绘图或可视化数据的最佳软件,我们可以找到更多类似的示例。
尽管 Abaqus 提供了非常健壮、强大且文档齐全的 Python API,我们可以通过它来增强 Abaqus 功能,但它也有局限性。
“如何 在 Abaqus 的 Python 脚本中使用 Pandas ?”
(Pandas 是一个用于数据操作的 Python 库)
“我需要 从 Abaqus 中的 Python 脚本读取一些 Excel 文件 ,我该怎么做?”
(我们可以使用 Python 库 openpyxl读取 Excel 文件)
“我正在使用 scikit-learn开发 机器学习模型 ,并且希望在训练过程中运行 Abaqus 模拟。”
如果我们可以将 Python 模块安装到 Abaqus 内置的 Python API 中,这些场景就不会有问题。不幸的是,这是不可能的,我们无法定制Python API环境。出于安全和稳定性原因,它是固定的。因此,我们无法安装 pandas、 openpyxl、 scikit或任何其他库。
另一方面,API 的 Python 版本是2.7,因此,许多功能不会完全兼容,或者某些库可能根本不可用。
这还不是全部!
如果我们想与其他编程语言或应用程序交互怎么办:
“我曾研究过 FEM 的拓扑优化算法,但它是在 Matlab中!
我如何在 Abaqus 中运行它?
我需要将它“翻译”成Python 2.7吗???”
这甚至更棘手:我们如何 将 Matlab 代码运行到 Python 脚本中???
这些只是一些 实际情况 ,其中内置的 Python API 本身是不够的。
所有这些场景有什么共同点?
它们需要 Abaqus 的 Python API 不提供的附加功能。
那我们能做什么呢?
我们可以 使用外部应用程序来“补充”这些缺失的功能。
然而,为了达到这个目的,我们需要在双方: 外部应用程序 (下图中的灰色块)和 Abaqus (下图中的紫色块)之间建立有效的通信。
Abaqus 是世界上最好的 FEA 软件包之一,但它并不能解决所有问题。这就是为什么我们可以通过外部应用程序扩展其功能。让我们看看如何做!
解决所有这些问题的最通用的解决方案是使用 Python 脚本从命令行 (cmd)调用和控制 Abaqus 。该脚本将告诉 Abaqus 做什么,例如创建有限元模型、求解并后处理结果。该工作流程如下图所示:
外部应用程序由用户(或另一个进程)执行。
该外部应用程序访问 cmd。
Abaqus 是从 cmd 调用的。
Python 脚本控制 Abaqus 中执行的操作。
借助 Python API,可以通过命令行 (cmd) 从外部应用程序控制 Abaqus。红框代表Abaqus基础设施,用户无法自定义它(例如安装外部库......)
您可能已经知道,可以使用以下命令从命令行调用 Abaqus:
指令
>> abaqus cae
指令
>> abaqus cae script=abq.py
Python
# Script: app.py
# Import any libraries that we wish
# Notice these modules are not available within Abaqus
import pandas, openpyxl, sklearn, bokeh, torch
# To execute statements in the command line we need to import os
import os
# The function to execute in the command line is os.system(command)
os.system('abaqus cae script=abq.py')
# This line will open Abaqus/CAE and execute the script 'abq.py'
Python
# Script: abq.py
from abaqus import *
from abaqusConstants import *
from caeModules import *
# Parameters
length = 15.
height = 20.
width = 10.
name = 'Box'
myview = session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=50., height=50.)
myview.makeCurrent()
myview.maximize()
# Create new model
Mdb()
mymodel = mdb.models['Model-1']
# Create sketch
s = mymodel.ConstrainedSketch(name='__profile__', sheetSize=200.0)
s.rectangle(point1=(0.0, 0.0), point2=(length, height))
# Create part
p = mymodel.Part(name=name, dimensionality=THREE_D, type=DEFORMABLE_BODY)
p.BaseSolidExtrude(sketch=s, depth=width)
# Save cae model
mdb.saveAs(pathName=name + '.cae')
# Display part on the viewport
myview.setValues(displayedObject=p)