vasputils 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/VERSION +1 -1
  2. data/bin/checkvasp +6 -5
  3. data/bin/latticeconstants +13 -8
  4. data/bin/qsubvasp +5 -5
  5. data/bin/rmvaspout +40 -0
  6. data/bin/runvasp +5 -6
  7. data/bin/symposcar +38 -28
  8. data/lib/vasputils.rb +11 -0
  9. data/lib/vasputils/incar.rb +3 -1
  10. data/lib/vasputils/kpoints.rb +3 -1
  11. data/lib/vasputils/outcar.rb +46 -31
  12. data/lib/vasputils/poscar.rb +3 -1
  13. data/lib/vasputils/potcar.rb +3 -1
  14. data/lib/vasputils/vaspdir.rb +8 -11
  15. data/lib/vasputils/{vaspgeomopt.rb → vaspgeometryoptimizer.rb} +6 -5
  16. data/memo.txt +9 -1
  17. data/test/test_incar.rb +5 -4
  18. data/test/test_kpoints.rb +7 -6
  19. data/test/test_outcar.rb +25 -24
  20. data/test/test_poscar.rb +11 -10
  21. data/test/test_potcar.rb +7 -6
  22. data/test/test_vaspdir.rb +10 -10
  23. data/test/{test_vaspgeomopt.rb → test_vaspgeometryoptimizer.rb} +21 -20
  24. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/CONTCAR +0 -0
  25. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/INCAR +0 -0
  26. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/KPOINTS +0 -0
  27. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/OUTCAR +0 -0
  28. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/POSCAR +0 -0
  29. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try00/POTCAR +0 -0
  30. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try01/INCAR +0 -0
  31. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try01/KPOINTS +0 -0
  32. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try01/OUTCAR +0 -0
  33. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try01/POSCAR +0 -0
  34. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter1/try01/POTCAR +0 -0
  35. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/CONTCAR +0 -0
  36. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/INCAR +0 -0
  37. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/KPOINTS +0 -0
  38. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/OUTCAR +0 -0
  39. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/POSCAR +0 -0
  40. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try00/POTCAR +0 -0
  41. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try01/INCAR +0 -0
  42. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try01/KPOINTS +0 -0
  43. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try01/OUTCAR +0 -0
  44. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try01/POSCAR +0 -0
  45. data/test/{vaspgeomopt → vaspgeometryoptimizer}/ended-Iter2/try01/POTCAR +0 -0
  46. data/test/{vaspgeomopt → vaspgeometryoptimizer}/not-yet/try00/INCAR +0 -0
  47. data/test/{vaspgeomopt → vaspgeometryoptimizer}/not-yet/try00/KPOINTS +0 -0
  48. data/test/{vaspgeomopt → vaspgeometryoptimizer}/not-yet/try00/POSCAR +0 -0
  49. data/test/{vaspgeomopt → vaspgeometryoptimizer}/not-yet/try00/POTCAR +0 -0
  50. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/CHG +0 -0
  51. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/CHGCAR +0 -0
  52. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/CONTCAR +0 -0
  53. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/DOSCAR +0 -0
  54. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/EIGENVAL +0 -0
  55. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/INCAR +0 -0
  56. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/KPOINTS +0 -0
  57. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/OSZICAR +0 -0
  58. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/OUTCAR +0 -0
  59. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/PCDAT +0 -0
  60. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/POSCAR +0 -0
  61. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/POTCAR +0 -0
  62. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/WAVECAR +0 -0
  63. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/XDATCAR +0 -0
  64. data/test/{vaspgeomopt → vaspgeometryoptimizer}/prepare_next/try00/vasprun.xml +0 -0
  65. data/test/{vaspgeomopt → vaspgeometryoptimizer}/started/try00/INCAR +0 -0
  66. data/test/{vaspgeomopt → vaspgeometryoptimizer}/started/try00/KPOINTS +0 -0
  67. data/test/{vaspgeomopt → vaspgeometryoptimizer}/started/try00/POSCAR +0 -0
  68. data/test/{vaspgeomopt → vaspgeometryoptimizer}/started/try00/POTCAR +0 -0
  69. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/CONTCAR +0 -0
  70. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/INCAR +0 -0
  71. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/KPOINTS +0 -0
  72. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/OUTCAR +0 -0
  73. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/POSCAR +0 -0
  74. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try00/POTCAR +0 -0
  75. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try01/INCAR +0 -0
  76. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try01/KPOINTS +0 -0
  77. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try01/POSCAR +0 -0
  78. data/test/{vaspgeomopt → vaspgeometryoptimizer}/till01/try01/POTCAR +0 -0
  79. data/vasputils.gemspec +61 -63
  80. metadata +82 -84
  81. data/bin/addVolumeToten.rb +0 -19
  82. data/lib/vasputils/calcinspector.rb +0 -24
  83. data/test/test_calcinspector.rb +0 -53
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
data/bin/checkvasp CHANGED
@@ -6,14 +6,15 @@
6
6
  #require "vasputils/calcseries.rb"
