CプログラムずANSYS 11蚈算コアの統合

圌らのプログラムを芋知らぬ人ず統合する問題は、゜フトりェア開発の分野をたすたすカバヌしおいたす。 倚くのプログラマヌは、自分で曞く必芁があるず考えおいたす。他の人の開発ず統合するのは悪いこずであり、開発チヌムの芏暡、経隓、䟿宜を考慮しおいたせん。 はい、1〜2幎以内に同じ有限芁玠蚈算システムを実装するこずは可胜ですが、高品質ではありたせん。 10幎から20幎にわたっお開発されおきたプロゞェクトの開発の道筋を、2幎以内に繰り返すこずは可胜ですか 圓然䞍可胜であり、しばしば䞍適切です。

ロシアで最も人気のある゜フトりェアツヌルはANSYS、ABAQUS、SCAD、LIRA、PLAXISなどであるず䞻匵する人はいたせん。 そしお、この長く分割された垂堎セグメントでニッチを占める可胜性は䜕ですか そしお、新しいプログラムで再孊習したい人はほずんどいたせん。 しかし、プログラムを匷力な決枈システムず統合し、結果を別のシステムに転送するずいう問題は、はるかに困難なタスクです。 開発ずデバッグに䜕幎もかかった匷力なコンピュヌティングパッケヌゞがあり、特定のタスクがありたすが、1぀のコンピュヌタヌシステムに実装するのが非垞に難しい堎合や、自分で実装できる必芁な機胜がありたせん。

必芁に応じお、実際のテストのグルヌプのモデリングの結果を蚈算モデルず䞀臎させるために、材料モデルのパラメトリック最適化を実行するためにこのタスクを取り䞊げたした。 これは、各゜フトりェア補品が独自の方法を考慮し、ANSYSでの蚈算結果が同じモデルパラメヌタヌを䜿甚したABAQUSでの蚈算ず同䞀ではないずいう事実によっおさらに悪化したす。 蚈算の特定の実装、有限芁玠のタむプ、さらにはグリッドノヌドの堎所に䟝存したす。 その結果、゚ンゞニアは材料のパラメヌタを入力したすが、実際にどのように正確に察応しおいるかはわかりたせん。 さらに、最適なパラメヌタヌの倉動性はテスト結果の70に達する可胜性がありたす。特に、テスト凊理は1぀、最倧2぀の匷床条件、倚くの堎合最も単玔で耇雑なモデルのフレヌムワヌク内で実行されるため、特に必芁に応じお蚭定するように求められた堎合、必芁なパラメヌタヌを決定する方法が垞にわかっおいるずは限りたせんあらゆる範囲の経隓から。

この問題を解決するために、プログラムをANSYS蚈算コアず統合するようにタスクが蚭定されたした。 統合タスクは問題なく解決されたしたが、正垞に解決されたした。 さらに、䞻な問題はパブリックドメむンにドキュメントがたったくないこずでした。そのため、統合の実装に関する情報は、私の問題ず同じ問題を抱えおいる人にずっお非垞に圹立぀ず思いたす。

統合メカニズム



単䞀のANSYS Workbench環境ですべおのANSYS゜フトりェア補品の統合が開始されるず、プログラムをこの環境に盎接統合できるようになりたした。 ANSYS Workbenchアヌキテクチャ自䜓は、アプレットず呌ばれるANSYSモゞュヌルが呌び出されるJavaおよびVBスクリプトを䜿甚しお構築されおいたす。

開発者が最初に思い浮かぶ最初のオプションは、Java-Scriptで以前に䜜成たたは生成されたスクリプトから呌び出すだけで十分なこずです。 ただし、このパスにはかなり重倧な欠陥が1぀ありたす。スクリプトを呌び出すたびに、ワヌクベンチを再床開き、ANSYSアプレットを初期化する必芁がありたす。その埌、蚈算のためにコマンドをカヌネルに送信したす。 これは、 Cにあるスクリプトから芋るこずができたす。\ Program Files \ ANSYS Inc \ v110 \ AISOL \ SDK \ samples \ JPDL \Demo.js。 スクリプトテキストを以䞋に瀺したす。

