vasputils 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -14,6 +14,6 @@ group :development do
14
14
  gem "mageo", ">= 0.0.0"
15
15
  gem "malge", ">= 0.0.1"
16
16
  gem "maset", ">= 0.0.0"
17
- gem "comana", ">= 0.0.5"
17
+ gem "comana", ">= 0.0.6"
18
18
  gem "builtinextension", ">= 0.0.3"
19
19
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
data/bin/qsubvasp CHANGED
@@ -1,66 +1,44 @@
1
1
  #! /usr/bin/env ruby
2
2
  # coding: utf-8
3
3
 
4
-
5
- SCRIPT_FILE = "pbs.sh"
6
- PBS_LOG = "pbs.log"
7
-
8
-
9
4
  require "optparse"
10
5
  require "yaml"
11
6
  require "pp"
12
7
 
8
+ require "rubygems"
9
+ gem "comana"
10
+ require "comana/queuesubmitter.rb"
11
+ require "comana/machineinfo.rb"
12
+
13
+ require "vasputils/vaspdir.rb"
14
+ require "vasputils/vaspgeomopt.rb"
15
+
13
16
  ## option analysis
14
17
  OPTS = {}
15
18
  op = OptionParser.new
16
- #op.on("-e", "--economy" , "Prior efficiency."){OPTS[:e] = true}
17
- op.on("-s", "--speed" , "Prior speed.") {OPTS[:s] = true}
18
-
19
- op.on("-g", "--geom-opt" , "Geometry optimization.") {OPTS[:g] = true}
20
- #op.on("-n", "--nebm" , "Nudged Elastic Band method."){OPTS[:n] = true}
21
- #op.on("-c", "--cond-find", "Condition Finding.") {OPTS[:c] = true}
22
-
19
+ #op.on("-e" , "--economy", "Prior efficiency." ){OPTS[:e] = true}
20
+ op.on("-s" , "--speed" , "Prior speed to efficiency."){OPTS[:s] = true}
21
+ op.on("-n nodes" , "--nodes" , "Node series." ){|v| OPTS[:n] = v}
22
+ #op.on("-c command", "--command", "Command to calculate." ){|v| OPTS[:c] = v}
23
+ op.on("-d dir" , "--dir" , "Directory to calculate." ){|v|
24
+ #OPTS[:d] = VaspDir.new(v)
25
+ OPTS[:d] = VaspGeomOpt.new(File.expand_path(v))
26
+ }
23
27
  op.parse!(ARGV)
24
28
 
25
- cluster = ARGV[0]
26
- #cluster = ARGV
27
- #qsub で複数のクラスターを候補に入れることができるか?e.g., Ga, Ge
28
- #それによって、ここがかきかわる。
29
-
30
- #puts "Options -e and -s cannot be duplicated." if OPTS[:e] && OPTS[:s]
31
- #if [OPTS[:g], OPTS[:n], OPTS[:c]].select_all(true).size ==
32
- # puts "Options -g, -n, and -c cannot be duplicated."
33
- # exit
34
- #end
35
-
36
- yaml = YAML.load_file("#{ENV["HOME"]}/.machineinfo")
37
- pp yaml
29
+ OPTS[:machineinfo] = MachineInfo.load_file
30
+ OPTS[:c] = "runvasp -g"
38
31
 
39
- if File.exits?(SCRIPT_FILE)
40
- puts "#{SCRIPT_FILE} already exist. Exit."
32
+ qs = QueueSubmitter.new(OPTS)
33
+ #pp qs; exit
34
+ begin
35
+ qs.start
36
+ puts "Submitted. Exit."
37
+ exit
38
+ rescue QueueSubmitter::AlreadyStartedError
39
+ puts "Already started. Exit."
40
+ exit
41
+ rescue QueueSubmitter::PrepareNextError
42
+ puts "Must not happen."
41
43
  exit
42
44
  end
43
-
44
- File.open(SCRIPT_FILE, "w") do |io|
45
- io.puts "#PBS -N task"
46
- io.puts "#PBS -l nodes=4:ppn=1:Ga"
47
- io.puts "cd $PBS_O_WORKDIR"
48
- io.puts "runvasp"
49
- #io.puts "#/usr/local/bin/mpiexec /usr/local/bin/vasp5212mpi-ifc11-fast"
50
- #io.puts "#/home/ippei/local/mpi/mpiexec-0.84/mpiexec /usr/local/calc/bin/vasp5212-mpich2"
51
- #io.puts "#/usr/local/calc/mpiexec/bin/mpiexec /usr/local/calc/bin/vasp5212-mpich2"
52
- #io.puts "#~/tmp.rb #OK"
53
-
54
- #io.puts condition
55
- #io.puts rsync
56
- #io.puts run
57
- #io.puts rsync
58
- #io.puts mv to trash?
59
- end
60
-
61
- # Record job_id in pbs. Overwrite if exists.
62
- job_id = `qsub #{SCRIPT_FILE}`
63
- File.open(PBS_LOG, "w") do |io|
64
- io.puts job_id
65
- end
66
-
data/bin/runvasp CHANGED
@@ -5,7 +5,7 @@ require "rubygems"
5
5
  gem "comana"
