63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'bin/poscar', line 63
def substitute(* args)
usage = "Usage: #{File.basename("#{__FILE__}")} POSCAR old_elem new_elem"
poscar, elem1, elem2 = * args
old_poscar = VaspUtils::Poscar.load_file(poscar)
unless elem1 && elem2
num = old_poscar.elements.size
width = 7
printf("%7s" * num, * old_poscar.elements)
puts
printf("%7d" * num, * old_poscar.nums_elements)
puts
exit
end
new_poscar = old_poscar.substitute(elem1, elem2)
sum_old_radius = 0.0
old_poscar.elements.size.times do |i|
radius = CrystalCell::Element.atomic_radius( old_poscar.elements[i])
sum_old_radius+= radius * old_poscar.nums_elements[i]
end
sum_new_radius = 0.0
new_poscar.elements.size.times do |i|
radius = CrystalCell::Element.atomic_radius( new_poscar.elements[i])
sum_new_radius+= radius * new_poscar.nums_elements[i]
end
new_poscar.axes = old_poscar.axes.map{|axis| axis.map{|v| v * sum_new_radius/sum_old_radius}}
new_poscar.dump($stdout)
end
|