最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中如何調(diào)用ansys

 更新時(shí)間:2023年02月17日 17:07:09   作者:寒軒榭雨  
這篇文章主要介紹了python中如何調(diào)用ansys問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python調(diào)用ansys

最近做了一個(gè)小項(xiàng)目,用python代碼進(jìn)行ansys的二次開發(fā),重點(diǎn)是如何使用python調(diào)用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)

當(dāng)然了,這么長(zhǎng)的一串代碼肯定不是人手打的,因?yàn)槿庋鄯直娌怀鰜淼目崭駥?shí)在太多了。

具體命令在這里,看圖

點(diǎn)擊tool的Display Command Line

復(fù)制路徑,最后一行

但是,直接的復(fù)制寫進(jìn)代碼是沒有用的,因?yàn)镻ython識(shí)別不了空格,以及轉(zhuǎn)義字符造成的誤解,具體怎么改正可以看上述代碼。

我在調(diào)試代碼中還遇到了ansys lock的問題,如圖:

原因就是調(diào)試代碼同時(shí)運(yùn)行了多個(gè)MAPDL文件且input file都是同一個(gè),導(dǎo)致了ansys lock,因?yàn)榭梢钥吹矫看芜\(yùn)行代碼都會(huì)產(chǎn)生一堆.log,.bat,.err文件,一般這些文件不會(huì)影響代碼的運(yùn)行,但是下圖的.lock文件會(huì)是個(gè)bug,刪除運(yùn)行產(chǎn)生的不相干文件就可以了

利用python運(yùn)行Ansys Apdl

版本要求

按照官網(wǎng)要求,ANSYS 2021以上,python 3.63.8,以下默認(rèn)用戶電腦已經(jīng)安裝ansys2021,python3.63.8,解釋器建議選用pycharm

pymapdl安裝流程

安裝pymapdl包(目前ansys-mapdl-core包只支持這幾個(gè)版本),通過清華鏡像安裝,能夠得到完整的包,否則由于下載超時(shí)會(huì)中斷,且無法下載到最新的pymapdl-corba模塊導(dǎo)致無法實(shí)現(xiàn)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

測(cè)試pymapdl是否安裝成功

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

若成功,則會(huì)顯示ansys版本以及mapdl版本

初始設(shè)置和本地啟動(dòng)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)

啟動(dòng)失敗原因:

  • pymapdl工作目錄應(yīng)在當(dāng)前python工作目錄下,可以按照如上代碼設(shè)定 run_location=path+‘\working’
  • 若找不到系統(tǒng)中安裝的mapdl,則可以指定ansys路徑
  • 當(dāng)遇到許可證問題,如mapdl超時(shí)等問題時(shí),使用語句: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

工具庫

本批處理程序文件移動(dòng)采用python os,glob以及shutil包,誤差分析方法采用二范數(shù)誤差分析:

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): ? ? ? ? ? ? ? ? ? ? ? # 移動(dòng)函數(shù)
? ? 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) ? ? ? ? ? ? ? ? ? ? ? # 創(chuàng)建路徑
? ? ? ? shutil.move(srcfile, dstpath + str(file_num)+'-'+fname) ? ? ? ? ?# 移動(dòng)文件
? ? ? ? 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 = [] # 每一個(gè)元素代表一個(gè)文件的結(jié)果
? ? 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包來調(diào)用第三方exe程序,示例如下:

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

需要注意:

  • exe文件放在python的工作根目錄下是最穩(wěn)定的,其余文件按照編程時(shí)與exe文件的目錄關(guān)系進(jìn)行擺放
  • 盡量減少程序中的窗口輸出,如大量的節(jié)點(diǎn)信息在屏幕上輸出,這會(huì)導(dǎo)致鎖死
  • 顯示cmd窗口結(jié)果盡量使用p.communicate()而不是p.wait()防止輸出鎖死計(jì)算停止

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何驗(yàn)證python安裝成功

    如何驗(yàn)證python安裝成功

    在本篇文章中小編給大家整理的是關(guān)于python安裝成功檢驗(yàn)方法,需要的朋友們可以參考下。
    2020-07-07
  • pandas添加新列的5種常見方法

    pandas添加新列的5種常見方法

    pandas為DataFrame格式數(shù)據(jù)添加新列的方法非常簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于pandas添加新列的5種常見方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python 新建文件夾與復(fù)制文件夾內(nèi)所有內(nèi)容的方法

    Python 新建文件夾與復(fù)制文件夾內(nèi)所有內(nèi)容的方法

    今天小編就為大家分享一篇Python 新建文件夾與復(fù)制文件夾內(nèi)所有內(nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸

    Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸

    這篇文章主要介紹了Django 實(shí)現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 基于Python實(shí)現(xiàn)的微信好友數(shù)據(jù)分析

    基于Python實(shí)現(xiàn)的微信好友數(shù)據(jù)分析

    這篇文章主要介紹了基于Python實(shí)現(xiàn)的微信好友數(shù)據(jù)分析的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python爬取新聞門戶網(wǎng)站的示例

    python爬取新聞門戶網(wǎng)站的示例

    短期目前旨在爬取所有新聞門戶網(wǎng)站的新聞,每個(gè)門戶網(wǎng)站爬蟲開箱即用,并自動(dòng)保存到同目錄下的 csv/excel 文件中,禁止將所得數(shù)據(jù)商用。
    2021-04-04
  • python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié)

    python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的一篇關(guān)于python線程優(yōu)先級(jí)隊(duì)列知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • python3.6中anaconda安裝sklearn踩坑實(shí)錄

    python3.6中anaconda安裝sklearn踩坑實(shí)錄

    這篇文章主要介紹了python3.6中anaconda安裝sklearn踩坑實(shí)錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • pycharm下載依賴一直失敗的問題踩坑指南

    pycharm下載依賴一直失敗的問題踩坑指南

    在使用pycharm學(xué)習(xí)python的時(shí)候,經(jīng)常需要第三方庫,沒有第三方庫程序就會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于pycharm下載依賴一直失敗的問題踩坑指南,需要的朋友可以參考下
    2023-06-06
  • Python面向?qū)ο笤砼c基礎(chǔ)語法詳解

    Python面向?qū)ο笤砼c基礎(chǔ)語法詳解

    這篇文章主要介紹了Pyhton面向?qū)ο笤砼c基礎(chǔ)語法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中的基本原理、概念、語法與相關(guān)使用技巧,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

资兴市| 会理县| 郯城县| 中方县| 苍南县| 普安县| 乐亭县| 湘阴县| 景泰县| 宁海县| 辰溪县| 颍上县| 上犹县| 信阳市| 当阳市| 莆田市| 太仆寺旗| 潢川县| 绩溪县| 嘉定区| 抚宁县| 皋兰县| 巴东县| 七台河市| 蒙阴县| 龙里县| 连城县| 平泉县| 云阳县| 梓潼县| 涟水县| 洪江市| 荔波县| 庆阳市| 宣威市| 唐海县| 双鸭山市| 来宾市| 会昌县| 凉山| 宣汉县|