概述
Ansys流处理
- 1.学习资源
- 2.版本要求
- 3.pymapdl安装流程
- 4.初始设置和本地启动mapdl
- 5.PyMAPDL语法
- 6.工具库
- 7.与window的交互接口
1.学习资源
Ansys官网:https://www.ansys.com/zh-cn
Ansys Academic(Ansys 学术):https://www.ansys.com/zh-cn/academic
Ansys Learning Forum(Ansys 学习论坛):https://forum.ansys.com/
PyAnsys Project (pip install ansys-mapdl-core):https://docs.pyansys.com/
csdn安装教程:https://blog.csdn.net/hhy321/article/details/122898478
2.版本要求
按照官网要求,ANSYS 2021以上,python 3.63.8,以下默认用户电脑已经安装ansys2021,python3.63.8,解释器建议选用pycharm
3.pymapdl安装流程
-
安装pymapdl包(目前ansys-mapdl-core包只支持这几个版本),通过清华镜像安装,能够得到完整的包,否则由于下载超时会中断,且无法下载到最新的pymapdl-corba模块导致无法实现python连接mapdl
pip install ansys-mapdl-core -i https://pypi.tuna.tsinghua.edu.cn/simple pip install ansys-mapdl-reader -i https://pypi.tuna.tsinghua.edu.cn/simple pip install ansys.api.mapdl.v0 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pyaedt -i https://pypi.tuna.tsinghua.edu.cn/simple pip install ansys-dpf-core -i https://pypi.tuna.tsinghua.edu.cn/simple pip install ansys-dpf-post -i https://pypi.tuna.tsinghua.edu.cn/simple
-
测试pymapdl是否安装成功
from ansys.mapdl.core import launch_mapdl mapdl = launch_mapdl() print(mapdl)
若成功,则会显示ansys版本以及mapdl版本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc1SXc5X-1668767172386)(C:UsersdsjAppDataRoamingTyporatypora-user-imagesimage-20220830155244351.png)]
4.初始设置和本地启动mapdl
import os
from ansys.mapdl.core import launch_mapdl
path = os.getcwd()
mapdl = launch_mapdl(run_location=path+'working', exec_file=r"D:setup_position_1ansys2021r1ANSYS Incv211ansysbinwinx64ANSYS211.exe",additional_switches="-smp")
print(mapdl)
启动失败原因:
- pymapdl工作目录应在当前python工作目录下,可以按照如上代码设定 run_location=path+‘working’
- 若找不到系统中安装的mapdl,则可以指定ansys路径
- 当遇到许可证问题,如mapdl超时等问题时,使用语句:additional_switches=“-smp”
- 推荐使用版本为ansys2021 r1(本人目前使用没有问题的版本)
5.PyMAPDL语法
pymapdl语法于ansys apdl语法基本一致,详情可参考二者的官方文档,以下给出一些示例:
mapdl.clear()
# define element and material
mapdl.prep7()
mapdl.units("SI") # SI - International system (m, kg, s, K).
# define a ET30 and ET130 element type
mapdl.et(1, "FLUID30", kop2=1)
mapdl.et(2, "FLUID130", kop1=1)
# Define a material (nominal steel in SI)
mapdl.mp("SONC", 1, 1500) # sonc in m/s
mapdl.mp("DENS", 1, 1000) # Density in kg/m3
mapdl.mp("SONC", 2, 1500) # sonc in m/s
mapdl.mp("DENS", 2, 1000) # Density in kg/m3
6.工具库
本批处理程序文件移动采用python os,glob以及shutil包,误差分析方法采用二范数误差分析:
import os
import shutil
def mkdir(path):
path = path.strip()
path = path.strip("\")
isExists = os.path.exists(path)
if not isExists:
os.makedirs(path)
def clearfolder(path):
path = path.strip()
path = path.strip("\")
isExists = os.path.exists(path)
if isExists:
shutil.rmtree(path)
mkdir(path)
def mycopyfile(srcfile, dstpath, file_num,filenamelist): # 移动函数
if not os.path.isfile(srcfile):
print ("%s not exist!"%(srcfile))
else:
fpath,fname=os.path.split(srcfile) # 分离文件名和路径
if not os.path.exists(dstpath):
os.makedirs(dstpath) # 创建路径
shutil.move(srcfile, dstpath + str(file_num)+'-'+fname) # 移动文件
print ("copy %s -> %s"%(srcfile, dstpath +str(file_num)+'-'+ fname))
filenamelist.append(dstpath + str(file_num)+'-'+fname)
def filename_to_list(filepath):
file_name_list = list() # 新建列表
for i in os.listdir(filepath): # 获取filePath路径下所有文件名
data_collect = ''.join(i) # 文件名字符串格式
file_name_list.append(filepath+data_collect) # 将文件名作为列表元素填入
return (file_name_list) # 返回列表
def read_ansys_result(filepath, nodenum):
ansysdata = []
f = open(filepath, "r")
data = f.readline()
data = f.readline()
for i in range(1, nodenum+1):
data = f.readline()
data = data.strip().split()
ansysdata.append([float(data[1]), float(data[2]), float(data[3])])
return ansysdata
def read_my_result(filepath, nodenum):
mydata = []
f = open(filepath, "r")
data = f.readline()
data = f.readline()
data = f.readline()
for i in range(1, nodenum+1):
data = f.readline()
data = data.strip().split()
mydata.append([float(data[3]), float(data[4]), float(data[5])])
return mydata
def cal_2Norm_Err_ofMesh(caldata,thedata):
nodenum = len(caldata)
a = 0
b = 0
c = 0
d = 0
e = 0
f = 0
for i in range(nodenum):
a += pow(caldata[i][0] - thedata[i][0], 2)
b += pow(caldata[i][1] - thedata[i][1], 2)
c += pow(a,2)+pow(b, 2)
d += pow(thedata[i][0], 2)
e += pow(thedata[i][1], 2)
f += pow(thedata[i][2], 2)
a = pow(a, 0.5)
b = pow(b, 0.5)
c = pow(c, 0.5)
d = pow(d, 0.5)
e = pow(e, 0.5)
f = pow(f, 0.5)
realerr = a/d
imagerr = b/e
amperr = c/f
err_list = str(realerr)+" "+str(imagerr)+" "+str(amperr)
return err_list
def write_2Norm_Err_ofMesh(outputfile, ansysnamelist, mynamelist, thenamelist, fileinfolist):
ansys_res_data = [] # 每一个元素代表一个文件的结果
my_res_data = []
the_res_data = []
for i in ansysnamelist:
print(i)
for i in range(len(ansysnamelist)):
ansys_res_data.append( read_ansys_result(ansysnamelist[i], fileinfolist[i][2]))
my_res_data.append(read_my_result(mynamelist[i], fileinfolist[i][2]))
the_res_data.append(read_my_result(thenamelist[i], fileinfolist[i][2]))
f = open(outputfile,"w",encoding='GBK')
f.write("Title="different mesh num err"n")
f.write("variables="mesh_number","real_err(%)","imag_err(%)","amp_err(%)"n")
f.write("zone t="ansys-theroy"n")
f.write("i="+str(len(ansysnamelist))+",f=pointn")
for i in range(len(ansysnamelist)):
ans_the=cal_2Norm_Err_ofMesh(ansys_res_data[i],the_res_data[i])
f.write(str(fileinfolist[i][1])+" "+ans_the+"n")
f.write("zone t="my-theroy"n")
f.write("i="+str(len(ansysnamelist))+",f=pointn")
for i in range(len(ansysnamelist)):
my_the = cal_2Norm_Err_ofMesh(my_res_data[i], the_res_data[i])
f.write(str(fileinfolist[i][1]) + " " + my_the + "n")
7.与window的交互接口
使用isubprocess包来调用第三方exe程序,示例如下:
import subprocess
command= " AcoFEM.exe AcoHarmicINFEM AcoHarmicINFEM.cfg 0 0 0"
p = subprocess.Popen(command, shell=True)
p.communicate()
需要注意:
- exe文件放在python的工作根目录下是最稳定的,其余文件按照编程时与exe文件的目录关系进行摆放
- 尽量减少程序中的窗口输出,如大量的节点信息在屏幕上输出,这会导致锁死
- 显示cmd窗口结果尽量使用p.communicate()而不是p.wait()防止输出锁死计算停止
最后
以上就是端庄皮卡丘为你收集整理的利用Python运行Ansys Apdl的全部内容,希望文章能够帮你解决利用Python运行Ansys Apdl所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复