oWB = new ActiveXObject  "AnsysWB.WB.90"  ;
oWB。 StartApplet = "AAOApplet" ;
oWB。 実行   ;
oWB。 タむトル = "ANSYS Workbench" ;

ConnectToAnsysCS   ;

var fs、a ;
ForAppending = 8 ;
fs = new ActiveXObject  "Scripting.FileSystemObject"  ;
a = fs。 CreateTextFile  "d \ r undir \ t estfile.txt" 、 true  ;

with  ansys。cmd  {
for  l = 4 ; l < 10 ; l ++  {
_clear   ;
_prep7   ;
_view  null 、 -1 、 -2 、 -3  ;
var w = 3 ;
var d = 2 ;
block  null 、l、 null 、w、 null 、d  ;
kp4x = ansys。 apdl get  "KP" 、 4 、 "LOC" 、 "X"  ;
commentx = "KP 4 X LOC =" ;
commentx + = kp4x ;
kp4y = ansys。 apdl get  "KP" 、 4 、 "LOC" 、 "Y"  ;
commenty = "KP 4 Y LOC =" ;
コメント+ = kp4y ;
kp4z = ansys。 apdl get  "KP" 、 4 、 "LOC" 、 "Z"  ;
commentz = "KP 4 Z LOC =" ;
commentz + = kp4z ;
ret = _com  commentx  ;
ret = _com コメント ;
ret = _com  commentz  ;
これ 。 。 WriteLine  commentx  ;
これ 。 。 WriteLine コメント ;
これ 。 。 WriteLine  commentz  ;
球䜓 1  ;
vsbv  1、2  ;
et  2、92  ;
vmesh  "all"  ;
da  9 、 "all"  ;
sfa  4、1、 "pres" 、 10,000,000  ;
mp  "EX" 、1、27E + 06  ;
mp  "PRXY" 、 1、0.3  ;
finish   ;
_solu   ;
解決する  ;
finish   ;
_post1   ;
セット "LAST"  ;
plnsol  "S" 、 " EQV "  ;
_replot   ;
finish   ;
}
}
a。 閉じる   ;


プログラムでスクリプトを生成しお実行するず、非垞に䞍䟿になりたす。なぜなら、 スクリプト自䜓は倖郚ハンドラヌによっお実行されるため、デバッグが非垞に耇雑になりたす。 たた、䜜業の党サむクルを担圓するスクリプトを生成するこずは非垞に䞍䟿です。
䞻な問題は、WorkBench環境のハンドルを取埗しお保存するこずでした。 この芳点から、ワヌクベンチ環境のロヌドを担圓する郚分が最も興味深いものです。

oWB = new ActiveXObject  "AnsysWB.WB.90"  ;
oWB。 StartApplet = "AAOApplet" ;
oWB。 実行   ;
oWB。 タむトル = "ANSYS Workbench" ;


これず他のスクリプトを勉匷するずき、私は質問がありたしたJava-Scriptができるなら、なぜCはできないのですか そしお、非垞にうたくいくこずがわかった。 ANSYSをむンストヌルするず、MS Visual Studio自䜓がすべおのANSYSラむブラリぞのリンクを怜出したすが、少なくずもバヌゞョン11では、それらは倧幅に切り捚おられおいたす。 しかし、その䞭には、Workbench環境でのプログラムの動䜜を担圓するラむブラリであるAnsysWBがありたした。これはANSYSWBLib名前空間の圢匏で接続されおいたす。
ANSYSを実行するには、次のコヌドを曞くのに十分であるこずが刀明したした。

ANSYSWBLib。 WBClass wb = 新しい ANSYSWBLib。 WBClass   ; // ABSYS WBオブゞェクトを䜜成したす
wb。 コマンドラむン ディレクトリ = @ "ctmp" ; //䜜業ディレクトリを指定したす
wb。 コマンドラむン JobName = "Test" ; //プロゞェクトの名前を指定したす
wb。 コマンドラむン CadFile = @ "ctmpqwe.ewq" ; //䜜業ファむルを指定したす
wb。 StartApplet = "AAOApplet" ; //叀兞的なANSYSモゞュヌルが必芁であるこずを指定したす
wb。 実行  0  ;

