iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中如何调用ansys
  • 584
分享到

python中如何调用ansys

python调用ansyspythonansyspython如何调用ansys 2023-02-17 18:02:57 584人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录python调用ansys利用Python运行Ansys Apdl版本要求pymapdl安装流程初始设置和本地启动mapdlPyMAPDL语法工具库与window的交互接口总结p

python调用ansys

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

import os
path = '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)

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

具体命令在这里,看图

点击tool的Display Command Line

复制路径,最后一行

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

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

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

利用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/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版本

初始设置和本地启动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_1\ansys2021r1\ANSYS Inc\v211\ansys\bin\winx64\ANSYS211.exe",additional_switches="-smp")
print(mapdl)

启动失败原因:

  • pymapdl工作目录应在当前python工作目录下,可以按照如上代码设定 run_location=path+‘\working’
  • 若找不到系统中安装的mapdl,则可以指定ansys路径
  • 当遇到许可证问题,如mapdl超时等问题时,使用语句:additional_switches=“-smp”
  • 推荐使用版本为ansys2021 r1(本人目前使用没有问题的版本)

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

工具库

本批处理程序文件移动采用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=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 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()防止输出锁死计算停止

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python中如何调用ansys

本文链接: https://www.lsjlt.com/news/196667.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中如何调用ansys
    目录python调用ansys利用python运行Ansys Apdl版本要求pymapdl安装流程初始设置和本地启动mapdlPyMAPDL语法工具库与window的交互接口总结p...
    99+
    2023-02-17
    python调用ansys python ansys python如何调用ansys
  • python中怎么调用ansys
    这篇“python中怎么调用ansys”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中怎么调用ansys”文章吧...
    99+
    2023-07-05
  • Python中如何调用API
    在Python中调用API的一种常见方式是使用`requests`库。以下是一个简单的示例,演示如何通过GET请求调用一个API并获...
    99+
    2023-08-28
    python
  • python中API如何调用
    本文小编为大家详细介绍“python中API如何调用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中API如何调用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。APIAPI:简单来说就是一组协议、一...
    99+
    2023-07-02
  • 如何在C++中调用Python
    目录Python的安装VSCode配置HelloWorld测试调用Python函数string.split()第一次尝试第二次尝试第三次尝试总结概要Python的安装 为了使用Py...
    99+
    2024-04-02
  • 如何在python中调用shell
    本篇文章给大家分享的是有关如何在python中调用shell,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发...
    99+
    2023-06-14
  • 【Python】如何在VBA中调用Pyt
    背景: 已有一个Python脚本实现了部分功能,想使用VBA直接调用Python脚本 Python脚本如下: import time def hello(name): return "Hello, " + name + "!" pr...
    99+
    2023-01-31
    如何在 Python Pyt
  • shell中如何调用python脚本
    要在shell中调用Python脚本,可以使用以下命令:```python script.py```其中,`python`是Pyth...
    99+
    2023-10-10
    shell python
  • python中如何调用主函数
    python调用主函数,具体方法如下:import datetimeprint('Hello World!')print('Time is ', datetime.datetime.now().strftime('%Y-%m-%d %H:%...
    99+
    2024-04-02
  • C++如何调用python
    小编给大家分享一下C++如何调用python,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、首先要配好vs开发工程注意版本;我这使用32位的python那么我v...
    99+
    2023-06-22
  • python如何调用js
    本篇内容介绍了“python如何调用js”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 前言日常 Web 端爬虫过程中,经常会遇到参数被...
    99+
    2023-06-14
  • Python如何调用Tkinter
    本文小编为大家详细介绍“Python如何调用Tkinter”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何调用Tkinter”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。用途:图形化界面操作:通过...
    99+
    2023-07-05
  • python中如何实现链式调用
    我们在使用Django的models查询数据库时,可以看到有这种写法: form app.models import XXX query ...
    99+
    2024-04-02
  • 在node中如何调用python脚本
    目录node调用python脚本使用场景1、准备运行环境,获取python路径2、前端把命令字符串和python路径传给后端3、服务端调用python脚本nodejs调用python...
    99+
    2024-04-02
  • 如何在python中调用生成器
    本篇文章为大家展示了如何在python中调用生成器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillo...
    99+
    2023-06-14
  • Python中函数如何创建及调用
    这篇文章主要介绍了Python中函数如何创建及调用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中函数如何创建及调用文章都会有所收获,下面我们一起来看看吧。一、前言提到函数,大家会想到数学函数吧,函...
    99+
    2023-07-02
  • 如何从 Python 调用C++
    一、说明         Python是一种高级编程语言,它可以调用其他语言编写的函数。在 Python 中调用 C 函数的方法有两种:1)使用 Python 提供的 ctypes 库;2)使用 Python 提供的 Cython 库...
    99+
    2023-09-06
    python c++ 开发语言
  • 如何在python中调用外部程序
    在python中调用外部程序的方法:1.使用os.system()函数调用;2.使用ShellExecute函数调用;3.使用ctypes模块调用;具体方法如下:使用os.system()函数调用python中可以使用os.system()...
    99+
    2024-04-02
  • python中如何调用自定义函数
    要调用自定义函数,首先需要定义该函数,然后在需要调用该函数的地方使用函数名加上括号来调用它。例如: def my_function(...
    99+
    2024-03-14
    python
  • Python中函数如何创建与调用
    这篇文章主要介绍了Python中函数如何创建与调用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建函数函数用 def 语句创建,语法如下:def&nbs...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作