bin/poscar in vasputils-0.1.6 vs bin/poscar in vasputils-0.1.7

- old
+ new

@@ -91,41 +91,49 @@ new_poscar.axes = old_poscar.axes.map{|axis| axis.map{|v| v * sum_new_radius/sum_old_radius}} new_poscar.dump($stdout) end - # POSCAR から得られる情報から、povray objects を生み出す povray 形式ファイルを生成。 - # 描画は行わない。外部でシェルスクリプトなどで実行すべき。 + ## POSCAR から得られる情報から、povray objects を生み出す povray 形式ファイルを生成。 + ## 描画は行わない。外部でシェルスクリプトなどで実行すべき。 + ## + ##USAGE: + ## poscar2pov.rb POSCAR -e 'Li,O' + ## POTCAR なしでも元素指定可能。POTCAR より優先。 + ## なお、POTCAR も -e 指定もない、すなわち元素が分からない状態ではプログラムは実行されない。 + ## + ## poscar2pov.rb POSCAR -b "Li,Ge,0.0,1.0,Ge,Ge,2.0,3.0" + ## 以下の2つの条件の和集合となる連結の描画情報を示す POSCAR.bonds.inc を生成。 + ## - Li-Ge間で距離 0.0〜1.0 + ## - Ge-Ge間で距離 2.0〜3.0 + #desc "povray", "generate povray objects." + #option :tolerance, desc: 'Tolerance for periodic shown atom.' # '-t tolerance' + #option :bonds, desc: 'Generate bonds matching conditions.', + # long_desc: 'E.g., -b "Li,Ge,0.0,1.0" indicateing two conditions' + # #'-b conditions', + #def povray(* args) + # poscar = args[0] || 'POSCAR' + # tolerance = options[:tolerance].to_f || 0.0 # - #USAGE: - # poscar2pov.rb POSCAR -e 'Li,O' - # POTCAR なしでも元素指定可能。POTCAR より優先。 - # なお、POTCAR も -e 指定もない、すなわち元素が分からない状態ではプログラムは実行されない。 - # - # poscar2pov.rb POSCAR -b "Li,Ge,0.0,1.0,Ge,Ge,2.0,3.0" - # 以下の2つの条件の和集合となる連結の描画情報を示す POSCAR.bonds.inc を生成。 - # - Li-Ge間で距離 0.0〜1.0 - # - Ge-Ge間で距離 2.0〜3.0 - desc "povray", "generate povray objects." - option :tolerance, desc: 'Tolerance for periodic shown atom.' # '-t tolerance' - option :bonds, desc: 'Generate bonds matching conditions.', - long_desc: 'E.g., -b "Li,Ge,0.0,1.0" indicateing two conditions' - #'-b conditions', - def povray(* args) - poscar = args[0] || 'POSCAR' - tolerance = options[:tolerance].to_f || 0.0 + # cell = VaspUtils::Poscar.load_file(poscar).to_cell(CrystalCell::Povray::Cell) + # puts cell.atoms_to_povs(tolerance).join + # puts cell.lattice_to_povs.join + # if options[:bonds] + # elem0, elem1, min, max = (options[:bonds].split(',')) + # puts cell.bonds_to_povs(elem0, elem1, min.to_f, max.to_f).join + # end + #end - cell = VaspUtils::Poscar.load_file(poscar).to_cell(CrystalCell::Povray::Cell) - puts cell.atoms_to_povs(tolerance).join - puts cell.lattice_to_povs.join - if options[:bonds] - elem0, elem1, min, max = (options[:bonds].split(',')) - puts cell.bonds_to_povs(elem0, elem1, min.to_f, max.to_f).join - end + desc 'png4in1 POSCAR_file', 'Generate a PNG file from 4 view points.' + def png4in1(*args) + poscar_name = args.shift + cell = VaspUtils::Poscar.load_file(poscar_name).to_cell + povray = CrystalCell::Povray.new(cell: cell) + povray.set_axes([-1.0, -1.0, 0.0]) + povray.shoot_4in1(poscar_name) end - # desc 'snapgeomopt [options]', 'Generate POSCARS of each ionic steps' option :xdatcar, desc: "Use XDATCAR in spite of vasprun.xml" long_desc "Note that XDATCAR doesn't preserve cell change." def snapgeomopt if options[:xdatcar] @@ -136,10 +144,10 @@ bases = Array.new( positions_list.size).fill(xdatcar.axes) else xml = VaspUtils::VasprunXml.load_file("./vasprun.xml") bases = xml.bases positions_list = xml.positions_list - elements = xml.elements + elements = xml.elements.uniq nums_elements = xml.nums_elements end num_iteration = positions_list.size width = num_iteration.to_s.size