轉(zhuǎn)]將ansys作為子程序調(diào)用
將ANSYS作為子程序調(diào)用
對于優(yōu)化或參數(shù)化設(shè)計,可以在VC或FORTRAN中將ANSYS作為子程序調(diào)用。具體調(diào)用方法如下:
1.在VC中調(diào)用ANSYS
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i input_file -o output_file",SW_SHOWNORMAL);
2.在FORTRAN中調(diào)用ANSYS
LOGICAL(4) result
RESULT=SYSTEMQQ(‘d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p
ansys_product_feature -i input_file -o output_file‘)
3.說明
1和2中,input_file為用APDL語言編寫的ANSYS輸入文件。
ansys_product_feature為你的ANSYS產(chǎn)品特征代碼。
需要注意的是,在VC中調(diào)用ANSYS時,需要加一條判斷語句,以確定ANSYS
已經(jīng)執(zhí)行完畢。
在FORTRAN中不需要判斷,F(xiàn)ORTRAN會等ANSYS執(zhí)行完畢才繼續(xù)執(zhí)行下一條語句。
在VC中,我沒有找到與FORTRAN類似的函數(shù),只好加一條循環(huán)判斷語句。
如果誰能找著這樣的函數(shù),請告訴我,謝謝!
判斷方法很簡單,只需判斷錯誤文件file.err是否可寫就可以了。
因為當ANSYS在運行時,file.err是不可寫的,只有當它運行完畢,此文件才可寫。
數(shù)據(jù)文件(假設(shè)輸出的數(shù)據(jù)文件名為opt.out):
*dim,out1,,2,1
out1(1)=dmax !目標函數(shù)
out1(2)=1-eymax !約束條件1
*cfopen,opt,out
*vwrite,out1(1),out1(2)
(2f10.6)
*cfclos
在VC中相應(yīng)的顯示數(shù)據(jù)文件命令為:
result=system("notepad opt.out");
圖形文件(假設(shè)ANSYS工作文件名為test,輸出jpg圖形文件,具體信息請參考命令/show):
/SHOW,JPEG
JPEG,QUAL,75,
JPEG,ORIENT,HORIZ
JPEG,COLOR,2
JPEG,TMOD,1
/GFILE,600,
!*
plns,uy
/SHOW,TERM
在VC中相應(yīng)的顯示圖形文件命令為:
result=system("mspaint test001.jpg");
**************************************************************************************
VC調(diào)用ANSYS的示例程序。
//Test.cpp
#include "stdio.h"
#include"process.h"
void main()
{
int result;
printf("Solving...");
result=system("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansysul -i test.txt -o test.out");
//不用::WinExec,就用不著等待語句,可以實現(xiàn)用FORTRAN調(diào)用一樣的效果。
printf("Solution finished...");
}
怎么還不知道?那個特征表找著沒有?ANSYS幫助->ANSYS,INC.Licensing Guide->License files->What are License files->Product feature Table
以第一行為例:ANSYS/MULTIPHYSICS ane3fl
ANSYS/MULTIPHYSICS是產(chǎn)品特征名稱,ane3fl是與其對應(yīng)的產(chǎn)品特征代碼,把這個代碼填到下面的語句中:
result=system("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ane3fl -i test.txt -o test.out");
VC中的變量與APDL語言中的變量可以進行數(shù)據(jù)交換,否則怎么實現(xiàn)參數(shù)化或優(yōu)化設(shè)計?
不過不能直接互換.我采用的辦法是,在VC中將變量結(jié)果寫到一個文件中,然后再在ANSYS的APDL語言文件中讀入這個文件的數(shù)據(jù),再由ANSYS進行新的計算,計算結(jié)束之后,再由后處理處理結(jié)果,并將結(jié)果數(shù)據(jù)輸出到一個文件中,然后用VC讀入此文件中的數(shù)據(jù),進行下一步處理.