へびねこ技研

個人的なメモなど.

NASA CEAで反復計算が収束しないときの解決例

この記事について

(Number of) ITERATIONS DID NOT SATISFY CONVERGENCE REQUIREMENTS FOR THE POINT (Number) (EQLBRM)  』なエラーが出た時の対処法メモ.多分末尾にこんな感じのエラーが出てると思う.


......
50 ITERATIONS DID NOT SATISFY CONVERGENCE REQUIREMENTS FOR THE POINT 1 (EQLBRM)

RP-1311に全部書いてある(はず)ので隅から隅まで読んで♡という話ではある.

 

結論としての対処法

2つ方法を書いておくが,問題の根っこは同じなので途中までは同じ.

・まずCEAで反復計算が止まったときのoutputファイルの一番下の方を見る


......
POINT ITN T AL O H C NA 1 33 300.000 32.007 -151.095 -5.903 -27.295 13.070 ADD AL2O3(a) 1 11 300.000 -176.638 -108.215 -5.589 -28.487 -30.063 ADD NaOH(a) 1 4 300.000 -176.638 -108.215 -5.586 -28.495 -64.654 ADD H2O(L) 1 3 300.000 -171.194 -111.845 -5.579 -28.508 -61.031 ADD NaALO2(a) SINGULAR MATRIX, ITERATION 0 VARIABLE 9(EQLBRM) TRY REMOVING CONDENSED SPECIES (EQLBRM) REMOVE H2O(L) 50 ITERATIONS DID NOT SATISFY CONVERGENCE REQUIREMENTS FOR THE POINT 1 (EQLBRM)

ここの途中に出てくる"ADD なんちゃら"の部分に書いてある反応種を全部抜き出してメモする.

このあと方法①と方法②に分かれる.たぶん方法①のほうが正しいと思う

 

・方法① : inpファイルのDataset outとDataset endの間にDataset inseオプションを使い,問題になる反応種を最初から計算に含める


......
output short insert NaALO2(a) end

みたいな感じ.複数個の場合はスペース2つ挟んで入れたい反応種を書き連ねる.

 

・方法②(非推奨) : その反応種を無視できると判断できる場合,同様にDataset outとDataset endの間にDataset omitオプションを使って問題になる反応種を計算から除外する.


......
output short omit NaALO2(a) end

みたいな感じ.いずれの場合も種名は正確に(ライブラリに入ってる種名で)書かないと死ぬ.

 

環境

Macbook pro 13-inch 2020 (macOS Monterey ver12.6.6)

NASA-GLENN Chemical Equilibrium Program CEA2 04/21/04

LAST thermo.inp UPDATE:    9/09/04

NASA CEAについて

言わずとしれた化学平衡計算プログラム.我らの御神体にして御本尊.神.本邦では今現在もはや入手できないと聞く.たぶんRP-1311に全部書いてある.筆者は正直中身は全然わからないまま,便利なツールとしてのみ用いている.

https://www1.grc.nasa.gov/research-and-engineering/ceaweb/

 

何が問題だったのか

(未確定,推定)おそらく反復計算初期値パラメータに含まれていない凝縮種をあとから追加する際にパラメータが変だったので発散している……?(ふわふわ理解)

 

問題発生の過程

ある混合物の生成熱計算をしていたところ(tpモード常温常圧条件),CEAがエラーを吐いて止まる現象が発生.


 50 ITERATIONS DID NOT SATISFY CONVERGENCE
               REQUIREMENTS FOR THE POINT    1 (EQLBRM)

 CALCULATIONS STOPPED AFTER POINT  0(EQLBRM)

問題解決の過程

①RP1311-2の該当箇所(6.2)を確認する:

(Number of) ITERATIONS DID NOT SATISFY CONVERGENCE REQUIREMENTS FOR THE POINT (Number) (EQLBRM)

Fatal error. The maximum number of iterations permitted to obtain convergence is either 50+ Ns/2 if trace is included in the outp dataset or 50 otherwise. Generally, convergence is obtained in considerably fewer iterations. The number 50 + Ns/2 was somewhat arbitrarily selected to indicate that, if convergence has not been reached by that number, the problem probably will not converge at all. This situation occurs rarely. When it occurs, this message is printed, as well as the first EQLBRM message. If the cause of nonconvergence is not obvious from the output, it may be helpful to rerun the problem with intermediate output. An examination of this output often pinpoints the source of the difficulty.