6
6
  require "comana/computationmanager.rb"
7
7
 
8
- gem "vasputils"
8
+ #gem "vasputils"
9
9
  require "vasputils/vaspdir.rb"
10
10
  require "vasputils/vaspgeomopt.rb"
11
11
 
@@ -15,10 +15,8 @@ require "optparse"
15
15
  OPTIONS = {}
16
16
  op = OptionParser.new
17
17
  op.on("-g" , "--geom-opt", "Geometry optimization"){OPTIONS[:g] = true}
18
- #op.on("-b val", "--bak=val", "descriptionB"){|v| OPTIONS[:bak] = v}
19
18
  op.parse!(ARGV)
20
19
 
21
-
22
20
  dir = ARGV[0] || "."
23
21
 
24
22
  if OPTIONS[:g]
@@ -16,27 +16,15 @@ require "vasputils/outcar.rb"
16
16
  require "vasputils/poscar.rb"
17
17
  require "vasputils/kpoints.rb"
18
18
 
19
- # vasp 実行ディレクトリ(入力・出力ファイルを含む)を扱うクラス
20
- #
21
- # MEMO
22
- # interrupted? みたいなメソッドは作れない。
23
- # 実行が開始したあと、その計算の状態が中断されているのか、
24
- # 単に実行中でファイルが書き込まれている途中なのか、
25
- # プログラムを実行しているプロセス自身以外は、外部からは判別がつかない。
26
- #
27
- # ルール
28
- # try00 形式の postfix がついていることを前提とする。
29
- # 00 の部分には CONTCAR を POSCAR にする手続きで連続して行う計算の番号を示す。
19
+ # Class for VASP executable directory,
20
+ # including input and output files.
30
21
  #
31
22
  class VaspDir < ComputationManager
32
23
  class InitializeError < Exception; end
33
24
  class NoVaspBinaryError < Exception; end
34
25
  class PrepareNextError < Exception; end
26
+ class ExecuteError < Exception; end
35
27
 
36
- #INCAR 解析とかして、モードを調べる。
37
- #- 格子定数の構造最適化モード(ISIF = 3)
38
- #- 格子定数を固定した構造最適化モード(ISIF = 2)
39
- ##- k 点探索モードは無理だろう。
40
28
  def initialize(dir)
41
29
  super(dir)
42
30
  @lockdir = "lock_vaspdir"
@@ -87,17 +75,6 @@ class VaspDir < ComputationManager
87
75
  private
88
76
 
89
77
  # vasp を投げる。
90
- # 計算実行時に lock を生成する。
91
- # もし既に lock が存在していれば、例外 VaspDirLockedError を
92
- # 投げる。
93
- # lock は作られっぱなしで、プログラムからは削除されない。
94
- # 通常、一度計算したらもう二度と計算しないし。
95
- #
96
- # MEMO
97
- # mpirun で投げる場合は
98
- # machinefile を生成しないとどのホストで計算するか、安定しない。
99
- # そのうち mpiexec from torque に対応するが、
100
- # まずは mpirun で動くように作る。
101
78
  def calculate
102
79
  begin
103
80
  info =
@@ -111,7 +88,8 @@ class VaspDir < ComputationManager
111
88
  command += vasp
112
89
  command += "> stdout"
113
90
 
114
- system command
91
+ end_status = system command
92
+ raise ExecuteError, "end_status is #{end_status.inspect}" unless end_status
115
93
  end
116
94
 
117
95
  def prepare_next
@@ -120,70 +98,3 @@ class VaspDir < ComputationManager
120
98
  end
121
99
 
122
100
  end