7
7
  require "rubygems"
8
8
  gem "vasputils"
9
+ require "vasputils.rb"
9
10
 
10
- require "vasputils/vaspgeomopt.rb"
11
- require "vasputils/vaspdir.rb"
11
+ #require "vasputils/vaspgeomopt.rb"
12
+ #require "vasputils/vaspdir.rb"
12
13
  require "pp"
13
14
  #require "optparse"
14
15
 
15
16
  LONGEST_STATE = :terminated.size
16
- KLASSES = [VaspDir, VaspGeomOpt]
17
+ KLASSES = [VaspUtils::VaspDir, VaspUtils::VaspGeometryOptimizer]
17
18
 
18
19
  dirs = ARGV
19
20
  dirs = Dir.glob("*").sort if ARGV.empty?
@@ -42,7 +43,7 @@ dirs.each do |dir|
42
43
  printf "%-11s ", klass_name
43
44
 
44
45
  case klass_name
45
- when "VaspDir"
46
+ when "VaspUtils::VaspDir"
46
47
  calc = klass.new(dir)
47
48
  printf "%-10s ", calc.state
48
49
  #pp calc.outcar
@@ -55,7 +56,7 @@ dirs.each do |dir|
55
56
  printf "%8s %3s (%3s) ", " "*8, " "*3, " "*3
56
57
  end
57
58
 
58
- when "VaspGeomOpt"
59
+ when "VaspUtils::VaspGeometryOptimizer"
59
60
  calc = klass.new(dir)
60
61
  printf "%-10s ", calc.state
61
62
 
data/bin/latticeconstants CHANGED
@@ -1,14 +1,19 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require "vasputils/poscar.rb"
4
- require "crystal/latticeaxes.rb"
5
- require "crystal/cell2.rb"
3
+ require "rubygems"
4
+
5
+ gem "vasputils"
6
+ require "vasputils.rb"
7
+
8
+ gem "crystalcell"
9
+ require "crystalcell/latticeaxes.rb"
10
+ require "crystalcell/cell.rb"
6
11
 
7
12
  puts " a, b, c, alpha, beta, gamma, volume, file"
8
13
  ARGV.each do |file|
9
- axes = Poscar.load_file(file).axes
10
- printf("%8.5f, %8.5f, %8.5f, %6.2f, %6.2f, %6.2f, ",
11
- *(axes.get_lattice_constants))
12
- printf("%10.5f, ", Cell2.new(axes).calc_volume) # show volume
13
- puts file
14
+ axes = VaspUtils::Poscar.load_file(file).axes
15
+ printf("%8.5f, %8.5f, %8.5f, %6.2f, %6.2f, %6.2f, ",
16
+ *(axes.get_lattice_constants))
17
+ printf("%10.5f, ", Cell.new(axes).calc_volume) # show volume
18
+ puts file
14
19
  end
data/bin/qsubvasp CHANGED
@@ -25,8 +25,8 @@ gem "comana"
25
25
  require "comana/queuesubmitter.rb"
26
26
  require "comana/machineinfo.rb"
27
27
 
