vasputils 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. data/.document +5 -0
  2. data/Gemfile +18 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +19 -0
  5. data/Rakefile +54 -0
  6. data/VERSION +1 -0
  7. data/bin/addVolumeToten.rb +19 -0
  8. data/bin/latticeconstants +14 -0
  9. data/bin/lsvaspdir +60 -0
  10. data/bin/lsvaspseries +95 -0
  11. data/bin/repeatvasp +47 -0
  12. data/bin/symposcar +154 -0
  13. data/lib/vasputils/calcinspector.rb +24 -0
  14. data/lib/vasputils/calcrepeater.rb +27 -0
  15. data/lib/vasputils/calcseries.rb +98 -0
  16. data/lib/vasputils/incar.rb +55 -0
  17. data/lib/vasputils/kpoints.rb +41 -0
  18. data/lib/vasputils/outcar.rb +59 -0
  19. data/lib/vasputils/poscar.rb +168 -0
  20. data/lib/vasputils/potcar.rb +18 -0
  21. data/lib/vasputils/vaspdir.rb +278 -0
  22. data/lib/vasputils.rb +0 -0
  23. data/test/calcseries/dup_finished/try00/CONTCAR +17 -0
  24. data/test/calcseries/dup_finished/try00/INCAR +28 -0
  25. data/test/calcseries/dup_finished/try00/KPOINTS +6 -0
  26. data/test/calcseries/dup_finished/try00/OUTCAR +28 -0
  27. data/test/calcseries/dup_finished/try00/POSCAR +12 -0
  28. data/test/calcseries/dup_finished/try00/POTCAR +2 -0
  29. data/test/calcseries/dup_finished/try00/lock +0 -0
  30. data/test/calcseries/dup_finished/try01/CONTCAR +17 -0
  31. data/test/calcseries/dup_finished/try01/INCAR +28 -0
  32. data/test/calcseries/dup_finished/try01/KPOINTS +6 -0
  33. data/test/calcseries/dup_finished/try01/OUTCAR +28 -0
  34. data/test/calcseries/dup_finished/try01/POSCAR +12 -0
  35. data/test/calcseries/dup_finished/try01/POTCAR +2 -0
  36. data/test/calcseries/dup_finished/try01/lock +0 -0
  37. data/test/calcseries/normal_finished/try00/CONTCAR +17 -0
  38. data/test/calcseries/normal_finished/try00/INCAR +28 -0
  39. data/test/calcseries/normal_finished/try00/KPOINTS +6 -0
  40. data/test/calcseries/normal_finished/try00/OUTCAR +40 -0
  41. data/test/calcseries/normal_finished/try00/POSCAR +12 -0
  42. data/test/calcseries/normal_finished/try00/POTCAR +2 -0
  43. data/test/calcseries/normal_finished/try00/lock +0 -0
  44. data/test/calcseries/normal_finished/try01/CONTCAR +17 -0
  45. data/test/calcseries/normal_finished/try01/INCAR +28 -0
  46. data/test/calcseries/normal_finished/try01/KPOINTS +6 -0
  47. data/test/calcseries/normal_finished/try01/OUTCAR +33 -0
  48. data/test/calcseries/normal_finished/try01/POSCAR +12 -0
  49. data/test/calcseries/normal_finished/try01/POTCAR +2 -0
  50. data/test/calcseries/normal_finished/try01/lock +0 -0
  51. data/test/calcseries/not_finished/try00/CONTCAR +17 -0
  52. data/test/calcseries/not_finished/try00/INCAR +28 -0
  53. data/test/calcseries/not_finished/try00/KPOINTS +6 -0
  54. data/test/calcseries/not_finished/try00/OUTCAR +38 -0
  55. data/test/calcseries/not_finished/try00/POSCAR +12 -0
  56. data/test/calcseries/not_finished/try00/POTCAR +2 -0
  57. data/test/calcseries/not_finished/try00/lock +0 -0
  58. data/test/helper.rb +17 -0
  59. data/test/incar/INCAR.00 +35 -0
  60. data/test/incar/INCAR.01 +28 -0
  61. data/test/kpoints/g123-456 +6 -0
  62. data/test/kpoints/m123-456 +6 -0
  63. data/test/outcar/01-03-INT.OUTCAR +619 -0
  64. data/test/outcar/01-13-FIN.OUTCAR +1436 -0
  65. data/test/outcar/02-05-FIN.OUTCAR +2025 -0
  66. data/test/outcar/03-05-FIN.OUTCAR +2602 -0
  67. data/test/outcar/10-01-FIN.OUTCAR +437 -0
  68. data/test/poscar/NOT_POSCAR +0 -0
  69. data/test/poscar/POSCAR.00 +10 -0
  70. data/test/poscar/POSCAR.01 +12 -0
  71. data/test/poscarparser/POSCAR.00 +10 -0
  72. data/test/poscarparser/POSCAR.01 +12 -0
  73. data/test/potcar/POTCAR +5279 -0
  74. data/test/potcar/POTCAR.allElement +165 -0
  75. data/test/potcar/POTCAR.dummy +3 -0
  76. data/test/repeatVasp/Iter2-Nsw2.00/INCAR +35 -0
  77. data/test/repeatVasp/Iter2-Nsw2.00/KPOINTS +6 -0
  78. data/test/repeatVasp/Iter2-Nsw2.00/POSCAR +12 -0
  79. data/test/repeatVasp/Iter2-Nsw2.00/POTCAR +3151 -0
  80. data/test/repeatVasp/test.sh +3 -0
  81. data/test/test_calcinspector.rb +53 -0
  82. data/test/test_calcrepeater.rb +69 -0
  83. data/test/test_calcseries.rb +77 -0
  84. data/test/test_incar.rb +126 -0
  85. data/test/test_kpoints.rb +110 -0
  86. data/test/test_outcar.rb +162 -0
  87. data/test/test_poscar.rb +209 -0
  88. data/test/test_potcar.rb +65 -0
  89. data/test/test_vaspdir.rb +253 -0
  90. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
  91. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/INCAR +27 -0
  92. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
  93. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
  94. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/POSCAR +12 -0
  95. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
  96. data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/lock +0 -0
  97. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
  98. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/INCAR +28 -0
  99. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
  100. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
  101. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/POSCAR +12 -0
  102. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
  103. data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/lock +0 -0
  104. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/CONTCAR +17 -0
  105. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/INCAR +28 -0
  106. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/KPOINTS +6 -0
  107. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/OUTCAR +1436 -0
  108. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/POSCAR +12 -0
  109. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/POTCAR +3151 -0
  110. data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/lock +0 -0
  111. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/CONTCAR +17 -0
  112. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/INCAR +28 -0
  113. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/KPOINTS +6 -0
  114. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/OUTCAR +1436 -0
  115. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/POSCAR +12 -0
  116. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/POTCAR +3151 -0
  117. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/lock +0 -0
  118. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/CONTCAR +17 -0
  119. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/INCAR +28 -0
  120. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/KPOINTS +6 -0
  121. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/OUTCAR +2602 -0
  122. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/POSCAR +12 -0
  123. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/POTCAR +3151 -0
  124. data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/lock +0 -0
  125. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
  126. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/INCAR +28 -0
  127. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
  128. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
  129. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/POSCAR +12 -0
  130. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
  131. data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/lock +0 -0
  132. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/CONTCAR +17 -0
  133. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/INCAR +28 -0
  134. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/KPOINTS +6 -0
  135. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/OUTCAR +1436 -0
  136. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/POSCAR +12 -0
  137. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/POTCAR +3151 -0
  138. data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/lock +0 -0
  139. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/CONTCAR +17 -0
  140. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/INCAR +28 -0
  141. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/KPOINTS +6 -0
  142. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/OUTCAR +2025 -0
  143. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/POSCAR +12 -0
  144. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/POTCAR +3151 -0
  145. data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/lock +0 -0
  146. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/CONTCAR +0 -0
  147. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/INCAR +28 -0
  148. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/KPOINTS +6 -0
  149. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/OUTCAR +619 -0
  150. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/POSCAR +12 -0
  151. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/POTCAR +3151 -0
  152. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/lock +0 -0
  153. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/CONTCAR +17 -0
  154. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/INCAR +28 -0
  155. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/KPOINTS +6 -0
  156. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/OUTCAR +2602 -0
  157. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/POSCAR +12 -0
  158. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/POTCAR +3151 -0
  159. data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/lock +0 -0
  160. data/test/vaspdir/PI/INCAR +28 -0
  161. data/test/vaspdir/PI/KPOINTS +5 -0
  162. data/test/vaspdir/PI/PI12345 +0 -0
  163. data/test/vaspdir/PI/POSCAR +57 -0
  164. data/test/vaspdir/PI/POTCAR +698 -0
  165. data/test/vaspdir/lack-INCAR/KPOINTS +5 -0
  166. data/test/vaspdir/lack-INCAR/POSCAR +57 -0
  167. data/test/vaspdir/lack-INCAR/POTCAR +698 -0
  168. data/test/vaspdir/lack-KPOINTS/INCAR +28 -0
  169. data/test/vaspdir/lack-KPOINTS/POSCAR +57 -0
  170. data/test/vaspdir/lack-KPOINTS/POTCAR +698 -0
  171. data/test/vaspdir/lack-POSCAR/INCAR +28 -0
  172. data/test/vaspdir/lack-POSCAR/KPOINTS +5 -0
  173. data/test/vaspdir/lack-POSCAR/POTCAR +698 -0
  174. data/test/vaspdir/lack-POTCAR/INCAR +28 -0
  175. data/test/vaspdir/lack-POTCAR/KPOINTS +5 -0
  176. data/test/vaspdir/lack-POTCAR/POSCAR +57 -0
  177. data/test/vaspdir/lock/INCAR +28 -0
  178. data/test/vaspdir/lock/KPOINTS +5 -0
  179. data/test/vaspdir/lock/POSCAR +57 -0
  180. data/test/vaspdir/lock/POTCAR +698 -0
  181. data/test/vaspdir/lock/lock +0 -0
  182. data/test/vaspdir/lock-PI/INCAR +28 -0
  183. data/test/vaspdir/lock-PI/KPOINTS +5 -0
  184. data/test/vaspdir/lock-PI/PI12345 +0 -0
  185. data/test/vaspdir/lock-PI/POSCAR +57 -0
  186. data/test/vaspdir/lock-PI/POTCAR +698 -0
  187. data/test/vaspdir/lock-PI/lock +0 -0
  188. data/test/vaspdir/next-try00/CONTCAR +17 -0
  189. data/test/vaspdir/next-try00/INCAR +28 -0
  190. data/test/vaspdir/next-try00/KPOINTS +6 -0
  191. data/test/vaspdir/next-try00/OUTCAR +2025 -0
  192. data/test/vaspdir/next-try00/POSCAR +12 -0
  193. data/test/vaspdir/next-try00/POTCAR +3151 -0
  194. data/test/vaspdir/next-try00/lock +0 -0
  195. data/test/vaspdir/not-yet-ISIF2/INCAR +28 -0
  196. data/test/vaspdir/not-yet-ISIF2/KPOINTS +5 -0
  197. data/test/vaspdir/not-yet-ISIF2/PI17489 +2 -0
  198. data/test/vaspdir/not-yet-ISIF2/PI17736 +2 -0
  199. data/test/vaspdir/not-yet-ISIF2/PI1858 +2 -0
  200. data/test/vaspdir/not-yet-ISIF2/PI1866 +2 -0
  201. data/test/vaspdir/not-yet-ISIF2/PI2059 +2 -0
  202. data/test/vaspdir/not-yet-ISIF2/POSCAR +57 -0
  203. data/test/vaspdir/not-yet-ISIF2/POTCAR +698 -0
  204. data/test/vaspdir/not-yet-ISIF3/INCAR +28 -0
  205. data/test/vaspdir/not-yet-ISIF3/KPOINTS +5 -0
  206. data/test/vaspdir/not-yet-ISIF3/POSCAR +57 -0
  207. data/test/vaspdir/not-yet-ISIF3/POTCAR +698 -0
  208. data/vasputils.gemspec +272 -0
  209. metadata +409 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rdoc", "~> 3.12"