123
-
124
- #class VaspGeometryOptimization < ComputationManager
125
- # # 次の計算ディレクトリを作成し、
126
- # # その VaspDir クラスで self を置き換える。
127
- # # 計算が正常終了していなければ、例外 VaspDirNotEndedError を生じる。
128
- # # 次の計算ディレクトリが既に存在していれば例外 Errno::EEXIST が投げられる。
129
- # def next
130
- # raise NotEndedError unless normal_ended?
131
- # raise ConvergedError unless to_be_continued?
132
- # #postfix = /try(\d+)$/
133
- # POSTFIX =~ @dir
134
- # try_num = $1.to_i
135
- # next_dir = @dir.sub(POSTFIX, sprintf("try%02d", try_num + 1))
136
- # Dir.mkdir next_dir
137
- # FileUtils.cp( "#{@dir}/INCAR" , "#{next_dir}/INCAR")
138
- # FileUtils.cp( "#{@dir}/KPOINTS", "#{next_dir}/KPOINTS")
139
- # FileUtils.cp( "#{@dir}/POTCAR" , "#{next_dir}/POTCAR")
140
- # FileUtils.cp( "#{@dir}/CONTCAR", "#{next_dir}/POSCAR")
141
- # initialize(next_dir)
142
- # end
143
- #
144
- # # Return number of electronic steps.
145
- # def internal_steps
146
- # return outcar[:electronic_steps] if outcar
147
- # return 0
148
- # end
149
- #
150
- # # Return number of ionic steps.
151
- # def external_steps
152
- # return outcar[:ionic_steps] if outcar
153
- # return 0
154
- # end
155
- #
156
- # # Return elapsed time.
157
- # def elapsed_time
158
- # return outcar[:elapsed_time] if outcar
159
- # return 0.0
160
- # end
161
- #
162
- # # normal_ended? が false なら false。
163
- # # normal_ended? が true のうち、
164
- # # 結果を使って次に計算すべきなら true を、そうでなければ false を返す。
165
- # #
166
- # # 計算すべき、の条件はモードによって異なる。
167
- # # NSW = 0 もしくは NSW = 1 のとき、必ず false。
168
- # # - :single_point モードならば、常に false。
169
- # # - :geom_opt_lattice モードならば、ionic step が 2 以上なら true。
170
- # # - :geom_opt_atoms モードならば、ionic step が NSW と同じなら true。
171
- # #
172
- # def to_be_continued?
173
- # begin
174
- # outcar = Outcar.load_file("#{@dir}/OUTCAR")
175
- # rescue Errno::ENOENT
176
- # return false
177
- # end
178
- # ionic_steps = outcar[:ionic_steps]
179
- # return false unless outcar[:normal_ended]
180
- # return false if @incar["NSW"].to_i <= 1
181
- # if @mode == :geom_opt_lattice
182
- # return ionic_steps != 1
183
- # elsif @mode == :geom_opt_atoms
184
- # return ionic_steps == @incar["NSW"].to_i
185
- # else
186
- # return false
187
- # end
188
- # end
189
- #
@@ -57,7 +57,7 @@ class VaspGeomOpt < ComputationManager
57
57
  # end
58
58
  #end
59
59
  #puts "Geometry optimization fihished. Exit."
60
- sleep 1 # for interrupt
60
+ #sleep 1 # for interrupt
61
61
  end
62
62
 
63
63
  # latest_dir から返って来る最新の VaspDir が finished? で真を返し、
@@ -108,7 +108,7 @@ class VaspGeomOpt < ComputationManager
108
108
  next
109
109
  end
110
110
  end
111
- raise NoVaspDirError
111
+ raise NoVaspDirError, @dir
112
112
  end
113
113
 
114
114
  end
data/memo.txt CHANGED
@@ -1,12 +1,18 @@
1
- 0.0.5
1
+ #
2
+
3
+ 0.0.6 release [2012-05-10]
4
+ bin/qsubvasp is added.
5
+ lib/vaspdir is modified to raise ExecuteError when vasp failed.
6
+
7
+ 0.0.5 release
2
8
  Modifiy error process in VaspDir.calculate.
3
9
  Add runvasp.
4
10
  Add qsubvasp.
5
11
 
6
12
  0.0.4 release
7
- Using Comana library.
8
- Add runvasp.
9
- Modify VaspDir.
10
- Add VaspGeomOpt.
13
+ Modified to use Comana.
14
+ bin/runvasp is added.
15
+ VaspDir is modified.
16
+ VaspGeomOpt is added.
11
17
 
12
18
  0.0.3 release
data/vasputils.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "vasputils"
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["ippei94da"]
12
- s.date = "2012-05-08"
12
+ s.date = "2012-05-10"
13
13
  s.description = "This gem provides parsers for some of input and output files for VASP.\n This will provide support command for computations."