・致命的なエラーだよ

・反復は(traceオプションを使ってない場合は)普通50回までで,それまでに収束しないケースはめったにないよ(なんかおかしいよ)

・出力から原因がわかんない場合は中間結果を出力するモード(intermediate output)で実行してその出力を調べるといいよ

なるほど?

 

②intermediateを入れて再実行する(RP1311-2の2.5.2参照).

この場合,outputにdebug=(計算ポイント)を入力する.今回はPOINT 1でしか計算していないので


......
output debug=1 end

こんな感じ.やたらと長い出力が出てくる.どうにも収束せず発散しているっぽい雰囲気はわかるのだが,詳細はちんぷんかんぷんでぜんぜんわからず.この辺はわたしの無理解によるものなので,分かる人は分かるかもしれない(分かる人はこんなブログ見ない).

 

③RP1311-2 6.2の文中に出てきたtraceオプションを試す(RP1311-2 2.5.6参照).

先に見た①の内容的に,traceオプションを使うと収束制限回数が変わるようなので試してみる.同様に


......
output debug=1 trace=1.e-15 end

とする.とんでもなく長い出力が出てきて,収束判定が伸びているのはわかるが(145回まで伸びていた),結局収束せず.

しかしながら,やたら長い行列式を眺めてるとなんか変な値があることに気づく.Njは他の物質ではすべてゼロか正の値なのに,NaALO2(a)だけはマイナスの値を取っている.この辺でNaAlO2(a)が怪しいとにらみ始める.

 

④NaAlO2(a)のthermo.libを確認する

先に断っておくと,ここは本当に無駄足だった.Nasa PolynomialとAerothem format(あとNISTの偉大さ)を再確認するだけのお話.

(この時点で正気を失っていたので)thermo.libに収録されているNaAlO2(a)の熱化学データがおかしいのではないか,近似がうまく行ってないのではないか?と疑い始める.NISTが作っている,NIST-JANAF Thermochemical Tablesが種本になっているっぽいので,このデータをもとにプロットしてThermoとNIST-JANEFの比較,あとついでに見つけたAerochem formatでの比較を試みた.

NaALO2(a)の温度と定圧比熱の関係性について,NIST-JANEFから取ってきた生データ・NASA Polynomialから計算される近似値・Aerochem Formatから計算される近似値をプロットした折れ線グラフ.いずれも高いレベルで一致している

JANEF-NIST(緑)v.s.NASA Polynomial(青)v.s.Aerochem format(赤)
やはり先人は偉大

完璧に一致していた.NASA Polynomialは偉大だった(正気に戻る).

 

⑤覚悟を決めてRP1311-1を読み始める

tpモードではギブス自由エネルギーの最小化を解いているのでそのへん(RP1311-1 2.3節以下)を読むがぜんぜんなんもわからず.

(完全に余談だが,3章冒頭に "(前略)2.3.1項・2.3.2項・2.4.1項・2.4.2項で議論したNewton-Rapson法によって平衡計算を行うのに難しいことはひとつも無いはずである" とか書かれており,生きていてごめんなさい……の顔になった)

引き続いて3章を読み進めていく.と,

(3.1節後半)

確かに,この単純な手順では初期推定値がよくないことが多い.しかし,数多くの化学系に対して計算可能である汎用化学計算プログラムを構築するためには,"良い推定値を得るために多くの特別なルーチンを考案する"という代替案よりも,この手法の方が好ましいと我々は考えている.さらに,この推定技法は,任意の点スケジュールの最初の計算点に対してのみ使用される.最初の計算点以降のすべてのポイントでは,前の計算点の結果が次の初期推定値として機能する.

良い初期推定値を得ようとしない場合,収束が "保証 "されるのかという疑問が生じる.この疑問については3.3節で議論する.

ん?

(3.3節後半)

