忍者ブログ

火山系フリーターの落書き帳

火山学者が書かない秘密の話。

MELTS自動化の旅その4。大量のmelts.outファイルを処理する方法

1.はじめに

MELTS自動化の旅その3。大量の*.meltsファイルを用意する方法に引き続き、MELTSを自動で計算させるための話。

今回は大量のアウトプットファイルを処理する方法。

2.大量のアウトプットファイルを処理する方法

通常、1回のMELTSの計算結果を確認するとき、melts.outファイルを利用すると思います。 ここには、特定の温度・圧力時に平衡な各結晶とその組成、またリキッドの組成などが記録されています。

これまでの開発でMELTSから大量のデータを取れるようになったものの、今度はそれを処理する仕組みが必要になりました。 さすがに数百データを1つ1つ人の目でチェックして行くのは非合理的です。

そこで、*.tblファイルを利用して、抽出したいデータを選択的に抽出、概略を記録するファイルに記録して行くことにしました。 melts.outは、ユーザー向けに体裁が作られている分、プログラム的には処理しにくいからです。

melts.outの結果は、*.tblファイルにも記録されています。 むしろ*.tblファイルの概略版がmelts.outです。

*.tblでは、各結晶ごとに出てきますので、例えばplagioclase.tblやorthopyroxene.tblなどのファイルが作られます。 plagioclase.tblには直接An値が計算されて出力されるため、その行の温度・圧力とAn量だけ抜き出して概略を記録するファイルに記録します。 同じようにorthopyroxene.tblも必要なデータだけ抽出すればいいのです。

なお、orthopyroxene.tblからMg#を得るには、カチオンの計算が必要なのでちょっと手間です。

3.プログラム的な処理の流れ

プログラム的には、MELTSの処理が終わった後に行います。 melts.outは計算が終了するとアウトプットされるのですが、*.tblファイルはなぜかMELTSを正常に終了させないと出てこないという変わり者です。

*.tblファイルが生成されたあと、rename関数(もしくはシェルでcp)などを使って、*.tblファイルを保存場所に退避させます。 *.tblファイルの実体は単なるcsv形式のテキストファイルですので、fopen関数で開き、特定の位置にある数値を読み込んでfcloseするだけです。 あとは、煮るなり焼くなり自由な処理ができます。

4.相図が作れるんじゃないか?

おそらく、これを上手く使えば簡単に相図が作れるんじゃないかと思います。 例えば、含水量固定と圧力を段階的に変え、各圧力条件で温度だけを低減させる供給系の場合、MELTS自動化の旅その3。大量の*.meltsファイルを用意する方法で触れたCSVファイルにインプットデータを大量に書き込み、必要なデータを抜き取ってまとめることで、各圧力毎の結晶状態を簡単に抽出できます。 普通にやったらすごく時間がかかりますが、自動処理したら数時間でたぶん完成かなと。

個人的に、産総研とかの組織は、こういった自動化のプログラムを持ってるんじゃないかなーと思っていますが、中の組織のことはよう知らんです。 だってMELTSから相図作ろうとしても、結構時間かかると思いますから。

5.おしまい

というわけで、大量のインプットデータとアウトプットデータを処理する仕組みが出来つつあります。 問題は自分以外使いこなせないような自分専用カスタマイズになってしまっている点ですが・・・自分以外使う機会は無いと思うので良いと思います笑

動いてるところの動画とか撮れたら面白いかもしれないですね。

PR