############################################################## パラメータファイルに対するプリコンパイル ############################################################## ========================================================= プリコンパイラ / プリコンパイラ ========================================================= * **プリコンパイル** :コンパイル前にファイルをテキスト処理し、 :blue:`記述の効率性や再利用性を向上するコーディング技術.` * **プリコンパイラ** :ソースコードを処理して別の形式のコードを生成するプログラム群. | ========================================================= パラメータファイルのプリコンパイル ========================================================= --------------------------------------------------------- (課題) パラメータファイルを取扱い容易に、可読性の向上 --------------------------------------------------------- * 技術計算系のソフトウェアは、入力ファイルとして :blue:`決められたフォーマット` のファイルを与えることが多々ある. - (e.g.) Elmer, PHITS, EMSolution, gmsh, etc. * 記載中で、 :red:`変数の使用` 、 :red:`四則演算` 、 :red:`分割ファイル読み込み` ができなければ、記載が煩雑になりがち. * :blue:`可読性` も下がる. | --------------------------------------------------------- (解決方法) プリコンパイラを導入 --------------------------------------------------------- * 変数名を与えて、「ある数値 ( e.g. 1.602e19 )」 が :blue:`何を指すのか` ( e.g. 電化素量 )を明瞭に. * 繰り返し現れる数値を :blue:`一括変更` . * 変数を使用した計算を可能にして、とあるパラメータを変更したときに、 :blue:`別数値が連動して変更` されるように. * 分割ファイルで、パラメータファイルを :blue:`機能ごとに整理` 、構成をわかりやすく. | ========================================================= 使い方 ========================================================= * パラメータファイル中で変更したい変数名を :red:`"@XXXX"` と @マークから始まるように記載. * 変数の定義は次の通り (i) .jsonファイル中で与える ( jsonの記事で記載 ) (ii) # @var1 = 1.0 のように 文を使用して定義する. * 変数は計算可能だが、ファイルの前方から順に処理していくため、 :blue:`記載順には要注意` . + 一応、単なる数値等、1重呼び出し程度なら前後しても問題ないが、 **多重に呼び出し、かつ、順番前後した変数定義は不可** . - 2重以上の変数呼び出しはしない ( etc. @var1=@var2, @var2=@var3, @var3=1.0 ) - 2重以上の変数呼び出しだが、は前から順に宣言する.:: # @var3 = 1.0 # @var2 = @var3 # @var1 = @var2 * jsonでの数式記述に関しては、別記事を参照. | --------------------------------------------------------- コマンドラインからの実行 --------------------------------------------------------- * precompile__parameterFile.py を パスの通ったところにおいて、 ( e.g. /usr/local/bin/ ) * 実行権限 を付与し、 ( e.g. $ chmod +x /usr/local/bin/precompile__parameterFile.py ) * pythonの実行のおまじないをを先頭行に記載し、 ( e.g. #!/usr/bin/env python3.10 ) * コマンドラインから実行すれば、 簡易実行可能 - 例 :: $ precompile__parameterFile.py sample_parameter.inp $ precompile__parameterFile.py sample_parameter.inp --comment_mark $ --outFile sample_parameter.out | ========================================================= コード ========================================================= --------------------------------------------------------- プリコンパイラエンジン --------------------------------------------------------- .. literalinclude:: pyt/precompile__parameterFile.py :language: python | --------------------------------------------------------- パラメータファイルサンプル ( sample_parameter.inp ) --------------------------------------------------------- .. literalinclude:: cnf/sample_parameter.inp | --------------------------------------------------------- パラメータファイルサンプル ( include.inp ) --------------------------------------------------------- .. literalinclude:: cnf/include.inp | --------------------------------------------------------- パラメータファイルサンプル ( sample_parameter.json ) --------------------------------------------------------- .. literalinclude:: cnf/sample_parameter.json | --------------------------------------------------------- 出力例 ( sample_parameter.out ) --------------------------------------------------------- .. literalinclude:: cnf/sample_parameter.out