10
+ gem "bundler", "~> 1.1.3"
11
+ gem "jeweler", "~> 1.8.3"
12
+ gem "simplecov", ">= 0"
13
+ gem "crystalcell", ">= 0.0.0"
14
+ gem "mageo", ">= 0.0.0"
15
+ gem "malge", ">= 0.0.1"
16
+ gem "maset", ">= 0.0.0"
17
+ gem "builtinextension", ">= 0.0.3"
18
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 ippei94da
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = vasputils
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to vasputils
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2012 ippei94da. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "vasputils"
18
+ gem.homepage = "http://github.com/ippei94da/vasputils"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Utilities for VASP, first-principles calculation code.}
21
+ gem.description = %Q{This gem provides parsers for some VASP input and output files.
22
+ This will provide support command for computations.}
23
+ gem.email = "ippei94da@gmail.com"
24
+ gem.authors = ["ippei94da"]
25
+ # dependencies defined in Gemfile
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ #require 'rcov/rcovtask'
37
+ #Rcov::RcovTask.new do |test|
38
+ # test.libs << 'test'
39
+ # test.pattern = 'test/**/test_*.rb'
40
+ # test.verbose = true
41
+ # test.rcov_opts << '--exclude "gems/*"'
42
+ #end
43
+
44
+ task :default => :test
45
+
46
+ require 'rdoc/task'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "vasputils #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/ruby
2
+
3
+ #標準入力から文字列リストを受け取り、
4
+ #ファイル名と思しきものがあれば、それに最終的な volume と TOTEN を追加する。
5
+ #CONTCAR も指定できるが、同じディレクトリに OUTCAR が存在する必要がある。
6
+
7
+ require "vasputils/outcarparser.rb"
8
+
9
+ STDIN.each do |line|
10
+ file = line.strip.sub( 'CONTCAR', 'OUTCAR' )
11
+ if File.exist?( file )
12
+ outcar = ParseOutcar.new( file )
13
+ volume = outcar.volumes[-1]
14
+ toten = outcar.totens[-1]
15
+ printf( "%s, %6.2f, %f\n", line.chomp, volume, toten )
16
+ else
17
+ puts line
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require "vasputils/poscar.rb"
4
+ require "crystal/latticeaxes.rb"
5
+ require "crystal/cell2.rb"
6
+
7
+ puts " a, b, c, alpha, beta, gamma, volume, file"
8
+ 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
+ end
data/bin/lsvaspdir ADDED
@@ -0,0 +1,60 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ # vasp の計算ディレクトリの状態を表示する。
5
+ #
6
+ # - YET 未計算(lock がない)
7
+ # - STARTED 計算中 or 計算が終了したが、何らかのエラーが生じた。
8
+ # (lock があるが、normal_ended ではない)
9
+ # 計算が中断されたか、計算中かの判断は原理上つけられない。
10
+ # - NEXT 計算が正常に終了し、収束していない。次の計算が生成された。
11
+ # - FINISHED 計算が正常に終了し、収束した。
12
+ #
13
+ # 引数でディレクトリを指定できる。
14
+ # 引数なしだとカレントディレクトリの全てのディレクトリ。
15
+ #
16
+ # オプションをつけると、指定の状態のディレクトリを出力。
17
+ # -y : YET
18
+ # -s : STARTED
19
+ # -n : NEXT
20
+ # -f : FINISHED
21
+ # -c -n のように複数指定できる。
22
+ #
23
+ # デフォルトでは引数のディレクトリまたは
24
+ # -S オプションで状態を出力せず、ディレクトリ名だけを出力する。
25
+ # このオプションはシェルの backquote `` 機能から使うことを想定している。
26
+
27
+ require "vasputils/calcinspector.rb"
28
+ require "vasputils/vaspdir.rb"
29
+ require "optparse"
30
+
31
+ OPTIONS = {}
32
+ OPTIONS[:target_status] = ["YET", "STARTED", "NEXT", "FINISHED"]
33
+ tmp = []
34
+ op = OptionParser.new
35
+ op.on("-y", "--yet" , "Show calcs of YET." ){tmp << "YET" }
36
+ op.on("-s", "--started" , "Show calcs of STARTED." ){tmp << "STARTED" }
37
+ op.on("-n", "--next" , "Show calcs of NEXT." ){tmp << "NEXT" }
38
+ op.on("-f", "--finished" , "Show calcs of FINISHED."){tmp << "FINISHED"}
39
+ op.on("-S", "--no-status", "Not output status." ){OPTIONS[:nostatus] = true}
40
+ op.parse!(ARGV)
41
+ OPTIONS[:target_status] = tmp unless tmp.empty?
42
+
43
+ #pp OPTIONS
44
+
45
+ dirs = ARGV
46
+ dirs = Dir.glob("*").sort if ARGV.empty?
47
+ dirs.each do |dir|
48
+ begin
49
+ vd = VaspDir.new(dir)
50
+ status = CalcInspector.inspect(vd)
51
+ #pp status
52
+ if OPTIONS[:target_status].include?(status)
53
+ printf("%10s ", status) unless OPTIONS[:nostatus]
54
+ printf("%s\n", dir)
55
+ end
56
+ rescue VaspDir::InitializeError
57
+ #pp "Something wrong."
58
+ next
59
+ end
60
+ end
data/bin/lsvaspseries ADDED
@@ -0,0 +1,95 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ # vasp の計算シリーズの状態を表示する。
5
+ # - total ionic steps
6
+ # - total electronic steps
7
+ # - total elapsed time
8
+ # - final TOTEN
9
+ # - final cell parameter
10
+
11
+ require "vasputils/calcseries.rb"
12
+ require "vasputils/vaspdir.rb"
13
+ require "optparse"
14
+
15
+ ## option analysis
16
+ OPTIONS = Hash.new
17
+ op = OptionParser.new
18
+ op.on("-c", "--cutoff" , "Show cutoff energy. "){ OPTIONS[:cutoff ] = true }
19
+ op.on("-e", "--electronic-steps", "Show electronic-steps." ){ OPTIONS[:e_steps] = true }
20
+ op.on("-i", "--ionic-steps" , "Show ionic-steps." ){ OPTIONS[:i_steps] = true }
21
+ op.on("-k", "--k-mesh" , "Show k-mesh." ){ OPTIONS[:k_mesh] = true }
22
+ op.on("-K", "--irr-kpoints" , "Show irreducible k-points."){ OPTIONS[:irr_k ] = true }
23
+ op.on("-l", "--lattice-const" , "Show lattice constants."){ OPTIONS[:lattice] = true }
24
+ op.on("-t", "--elapsed-time" , "Show elapsed-time." ){ OPTIONS[:time ] = true }
25
+ op.on("-T", "--time-estesp" , "Show time per elec. steps."){ OPTIONS[:time_e] = true }
26
+ op.on("-E", "--toten" , "Show toten." ){ OPTIONS[:toten ] = true }
27
+ op.on("-a", "--all" , "Show all information." ){
28
+ # -a で出力される順序はここで決まる。
29
+ OPTIONS[:cutoff ] = true
30
+ OPTIONS[:irr_k ] = true
31
+ OPTIONS[:k_mesh ] = true
32
+ OPTIONS[:i_steps ] = true
33
+ OPTIONS[:e_steps ] = true
34
+ OPTIONS[:time ] = true
35
+ OPTIONS[:time_e ] = true
36
+ OPTIONS[:lattice ] = true
37
+ OPTIONS[:toten ] = true
38
+ }
39
+
40
+ op.parse!(ARGV)
41
+
42
+ dirs = ARGV
43
+ dirs = Dir.glob("*").sort if ARGV.empty?
44
+
45
+ # generate headline
46
+ items = []
47
+ OPTIONS.each do |key, val|
48
+ case key
49
+ when :cutoff then items << sprintf("%6s", "ENCUT")
50
+ when :k_mesh then items << sprintf("%2s, %2s, %2s, %8s, %8s, %8s",
51
+ "ka", "kb", "kc", "ka_shift", "kb_shift", "kc_shift")
52
+ when :irr_k then items << sprintf("%4s", "ir_k")
53
+ when :lattice then
54
+ items << sprintf("%9s, %9s, %9s, %9s, %9s, %9s",
55
+ "a", "b", "c", "alpha", "beta", "gamma")
56
+ when :e_steps then items << sprintf("%4s", "el_s")
57
+ when :i_steps then items << sprintf("%4s", "io_s")
58
+ when :time then items << sprintf("%8s", "time")
59
+ when :time_e then items << sprintf("%8s", "time/ele")
60
+ when :toten then items << sprintf("%16s", "TOTEN")
61
+ end
62
+ end
63
+ items << "calc_name"
64
+ puts "#" + items.join(", ")
65
+
66
+ dirs.each do |dir|
67
+ begin
68
+ cs = CalcSeries.new(dir)
69
+ results = []
70
+ names = []
71
+ OPTIONS.each do |key, val|
72
+ case key
73
+ when :cutoff
74
+ results << sprintf("%6s", cs.finished_calc.incar["ENCUT"])
75
+ when :k_mesh then results << sprintf("%2d, %2d, %2d, %8.5f, %8.5f, %8.5f",
76
+ * cs.finished_calc.kpoints[:mesh], * cs.finished_calc.kpoints[:shift])
77
+ when :irr_k then results << sprintf("%4d", cs.finished_calc.outcar[:irreducible_kpoints])
78
+ when :lattice then
79
+ results << sprintf("%9.5f, %9.5f, %9.5f, %9.5f, %9.5f, %9.5f",
80
+ * cs.finished_calc.contcar.axes.get_lattice_constants)
81
+ when :e_steps then results << sprintf("%4d", cs.internal_steps)
82
+ when :i_steps then results << sprintf("%4d", cs.external_steps)
83
+ when :time then results << sprintf("%8d", cs.elapsed_time)
84
+ when :time_e then results << sprintf("%8d", cs.elapsed_time/cs.internal_steps)
85
+ when :toten then results << sprintf("%16.4f", cs.finished_calc.outcar[:totens][-1])
86
+ end
87
+ end
88
+ results << dir
89
+ puts " " + results.join(", ")
90
+ rescue
91
+ puts "Something wrong: #{dir}"
92
+ next
93
+ end
94
+
95
+ end
data/bin/repeatvasp ADDED
@@ -0,0 +1,47 @@
1
+ #! /usr/bin/ruby
2
+
3
+ # Usage:
4
+ # repeatvasp calc_dir
5
+ # 引数は計算ディレクトリで、1つのみ許可。
6
+ #
7
+ # 引数のディレクトリで計算を実行する。
8
+ # 他所には投げず、localhost で実行する。
9
+ #
10
+ # 以下の条件を満たすとき、計算を繰り返す。
11
+ # - cell shape, volume を含めた構造最適化で ionic step が 2以上。
12
+ # - 構造最適化で ionic step が nsw と同じ。
13
+ # - NEBM
14
+ #
15
+ # 計算の状態に応じたディレクトリ名をつける。
16
+ # これらの名前は人間が分かり易くするためのものであって、
17
+ # プログラムが計算の状態を把握するのはあくまで
18
+ # 中のファイルを見て行うものとする。
19
+ #
20
+ # 状態を表す文字列をディレクトリ末尾に着ける機能はなし。
21
+ # これをやると面倒。
22
+ # この辺の確認は専用コマンドを用意することにする。
23
+ #
24
+ # 次の計算になるときに、
25
+ # 元のディレクトリは末尾に 00 を付加する?
26
+ # 次のディレクトリは末尾に 01 以降、インクリメント。
27
+ # 01 からスタートしたときは、適当に 02 とか。
28
+ #
29
+ # 当面、計算ディレクトリは -try00 と末尾についていることを前提とする。
30
+
31
+ require "vasputils/calcrepeater"
32
+ require "vasputils/vaspdir"
33
+
34
+ if ARGV.size != 1
35
+ puts "Number of arguments must be 1."
36
+ exit
37
+ end
38
+
39
+ vd = VaspDir.new(ARGV[0])
40
+ cr = CalcRepeater.new
41
+ begin
42
+ cr.repeat(vd)
43
+ rescue VaspDir::PostfixMismatchError
44
+ puts "Postfix mismatches to #{VaspDir::POSTFIX}. Exit."
45
+ rescue VaspDir::LockedError
46
+ puts "Lock file exist. Exit."
47
+ end
data/bin/symposcar ADDED
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (C) 2008 Atsushi Togo
3
+ # togo.atsushi@gmail.com
4
+ #
5
+ # Little modified by Ippei Kishida. [2012-02-19]
6
+ #
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
22
+ #
23
+ # Usage: symPoscar.rb [OPTION] [structure]
24
+ # OPTION: -s, --symprec= : Symmetry check precision
25
+
26
+ require 'optparse'
27
+ require 'getspg.so'
28
+ require 'poscar'
29
+ require 'pp'
30
+ include Getspg
31
+
32
+ symprec = 1e-5
33
+ nonewline = false
34
+ pos_shift = [0,0,0]
35
+ shift_string = false
36
+ is_long_output = false
37
+ is_operations = false
38
+ is_dataset = false
39
+ opt = OptionParser.new
40
+ opt.on('-s', '--symprec=', 'Symmetry check precision') {|tmp| symprec = tmp.to_f}
41
+ opt.on('-d', '--shift=', 'uniform shift of internal atomic positions') {|shift_string|}
42
+ opt.on('-n', '--nonewline', 'Do not output the trailing newline') {nonewline = true}
43
+ opt.on('-l', '--long', 'Long output') {is_long_output = true}
44
+ opt.on('-o', '--operations', 'Symmetry operations') {is_operations = true}
45
+ opt.on('-d', '--dataset', 'Dataset') {is_dataset = true}
46
+ opt.parse!(ARGV)
47
+
48
+ unless ARGV.size == 1
49
+ puts "Indicate only 1 POSCAR or CONTCAR. Exit."
50
+ exit
51
+ end
52
+
53
+ if shift_string
54
+ pos_shift = []
55
+ shift_string.split.each {|val| pos_shift << val.to_f }
56
+ end
57
+ cell = Vasp::Poscar.new(ARGV.shift).cell
58
+ lattice = cell.axis.transpose
59
+ names = (cell.atoms.collect {|atom| atom.name}).uniq
60
+ position = []
61
+ types = []
62
+ names.each_with_index do |name, i|
63
+ cell.atoms.each do |atom|
64
+ if atom.name == name
65
+ apos = atom.position
66
+ position << [ apos[0]+pos_shift[0],
67
+ apos[1]+pos_shift[1],
68
+ apos[2]+pos_shift[2] ]
69
+ types << i+1
70
+ end
71
+ end
72
+ end
73
+
74
+ if is_long_output
75
+ spg, brv_lattice, brv_positions, brv_types, spgnum =
76
+ refine_cell(types.size, lattice, position, types, symprec)
77
+ end
78
+
79
+ spgnum, spg, hall_symbol, t_mat, o_shift,
80
+ rotations, translations, wyckoffs = get_dataset( lattice,
81
+ position,
82
+ types,
83
+ symprec )
84
+
85
+ if spgnum > 0
86
+ if nonewline
87
+ print "# #{spg.strip} (#{spgnum})"
88
+ else
89
+ puts "# #{spg.strip} (#{spgnum})"
90
+
91
+ if is_long_output
92
+ puts "----------- original -----------"
93
+ lattice.each do |vec|
94
+ printf("%10.5f %10.5f %10.5f\n", vec[0], vec[1], vec[2]);
95
+ end
96
+
97
+ puts "------------ final -------------"
98
+ brv_lattice.each do |vec|
99
+ printf("%10.5f %10.5f %10.5f\n", vec[0], vec[1], vec[2]);
100
+ end
101
+
102
+ brv_types.size.times do |i|
103
+ printf("%d: %d %10.5f %10.5f %10.5f\n", i+1, brv_types[i],
104
+ brv_positions[i][0], brv_positions[i][1], brv_positions[i][2]);
105
+ end
106
+ end
107
+
108
+ if is_dataset
109
+ # puts "------ transformation matrix -----"
110
+ # t_mat.each do |row|
111
+ # printf("%10.5f %10.5f %10.5f\n", row[0], row[1], row[2]);
112
+ # end
113
+
114
+ # puts "---------- origin shift ----------"
115
+ # printf("%10.5f %10.5f %10.5f\n", o_shift[0], o_shift[1], o_shift[2]);
116
+
117
+ puts "--------- Wyckoff position ----------"
118
+ wl = "abcdefghijklmnopqrstuvwxyz"
119
+ wyckoffs.each_with_index do |w, i|
120
+ pos = []
121
+ 3.times do |j|
122
+ pos.push( position[i][j] - position[i][j].floor )
123
+ end
124
+ printf("%4d %2s %s %8.5f %8.5f %8.5f\n",
125
+ i+1, cell.atoms[i].name, wl[w,1], pos[0], pos[1], pos[2])
126
+ end
127
+ end
128
+
129
+ end
130
+ end
131
+
132
+ #pp get_operations( types.size, lattice, position, types, symprec )
133
+
134
+ if is_operations
135
+ rotations, translations = get_operations( types.size,
136
+ lattice,
137
+ position,
138
+ types,
139
+ symprec )
140
+ end
141
+
142
+
143
+ if is_operations
144
+ rotations.size.times do |i|
145
+ puts "- # ----#{i+1}----"
146
+ puts " rotation:"
147
+ rotations[i].each do |row|
148
+ printf(" - [%2d, %2d, %2d]\n", row[0], row[1], row[2])
149
+ end
150
+ printf(" translation: [%f, %f, %f]\n",
151
+ translations[i][0], translations[i][1], translations[i][2])
152
+ end
153
+ end
154
+
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ # 計算の状態を解析するクラス。
5
+ class CalcInspector
6
+ #
7
+ #def initialize
8
+ #end
9
+
10
+ # 引数 calc で渡された計算の状態を返す。
11
+ # calc は以下のメソッドを持つ必要がある。
12
+ # - started?
13
+ # - normal_ended?
14
+ # - to_be_continued?
15
+ def self.inspect(calc)
16
+ return "YET" unless calc.started?
17
+ return "STARTED" unless calc.normal_ended?
18
+ return "NEXT" if calc.to_be_continued?
19
+ return "FINISHED"
20
+ #raise "must not occur"
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,27 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "pp"
5
+ #
6
+ #
7
+ #
8
+ class CalcRepeater
9
+
10
+ #def initialize
11
+ #end
12
+
13
+ # 引数 calc は以下のメソッドを持っている必要がある。
14
+ def repeat(calc, io = STDOUT)
15
+ while true
16
+ io.puts "Calculation started: #{calc.name}."
17
+ calc.calculate
18
+ break unless calc.normal_ended?
19
+ break unless calc.to_be_continued?
20
+ calc.next
21
+ io.puts "Next to #{calc.name}."
22
+ end
23
+ calc.teardown
24
+ puts "Calculation got converged: #{calc.name}."
25
+ end
26
+ end
27
+
@@ -0,0 +1,98 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "vasputils/vaspdir.rb"
5
+
6
+ # 連続性のある一連の計算を表現するクラス。
7
+ # 収束までに何度も繰り返すような計算を想定し、
8
+ # これらが1つのディレクトリにまとめられていることを前提とする。
9
+ # 計算は ASCII ソートできる順に
10
+ # 名前が付けられていることを前提とする。
11
+ class CalcSeries
12
+
13
+ class FinishedCalcError < Exception; end
14
+
15
+ #
16
+ def initialize(dir)
17
+ @dir = dir
18
+ @calculations = belonged_calculations
19
+ end
20
+
21
+ # Guess and return calculation type of an rgument 'file'.
22
+ # Argument 'file' can be a normal file or a directory.
23
+ # Return a calc class instance, e.g., VaspDir.
24
+ # If the file is unknown type, raise CalcSeriesUnknownCalcError
25
+ #
26
+ # MEMO: Now, always return VaspDir.
27
+ def self.guess(file)
28
+ return VaspDir
29
+ end
30
+
31
+ # Return the final calculation that achieve to be convergence,
32
+ # whose state is FINISHED.
33
+ # If there are multiple FINISHED calcs,
34
+ # raise CalcSeriesMultipleFinishedError.
35
+ # If there is no FINISHED calcs, return nil.
36
+ def finished_calc
37
+ #tmp = @calculations.select{|calc| calc.normal_ended? && (! calc.to_be_continued?)}
38
+ tmp = @calculations.select{|calc| (! calc.to_be_continued?)}
39
+ #pp tmp.size
40
+ if tmp.size > 1
41
+ message = "Multiplicated finished calcs; #{tmp.map{|calc| calc.name}.join(', ')}"
42
+ raise FinishedCalcError, message
43
+ elsif tmp.size == 0
44
+ message = "No finished calc."
45
+ raise FinishedCalcError, message
46
+ else
47
+ return tmp[0]
48
+ end
49
+ end
50
+
51
+ # Return sum of number of 'internal steps',
52
+ # whish is returned by 'internal_steps' of each calculation.
53
+ # E.g., in case of VaspDir/try01, try02,...
54
+ # internal_steps of VaspDir/try01 was 10,
55
+ # internal_steps of VaspDir/try02 was 3,
56
+ def internal_steps
57
+ @calculations.inject(0.0) do |sum, item|
58
+ sum += item.internal_steps
59
+ end
60
+ end
61
+
62
+ # 外部ループ。
63
+ # vaspdir では ionic steps を返す筈。
64
+ def external_steps
65
+ @calculations.inject(0.0) do |sum, item|
66
+ sum += item.external_steps
67
+ end
68
+ end
69
+
70
+ # 全ての経過時間の合計を返す。
71
+ def elapsed_time
72
+ @calculations.inject(0.0) do |sum, item|
73
+ sum += item.elapsed_time
74
+ end
75
+ end
76
+
77
+ # 最後の計算が normal_ended ならば true。
78
+ # それ以外は false
79
+ def normal_ended?
80
+ begin
81
+ #pp finished_calc
82
+ return finished_calc.normal_ended?
83
+ rescue FinishedCalcError
84
+ return false
85
+ end
86
+ end
87
+
88
+ private
89
+
90
+ # 配下の calculation を VaspDir のようなインスタンスにし、
91
+ # それらをまとめた配列を返す。
92
+ def belonged_calculations
93
+ Dir.glob("#{@dir}/*").sort.map do |file|
94
+ self.class.guess(file).new(file)
95
+ end
96
+ end
97
+ end
98
+