14
14
  s.email = "ippei94da@gmail.com"
15
15
  s.executables = ["addVolumeToten.rb", "latticeconstants", "lsvasp", "lsvaspdir", "lsvaspseries", "qsubvasp", "runvasp", "symposcar"]
@@ -215,7 +215,7 @@ Gem::Specification.new do |s|
215
215
  s.add_development_dependency(%q<mageo>, [">= 0.0.0"])
216
216
  s.add_development_dependency(%q<malge>, [">= 0.0.1"])
217
217
  s.add_development_dependency(%q<maset>, [">= 0.0.0"])
218
- s.add_development_dependency(%q<comana>, [">= 0.0.5"])
218
+ s.add_development_dependency(%q<comana>, [">= 0.0.6"])
219
219
  s.add_development_dependency(%q<builtinextension>, [">= 0.0.3"])
220
220
  else
221
221
  s.add_dependency(%q<rdoc>, [">= 3.12"])
@@ -226,7 +226,7 @@ Gem::Specification.new do |s|
226
226
  s.add_dependency(%q<mageo>, [">= 0.0.0"])
227
227
  s.add_dependency(%q<malge>, [">= 0.0.1"])
228
228
  s.add_dependency(%q<maset>, [">= 0.0.0"])
229
- s.add_dependency(%q<comana>, [">= 0.0.5"])
229
+ s.add_dependency(%q<comana>, [">= 0.0.6"])
230
230
  s.add_dependency(%q<builtinextension>, [">= 0.0.3"])
231
231
  end
232
232
  else
@@ -238,7 +238,7 @@ Gem::Specification.new do |s|
238
238
  s.add_dependency(%q<mageo>, [">= 0.0.0"])
239
239
  s.add_dependency(%q<malge>, [">= 0.0.1"])
240
240
  s.add_dependency(%q<maset>, [">= 0.0.0"])
241
- s.add_dependency(%q<comana>, [">= 0.0.5"])
241
+ s.add_dependency(%q<comana>, [">= 0.0.6"])
242
242
  s.add_dependency(%q<builtinextension>, [">= 0.0.3"])
243
243
  end
244
244
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vasputils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-08 00:00:00.000000000 Z
12
+ date: 2012-05-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
16
- requirement: &82143140 !ruby/object:Gem::Requirement
16
+ requirement: &79249910 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.12'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *82143140
24
+ version_requirements: *79249910
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &82141240 !ruby/object:Gem::Requirement
27
+ requirement: &79246810 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.1.3
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *82141240
35
+ version_requirements: *79246810
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &82139430 !ruby/object:Gem::Requirement
38
+ requirement: &79590980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.8.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *82139430
46
+ version_requirements: *79590980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: simplecov
49
- requirement: &82155010 !ruby/object:Gem::Requirement
49
+ requirement: &79586380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *82155010
57
+ version_requirements: *79586380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: crystalcell
60
- requirement: &82154520 !ruby/object:Gem::Requirement
60
+ requirement: &79583830 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.0.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *82154520
68
+ version_requirements: *79583830
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mageo
71
- requirement: &82153850 !ruby/object:Gem::Requirement
71
+ requirement: &79580340 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.0.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *82153850
79
+ version_requirements: *79580340
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: malge
82
- requirement: &82153190 !ruby/object:Gem::Requirement
82
+ requirement: &79577480 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 0.0.1
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *82153190
90
+ version_requirements: *79577480
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: maset
93
- requirement: &82152310 !ruby/object:Gem::Requirement
93
+ requirement: &79577090 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,21 +98,21 @@ dependencies:
98
98
  version: 0.0.0
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *82152310
101
+ version_requirements: *79577090
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: comana
104
- requirement: &82150690 !ruby/object:Gem::Requirement
104
+ requirement: &79576480 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
- version: 0.0.5
109
+ version: 0.0.6
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *82150690
112
+ version_requirements: *79576480
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: builtinextension
115
- requirement: &82149970 !ruby/object:Gem::Requirement
115
+ requirement: &79566760 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: 0.0.3
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *82149970
123
+ version_requirements: *79566760
124
124
  description: ! "This gem provides parsers for some of input and output files for VASP.\n
125
125
  \ This will provide support command for computations."
126
126
  email: ippei94da@gmail.com
@@ -331,7 +331,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
331
331
  version: '0'
332
332
  segments:
333
333
  - 0
334
- hash: -917063793
334
+ hash: -103563277
335
335
  required_rubygems_version: !ruby/object:Gem::Requirement
336
336
  none: false
337
337
  requirements: