vasputils 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/bin/addVolumeToten.rb +19 -0
- data/bin/latticeconstants +14 -0
- data/bin/lsvaspdir +60 -0
- data/bin/lsvaspseries +95 -0
- data/bin/repeatvasp +47 -0
- data/bin/symposcar +154 -0
- data/lib/vasputils/calcinspector.rb +24 -0
- data/lib/vasputils/calcrepeater.rb +27 -0
- data/lib/vasputils/calcseries.rb +98 -0
- data/lib/vasputils/incar.rb +55 -0
- data/lib/vasputils/kpoints.rb +41 -0
- data/lib/vasputils/outcar.rb +59 -0
- data/lib/vasputils/poscar.rb +168 -0
- data/lib/vasputils/potcar.rb +18 -0
- data/lib/vasputils/vaspdir.rb +278 -0
- data/lib/vasputils.rb +0 -0
- data/test/calcseries/dup_finished/try00/CONTCAR +17 -0
- data/test/calcseries/dup_finished/try00/INCAR +28 -0
- data/test/calcseries/dup_finished/try00/KPOINTS +6 -0
- data/test/calcseries/dup_finished/try00/OUTCAR +28 -0
- data/test/calcseries/dup_finished/try00/POSCAR +12 -0
- data/test/calcseries/dup_finished/try00/POTCAR +2 -0
- data/test/calcseries/dup_finished/try00/lock +0 -0
- data/test/calcseries/dup_finished/try01/CONTCAR +17 -0
- data/test/calcseries/dup_finished/try01/INCAR +28 -0
- data/test/calcseries/dup_finished/try01/KPOINTS +6 -0
- data/test/calcseries/dup_finished/try01/OUTCAR +28 -0
- data/test/calcseries/dup_finished/try01/POSCAR +12 -0
- data/test/calcseries/dup_finished/try01/POTCAR +2 -0
- data/test/calcseries/dup_finished/try01/lock +0 -0
- data/test/calcseries/normal_finished/try00/CONTCAR +17 -0
- data/test/calcseries/normal_finished/try00/INCAR +28 -0
- data/test/calcseries/normal_finished/try00/KPOINTS +6 -0
- data/test/calcseries/normal_finished/try00/OUTCAR +40 -0
- data/test/calcseries/normal_finished/try00/POSCAR +12 -0
- data/test/calcseries/normal_finished/try00/POTCAR +2 -0
- data/test/calcseries/normal_finished/try00/lock +0 -0
- data/test/calcseries/normal_finished/try01/CONTCAR +17 -0
- data/test/calcseries/normal_finished/try01/INCAR +28 -0
- data/test/calcseries/normal_finished/try01/KPOINTS +6 -0
- data/test/calcseries/normal_finished/try01/OUTCAR +33 -0
- data/test/calcseries/normal_finished/try01/POSCAR +12 -0
- data/test/calcseries/normal_finished/try01/POTCAR +2 -0
- data/test/calcseries/normal_finished/try01/lock +0 -0
- data/test/calcseries/not_finished/try00/CONTCAR +17 -0
- data/test/calcseries/not_finished/try00/INCAR +28 -0
- data/test/calcseries/not_finished/try00/KPOINTS +6 -0
- data/test/calcseries/not_finished/try00/OUTCAR +38 -0
- data/test/calcseries/not_finished/try00/POSCAR +12 -0
- data/test/calcseries/not_finished/try00/POTCAR +2 -0
- data/test/calcseries/not_finished/try00/lock +0 -0
- data/test/helper.rb +17 -0
- data/test/incar/INCAR.00 +35 -0
- data/test/incar/INCAR.01 +28 -0
- data/test/kpoints/g123-456 +6 -0
- data/test/kpoints/m123-456 +6 -0
- data/test/outcar/01-03-INT.OUTCAR +619 -0
- data/test/outcar/01-13-FIN.OUTCAR +1436 -0
- data/test/outcar/02-05-FIN.OUTCAR +2025 -0
- data/test/outcar/03-05-FIN.OUTCAR +2602 -0
- data/test/outcar/10-01-FIN.OUTCAR +437 -0
- data/test/poscar/NOT_POSCAR +0 -0
- data/test/poscar/POSCAR.00 +10 -0
- data/test/poscar/POSCAR.01 +12 -0
- data/test/poscarparser/POSCAR.00 +10 -0
- data/test/poscarparser/POSCAR.01 +12 -0
- data/test/potcar/POTCAR +5279 -0
- data/test/potcar/POTCAR.allElement +165 -0
- data/test/potcar/POTCAR.dummy +3 -0
- data/test/repeatVasp/Iter2-Nsw2.00/INCAR +35 -0
- data/test/repeatVasp/Iter2-Nsw2.00/KPOINTS +6 -0
- data/test/repeatVasp/Iter2-Nsw2.00/POSCAR +12 -0
- data/test/repeatVasp/Iter2-Nsw2.00/POTCAR +3151 -0
- data/test/repeatVasp/test.sh +3 -0
- data/test/test_calcinspector.rb +53 -0
- data/test/test_calcrepeater.rb +69 -0
- data/test/test_calcseries.rb +77 -0
- data/test/test_incar.rb +126 -0
- data/test/test_kpoints.rb +110 -0
- data/test/test_outcar.rb +162 -0
- data/test/test_poscar.rb +209 -0
- data/test/test_potcar.rb +65 -0
- data/test/test_vaspdir.rb +253 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/INCAR +27 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/IBRION-1-NSW000-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/INCAR +28 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/ISIF2-NSW000-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/INCAR +28 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/ISIF2-NSW001-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/INCAR +28 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/CONTCAR +17 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/INCAR +28 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/KPOINTS +6 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/OUTCAR +2602 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/POSCAR +12 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/POTCAR +3151 -0
- data/test/vaspdir/ISIF2-NSW100-OUTCAR-Iter3/lock +0 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/INCAR +28 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/ISIF3-NSW000-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/CONTCAR +17 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/INCAR +28 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/KPOINTS +6 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/OUTCAR +1436 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/POSCAR +12 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/POTCAR +3151 -0
- data/test/vaspdir/ISIF3-NSW001-OUTCAR-Iter1/lock +0 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/CONTCAR +17 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/INCAR +28 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/KPOINTS +6 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/OUTCAR +2025 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/POSCAR +12 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/POTCAR +3151 -0
- data/test/vaspdir/ISIF3-NSW002-OUTCAR-Iter2/lock +0 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/CONTCAR +0 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/INCAR +28 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/KPOINTS +6 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/OUTCAR +619 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/POSCAR +12 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/POTCAR +3151 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter1-INT/lock +0 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/CONTCAR +17 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/INCAR +28 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/KPOINTS +6 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/OUTCAR +2602 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/POSCAR +12 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/POTCAR +3151 -0
- data/test/vaspdir/ISIF3-NSW100-OUTCAR-Iter3/lock +0 -0
- data/test/vaspdir/PI/INCAR +28 -0
- data/test/vaspdir/PI/KPOINTS +5 -0
- data/test/vaspdir/PI/PI12345 +0 -0
- data/test/vaspdir/PI/POSCAR +57 -0
- data/test/vaspdir/PI/POTCAR +698 -0
- data/test/vaspdir/lack-INCAR/KPOINTS +5 -0
- data/test/vaspdir/lack-INCAR/POSCAR +57 -0
- data/test/vaspdir/lack-INCAR/POTCAR +698 -0
- data/test/vaspdir/lack-KPOINTS/INCAR +28 -0
- data/test/vaspdir/lack-KPOINTS/POSCAR +57 -0
- data/test/vaspdir/lack-KPOINTS/POTCAR +698 -0
- data/test/vaspdir/lack-POSCAR/INCAR +28 -0
- data/test/vaspdir/lack-POSCAR/KPOINTS +5 -0
- data/test/vaspdir/lack-POSCAR/POTCAR +698 -0
- data/test/vaspdir/lack-POTCAR/INCAR +28 -0
- data/test/vaspdir/lack-POTCAR/KPOINTS +5 -0
- data/test/vaspdir/lack-POTCAR/POSCAR +57 -0
- data/test/vaspdir/lock/INCAR +28 -0
- data/test/vaspdir/lock/KPOINTS +5 -0
- data/test/vaspdir/lock/POSCAR +57 -0
- data/test/vaspdir/lock/POTCAR +698 -0
- data/test/vaspdir/lock/lock +0 -0
- data/test/vaspdir/lock-PI/INCAR +28 -0
- data/test/vaspdir/lock-PI/KPOINTS +5 -0
- data/test/vaspdir/lock-PI/PI12345 +0 -0
- data/test/vaspdir/lock-PI/POSCAR +57 -0
- data/test/vaspdir/lock-PI/POTCAR +698 -0
- data/test/vaspdir/lock-PI/lock +0 -0
- data/test/vaspdir/next-try00/CONTCAR +17 -0
- data/test/vaspdir/next-try00/INCAR +28 -0
- data/test/vaspdir/next-try00/KPOINTS +6 -0
- data/test/vaspdir/next-try00/OUTCAR +2025 -0
- data/test/vaspdir/next-try00/POSCAR +12 -0
- data/test/vaspdir/next-try00/POTCAR +3151 -0
- data/test/vaspdir/next-try00/lock +0 -0
- data/test/vaspdir/not-yet-ISIF2/INCAR +28 -0
- data/test/vaspdir/not-yet-ISIF2/KPOINTS +5 -0
- data/test/vaspdir/not-yet-ISIF2/PI17489 +2 -0
- data/test/vaspdir/not-yet-ISIF2/PI17736 +2 -0
- data/test/vaspdir/not-yet-ISIF2/PI1858 +2 -0
- data/test/vaspdir/not-yet-ISIF2/PI1866 +2 -0
- data/test/vaspdir/not-yet-ISIF2/PI2059 +2 -0
- data/test/vaspdir/not-yet-ISIF2/POSCAR +57 -0
- data/test/vaspdir/not-yet-ISIF2/POTCAR +698 -0
- data/test/vaspdir/not-yet-ISIF3/INCAR +28 -0
- data/test/vaspdir/not-yet-ISIF3/KPOINTS +5 -0
- data/test/vaspdir/not-yet-ISIF3/POSCAR +57 -0
- data/test/vaspdir/not-yet-ISIF3/POTCAR +698 -0
- data/vasputils.gemspec +272 -0
- metadata +409 -0
data/.document
ADDED
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
|
+
|