したがっお、このコヌドを䜿甚するずANSYSを実行でき、起動される埓来のANSYSのアプレットが起動アプレットずしお盎接瀺されたす。 しかし、その埌、私たちは圌ぞの制埡コマンドの転送を敎理する必芁があり、ここで困難が生じたした。 Java-Scriptでは、これは次の行で実装されたす。

アプリ スクリプト ans_sendcommand コマンド

Appは、AAOAppletモゞュヌルぞのハンドルぞのリンクです。 クラスプロパティに栌玍されたす。

wb。 AppletList 。 get_WBApplet  "AAOApplet"  。 アプレット アプリ

しかし、プラグむンラむブラリのANSYSバヌゞョン11では、ANSYSアプレットを操䜜するためのむンタヌフェむスが芋぀かりたせんでした。 幞いなこずに、NET FrameWorkにはMicrosoft.JScriptなどのラむブラリがあり、JScriptスクリプトをメモリ内で盎接コンパむルしお実行でき、Cから必芁な関数の呌び出しを実装できたす。
この目的のために、ANSYSで䜜業するために必芁なすべおの機胜を実装する独自のクラスを䜜成するこずにしたした/クラスコヌドを以䞋に瀺したす。

クラス WBCommand
{
ANSYSWBLib。 WBClass wb ;
パブリック WBCommand  ANSYSWBLib。WBClass WB 
{
wb = wb ;

aao = wb。 AppletList 。 get_WBApplet  "AAOApplet"  。 アプレット アプリ

文字列コヌド= @ "関数クロヌゞャ
{
リタヌン関数アプリ、コマンド
{
return App.Script.ans_sendcommandコマンド;
}
}

閉鎖」 ;
//

SendCommandClosure =  Closure  Microsoft。 JScript 評䟡 JScriptEvaluate コヌド、Microsoft。JScript。Vsa。VsaEngine。CreateEngine    ;
}
private Closure SendCommandClosure = null ;
プラむベヌトクロヌゞャヌSetWorkingDirectoryClosure = null ;
プラむベヌト オブゞェクト aao = null ;

パブリック オブゞェクト SendCommand  string Command 
{
SendCommandClosureを返したす。 Invoke  null 、 new object [ ] { aao、Command }  ;
}

public void SetWorkingDirectory  string WorkingDirectory 
{
SendCommand  "/ CWD、" + WorkingDirectory  ;
}
}

クラスのコンストラクタヌを呌び出すず、呌び出されたプロシヌゞャがJScriptで圢成され、その゚ントリポむントが保存されたす。

文字列コヌド= @ "関数クロヌゞャ
{
リタヌン関数アプリ、コマンド
{
return App.Script.ans_sendcommandコマンド;
}
}

閉鎖」 ;
//

SendCommandClosure =  Closure  Microsoft。 JScript 評䟡 JScriptEvaluate コヌド、Microsoft。JScript。Vsa。VsaEngine。CreateEngine    ;

それを呌び出すために、メ゜ッドが実装されたした

パブリック オブゞェクト SendCommand  string Command 
{
SendCommandClosureを返したす。 Invoke  null 、 new object [ ] { aao、Command }  ;
}

テキストコマンドを必芁ずする入力パラメヌタヌずしお、たたJSCriptが呌び出されるず、関数はコンストラクタヌで受信されaao倉数に保存されたアプレットぞの参照を远加で枡したす。

SendCommandメ゜ッドを呌び出すこずで、倖郚アプリケヌションからAPDL蚀語のANSYSコマンドを転送し、必芁なすべおのアクションを実行できるようになりたした。 この方法は、ANSYSコマンドラむンぞのコマンド入力を盎接゚ミュレヌトしたすが、倚くのコマンドでは確認が必芁です。 アクションの確認芁求を回避するには、コマンドを䞀床に1぀ず぀挿入するのではなく、APDLファむルに曞き蟌み、SendCommandコマンド "/ inp、f、apdl"を呌び出すだけで十分です。この堎合、ANSYSは1぀たたは別の操䜜。

私はANSYSの新しいバヌゞョンでの動䜜をテストしおいないため、JSの䜿甚を完党に攟棄するこずが可胜になりたしたが、バヌゞョン11ずの互換性が必芁な堎合、プログラムを統合する別の方法は芋぀かりたせんでした。

Source: https://habr.com/ru/post/J140397/


All Articles