首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效地从Python运行ANSYS Mechanical APDL

高效地从Python运行ANSYS Mechanical APDL
EN

Stack Overflow用户
提问于 2017-11-23 19:44:33
回答 1查看 2.7K关注 0票数 3

我有以下代码,它使用Windows命令编写一个输入文件并执行ANSYS Mechanical APDL。我的问题是执行时间要长得多(在软件中15分钟,从Python调用时超过1小时)。我需要它更快,因为我改变了所有的输入参数。

代码语言:javascript
复制
def RunAPDL(E,t,w,p,aa,bb,lz,alpha,delta):

    ansyspath = r'C:\Program Files\ANSYS.Inc\v181\ansys\bin\winx64\MAPDL.exe'
    directory = r'C:\Users\Erik\Documents\ANSYS'
    jobname = 'file'
    memory = '4096'
    reserve = '1024'
    inputfile = r'C:\Users\Erik\Documents\ANSYS\ShellBucklingInput.inp'
    outputfile = r'C:\Users\Erik\Documents\ANSYS\OutputFile.txt'
    resultsfile = r'C:\Users\Erik\Documents\ANSYS\ShellBuckling.csv'

    # Start time count
    start = time.clock()

    # Write input file
    input_parameters = ('/NERR,200,10000,,OFF,0 \n'
                        'pi = acos(-1) \n'
                        'E = {:6.0f}     ! N/mm2 Young\'s modulus\n'
                        't = {:4.2f}       ! mm thickness\n'
                        'w = {:3.2f}       ! Poisson\'s ratio\n'
                        'p = {:7.2f}    ! N/mm2 external pressure\n'
                        'aa = {:6.2f}   ! mm horizontal radius at u = 0\n'
                        'bb = {:6.2f}   ! mm vertical radius\n'
                        'lz = {:6.2f}   ! mm model height\n'
                        'lu = 2*asin(lz/2/bb) !mm \n'
                        'lv = 2*pi      ! model perimeter at u = 0 \n'
                        'nu = 2*NINT(ABS(aa)/SQRT(ABS(aa)*t)) \n'
                        'nv = 3*nu      ! number of elements along v-axis \n'
                        'alpha = {:4.2f}   ! ratio of lu that is not loaded by p \n'
                        'delta = {:4.2f}*t ! prescribed imperfection magnitude \n'
                        '*ULIB,ShellBucklingLibrary,mac \n'
                        '*USE,ShellBuckling,pi,E,t,w,p,aa,bb,lz,lu,nu,nv,alpha,delta \n'
                        '/CLEAR'
                        ).format(E,t,w,p,aa,bb,lz,alpha,delta)
    with open(inputfile,'w') as f:
        f.write(input_parameters)

    # Call ANSYS
    callstring = ('\"{}\" -p aa_t_a -dir \"{}\" -j \"{}\" -s read'
                  ' -m {} -db {} -t -d win32 -b -i \"{}\" -o \"{}\"'
                  ).format(ansyspath,directory,jobname,memory,reserve,inputfile,outputfile)
    print('Invoking ANSYS with', callstring)
    proc = subprocess.Popen(callstring).wait()

    # Update pressure field for next analysis
    with open(resultsfile,'r') as f:
        lambdaS = float(list(csv.reader(f))[-1][16])
    p = 1.2*lambdaS*p
    print('Updated pressure is',p,' N/mm2.')

    # Stop time count
    stop = time.clock()
    print('Elapsed time is ',stop-start,' seconds.')

    return(p) 

我通过在Python shell上按F5来执行它,然后在shell中出现消息:

代码语言:javascript
复制
Invoking ANSYS with "C:\Program Files\ANSYS 
Inc\v181\ansys\bin\winx64\MAPDL.exe" -p aa_t_a -dir 
"C:\Users\Erik\Documents\ANSYS" -j "file" -s read -m 4096 -db 1024 -t -d 
win32 -b -i "C:\Users\Erik\Documents\ANSYS\ShellBucklingInput.inp" -o 
"C:\Users\Erik\Documents\ANSYS\OutputFile.txt"
Updated pressure is -0.0046478399999999994  N/mm2.
Elapsed time is  4016.59094467131  seconds.
EN

回答 1

Stack Overflow用户

发布于 2020-05-30 23:11:38

我不知道为什么你的代码在Python语言中比较慢,但我建议你使用PyPI的PyAnsys包。它提供了一个强大的基础设施来结合Python和APDL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47454745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档