28
- require "vasputils/vaspdir.rb"
29
- require "vasputils/vaspgeomopt.rb"
28
+ gem "vasputils"
29
+ require "vasputils.rb"
30
30
 
31
31
  opts = {}
32
32
 
@@ -61,15 +61,15 @@ def condition_check(opts)
61
61
  begin
62
62
  conds["target"] = VaspGeomOpt.new(File.expand_path(ARGV[0]))
63
63
  conds["command"] = "runvasp -g"
64
- rescue VaspGeomOpt::NoVaspDirError
64
+ rescue VaspUtils::VaspGeometryOptimizer::NoVaspDirError
65
65
  puts "Seem not to be a directory for VaspGeomOpt #{ARGV}"
66
66
  exit
67
67
  end
68
68
  else
69
69
  begin
70
- conds["target"] = VaspDir.new(File.expand_path(ARGV[0]))
70
+ conds["target"] = VaspUtils::VaspDir.new(File.expand_path(ARGV[0]))
71
71
  conds["command"] = "runvasp"
72
- rescue VaspDir::InitializeError
72
+ rescue VaspUtils::VaspDir::InitializeError
73
73
  puts "Seem not to be a directory for VaspDir #{ARGV}"
74
74
  exit
75
75
  end
data/bin/rmvaspout ADDED
@@ -0,0 +1,40 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "optparse"
5
+
6
+ require "fileutils"
7
+ #require "rubygems"
8
+ #gem "vasputils"
9
+ require "vasputils"
10
+
11
+ ## option analysis
12
+ OPTIONS = {}
13
+ op = OptionParser.new
14
+ op.on("-f" , "--force" , "Force to remove finished calc."){ OPTIONS[:force] = true}
15
+ op.parse!(ARGV)
16
+
17
+ ARGV.each do |tgt|
18
+ # Checking directory for normal VASP.
19
+ begin
20
+ vd = VaspUtils::VaspDir.new(tgt)
21
+ rescue VaspUtils::VaspDir.InitializeError
22
+ puts "Not VaspDir: #{tgt}"
23
+ next
24
+ end
25
+
26
+ # Delete
27
+ if OPTIONS[:force] || (! vd.finished?)
28
+ Dir.glob(tgt + "/*").each do |file|
29
+ next if file == tgt + "/INCAR"
30
+ next if file == tgt + "/KPOINTS"
31
+ next if file == tgt + "/POSCAR"
32
+ next if file == tgt + "/POTCAR"
33
+ puts "Deleting #{file}"
34
+ FileUtils.remove_entry_secure file
35
+ end
36
+ else
37
+ puts "Leave finished calc: #{tgt}"
38
+ next
39
+ end
40
+ end
data/bin/runvasp CHANGED
@@ -6,8 +6,7 @@ gem "comana"
6
6
  require "comana/computationmanager.rb"
7
7
 
8
8
  #gem "vasputils"
9
- require "vasputils/vaspdir.rb"
10
- require "vasputils/vaspgeomopt.rb"
9
+ require "vasputils.rb"
11
10
 
12
11
  require "optparse"
13
12
 
@@ -27,8 +26,8 @@ end
27
26
 
28
27
  if opts[:geom]
29
28
  begin
30
- calc_dir = VaspGeomOpt.new(dir)
31
- rescue VaspGeomOpt::NoVaspDirError
29
+ calc_dir = VaspUtils::VaspGeomOpt.new(dir)
30
+ rescue VaspUtils::VaspGeometryOptimizer::NoVaspDirError
32
31
  puts "Not suitable for VaspGeomOpt: #{dir}"
33
32
  exit
34
33
  end
@@ -36,8 +35,8 @@ elsif opts[:cond]
36
35
  TODO
37
36
  else
38
37
  begin
39
- calc_dir = VaspDir.new(dir)
40
- rescue VaspDir::InitializeError
38
+ calc_dir = VaspUtils::VaspDir.new(dir)
39
+ rescue VaspUtils::VaspDir::InitializeError
41
40
  puts "Not VaspDir: #{dir}"
42
41
  exit
43
42
  end
