計算時における処理の個別実行
概要
計算時の処理を個別に行う方法を示します。弊社製品以外のソルバー実行は、以下のように3つの処理を行っています。
処理 | 内容 |
---|---|
プレ処理 | D'sNAP入力データファイル(~.dif)からソルバー用の入力データファイルを作成 |
計算処理 | ソルバー用の入力データファイルをソルバーに引き渡し、ソルバーの計算を実行 |
ポスト処理 | ソルバーが出力した計算結果ファイルからD'sNAP用の計算結果ファイル(~.dbn)を作成 |
通常は、これらの処理を一括して行っていますが、処理を個別に行うこともできます。処理を個別に行うことにより、 各処理の間にフィルタープログラムを実行させることも可能です。
例えば、オリジナルのソルバーから入力データの書式が変わっている場合など、フィルタープログラムにより 一部の入力書式を変更して計算を実行するような操作を行うことができます。あまりお勧めはできませんが、 そのような処理を行うことも可能です。また、計算完了後に別の処理をD'sNAPで一括して行いたい場合にも利用できます。
ご注意
ここで示す操作はソフトウェアの動作を変更するものです。不慮の事態に備えて事前に対象となるファイルのバックアップを確保するなど、必ず現状復帰のための手段を用意してください。
また、環境により管理者権限を要求される場合があります。その際にはあくまで自己責任において操作を行ってください。
定義ファイルの変更方法
ここで示す定義ファイルはすべてD'sNAPのインストール先フォルダ以下のIncludeフォルダに格納されています。
定義ファイルはすべて文字コードはShift-JIS(cp932)、改行コードはCRLFです。
DsNAP.iniの内容を確認する
テキストエディターでDsNAP.iniを開き、内容を確認します。DsNAP.iniは、利用可能なソルバーの情報とそのデータ形式・データ編集コンポーネントを規定するファイルです。
ここではAC-UNSAF2Dの例を示しています。「CALCULATION」直下にあるデータを変更します。
DsNAP.ini
COMP "AC-UNSAF2D" 1.00 "岡山大学" 2006 5
INCLUDE
BSC "UnsafBsc.ini" "BasicForm.exe" Basic
MAT "UnsafMat.ini" "MaterialForm.exe" Material
MSH "" "MeshForm.exe" Mesh
CNS "UnsafCns.ini" "ProcessForm.exe" Process
CALCULATION
1 "CalculationForm.exe" "Unsaf2DPrePost.exe"
POST PROCESSOR
"PostForm.exe" dbn
内容を編集する
以下のように[編集前]の一括処理を、[編集後-1]のように3つの処理(プレ、計算、ポスト)に分けて実行するようにします。 この状態は、[編集前]と[編集後-1]で処理の内容は変わりません。
編集前
1 "CalculationForm.exe" "Unsaf2DPrePost.exe"
編集後-1
1 "CalculationForm.exe" "Unsaf2DPrePost.exe /pre" "Unsaf2DPrePost.exe /solve" "Unsaf2DPrePost.exe /post"
計算実行前にフィルタープログラム(Unsaf2DInputFilter.exe)を実行する際には、以下の[編集後-2]のように記述します。
編集後-2
1 "CalculationForm.exe" "Unsaf2DPrePost.exe /pre" "Unsaf2DInputFilter.exe" "Unsaf2DPrePost.exe /solve" "Unsaf2DPrePost.exe /post"
計算後に処理を追加したい場合は、3つの処理に分ける必要はなく、以下の[編集後-3]のように最後に実行したい実行ファイル名(Unsaf2DResultFilter.exe)を記述します。
編集後-3
1 "CalculationForm.exe" "Unsaf2DPrePost.exe" "Unsaf2DResultFilter.exe"
オリジナルと区分けする場合
オリジナルと区分けする場合は、対象とするソルバーの編集前のデータを全てコピーし、DsNAP.iniファイルの最終行に貼り付けて ソルバーIDと、CALCULATION直下のデータを編集します。ソルバーIDは、ユニークな番号とする必要があります。 オリジナルのソルバー番号+5000のようにします。以下の例ではソルバーID 5 を 5005 にしています。
DsNAP.ini
COMP "AC-UNSAF2D" 1.00 "岡山大学" 2006 5005
INCLUDE
BSC "UnsafBsc.ini" "BasicForm.exe" Basic
MAT "UnsafMat.ini" "MaterialForm.exe" Material
MSH "" "MeshForm.exe" Mesh
CNS "UnsafCns.ini" "ProcessForm.exe" Process
CALCULATION
1 CalculationForm.exe "Unsaf2DPrePost.exe /pre" "Unsaf2DInputFilter.exe" "Unsaf2DPrePost.exe /solve" "Unsaf2DPrePost.exe /post"
POST PROCESSOR
"PostForm.exe" dbn
D'sNAPとやり取りするファイル
各種実行ファイルがD'sNAPとやり取りするファイルを以下に示します。正確にはCalculationForm.exeがやりとりするファイルを生成しています。
D'sNAPから引き渡されるファイル
D'sNAPからは、以下の内容のファイルが引き渡されます。
行数 | 内容 | 出力例 |
---|---|---|
1行目 | D'sNAプロジェクトファイル名(~.dif) | c:¥Dsnap¥~work¥~DsNAP.dif |
2行目 | ソルバー入力データファイル名(~.dac) | c:¥Dsnap¥samples¥dif¥test¥Case-1.dac |
3行目 | ソルバー計算結果ファイル名(~.txt) | c:¥Dsnap¥samples¥dif¥test¥Case-1.txt |
4行目 | D'sNA計算結果ファイル名(~.dbn) | c:¥Dsnap¥samples¥dif¥test¥Case-1.dbn |
5行目 | アプリケーションパス | c:¥Dsnap¥bin¥ |
6行目 | ダミーデータ | 0 0 |
7行目 | エラーコード | 9999 |
D'sNAプロジェクトファイルは、オリジナルファイルではなく、ワークパスにコピーしたファイルが使用されます。 このファイルは、基本となる4つのファイル(~.bsc、~mat、~msh、~cns)の内容が全て1つにまとめられたファイルです。
D'sNAPに引き渡すファイル
D'sNAPには、上記ファイルと同じ内容でエラー番号を変えたファイルを引き渡します。正常に処理が終了した場合は、 0を記述します。エラーが発生した場合は、0以外の整数を記述します。エラーが発生した時点でD'sNAPは、以降の処理を実行しません。
エラーメッセージを表示したい場合は、8行目に以下の記述を追加します。
行数 | 内容 | 出力例 |
---|---|---|
8行目 | エラーメッセージ | ErrorMessage "エラーが発生しました。" |
ポスト処理に関する補足
D'sNAPインストール先binフォルダに以下のファイルがある場合、以下のファイルに従ってソルバーが出力した計算結果を読み込みます。
ソルバー計算結果書式定義ファイル
[SolverName]_ResultFormat.def
※[SolverName]部は、対応するソルバー名を示します。
このファイルには出力書式に関する情報が記述されています。出力書式が変わった場合や、追加の計算結果が出力された場合は、 このファイルを修正して対応することが可能です。
オリジナルと区分けする場合
オリジナルと区分けする場合は、対象とするソルバーの編集前のデータを全てコピーし、DsNAP.iniファイルの最終行に貼り付けて ソルバーID(変更後:5005)と、ソルバー名(変更後:AC-UNSAF2DEx1)を変更します。ソルバーIDは、ユニークな番号とする必要があります。
ソルバー計算結果書式定義ファイルは、コピー後に[SolverName]部分のファイル名を対象ソルバー名に変更します。
DsNAP.ini
COMP "AC-UNSAF2DEx1" 1.00 "岡山大学" 2006 5005
INCLUDE
BSC "UnsafBsc.ini" "BasicForm.exe" Basic
MAT "UnsafMat.ini" "MaterialForm.exe" Material
MSH "" "MeshForm.exe" Mesh
CNS "UnsafCns.ini" "ProcessForm.exe" Process
CALCULATION
1 CalculationForm.exe "Unsaf2DPrePost.exe /pre" "Unsaf2DInputFilter.exe" "Unsaf2DPrePost.exe /solve" "Unsaf2DPrePost.exe /post"
POST PROCESSOR
"PostForm.exe" dbn