文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python中怎么调用ansys

2023-07-05 03:58

关注

这篇“python中怎么调用ansys”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中怎么调用ansys”文章吧。

python调用ansys

最近做了一个小项目,用python代码进行ansys的二次开发,重点是如何使用python调用ansys.代码如下:

import ospath = 'E:/test'os.chdir(path)ansys = r'"D:\"Program Files\ANSYS Inc"\v211\ansys\bin\winx64\MAPDL.exe""  -p ansys -dis -mpi INTELMPI -np 2 -lch -dir "E:\test" -j "test" -s read -l en-us -b -i "E:\test\1model.txt" -o "E:\test\Output\file.out""'os.system(ansys)

当然了,这么长的一串代码肯定不是人手打的,因为肉眼分辨不出来的空格实在太多了。

具体命令在这里,看图

python中怎么调用ansys

点击tool的Display Command Line

python中怎么调用ansys

复制路径,最后一行

python中怎么调用ansys

但是,直接的复制写进代码是没有用的,因为Python识别不了空格,以及转义字符造成的误解,具体怎么改正可以看上述代码。

我在调试代码中还遇到了ansys lock的问题,如图:

python中怎么调用ansys

原因就是调试代码同时运行了多个MAPDL文件且input file都是同一个,导致了ansys lock,因为可以看到每次运行代码都会产生一堆.log,.bat,.err文件,一般这些文件不会影响代码的运行,但是下图的.lock文件会是个bug,删除运行产生的不相干文件就可以了

python中怎么调用ansys

利用python运行Ansys Apdl

版本要求

按照官网要求,ANSYS 2021以上,python 3.63.8,以下默认用户电脑已经安装ansys2021,python3.63.8,解释器建议选用pycharm

pymapdl安装流程

安装pymapdl包(目前ansys-mapdl-core包只支持这几个版本),通过清华镜像安装,能够得到完整的包,否则由于下载超时会中断,且无法下载到最新的pymapdl-corba模块导致无法实现python连接mapdl

pip install ansys-mapdl-core -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ansys-mapdl-reader -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ansys.api.mapdl.v0 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simplepip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simplepip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simplepip install pyaedt -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ansys-dpf-core -i https://pypi.tuna.tsinghua.edu.cn/simplepip install ansys-dpf-post -i https://pypi.tuna.tsinghua.edu.cn/simple

测试pymapdl是否安装成功

from ansys.mapdl.core import launch_mapdlmapdl = launch_mapdl()print(mapdl)

若成功,则会显示ansys版本以及mapdl版本

初始设置和本地启动mapdl

import osfrom ansys.mapdl.core import launch_mapdlpath = os.getcwd()mapdl = launch_mapdl(run_location=path+'\working', exec_file=r"D:\setup_position_1\ansys2021r1\ANSYS Inc\v211\ansys\bin\winx64\ANSYS211.exe",additional_switches="-smp")print(mapdl)

启动失败原因:

PyMAPDL语法

pymapdl语法于ansys apdl语法基本一致,详情可参考二者的官方文档,以下给出一些示例:

mapdl.clear()# define element and materialmapdl.prep7()mapdl.units("SI")  # SI - International system (m, kg, s, K).# define a ET30 and ET130 element typemapdl.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/smapdl.mp("DENS", 1, 1000)  # Density in kg/m3mapdl.mp("SONC", 2, 1500)  # sonc in m/smapdl.mp("DENS", 2, 1000)  # Density in kg/m3

工具库

本批处理程序文件移动采用python os,glob以及shutil包,误差分析方法采用二范数误差分析:

import osimport shutildef 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 ansysdatadef 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 mydatadef 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_listdef 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=point\n")    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=point\n")    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")

与window的交互接口

使用isubprocess包来调用第三方exe程序,示例如下:

import subprocesscommand= " AcoFEM.exe AcoHarmicINFEM AcoHarmicINFEM.cfg 0 0 0"p = subprocess.Popen(command, shell=True)p.communicate()

需要注意:

以上就是关于“python中怎么调用ansys”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