data/bin/symposcar CHANGED
@@ -1,35 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (C) 2008 Atsushi Togo
3
- # togo.atsushi@gmail.com
2
+ # Original version, Copyright (C) 2008 Atsushi Togo, togo.atsushi@gmail.com
3
+ # Little modified by Ippei Kishida. [2012-06-12]
4
4
  #
5
- # Little modified by Ippei Kishida. [2012-02-19]
5
+ # This program is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU General Public License
7
+ # as published by the Free Software Foundation; either version 2
8
+ # of the License, or (at your option) any later version.
6
9
  #
7
- # This program is free software; you can redistribute it and/or
8
- # modify it under the terms of the GNU General Public License
9
- # as published by the Free Software Foundation; either version 2
10
- # of the License, or (at your option) any later version.
11
- #
12
- # This program is distributed in the hope that it will be useful,
13
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- # GNU General Public License for more details.
16
- #
17
- # You should have received a copy of the GNU General Public License
18
- # along with this program; if not, write to
19
- # the Free Software Foundation, Inc., 51 Franklin Street,
20
- # Fifth Floor, Boston, MA 02110-1301, USA, or see
21
- # http://www.gnu.org/copyleft/gpl.html
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to
17
+ # the Free Software Foundation, Inc., 51 Franklin Street,
18
+ # Fifth Floor, Boston, MA 02110-1301, USA, or see
19
+ # http://www.gnu.org/copyleft/gpl.html
22
20
  #
23
21
  # Usage: symPoscar.rb [OPTION] [structure]
24
22
  # OPTION: -s, --symprec= : Symmetry check precision
25
23
 
24
+ require 'pp'
26
25
  require 'optparse'
27
26
  require 'getspg.so'
28
- require 'poscar'
29
- require 'pp'
30
27
  include Getspg
31
28
 
29
+ #require 'rubygems'
30
+ #gem 'vasputils'
31
+ #require 'vasputils/poscar'
32
+ require 'vasputils.rb'
33
+
34
+
32
35
  symprec = 1e-5
36
+ angle_tolerance = -1.0
33
37
  nonewline = false
34
38
  pos_shift = [0,0,0]
35
39
  shift_string = false
@@ -38,6 +42,7 @@ is_operations = false
38
42
  is_dataset = false
39
43
  opt = OptionParser.new
40
44
  opt.on('-s', '--symprec=', 'Symmetry check precision') {|tmp| symprec = tmp.to_f}
45
+ opt.on('-a', '--angle_tolerance=', 'Symmetry check precision for angle between lattice vectors in degrees') {|tmp| angle_tolerance = tmp.to_f}
41
46
  opt.on('-d', '--shift=', 'uniform shift of internal atomic positions') {|shift_string|}
42
47
  opt.on('-n', '--nonewline', 'Do not output the trailing newline') {nonewline = true}
43
48
  opt.on('-l', '--long', 'Long output') {is_long_output = true}
@@ -46,16 +51,18 @@ opt.on('-d', '--dataset', 'Dataset') {is_dataset = true}
46
51
  opt.parse!(ARGV)
47
52
 
48
53
  unless ARGV.size == 1
49
- puts "Indicate only 1 POSCAR or CONTCAR. Exit."
50
- exit
54
+ puts "Indicate only 1 POSCAR or CONTCAR. Exit."
55
+ exit
51
56
  end
52
57
 
53
58
  if shift_string
54
59
  pos_shift = []
55
60
  shift_string.split.each {|val| pos_shift << val.to_f }
56
61
  end
57
- cell = Vasp::Poscar.new(ARGV.shift).cell
58
- lattice = cell.axis.transpose
62
+
63
+ cell = VaspUtils::Poscar.load_file(ARGV.shift)
64
+ lattice = cell.axes.to_a.transpose
65
+
59
66
  names = (cell.atoms.collect {|atom| atom.name}).uniq
60
67
  position = []
61
68
  types = []
@@ -73,14 +80,16 @@ end
73
80
 
74
81
  if is_long_output
75
82
  spg, brv_lattice, brv_positions, brv_types, spgnum =