3.2節で指摘したように,CEAプログラムが許容する最大反復回数は50+NS/2である.このプログラムによって解かれた数百種類の問題のほとんどでは,この回数より少ない回数で収束が得られた.任意の初期推定値から開始する最初の計算点では,典型的な反復回数は8~20回であった.その後の計算点では,以前の計算点の結果を初期推定に使用するため、反復回数は3~10回が典型的であった.たとえば,パートIIで示したサンプル問題では,最初の計算点の反復回数は9~15回であった.特殊な場合では,補正行列の解が得られないことがありうる.このような状況に対処する技法については3.6節で述べる.

エラーは"50 ITERATIONS DID NOT SATISFY CONVERGENCE REQUIREMENTS"でしたね.

(3.4節冒頭)

INSERTレコードが使用されない限り(本レポートのパートIIを参照),設定された計算点のうち最初の計算点の計算が収束するまでの反復においては,プログラムは気体種のみを考慮する.最初の計算点以降の各計算点においては,プログラムは一つ前の計算点の結果を初期推定値として使用する.収束するたびに,プログラムは自動的に濃縮された化学種が含まれているか,あるいは除去されているかを確認する.

ここでようやく"INSERT"オプションにたどり着く.

 

⑥RP-1311-2に戻って"insert"で検索.

(2.6.3冒頭)

dataset inseは,現在の問題における予定された計算スケジュールについて,最初の計算点での計算にどの凝縮種を生成物として含めるかを指定する.化学種名は生成物熱力学データファイルthermo.lib(付録B)で指定されたものでなければならない.このデータセットは通常任意であるが,収束を得るために必要な場合もある.

はい.なるほど…….そうですか.

insertオプションを使って,怪しいと睨んでいた凝縮種の皆さんを初回から計算にぶちこんだら完璧に機能したので方法が確立.同様にomitしても機能したが,あまり健全ではないのでinsertが正しいでしょう,という気がする(収束しなかったら弾かれるわけだし).

 

反省点

ちゃんとツールは理解してから使いましょう.マニュアルとか揃ってるものは特に.

あと後進のためにマニュアルをみんな作ろうね,できればわかりやすいやつ   <どくへび>

Fusion360の工具ライブラリを共有しました

日記要素です.

現在,

・新Mac

・旧Mac

・デスクトップWin10(CNCコントロール用メイン:有線ネットワーク)

・ノートWinXP(CNCコントロール用サブ:スタンドアローン)

の4台を動かしています.

メイン機が旧Mac=>新Macだったのですが,CNC導入に伴ってWin10機でもFusionCAMを使う機会が増えました.

 

FusionCAMの工具ライブラリはローカルにありますので,メインのMacくんに蓄積してきた工具ライブラリが共有できません.ローカルでコピペでもいいですがMacもWinも両方使うので共有したい気持ちが高まりました.

ちなみに工具ライブラリの場所は

Win:C:\Users\任意のユーザー名\AppData\Roaming\Autodesk\CAM360\libraries\Local
Mac:/Users/任意のユーザー名/Library/Application Support/Autodesk/CAM360/libraries/Local

にあると思います.たぶん.

 

 

以下参照URL

やり方

Fusion360 CAMの工具ライブラリをLAN上で共有できた!│キャド研


Winでシンボリックリンクを作る

Windowsでハードリンクやシンボリックリンクを作成する - Qiita


Macシンボリックリンクを作る

Macでシンボリックリンクを作る - Qiita

 

シンボリックリンク作成時にエラーでて???ってなったんですが個人のユーザー名にスペースが含まれていたために出たエラーでした.ダブルクォートでかこんだら治りました.

競合するらしいんですが個人で使う範囲なので考えなくていい(しどうせFusionは2台同時起動はできない)ので気にしないことにしました.これで幸せになりました.<はちのじ>

 

※【追記】2021年6月4日現在,この方法は使えないようです(共有している工具ライブラリが読み込まれません).

※【再訂正】MacOSとOneDriveのかみ合わせが悪いのが原因でした.OneDrive以外であれば使えると思います

 

InkscapeでPNGからDXFに変換する

メモです.まだ手探ってます.一応DXFにはできました.

Inkscapeで透過PNGからDXFに変換しようとしたら思ったより詰まったので書いておきます.

結論としてのやり方(※完全に互換にはできない)

  1. Inkscapeの『ファイル』=>『新規』で新規ファイルを作る.
  2. 『ファイル』=>『名前を付けて保存』でsvgファイルにする.
  3. 『ファイル』=>『インポート』でPNGをインポート.
  4. 対象のPNGを選択している状態で『パス』=>『ビットマップのトレース』を選択.『Multiple Scan』を選択.Scan回数などのパラメータを調整して目的の解像度が得られるまで試行錯誤する.(生成されたベクター画像は同レイヤー内の別オブジェクトとして元のPNGの真上に位置している)
  5. 生成されたベクター画像オブジェクトをドラッグして避け,元になったPNGを削除
  6. 一度保存して閉じる(ここまでsvgのまま)
  7. もう一回開く
  8. 『ファイル』=>『名前を付けて保存』でdxfにする

環境

Macbook pro 13-inch 2020 (macOS Catalina ver10.15.7)

Inkscape 1.0.1 (c497b03c, 2020-09-10)

Inkscapeについて

Inkscapeはフリーの画像描画ソフトです.詳しいことが知りたかったら調べてください.

Inkscapeの導入については省略します.V1.0.1になってXQuartzとかなくても単体で使えるように&64bit対応してくれてめーっちゃ☆助かる……

ダウンロードページのリンク

Download Inkscape 1.0.1 | Inkscape

何で詰まったのか

結論から書くと完全に可換な形で変換するのは無理です.これはベクター画像とビットマップ画像で根本的に描画方法が違うことによります(ここをわかってませんでした).

ベクター画像はその名の通り『ベクトル』で描画します(幾何学的に数式表現で境界を与えます).対してビットマップ画像は『塗りつぶす』ことによって面に色を塗っていくような描画方法になります.

ベクター画像 - Wikipedia 

ビットマップ画像 - Wikipedia

そのため,ビットマップ画像をベクター画像にするためには『塗りつぶしによってできた境界を無数の数式で近似表現する』必要があります(この操作が冒頭に出てきた『ビットマップのトレース』です.一発で近似表現が見つかるわけもないので,複数回走査(=Multiple Scan)して精度を上げたりなんだりをする必要があります).

やった過程

PNGを直接開いて『名前をつけて保存』だと死

検索して『一回PDF or SVG形式で保存』で行けるらしい=>無理でした

dxf保存するときに出てくるパラメータ指定が悪さしてるのか?=>総当り=>無理

テキストをdxfにするときは『オブジェクトをパスへ』が必要らしい=>試す=>無理

ここで『ビットマップのトレース』の項目を見つける=>ググる=>いけそう=>保存できない

=>ここからが『一回PDF or SVG形式で保存』なのでは?=>確立

課題

残念ながら『トレース』なので完全に互換にはできない

元画像の精度・寸法が高精度大画像だとトレース精度が出るけどそうでないとトレースしきれない

もともとが幾何学的図形だと高精度でトレースしてくれるけど,手書きなど非幾何学的な対象はトレース精度が低い(変な点群が残ったりする)

 

もう少しなんとかしたいですね……<ねこのなまえ>

 

 

CNCが来ました

CNCが来ました.

サポートがしっかりしてそう&強そう&それなりに安い,ということでOmioCNC製X4M-USBを選びました.

www.omiocnc.com

ただ,X4M-USBだとリニアブッシュ+リニアシャフト,X4-800Lだとリニアガイドとのことなのですでに若干後悔してます.値段の差で悩みに悩んだんですけど.……買わない後悔より買う後悔.

購入時,支払方法で少々躓いたのちに国際送金で無事支払いを終えました.サポートが手厚いというのは本当でした.レスポンスもちゃんと早いのでありがたい

 

そして開封の儀

f:id:cobra_cat:20201204094735j:plain

ん?

f:id:cobra_cat:20201204094800j:plain

f:id:cobra_cat:20201204094809j:plain

可動部じゃないんですけど輸送中に破損したっぽいですね…….

半分あきらめつつ問い合わせたところ,交換部品を送ってくれるそうです.サポートがしっかりしてるの本当に助かる.

 

交換部品が届いたら組み立てるつもりです.(どくへび)