Module: VaspUtils::Outcar
- Defined in:
- lib/vasputils/outcar.rb
Overview
! /usr/bin/env ruby coding: utf-8
OUTCAR をパースする。精確には行わず、必要な情報だけをピックアップする感じ。
あまり頑張らないことにした理由は以下。
OUTCAR がどう出力されるのかがよくわからない。
本来は vasp のソースを見て決めるべきだろう。
やるとすればかなり大掛かりなプロジェクトになるが、そのわりには旨味が少ない。
grep でなんとかなるし。
基本的に終了した計算から情報を取り出すには vasprun.xml を読む。だが、計算途中の状態を知りたいとうのもよくある要求。こういう場合には vasprun.xml はきちんと閉じた xmlにならないので使えない。OUTCAR は終了する前も含めてなんか簡単に見るために使う、という位置付けで。
Class Method Summary collapse
-
.load_file(file) ⇒ Object
toten は全 electronic and ionic steps のを flat に並べただけのもの。 必要なら構造化するが、現状その予定はない。 attr_reader :name attr_reader :ionic_steps, :electronic_steps, :totens, :volumes, :elapsed_time.
Class Method Details
.load_file(file) ⇒ Object
toten は全 electronic and ionic steps のを flat に並べただけのもの。必要なら構造化するが、現状その予定はない。attr_reader :name attr_reader :ionic_steps, :electronic_steps, :totens, :volumes, :elapsed_time
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/vasputils/outcar.rb', line 24 def self.load_file(file) raise Errno::ENOENT unless File.exist?(file) results = {} results[:name] = file #results[:irreducible_kpoints] = nil #results[:electronic_steps ] = 0 #results[:ionic_steps ] = 0 #results[:totens ] = [] #results[:volumes ] = [] results[:elapsed_time ] = nil results[:normal_ended ] = false lines = `grep Iteration #{file}`.split("\n") results[:electronic_steps] = lines.size /^-* Iteration\s+(\d+)/ =~ lines[-1] results[:ionic_steps ] = $1.to_i results[:totens] = `grep TOTEN #{file}`.split("\n").map do |line| /TOTEN\s+=\s(.*)\s+eV/ =~ line $1.to_f end line = `tail -q -n 8 #{file}| head -n 1` if (/Elapsed time \(sec\):\s+(\d+\.\d+)/ =~ line) results[:elapsed_time] = $1.to_f end line = `tail -q -n 1 #{file}` results[:normal_ended] = true if (/Voluntary context switches:/ =~ line) results end |