76
- refine_cell(types.size, lattice, position, types, symprec)
83
+ refine_cell(types.size, lattice, position, types, symprec, angle_tolerance)
77
84
  end
78
85
 
79
86
  spgnum, spg, hall_symbol, t_mat, o_shift,
80
87
  rotations, translations, wyckoffs = get_dataset( lattice,
81
88
  position,
82
89
  types,
83
- symprec )
90
+ symprec,
91
+ angle_tolerance)
92
+ ptg_symbol, ptg_num, trans_mat = getptg(rotations)
84
93
 
85
94
  if spgnum > 0
86
95
  if nonewline
@@ -136,11 +145,12 @@ if is_operations
136
145
  lattice,
137
146
  position,
138
147
  types,
139
- symprec )
148
+ symprec,
149
+ angle_tolerance)
140
150
  end
141
151
 
142
152
 
143
- if is_operations
153
+ if is_operations or is_dataset
144
154
  rotations.size.times do |i|
145
155
  puts "- # ----#{i+1}----"
146
156
  puts " rotation:"
data/lib/vasputils.rb CHANGED
@@ -0,0 +1,11 @@
1
+ module VaspUtils; end
2
+
3
+ require "vasputils/incar.rb"
4
+ require "vasputils/kpoints.rb"
5
+ require "vasputils/outcar.rb"
6
+ require "vasputils/poscar.rb"
7
+ require "vasputils/potcar.rb"
8
+ require "vasputils/vaspdir.rb"
9
+ require "vasputils/vaspgeometryoptimizer.rb"
10
+ require "vasputils/vaspkpointsfinder.rb"
11
+
@@ -1,6 +1,8 @@
1
1
  #! /usr/bin/env ruby
2
2
  # coding: utf-8
3
3
 
4
+ require "vasputils.rb"
5
+
4
6
  # see http://cms.mpi.univie.ac.at/vasp/vasp/INCAR_File.html
5
7
  #
6
8
  # INCAR のフォーマット
@@ -17,7 +19,7 @@
17
19
  # Class to utilize INCAR file of VASP.
18
20
  # まず、自分で使う範囲だけ作る。
19
21
  # あとで余力があれば精密化する。
20
- module Incar
22
+ module VaspUtils::Incar
21
23
  #
22
24
  #def initialize()
23
25
  #end
@@ -1,8 +1,10 @@
1
1
  #! /usr/bin/env ruby
2
2
  # coding: utf-8
3
3
 
4
+ require "vasputils.rb"
5
+
4
6
  # Module dearing with KPOINTS.
5
- module Kpoints
7
+ module VaspUtils::Kpoints
6
8
  def self.parse(io)
7
9
  results = {}
8
10
  results[:comment] = io.readline.chomp
@@ -1,3 +1,5 @@
1
+ require "vasputils.rb"
2
+
1
3
  # OUTCAR をパースする。
2
4
  # 精確には行わず、必要な情報だけをピックアップする感じ。
3
5
  #
@@ -9,50 +11,63 @@
9
11
  #
10
12
  # 基本的に終了した計算から情報を取り出すには vasprun.xml を読む。
11
13
  # OUTCAR は終了する前も含めてなんか簡単に見るために使う、という位置付けで。
12
-
13
- module Outcar
14
+ module VaspUtils::Outcar
14
15
  #toten は全 electronic and ionic steps のを flat に並べただけのもの。
15
16
  #必要なら構造化するが、現状その予定はない。
16
17
  #attr_reader :name
17
18
  #attr_reader :ionic_steps, :electronic_steps, :totens, :volumes, :elapsed_time
18
19
 
19
20
  def self.load_file(file)
21
+ raise Errno::ENOENT unless File.exist?(file)
22
+
20
23
  results = {}
21
24
  results[:name] = file
22
- results[:irreducible_kpoints] = nil
23
- results[:electronic_steps ] = 0
24
- results[:ionic_steps ] = 0
25
- results[:totens ] = []
26
- results[:volumes ] = []
25
+ #results[:irreducible_kpoints] = nil
26
+ #results[:electronic_steps ] = 0
27
+ #results[:ionic_steps ] = 0
28
+ #results[:totens ] = []
29
+ #results[:volumes ] = []
27
30
  results[:elapsed_time ] = nil
28
31
  results[:normal_ended ] = false
29
32
 
30
- lines = File.readlines(file)
31
- lines.each do |line|
32
- if /Found\s+(\d+)\s+irreducible k-points/i =~ line
33
- results[:irreducible_kpoints] = $1.to_i
34
- end
35
-
36
- if /^-* Iteration\s+(\d+)/ =~ line
37
- results[:ionic_steps ] = $1.to_i
38
- results[:electronic_steps] += 1
39
- end
40
-
41
- #if /free\s+energy\s+TOTEN\s+=\s(.*)\s+eV/ =~ line
42
- if /TOTEN\s+=\s(.*)\s+eV/ =~ line
43
- results[:totens] << $1.to_f
44
- end
45
-
46
- if /volume of cell :\s+(\d+\.\d+)$/ =~ line
47
- results[:volumes] << $1.to_f
48
- end
49
-
50
- if (/Elapsed time \(sec\):\s+(\d+\.\d+)/ =~ line)
51
- results[:elapsed_time] = $1.to_f
52
- end
33
+ #lines = File.readlines(file)
34
+ #lines.each do |line|
35
+ # #if /Found\s+(\d+)\s+irreducible k-points/i =~ line
36
+ # # results[:irreducible_kpoints] = $1.to_i
37
+ # #end
38
+
39
+ # #if /^-* Iteration\s+(\d+)/ =~ line
40
+ # # results[:ionic_steps ] = $1.to_i
41
+ # # results[:electronic_steps] += 1
42
+ # #end
43
+
44
+ # ##if /free\s+energy\s+TOTEN\s+=\s(.*)\s+eV/ =~ line
45
+ # #if /TOTEN\s+=\s(.*)\s+eV/ =~ line
46
+ # # results[:totens] << $1.to_f
47
+ # #end
48
+
49
+ # #if /volume of cell :\s+(\d+\.\d+)$/ =~ line
50
+ # # results[:volumes] << $1.to_f
51
+ # #end
52
+ #end
53
+
54
+ lines = `grep Iteration #{file}`.split("\n")
55
+ results[:electronic_steps] = lines.size
56
+ /^-* Iteration\s+(\d+)/ =~ lines[-1]
57
+ results[:ionic_steps ] = $1.to_i
58
+
59
+ results[:totens] = `grep TOTEN #{file}`.split("\n").map do |line|
60
+ /TOTEN\s+=\s(.*)\s+eV/ =~ line
61
+ $1.to_f
62
+ end
63
+
64
+ line = `tail -q -n 8 #{file}| head -n 1`
65
+ if (/Elapsed time \(sec\):\s+(\d+\.\d+)/ =~ line)
66
+ results[:elapsed_time] = $1.to_f
53
67
  end
54
68
 
55
- results[:normal_ended] = true if (/Voluntary context switches:/ =~ lines[-1])
69
+ line = `tail -q -n 1 #{file}`
70
+ results[:normal_ended] = true if (/Voluntary context switches:/ =~ line)
56
71
 
57
72
  results
58
73
  end
@@ -4,6 +4,8 @@ require "rubygems"
4
4
  gem "crystalcell"
5
5
  require "crystalcell/cell.rb"
6
6
 
7
+ require "vasputils.rb"
8
+
7
9
  # Class to manage POSCAR format of VASP.
8
10
  #
9
11
  # parse と dump のどちらかだけでなく、両方を統括して扱うクラス。
@@ -16,7 +18,7 @@ require "crystalcell/cell.rb"
16
18
  # こうしておくことで POTCAR がない環境でも POSCAR を扱うことができる。
17
19
  #
18
20
  # VASP 5 系を使うようになれば事情が変わるだろう。
19
- class Poscar
21
+ class VaspUtils::Poscar
20
22
 
21
23
  class ElementMismatchError < Exception; end
22
24
  class ParseError < Exception; end