vasputils 0.0.11 → 0.0.12

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.
Files changed (406) hide show
  1. data/CHANGES +49 -28
  2. data/Gemfile +10 -9
  3. data/VERSION +1 -1
  4. data/{test/vaspgeometryoptimizer/ended-Iter1/try00/CONTCAR → bin/changeincar} +0 -0
  5. data/bin/checkvasp +106 -75
  6. data/bin/genincar +4 -4
  7. data/bin/genkpoints +13 -13
  8. data/bin/genpotcar +2 -2
  9. data/bin/latticeconstants +10 -12
  10. data/bin/qsubvasp +63 -80
  11. data/bin/resetvaspdir +51 -0
  12. data/bin/resetvaspgeomopt +73 -0
  13. data/bin/runvasp +42 -49
  14. data/bin/runvaspdir +19 -0
  15. data/bin/runvaspgeomopt +19 -0
  16. data/bin/showvaspdir +171 -0
  17. data/bin/showvaspgeomopt +83 -0
  18. data/bin/symposcar +89 -113
  19. data/bin/varycondition +28 -0
  20. data/example/dot.vasputils +26 -232
  21. data/lib/vasputils/conditionvarier.rb +157 -0
  22. data/lib/vasputils/incar.rb +40 -43
  23. data/lib/vasputils/kpoints.rb +31 -33
  24. data/lib/vasputils/outcar.rb +53 -53
  25. data/lib/vasputils/poscar.rb +148 -150
  26. data/lib/vasputils/potcar/concatenater.rb +22 -22
  27. data/lib/vasputils/potcar.rb +12 -12
  28. data/lib/vasputils/setting.rb +22 -22
  29. data/lib/vasputils/vaspdir.rb +199 -86
  30. data/lib/vasputils/vaspgeometryoptimizer.rb +233 -100
  31. data/lib/vasputils.rb +7 -65
  32. data/test/conditionanalyzer/00/POSCAR +8 -0
  33. data/test/conditionanalyzer/00/encut400_k444/CONTCAR +8 -0
  34. data/test/conditionanalyzer/00/encut400_k444/INCAR +28 -0
  35. data/test/conditionanalyzer/00/encut400_k444/KPOINTS +6 -0
  36. data/test/conditionanalyzer/00/encut400_k444/OUTCAR +1436 -0
  37. data/test/conditionanalyzer/00/encut400_k444/POSCAR +8 -0
  38. data/test/conditionanalyzer/00/encut400_k444/POTCAR +16 -0
  39. data/test/conditionanalyzer/00/encut400_k555/CONTCAR +8 -0
  40. data/test/conditionanalyzer/00/encut400_k555/INCAR +28 -0
  41. data/test/conditionanalyzer/00/encut400_k555/KPOINTS +6 -0
  42. data/test/conditionanalyzer/00/encut400_k555/OUTCAR +1436 -0
  43. data/test/conditionanalyzer/00/encut400_k555/POSCAR +8 -0
  44. data/test/conditionanalyzer/00/encut400_k555/POTCAR +16 -0
  45. data/test/conditionanalyzer/00/encut500_k444/CONTCAR +8 -0
  46. data/test/conditionanalyzer/00/encut500_k444/INCAR +28 -0
  47. data/test/conditionanalyzer/00/encut500_k444/KPOINTS +6 -0
  48. data/test/conditionanalyzer/00/encut500_k444/OUTCAR +1436 -0
  49. data/test/conditionanalyzer/00/encut500_k444/POSCAR +8 -0
  50. data/test/conditionanalyzer/00/encut500_k444/POTCAR +16 -0
  51. data/test/conditionanalyzer/00/encut500_k555/CONTCAR +8 -0
  52. data/test/conditionanalyzer/00/encut500_k555/INCAR +28 -0
  53. data/test/conditionanalyzer/00/encut500_k555/KPOINTS +6 -0
  54. data/test/conditionanalyzer/00/encut500_k555/OUTCAR +1436 -0
  55. data/test/conditionanalyzer/00/encut500_k555/POSCAR +8 -0
  56. data/test/conditionanalyzer/00/encut500_k555/POTCAR +16 -0
  57. data/test/{vaspkpointsfinder/01-01-01/try00 → conditionanalyzer/01/00-original}/INCAR +3 -3
  58. data/test/conditionanalyzer/01/00-original/KPOINTS +6 -0
  59. data/test/conditionanalyzer/01/00-original/POSCAR +10 -0
  60. data/test/conditionanalyzer/01/01-ENCUT/1000/try02/CONTCAR +13 -0
  61. data/test/conditionanalyzer/01/01-ENCUT/1000/try02/INCAR +17 -0
  62. data/test/conditionanalyzer/01/01-ENCUT/1000/try02/KPOINTS +6 -0
  63. data/test/conditionanalyzer/01/01-ENCUT/1000/try02/OUTCAR +1692 -0
  64. data/test/conditionanalyzer/01/01-ENCUT/1000/try02/POSCAR +13 -0
  65. data/test/conditionanalyzer/01/01-ENCUT/1200/try02/CONTCAR +13 -0
  66. data/test/conditionanalyzer/01/01-ENCUT/1200/try02/INCAR +17 -0
  67. data/test/conditionanalyzer/01/01-ENCUT/1200/try02/KPOINTS +6 -0
  68. data/test/conditionanalyzer/01/01-ENCUT/1200/try02/OUTCAR +1692 -0
  69. data/test/conditionanalyzer/01/01-ENCUT/1200/try02/POSCAR +13 -0
  70. data/test/conditionanalyzer/01/01-ENCUT/1500/try02/CONTCAR +13 -0
  71. data/test/conditionanalyzer/01/01-ENCUT/1500/try02/INCAR +17 -0
  72. data/test/conditionanalyzer/01/01-ENCUT/1500/try02/KPOINTS +6 -0
  73. data/test/conditionanalyzer/01/01-ENCUT/1500/try02/OUTCAR +1742 -0
  74. data/test/conditionanalyzer/01/01-ENCUT/1500/try02/POSCAR +13 -0
  75. data/test/conditionanalyzer/01/01-ENCUT/500/try05/CONTCAR +13 -0
  76. data/test/conditionanalyzer/01/01-ENCUT/500/try05/INCAR +17 -0
  77. data/test/conditionanalyzer/01/01-ENCUT/500/try05/KPOINTS +6 -0
  78. data/test/conditionanalyzer/01/01-ENCUT/500/try05/OUTCAR +1644 -0
  79. data/test/conditionanalyzer/01/01-ENCUT/500/try05/POSCAR +13 -0
  80. data/test/conditionanalyzer/01/01-ENCUT/600/try01/CONTCAR +13 -0
  81. data/test/conditionanalyzer/01/01-ENCUT/600/try01/INCAR +17 -0
  82. data/test/conditionanalyzer/01/01-ENCUT/600/try01/KPOINTS +6 -0
  83. data/test/conditionanalyzer/01/01-ENCUT/600/try01/OUTCAR +1644 -0
  84. data/test/conditionanalyzer/01/01-ENCUT/600/try01/POSCAR +13 -0
  85. data/test/conditionanalyzer/01/01-ENCUT/700/try01/CONTCAR +13 -0
  86. data/test/conditionanalyzer/01/01-ENCUT/700/try01/INCAR +17 -0
  87. data/test/conditionanalyzer/01/01-ENCUT/700/try01/KPOINTS +6 -0
  88. data/test/conditionanalyzer/01/01-ENCUT/700/try01/OUTCAR +1644 -0
  89. data/test/conditionanalyzer/01/01-ENCUT/700/try01/POSCAR +13 -0
  90. data/test/conditionanalyzer/01/01-ENCUT/800/try01/CONTCAR +13 -0
  91. data/test/conditionanalyzer/01/01-ENCUT/800/try01/INCAR +17 -0
  92. data/test/conditionanalyzer/01/01-ENCUT/800/try01/KPOINTS +6 -0
  93. data/test/conditionanalyzer/01/01-ENCUT/800/try01/OUTCAR +3610 -0
  94. data/test/conditionanalyzer/01/01-ENCUT/800/try01/POSCAR +10 -0
  95. data/test/conditionanalyzer/01/01-ENCUT/900/try01/CONTCAR +13 -0
  96. data/test/conditionanalyzer/01/01-ENCUT/900/try01/INCAR +17 -0
  97. data/test/conditionanalyzer/01/01-ENCUT/900/try01/KPOINTS +6 -0
  98. data/test/conditionanalyzer/01/01-ENCUT/900/try01/OUTCAR +1692 -0
  99. data/test/conditionanalyzer/01/01-ENCUT/900/try01/POSCAR +13 -0
  100. data/test/conditionanalyzer/01/02-KPOINTS/16x16x16/try07/CONTCAR +13 -0
  101. data/test/conditionanalyzer/01/02-KPOINTS/16x16x16/try07/INCAR +17 -0
  102. data/test/conditionanalyzer/01/02-KPOINTS/16x16x16/try07/KPOINTS +6 -0
  103. data/test/conditionanalyzer/01/02-KPOINTS/16x16x16/try07/OUTCAR +12318 -0
  104. data/test/conditionanalyzer/01/02-KPOINTS/16x16x16/try07/POSCAR +13 -0
  105. data/test/conditionanalyzer/01/02-KPOINTS/1x1x1/try07/CONTCAR +13 -0
  106. data/test/conditionanalyzer/01/02-KPOINTS/1x1x1/try07/INCAR +17 -0
  107. data/test/{vaspkpointsfinder/01-01-01/try00 → conditionanalyzer/01/02-KPOINTS/1x1x1/try07}/KPOINTS +1 -1
  108. data/test/conditionanalyzer/01/02-KPOINTS/1x1x1/try07/OUTCAR +1337 -0
  109. data/test/conditionanalyzer/01/02-KPOINTS/1x1x1/try07/POSCAR +13 -0
  110. data/test/conditionanalyzer/01/02-KPOINTS/2x2x2/try10/CONTCAR +13 -0
  111. data/test/conditionanalyzer/01/02-KPOINTS/2x2x2/try10/INCAR +17 -0
  112. data/test/conditionanalyzer/01/02-KPOINTS/2x2x2/try10/KPOINTS +6 -0
  113. data/test/conditionanalyzer/01/02-KPOINTS/2x2x2/try10/OUTCAR +9885 -0
  114. data/test/conditionanalyzer/01/02-KPOINTS/2x2x2/try10/POSCAR +13 -0
  115. data/test/conditionanalyzer/01/02-KPOINTS/32x32x32/try06/CONTCAR +13 -0
  116. data/test/conditionanalyzer/01/02-KPOINTS/32x32x32/try06/INCAR +17 -0
  117. data/test/conditionanalyzer/01/02-KPOINTS/32x32x32/try06/KPOINTS +6 -0
  118. data/test/conditionanalyzer/01/02-KPOINTS/32x32x32/try06/OUTCAR +72342 -0
  119. data/test/conditionanalyzer/01/02-KPOINTS/32x32x32/try06/POSCAR +13 -0
  120. data/test/conditionanalyzer/01/02-KPOINTS/32x32x64/try04/CONTCAR +13 -0
  121. data/test/conditionanalyzer/01/02-KPOINTS/32x32x64/try04/INCAR +17 -0
  122. data/test/conditionanalyzer/01/02-KPOINTS/32x32x64/try04/KPOINTS +6 -0
  123. data/test/conditionanalyzer/01/02-KPOINTS/32x32x64/try04/OUTCAR +139254 -0
  124. data/test/conditionanalyzer/01/02-KPOINTS/32x32x64/try04/POSCAR +13 -0
  125. data/test/conditionanalyzer/01/02-KPOINTS/4x4x4/try05/CONTCAR +13 -0
  126. data/test/conditionanalyzer/01/02-KPOINTS/4x4x4/try05/INCAR +17 -0
  127. data/test/conditionanalyzer/01/02-KPOINTS/4x4x4/try05/KPOINTS +6 -0
  128. data/test/conditionanalyzer/01/02-KPOINTS/4x4x4/try05/OUTCAR +1644 -0
  129. data/test/conditionanalyzer/01/02-KPOINTS/4x4x4/try05/POSCAR +13 -0
  130. data/test/conditionanalyzer/01/02-KPOINTS/64x64x64/INCAR +17 -0
  131. data/test/conditionanalyzer/01/02-KPOINTS/64x64x64/KPOINTS +6 -0
  132. data/test/conditionanalyzer/01/02-KPOINTS/64x64x64/OUTCAR +507061 -0
  133. data/test/conditionanalyzer/01/02-KPOINTS/64x64x64/POSCAR +10 -0
  134. data/test/conditionanalyzer/01/02-KPOINTS/8x8x8/try05/CONTCAR +13 -0
  135. data/test/conditionanalyzer/01/02-KPOINTS/8x8x8/try05/INCAR +17 -0
  136. data/test/conditionanalyzer/01/02-KPOINTS/8x8x8/try05/KPOINTS +6 -0
  137. data/test/conditionanalyzer/01/02-KPOINTS/8x8x8/try05/OUTCAR +3298 -0
  138. data/test/conditionanalyzer/01/02-KPOINTS/8x8x8/try05/POSCAR +13 -0
  139. data/test/conditionanalyzer/mixed_conditions/orthorhombic/CONTCAR +17 -0
  140. data/test/conditionanalyzer/mixed_conditions/orthorhombic/INCAR +28 -0
  141. data/test/conditionanalyzer/mixed_conditions/orthorhombic/KPOINTS +6 -0
  142. data/test/conditionanalyzer/mixed_conditions/orthorhombic/OUTCAR +1436 -0
  143. data/test/conditionanalyzer/mixed_conditions/orthorhombic/POSCAR +12 -0
  144. data/test/conditionanalyzer/mixed_conditions/orthorhombic/POTCAR +16 -0
  145. data/test/conditionanalyzer/mixed_conditions/tetragonal/CONTCAR +17 -0
  146. data/test/conditionanalyzer/mixed_conditions/tetragonal/INCAR +28 -0
  147. data/test/conditionanalyzer/mixed_conditions/tetragonal/KPOINTS +6 -0
  148. data/test/conditionanalyzer/mixed_conditions/tetragonal/OUTCAR +1436 -0
  149. data/test/conditionanalyzer/mixed_conditions/tetragonal/POSCAR +12 -0
  150. data/test/conditionanalyzer/mixed_conditions/tetragonal/POTCAR +16 -0
  151. data/test/conditionanalyzer/picker/encut400_k444-cubic/INCAR +28 -0
  152. data/test/conditionanalyzer/picker/encut400_k444-cubic/KPOINTS +6 -0
  153. data/test/conditionanalyzer/picker/encut400_k444-cubic/OUTCAR +1436 -0
  154. data/test/conditionanalyzer/picker/encut400_k444-cubic/POSCAR +9 -0
  155. data/test/conditionanalyzer/picker/encut400_k444-cubic/POTCAR +16 -0
  156. data/test/conditionanalyzer/picker/encut400_k444-tetragonal-b/INCAR +28 -0
  157. data/test/conditionanalyzer/picker/encut400_k444-tetragonal-b/KPOINTS +6 -0
  158. data/test/conditionanalyzer/picker/encut400_k444-tetragonal-b/OUTCAR +1436 -0
  159. data/test/conditionanalyzer/picker/encut400_k444-tetragonal-b/POSCAR +9 -0
  160. data/test/conditionanalyzer/picker/encut400_k444-tetragonal-b/POTCAR +16 -0
  161. data/test/conditionanalyzer/picker/encut400_k444-unfinished/INCAR +28 -0
  162. data/test/conditionanalyzer/picker/encut400_k444-unfinished/KPOINTS +6 -0
  163. data/test/conditionanalyzer/picker/encut400_k444-unfinished/OUTCAR +1381 -0
  164. data/test/conditionanalyzer/picker/encut400_k444-unfinished/POSCAR +12 -0
  165. data/test/conditionanalyzer/picker/encut400_k444-unfinished/POTCAR +16 -0
  166. data/test/conditionanalyzer/picker/hexiagonal/CONTCAR +13 -0
  167. data/test/conditionanalyzer/picker/hexiagonal/INCAR +17 -0
  168. data/test/conditionanalyzer/picker/hexiagonal/KPOINTS +6 -0
  169. data/test/conditionanalyzer/picker/hexiagonal/OUTCAR +1644 -0
  170. data/test/conditionanalyzer/picker/hexiagonal/POSCAR +13 -0
  171. data/test/conditionvarier/standard/INCAR +28 -0
  172. data/test/conditionvarier/standard/KPOINTS +6 -0
  173. data/test/conditionvarier/standard/POSCAR +12 -0
  174. data/test/conditionvarier/standard/POTCAR +16 -0
  175. data/test/helper.rb +4 -4
  176. data/test/poscar/symmetry/cubic/POSCAR +8 -0
  177. data/test/poscar/symmetry/hexagonal/POSCAR +8 -0
  178. data/test/poscar/symmetry/monoclinic/POSCAR +8 -0
  179. data/test/poscar/symmetry/orthorhombic/POSCAR +8 -0
  180. data/test/poscar/symmetry/tetragonal/POSCAR +8 -0
  181. data/test/poscar/symmetry/tetragonal-b/POSCAR +8 -0
  182. data/test/poscar/symmetry/triclinic/POSCAR +10 -0
  183. data/test/poscar/symmetry/trigonal/POSCAR +9 -0
  184. data/test/test_conditionvarier.rb +201 -0
  185. data/test/test_incar.rb +144 -144
  186. data/test/test_kpoints.rb +91 -91
  187. data/test/test_outcar.rb +154 -154
  188. data/test/test_poscar.rb +263 -262
  189. data/test/test_potcar.rb +31 -31
  190. data/test/test_potcar_concatenater.rb +39 -39
  191. data/test/test_setting.rb +15 -14
  192. data/test/test_vaspdir.rb +193 -126
  193. data/test/test_vaspgeometryoptimizer.rb +177 -78
  194. data/test/test_vasputils.rb +48 -48
  195. data/test/vaspdir/reset_init/finished/orig/CONTCAR +17 -0
  196. data/test/vaspdir/reset_init/finished/orig/INCAR +27 -0
  197. data/test/vaspdir/reset_init/finished/orig/KPOINTS +6 -0
  198. data/test/vaspdir/reset_init/finished/orig/OUTCAR +1436 -0
  199. data/test/vaspdir/reset_init/finished/orig/POSCAR +12 -0
  200. data/test/vaspdir/reset_init/finished/orig/POTCAR +16 -0
  201. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/CONTCAR +17 -0
  202. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/INCAR +27 -0
  203. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/KPOINTS +6 -0
  204. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/OUTCAR +1436 -0
  205. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/POSCAR +12 -0
  206. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir0/POTCAR +16 -0
  207. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/CONTCAR +17 -0
  208. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/INCAR +27 -0
  209. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/KPOINTS +6 -0
  210. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/OUTCAR +1436 -0
  211. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/POSCAR +12 -0
  212. data/test/vaspgeometryoptimizer/multiple_vaspdir/vaspdir1/POTCAR +16 -0
  213. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/DOSCAR +0 -0
  214. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/EIGENVAL +0 -0
  215. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/INCAR +0 -0
  216. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/KPOINTS +0 -0
  217. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/OSZICAR +0 -0
  218. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/OUTCAR +0 -0
  219. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/PCDAT +0 -0
  220. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/POSCAR +0 -0
  221. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/POTCAR +0 -0
  222. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/WAVECAR +0 -0
  223. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/XDATCAR +0 -0
  224. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt00/vasprun.xml +0 -0
  225. data/test/vaspgeometryoptimizer/prepare_next/no-contcar/geomopt01/.gitignore +0 -0
  226. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/CHG +0 -0
  227. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/CHGCAR +0 -0
  228. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/CONTCAR +0 -0
  229. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/DOSCAR +0 -0
  230. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/EIGENVAL +0 -0
  231. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/INCAR +0 -0
  232. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/KPOINTS +0 -0
  233. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/OSZICAR +0 -0
  234. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/OUTCAR +0 -0
  235. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/PCDAT +0 -0
  236. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/POSCAR +0 -0
  237. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/POTCAR +0 -0
  238. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/WAVECAR +0 -0
  239. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/XDATCAR +0 -0
  240. data/test/vaspgeometryoptimizer/prepare_next/normal/geomopt00/vasprun.xml +0 -0
  241. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/CONTCAR +12 -0
  242. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/INCAR +0 -0
  243. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/KPOINTS +0 -0
  244. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/OUTCAR +0 -0
  245. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/POSCAR +12 -0
  246. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt00/POTCAR +0 -0
  247. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/CONTCAR +12 -0
  248. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/INCAR +0 -0
  249. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/KPOINTS +0 -0
  250. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/OUTCAR +0 -0
  251. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/POSCAR +12 -0
  252. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt01/POTCAR +0 -0
  253. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt02/CONTCAR +0 -0
  254. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt02/INCAR +0 -0
  255. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt02/KPOINTS +0 -0
  256. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt02/POSCAR +12 -0
  257. data/test/vaspgeometryoptimizer/reset_init/orig/geomopt02/POTCAR +0 -0
  258. data/test/vaspgeometryoptimizer/reset_init/orig/lock_vaspgeomopt/dummy +0 -0
  259. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/CONTCAR +12 -0
  260. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/INCAR +0 -0
  261. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/KPOINTS +0 -0
  262. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/OUTCAR +0 -0
  263. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/POSCAR +12 -0
  264. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt00/POTCAR +0 -0
  265. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/CONTCAR +12 -0
  266. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/INCAR +0 -0
  267. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/KPOINTS +0 -0
  268. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/OUTCAR +0 -0
  269. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/POSCAR +12 -0
  270. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt01/POTCAR +0 -0
  271. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/CONTCAR +0 -0
  272. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/INCAR +0 -0
  273. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/KPOINTS +0 -0
  274. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/OUTCAR +0 -0
  275. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/POSCAR +12 -0
  276. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/geomopt02/POTCAR +0 -0
  277. data/test/vaspgeometryoptimizer/reset_next/empty-contcar/orig/lock_vaspgeomopt/dummy +0 -0
  278. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/CONTCAR +12 -0
  279. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/INCAR +0 -0
  280. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/KPOINTS +0 -0
  281. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/OUTCAR +0 -0
  282. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/POSCAR +12 -0
  283. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt00/POTCAR +0 -0
  284. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/CONTCAR +12 -0
  285. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/INCAR +0 -0
  286. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/KPOINTS +0 -0
  287. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/OUTCAR +0 -0
  288. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/POSCAR +12 -0
  289. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt01/POTCAR +0 -0
  290. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt02/INCAR +0 -0
  291. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt02/KPOINTS +0 -0
  292. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt02/POSCAR +12 -0
  293. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/geomopt02/POTCAR +0 -0
  294. data/test/vaspgeometryoptimizer/reset_next/no-contcar/orig/lock_vaspgeomopt/dummy +0 -0
  295. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/CONTCAR +12 -0
  296. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/INCAR +0 -0
  297. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/KPOINTS +0 -0
  298. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/OUTCAR +0 -0
  299. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/POSCAR +12 -0
  300. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt00/POTCAR +0 -0
  301. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/CONTCAR +12 -0
  302. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/INCAR +0 -0
  303. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/KPOINTS +0 -0
  304. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/OUTCAR +0 -0
  305. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/POSCAR +12 -0
  306. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt01/POTCAR +0 -0
  307. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt02/CONTCAR +12 -0
  308. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt02/INCAR +0 -0
  309. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt02/KPOINTS +0 -0
  310. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt02/POSCAR +12 -0
  311. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/geomopt02/POTCAR +0 -0
  312. data/test/vaspgeometryoptimizer/reset_next/poscar-contcar/orig/lock_vaspgeomopt/dummy +0 -0
  313. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/CONTCAR +12 -0
  314. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/INCAR +0 -0
  315. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/KPOINTS +0 -0
  316. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/OUTCAR +0 -0
  317. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/POSCAR +12 -0
  318. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt00/POTCAR +0 -0
  319. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/CONTCAR +12 -0
  320. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/INCAR +0 -0
  321. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/KPOINTS +0 -0
  322. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/OUTCAR +0 -0
  323. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/POSCAR +12 -0
  324. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt01/POTCAR +0 -0
  325. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt02/CONTCAR +0 -0
  326. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt02/INCAR +0 -0
  327. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt02/KPOINTS +0 -0
  328. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt02/POSCAR +12 -0
  329. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/geomopt02/POTCAR +0 -0
  330. data/test/vaspgeometryoptimizer/reset_reincarnation/orig/lock_vaspgeomopt/dummy +0 -0
  331. data/test/vaspgeometryoptimizer/started/geomopt00/INCAR +0 -0
  332. data/test/vaspgeometryoptimizer/started/geomopt00/KPOINTS +0 -0
  333. data/test/vaspgeometryoptimizer/started/geomopt00/POSCAR +0 -0
  334. data/test/vaspgeometryoptimizer/started/geomopt00/POTCAR +0 -0
  335. data/test/vaspgeometryoptimizer/till01/geomopt00/CONTCAR +0 -0
  336. data/test/vaspgeometryoptimizer/till01/geomopt00/INCAR +0 -0
  337. data/test/vaspgeometryoptimizer/till01/geomopt00/KPOINTS +0 -0
  338. data/test/vaspgeometryoptimizer/till01/geomopt00/OUTCAR +0 -0
  339. data/test/vaspgeometryoptimizer/till01/geomopt00/POSCAR +0 -0
  340. data/test/vaspgeometryoptimizer/till01/geomopt00/POTCAR +0 -0
  341. data/test/vaspgeometryoptimizer/till01/geomopt01/INCAR +0 -0
  342. data/test/vaspgeometryoptimizer/till01/geomopt01/KPOINTS +0 -0
  343. data/test/vaspgeometryoptimizer/till01/geomopt01/POSCAR +0 -0
  344. data/test/vaspgeometryoptimizer/till01/geomopt01/POTCAR +0 -0
  345. metadata +464 -106
  346. data/bin/genvaspdir +0 -17
  347. data/bin/rmvaspout +0 -40
  348. data/lib/vasputils/vaspkpointsfinder.rb +0 -72
  349. data/test/test_vaspkpointsfinder.rb +0 -25
  350. data/test/vaspkpointsfinder/01-01-01/try00/POSCAR +0 -8
  351. data/vasputils.gemspec +0 -567
  352. /data/test/{vaspgeometryoptimizer/ended-Iter1/try00 → conditionanalyzer/01/00-original}/POTCAR +0 -0
  353. /data/test/{vaspgeometryoptimizer/ended-Iter1/try01 → conditionanalyzer/01/01-ENCUT/1000/try02}/POTCAR +0 -0
  354. /data/test/{vaspgeometryoptimizer/ended-Iter2/try00 → conditionanalyzer/01/01-ENCUT/1200/try02}/POTCAR +0 -0
  355. /data/test/{vaspgeometryoptimizer/ended-Iter2/try01 → conditionanalyzer/01/01-ENCUT/1500/try02}/POTCAR +0 -0
  356. /data/test/{vaspgeometryoptimizer/not-yet/try00 → conditionanalyzer/01/01-ENCUT/500/try05}/POTCAR +0 -0
  357. /data/test/{vaspgeometryoptimizer/prepare_next/try00 → conditionanalyzer/01/01-ENCUT/600/try01}/POTCAR +0 -0
  358. /data/test/{vaspgeometryoptimizer/started/try00 → conditionanalyzer/01/01-ENCUT/700/try01}/POTCAR +0 -0
  359. /data/test/{vaspgeometryoptimizer/till01/try00 → conditionanalyzer/01/01-ENCUT/800/try01}/POTCAR +0 -0
  360. /data/test/{vaspgeometryoptimizer/till01 → conditionanalyzer/01/01-ENCUT/900}/try01/POTCAR +0 -0
  361. /data/test/{vaspkpointsfinder/01-01-01/try00 → conditionanalyzer/01/02-KPOINTS/16x16x16/try07}/POTCAR +0 -0
  362. /data/test/{vaspgeometryoptimizer/ended-Iter1/try00/INCAR → conditionanalyzer/01/02-KPOINTS/1x1x1/try07/POTCAR} +0 -0
  363. /data/test/{vaspgeometryoptimizer/ended-Iter1/try00/KPOINTS → conditionanalyzer/01/02-KPOINTS/2x2x2/try10/POTCAR} +0 -0
  364. /data/test/{vaspgeometryoptimizer/ended-Iter1/try00/OUTCAR → conditionanalyzer/01/02-KPOINTS/32x32x32/try06/POTCAR} +0 -0
  365. /data/test/{vaspgeometryoptimizer/ended-Iter1/try00/POSCAR → conditionanalyzer/01/02-KPOINTS/32x32x64/try04/POTCAR} +0 -0
  366. /data/test/{vaspgeometryoptimizer/ended-Iter1/try01/INCAR → conditionanalyzer/01/02-KPOINTS/4x4x4/try05/POTCAR} +0 -0
  367. /data/test/{vaspgeometryoptimizer/ended-Iter2/try00 → conditionanalyzer/01/02-KPOINTS/64x64x64}/CONTCAR +0 -0
  368. /data/test/{vaspgeometryoptimizer/ended-Iter1/try01/KPOINTS → conditionanalyzer/01/02-KPOINTS/64x64x64/POTCAR} +0 -0
  369. /data/test/{vaspgeometryoptimizer/ended-Iter1/try01/POSCAR → conditionanalyzer/01/02-KPOINTS/8x8x8/try05/POTCAR} +0 -0
  370. /data/test/{vaspgeometryoptimizer/ended-Iter2/try00/INCAR → conditionanalyzer/picker/hexiagonal/POTCAR} +0 -0
  371. /data/test/vaspgeometryoptimizer/{prepare_next/try00 → ended-Iter1/geomopt00}/CONTCAR +0 -0
  372. /data/test/vaspgeometryoptimizer/{ended-Iter2/try01 → ended-Iter1/geomopt00}/INCAR +0 -0
  373. /data/test/vaspgeometryoptimizer/{ended-Iter2/try00 → ended-Iter1/geomopt00}/KPOINTS +0 -0
  374. /data/test/vaspgeometryoptimizer/{ended-Iter2/try00 → ended-Iter1/geomopt00}/OUTCAR +0 -0
  375. /data/test/vaspgeometryoptimizer/{ended-Iter2/try00 → ended-Iter1/geomopt00}/POSCAR +0 -0
  376. /data/test/vaspgeometryoptimizer/{ended-Iter2/try01/KPOINTS → ended-Iter1/geomopt00/POTCAR} +0 -0
  377. /data/test/vaspgeometryoptimizer/{not-yet/try00 → ended-Iter1/geomopt01}/INCAR +0 -0
  378. /data/test/vaspgeometryoptimizer/{not-yet/try00 → ended-Iter1/geomopt01}/KPOINTS +0 -0
  379. /data/test/vaspgeometryoptimizer/ended-Iter1/{try01 → geomopt01}/OUTCAR +0 -0
  380. /data/test/vaspgeometryoptimizer/{ended-Iter2/try01 → ended-Iter1/geomopt01}/POSCAR +0 -0
  381. /data/test/vaspgeometryoptimizer/{not-yet/try00/POSCAR → ended-Iter1/geomopt01/POTCAR} +0 -0
  382. /data/test/vaspgeometryoptimizer/{till01/try00 → ended-Iter2/geomopt00}/CONTCAR +0 -0
  383. /data/test/vaspgeometryoptimizer/{prepare_next/try00 → ended-Iter2/geomopt00}/INCAR +0 -0
  384. /data/test/vaspgeometryoptimizer/{prepare_next/try00 → ended-Iter2/geomopt00}/KPOINTS +0 -0
  385. /data/test/vaspgeometryoptimizer/{prepare_next/try00 → ended-Iter2/geomopt00}/OUTCAR +0 -0
  386. /data/test/vaspgeometryoptimizer/{prepare_next/try00 → ended-Iter2/geomopt00}/POSCAR +0 -0
  387. /data/test/vaspgeometryoptimizer/{prepare_next/try00/CHG → ended-Iter2/geomopt00/POTCAR} +0 -0
  388. /data/test/vaspgeometryoptimizer/{started/try00 → ended-Iter2/geomopt01}/INCAR +0 -0
  389. /data/test/vaspgeometryoptimizer/{started/try00 → ended-Iter2/geomopt01}/KPOINTS +0 -0
  390. /data/test/vaspgeometryoptimizer/ended-Iter2/{try01 → geomopt01}/OUTCAR +0 -0
  391. /data/test/vaspgeometryoptimizer/{started/try00 → ended-Iter2/geomopt01}/POSCAR +0 -0
  392. /data/test/vaspgeometryoptimizer/{prepare_next/try00/CHGCAR → ended-Iter2/geomopt01/POTCAR} +0 -0
  393. /data/test/vaspgeometryoptimizer/{till01/try00 → not-geomopt/not-geomopt-subdir/calcA}/INCAR +0 -0
  394. /data/test/vaspgeometryoptimizer/{till01/try00 → not-geomopt/not-geomopt-subdir/calcA}/KPOINTS +0 -0
  395. /data/test/vaspgeometryoptimizer/{till01/try00 → not-geomopt/not-geomopt-subdir/calcA}/POSCAR +0 -0
  396. /data/test/vaspgeometryoptimizer/{prepare_next/try00/DOSCAR → not-geomopt/not-geomopt-subdir/calcA/POTCAR} +0 -0
  397. /data/test/vaspgeometryoptimizer/{till01/try01 → not-geomopt/not-geomopt-subdir/calcB}/INCAR +0 -0
  398. /data/test/vaspgeometryoptimizer/{till01/try01 → not-geomopt/not-geomopt-subdir/calcB}/KPOINTS +0 -0
  399. /data/test/vaspgeometryoptimizer/{till01/try01 → not-geomopt/not-geomopt-subdir/calcB}/POSCAR +0 -0
  400. /data/test/vaspgeometryoptimizer/{prepare_next/try00/EIGENVAL → not-geomopt/not-geomopt-subdir/calcB/POTCAR} +0 -0
  401. /data/test/vaspgeometryoptimizer/{prepare_next/try00/OSZICAR → not-yet/geomopt00/INCAR} +0 -0
  402. /data/test/vaspgeometryoptimizer/{prepare_next/try00/PCDAT → not-yet/geomopt00/KPOINTS} +0 -0
  403. /data/test/vaspgeometryoptimizer/{prepare_next/try00/WAVECAR → not-yet/geomopt00/POSCAR} +0 -0
  404. /data/test/vaspgeometryoptimizer/{prepare_next/try00/XDATCAR → not-yet/geomopt00/POTCAR} +0 -0
  405. /data/test/vaspgeometryoptimizer/prepare_next/{try00/vasprun.xml → no-contcar/geomopt00/CHG} +0 -0
  406. /data/test/vaspgeometryoptimizer/{till01/try00/OUTCAR → prepare_next/no-contcar/geomopt00/CHGCAR} +0 -0
@@ -6,98 +6,211 @@ require "pp"
6
6
  require "date"
7
7
  require "yaml"
8
8
 
9
- require "rubygems"
10
- gem "comana"
11
- require "comana/computationmanager.rb"
12
- require "comana/machineinfo.rb"
13
-
14
- require "vasputils.rb"
9
+ #require "rubygems"
10
+ #require "comana"
15
11
 
16
12
  # Class for VASP executable directory,
17
13
  # including input and output files.
18
14
  #
19
- class VaspUtils::VaspDir < ComputationManager
20
- class InitializeError < Exception; end
21
- class NoVaspBinaryError < Exception; end
22
- class PrepareNextError < Exception; end
23
- class ExecuteError < Exception; end
24
-
25
- def initialize(dir)
26
- super(dir)
27
- @lockdir = "lock_vaspdir"
28
- %w(INCAR KPOINTS POSCAR POTCAR).each do |file|
29
- infile = "#{@dir}/#{file}"
30
- raise InitializeError, infile unless FileTest.exist? infile
15
+ class VaspUtils::VaspDir < Comana::ComputationManager
16
+ MACHINEFILE = "machines"
17
+
18
+ class InitializeError < Exception; end
19
+ class NoVaspBinaryError < Exception; end
20
+ class PrepareNextError < Exception; end
21
+ class ExecuteError < Exception; end
22
+ class InvalidValueError < Exception; end
23
+ class AlreadyExistError < Exception; end
24
+
25
+ def initialize(dir)
26
+ super(dir)
27
+ @lockdir = "lock_vaspdir"
28
+ %w(INCAR KPOINTS POSCAR POTCAR).each do |file|
29
+ infile = "#{@dir}/#{file}"
30
+ raise InitializeError, infile unless FileTest.exist? infile
31
+ end
32
+ end
33
+
34
+ # 配下の OUTCAR を Outcar インスタンスにして返す。
35
+ # 存在しなければ例外 Errno::ENOENT を返す。
36
+ def outcar
37
+ VaspUtils::Outcar.load_file("#{@dir}/OUTCAR")
31
38
  end
32
- end
33
-
34
- # 配下の OUTCAR を Outcar インスタンスにして返す。
35
- # 存在しなければ例外 Errno::ENOENT を返す。
36
- def outcar
37
- VaspUtils::Outcar.load_file("#{@dir}/OUTCAR")
38
- end
39
-
40
- # 配下の POSCAR を Cell2 インスタンスにして返す。
41
- # 存在しなければ例外 Errno::ENOENT を返す。
42
- def poscar
43
- VaspUtils::Poscar.load_file("#{@dir}/POSCAR")
44
- end
45
-
46
- # 配下の CONTCAR を Cell2 インスタンスにして返す。
47
- # 存在しなければ例外 Errno::ENOENT を返す。
48
- def contcar
49
- VaspUtils::Poscar.load_file("#{@dir}/CONTCAR")
50
- end
51
-
52
- # 配下の KPOINTS を読み込んだ結果をハッシュにして返す。
53
- #
54
- # 存在しなければ例外 Errno::ENOENT を返す筈だが、
55
- # vasp dir の判定を incar でやっているので置こる筈がない。
56
- def incar
57
- VaspUtils::Incar.load_file("#{@dir}/INCAR")
58
- end
59
-
60
- # 配下の KPOINTS を読み込んだ結果をハッシュにして返す。
61
- def kpoints
62
- VaspUtils::Kpoints.load_file("#{@dir}/KPOINTS")
63
- end
64
-
65
- # 正常に終了していれば true を返す。
66
- # 実行する前や実行中、OUTCAR が完遂していなければ false。
67
- #
68
- # MEMO
69
- # PI12345 ファイルは実行中のみ存在し、終了後 vasp (mpi?) に自動的に削除される。
70
- def finished?
71
- begin
72
- return VaspUtils::Outcar.load_file("#{@dir}/OUTCAR")[:normal_ended]
73
- rescue Errno::ENOENT
74
- return false
39
+
40
+ # 配下の POSCAR を CrystalCell::Cell インスタンスにして返す。
41
+ # 存在しなければ例外 Errno::ENOENT を返す。
42
+ def poscar
43
+ VaspUtils::Poscar.load_file("#{@dir}/POSCAR")
44
+ end
45
+
46
+ # 配下の CONTCAR を CrystalCell::Cell インスタンスにして返す。
47
+ # 存在しなければ例外 Errno::ENOENT を返す。
48
+ def contcar
49
+ VaspUtils::Poscar.load_file("#{@dir}/CONTCAR")
75
50
  end
76
- end
77
-
78
- private
79
-
80
- # vasp を投げる。
81
- def calculate
82
- begin
83
- info =
84
- MachineInfo.load_file("#{ENV["HOME"]}/.machineinfo").get_info(ENV["HOST"])
85
- vasp = info["vasp"]
86
- rescue
87
- #vasp = "vasp"
88
- raise NoVaspBinaryError, "No vasp path in #{ENV["HOME"]}/.machineinfo"
51
+
52
+ # 配下の KPOINTS を読み込んだ結果をハッシュにして返す。
53
+ #
54
+ # 存在しなければ例外 Errno::ENOENT を返す筈だが、
55
+ # vasp dir の判定を incar でやっているので生じる筈がない。
56
+ def incar
57
+ VaspUtils::Incar.load_file("#{@dir}/INCAR")
58
+ end
59
+
60
+ # 配下の KPOINTS を読み込んだ結果をハッシュにして返す。
61
+ def kpoints
62
+ VaspUtils::Kpoints.load_file("#{@dir}/KPOINTS")
63
+ end
64
+
65
+ # 正常に終了していれば true を返す。
66
+ # 実行する前や実行中、OUTCAR が完遂していなければ false。
67
+ #
68
+ # MEMO
69
+ # PI12345 ファイルは実行中のみ存在し、終了後 vasp (mpi?) に自動的に削除される。
70
+ def finished?
71
+ begin
72
+ return VaspUtils::Outcar.load_file("#{@dir}/OUTCAR")[:normal_ended]
73
+ rescue Errno::ENOENT
74
+ return false
75
+ end
76
+ end
77
+
78
+ def reset_init(io = $stdout)
79
+ #fullpath = File.expand_path @dir
80
+ keep_files = ["INCAR", "KPOINTS", "POSCAR", "POTCAR"]
81
+ remove_files = []
82
+ Dir.entries( @dir ).sort.each do |file|
83
+ next if file == "."
84
+ next if file == ".."
85
+ remove_files << file unless keep_files.include? file
86
+ end
87
+
88
+ if remove_files.size == 0
89
+ io.puts " No remove files."
90
+ return
91
+ else
92
+ #pp @dir; exit
93
+ #puts " Remove files:"
94
+ #remove_files.each { |file| puts " #{file}" }
95
+
96
+ #puts " Keep files:"
97
+ #keep_files.each { |file| puts " #{file}" }
98
+
99
+ remove_files.each do |file|
100
+ io.puts " Removing: #{file}"
101
+ FileUtils.rm_rf "#{@dir}/#{file}"
102
+ end
103
+ end
104
+ end
105
+
106
+ # 'tgt_name' is a String.
107
+ # 'conditions' is a Hash.
108
+ # E.g., {:encut => 500.0, :ka => 2, :kb => 4}
109
+ def mutate(tgt_name, condition)
110
+ raise AlreadyExistError, "Already exist: #{tgt_name}" if File.exist? tgt_name
111
+
112
+ Dir.mkdir tgt_name
113
+
114
+ ##POSCAR
115
+ FileUtils.cp("#{@dir}/POSCAR", "#{tgt_name}/POSCAR")
116
+
117
+ ##POTCAR
118
+ FileUtils.cp("#{@dir}/POTCAR", "#{tgt_name}/POTCAR")
119
+
120
+ ##INCAR
121
+ new_incar = incar
122
+ new_incar["ENCUT"] = condition[:encut] if condition[:encut]
123
+ File.open("#{tgt_name}/INCAR", "w") do |io|
124
+ VaspUtils::Incar.dump(new_incar, io)
125
+ end
126
+
127
+ ##KPOINTS
128
+ new_kpoints = kpoints
129
+ new_kpoints[:mesh][0] = condition[:ka] if condition[:ka]
130
+ new_kpoints[:mesh][1] = condition[:kb] if condition[:kb]
131
+ new_kpoints[:mesh][2] = condition[:kc] if condition[:kc]
132
+ if condition[:kab]
133
+ new_kpoints[:mesh][0] = condition[:kab]
134
+ new_kpoints[:mesh][1] = condition[:kab]
135
+ end
136
+ if condition[:kbc]
137
+ new_kpoints[:mesh][1] = condition[:kbc]
138
+ new_kpoints[:mesh][2] = condition[:kbc]
139
+ end
140
+ if condition[:kca]
141
+ new_kpoints[:mesh][2] = condition[:kca]
142
+ new_kpoints[:mesh][0] = condition[:kca]
143
+ end
144
+ if condition[:kabc]
145
+ new_kpoints[:mesh][0] = condition[:kabc]
146
+ new_kpoints[:mesh][1] = condition[:kabc]
147
+ new_kpoints[:mesh][2] = condition[:kabc]
148
+ end
149
+ File.open("#{tgt_name}/KPOINTS", "w") do |io|
150
+ VaspUtils::Kpoints.dump(new_kpoints, io)
151
+ end
152
+ end
153
+
154
+ private
155
+
156
+ # vasp を投げる。
157
+ def calculate
158
+ #HOSTNAME is for GridEngine
159
+ hostname = (ENV["HOST"] || ENV["HOSTNAME"]).sub(/\..*$/, "") #ignore domain name
160
+
161
+ begin
162
+ clustersettings = Comana::ClusterSetting.load_file("#{ENV["HOME"]}/.clustersetting")
163
+ info = clustersettings.settings_host(hostname)
164
+ rescue
165
+ puts "No vasp path in #{ENV["HOME"]}/.clustersetting"
166
+ pp info
167
+ raise NoVaspBinaryError
168
+ end
169
+
170
+ if ENV["SGE_EXECD_PIDFILE"] #grid engine 経由のとき
171
+ nslots = ENV["NSLOTS"]
172
+ lines = open(ENV["PE_HOSTFILE"], "r").readlines.collect do |line|
173
+ line =~ /^(\S+)\s+(\S+)/
174
+ "#{$1} cpu=#{$2}"
175
+ end
176
+ generate_machinefile(lines)
177
+ else
178
+ nslots = 1
179
+ lines = ["localhost cpu=1"]
180
+ generate_machinefile(lines)
181
+ end
182
+
183
+ raise InvalidValueError,
184
+ "`clustersettings' is #{clustersettings.inspect}." unless clustersettings
185
+ raise InvalidValueError, "`info' is #{info.inspect}." unless info
186
+ raise InvalidValueError, "`info['mpi']' is #{info['mpi']}" unless info['mpi']
187
+ raise InvalidValueError, "`info['vasp']' is #{info['vasp']}" unless info['vasp']
188
+ raise InvalidValueError, "`MACHINEFILE' is #{MACHINEFILE}" unless MACHINEFILE
189
+ raise InvalidValueError, "`nslots' is #{nslots}" unless nslots
190
+ raise InvalidValueError, "`nslots' is #{nslots}" unless nslots
191
+
192
+ #pp "#{info["mpi"]} -machinefile #{MACHINEFILE} -np #{nslots} #{info["vasp"]}"
193
+ command = "cd #{@dir};"
194
+ command += "#{info["mpi"]} -machinefile #{MACHINEFILE} -np #{nslots} #{info["vasp"]}"
195
+ command += "> stdout"
196
+
197
+ io = File.open("#{@dir}/runvasp.log", "w")
198
+ io.puts command
199
+ io.close
200
+
201
+ end_status = system command
202
+ raise ExecuteError, "end_status is #{end_status.inspect}" unless end_status
203
+ end
204
+
205
+ def prepare_next
206
+ #do_nothing
207
+ raise PrepareNextError, "VaspDir doesn't need next."
208
+ end
209
+
210
+ def generate_machinefile(lines)
211
+ io = File.open("#{@dir}/#{MACHINEFILE}", "w")
212
+ io.puts lines
213
+ io.close
89
214
  end
90
- command = "cd #{@dir};"
91
- command += vasp
92
- command += "> stdout"
93
-
94
- end_status = system command
95
- raise ExecuteError, "end_status is #{end_status.inspect}" unless end_status
96
- end
97
-
98
- def prepare_next
99
- #do_nothing
100
- raise PrepareNextError, "VaspDir doesn't need next."
101
- end
102
215
 
103
216
  end
@@ -5,112 +5,245 @@ require "pp"
5
5
  require "fileutils"
6
6
 
7
7
  require "rubygems"
8
- gem "comana"
9
- require "comana/computationmanager.rb"
8
+ #gem "comana"
9
+ #require "comana/computationmanager.rb"
10
+ #require "comana/computationmanager.rb"
10
11
 
11
- require "vasputils.rb"
12
+ #require "vasputils.rb"
12
13
  #require "vasputils/vaspdir.rb"
13
14
 
14
15
  #
16
+ #The directory must has subdirs whose name is started by 'geomopt'.
17
+ #This restriction of naming is necessary to distinguish from simple aggregation
18
+ #of vasp directories.
15
19
  #
16
- #
17
- class VaspUtils::VaspGeometryOptimizer < ComputationManager
18
- class NoVaspDirError < Exception; end
19
- class LatestDirStartedError < Exception; end
20
- class NoIntegerEndedNameError < Exception; end
21
-
22
- def initialize(dir)
23
- super(dir)
24
- @lockdir = "lock_vaspgeomopt"
25
- latest_dir # to check.
26
- end
27
-
28
- # Return incremented name.
29
- # If the name of VaspDir ends with string of integer,
30
- # return incremental value with the basename.
31
- # If not ended with integer, this method assume "00"
32
- def self.next_name(name)
33
- basename = name.sub(/(\d*)$/, "")
34
- new_num = $1.to_i + 1
35
- return basename + sprintf("%02d", new_num)
36
- end
37
-
38
- # 注目した VaspDir yet なら実行し、続ける。
39
- # yet 以外なら例外。
40
- # VaspDir になっているか。
41
- def calculate
42
- #pp latest_dir.dir
43
- $stdout.puts "Calculate #{latest_dir.dir}"
44
- $stdout.flush
45
-
46
- #pp latest_dir
47
-
48
- latest_dir.start
49
- #dir = latest_dir
50
- #while (! finished?)
51
- # raise LatestDirStartedError if dir.state == :started
52
- # dir.start
53
- # if dir.finished?
54
- # break
55
- # else
56
- # #dir = prepare_next
57
- # puts "Geometry optimization fihished. Exit."
58
- # end
59
- #end
60
- #puts "Geometry optimization fihished. Exit."
61
- #sleep 1 # for interrupt
62
- end
63
-
64
- # latest_dir から返って来る最新の VaspDir が finished? で真を返し、
65
- # かつ Iteration 1 であるか。
66
- # Note: even when the geometry optimization does not include lattice shape,
67
- # calculate will continued till to converge to Iter 1 calculation.
68
- def finished?
69
- return false unless latest_dir.finished?
70
- return false unless latest_dir.outcar[:ionic_steps] == 1
71
- return true
72
- end
73
-
74
- # Find latest VaspDir.
75
- # Return a last VaspDir which has the name by name sort
76
- # and which can be made as a VaspDir instance.
77
- # Note: in a series of geometry optimization,
78
- # the directory names should have a rule of naming
79
- # which can define a method <=>.
80
- # Usually, it is simple sort of String.
81
- def latest_dir
82
- Dir.glob("#{@dir}/*").sort.reverse.find do |dir|
83
- begin
84
- vd = VaspUtils::VaspDir.new(dir)
85
- return vd
86
- rescue VaspUtils::VaspDir::InitializeError
87
- next
88
- end
20
+ class VaspUtils::VaspGeometryOptimizer < Comana::ComputationManager
21
+ class NoVaspDirError < Exception; end
22
+ class LatestDirStartedError < Exception; end
23
+ class NoIntegerEndedNameError < Exception; end
24
+ class NoContcarError < Exception; end
25
+ class InitializeError < Exception; end
26
+
27
+ PREFIX = "geomopt"
28
+
29
+ def initialize(dir)
30
+ super(dir)
31
+ @lockdir = "lock_vaspgeomopt"
32
+ begin
33
+ latest_dir # to check.
34
+ rescue NoVaspDirError
35
+ raise InitializeError
36
+ end
37
+ end
38
+
39
+ # Return incremented name.
40
+ # If the name of VaspDir ends with string of integer,
41
+ # return incremental value with the basename.
42
+ # If not ended with integer, this method assume "00"
43
+ def self.next_name(name)
44
+ basename = name.sub(/(\d*)$/, "")
45
+ new_num = $1.to_i + 1
46
+ return basename + sprintf("%02d", new_num)
47
+ end
48
+
49
+ # 注目した VaspDir が yet なら実行し、続ける。
50
+ # yet 以外なら例外。
51
+ # VaspDir になっているか。
52
+ def calculate
53
+ $stdout.puts "Calculate #{latest_dir.dir}"
54
+ $stdout.flush
55
+
56
+ latest_dir.start
57
+ #dir = latest_dir
58
+ #while (! finished?)
59
+ # raise LatestDirStartedError if dir.state == :started
60
+ # dir.start
61
+ # if dir.finished?
62
+ # break
63
+ # else
64
+ # #dir = prepare_next
65
+ # puts "Geometry optimization fihished. Exit."
66
+ # end
67
+ #end
68
+ #puts "Geometry optimization fihished. Exit."
69
+ #sleep 1 # for interrupt
70
+ end
71
+
72
+ # latest_dir から返って来る最新の VaspDir が finished? で真を返し、
73
+ # かつ Iteration が 1 であるか。
74
+ # Note: even when the geometry optimization does not include lattice shape,
75
+ # calculate will continued till to converge to Iter 1 calculation.
76
+ def finished?
77
+ return false unless latest_dir.finished?
78
+ return false unless latest_dir.outcar[:ionic_steps] == 1
79
+ return true
80
+ end
81
+
82
+ # Find latest VaspDir.
83
+ # Return a last VaspDir which has the name by name sort
84
+ # and which can be made as a VaspDir instance.
85
+ # Note: in a series of geometry optimization,
86
+ # the directory names should have a rule of naming
87
+ # which can define a method <=>.
88
+ # Usually, it is simple sort of String.
89
+ def latest_dir
90
+ Dir.glob("#{@dir}/#{PREFIX}*").sort.reverse.find do |dir|
91
+ begin
92
+ vd = VaspUtils::VaspDir.new(dir)
93
+ return vd
94
+ rescue VaspUtils::VaspDir::InitializeError
95
+ next
96
+ end
97
+ end
98
+ raise NoVaspDirError, @dir
99
+ end
100
+
101
+ #Keep 'geomopt00/{POSCAR,POTCAR,INCAR,POTCAR}', remove others.
102
+ def reset_init
103
+ poscars = Dir.glob("#{@dir}/#{PREFIX}*/POSCAR").sort
104
+ poscar = nil
105
+ path = nil
106
+ poscars.each do |poscar|
107
+ begin
108
+ VaspUtils::Poscar.load_file poscar
109
+ path = File.dirname(poscar)
110
+ break
111
+ rescue VaspUtils::Poscar::ParseError
112
+ next
113
+ end
114
+ end
115
+ raise NoVaspDirError unless path
116
+
117
+ ##geomopt*
118
+ rm_list = Dir.glob "#{@dir}/#{PREFIX}*"
119
+ rm_list.delete path
120
+ ##input files
121
+ rm_list << Dir.glob("#{path}/*")
122
+ rm_list.flatten!
123
+ ["KPOINTS", "INCAR", "POTCAR", "POSCAR"].each do |file|
124
+ rm_list.delete "#{path}/#{file}"
125
+ end
126
+ ##queeue
127
+ rm_list += Dir.glob "#{@dir}/lock*"
128
+ rm_list += Dir.glob "#{@dir}/*.sh"
129
+ rm_list += Dir.glob "#{@dir}/*.log"
130
+ rm_list += Dir.glob "#{@dir}/*.o*"
131
+ ##remove
132
+ rm_list.each do |file|
133
+ FileUtils.rm_rf file
134
+ end
135
+ end
136
+
137
+ #Generate a new vaspdir as 'geomopt00'.
138
+ #Other directories, including old 'geomopt00', are removed.
139
+ def reset_next(io = $stdout)
140
+ begin
141
+ latest_dir.contcar
142
+ prepare_next
143
+ clean_queue_files
144
+ rescue Errno::ENOENT
145
+ latest_dir.reset_init(io)
146
+ clean_queue_files
147
+ rescue VaspUtils::Poscar::ParseError
148
+ latest_dir.reset_init(io)
149
+ clean_queue_files
150
+ end
151
+ end
152
+
153
+ #Generate a new vaspdir as 'geomopt00'.
154
+ #Other directories, including old 'geomopt00', are removed.
155
+ def reset_reincarnate
156
+ #CONTCAR を最後から解釈していく。
157
+ #全てだめだったら POSCAR を解釈する。
158
+ #全部だめだったら例外を投げる。
159
+
160
+ #CONTCAR を解釈できたディレクトリで INCAR, KPOINTS, POTCAR を取得。
161
+ #geomopt01 という名前でディレクトリを作る。
162
+ contcars = Dir.glob("#{@dir}/#{PREFIX}*/CONTCAR").sort.reverse
163
+ contcars += Dir.glob("#{@dir}/#{PREFIX}*/POSCAR").sort.reverse
164
+ poscar = nil
165
+ path = nil
166
+ contcars.each do |contcar|
167
+ begin
168
+ VaspUtils::Poscar.load_file contcar
169
+ poscar = contcar
170
+ path = File.dirname(contcar)
171
+ break
172
+ rescue VaspUtils::Poscar::ParseError
173
+ next
174
+ end
175
+ end
176
+ raise NoVaspDirError unless poscar
177
+
178
+ new_dir = "#{@dir}/new_#{PREFIX}00"
179
+ Dir.mkdir new_dir
180
+ FileUtils.mv("#{path}/KPOINTS", "#{new_dir}/KPOINTS")
181
+ FileUtils.mv("#{path}/INCAR" , "#{new_dir}/INCAR" )
182
+ FileUtils.mv("#{path}/POTCAR" , "#{new_dir}/POTCAR" )
183
+ FileUtils.mv(poscar , "#{new_dir}/POSCAR")
184
+
185
+ rm_list = Dir.glob "#{@dir}/#{PREFIX}*"
186
+ rm_list += Dir.glob "#{@dir}/lock*"
187
+ rm_list += Dir.glob "#{@dir}/*.sh"
188
+ rm_list += Dir.glob "#{@dir}/*.log"
189
+ rm_list += Dir.glob "#{@dir}/*.o*"
190
+ rm_list.each do |file|
191
+ FileUtils.rm_rf file
192
+ end
193
+
194
+ FileUtils.mv new_dir, "#{@dir}/#{PREFIX}00"
195
+ end
196
+
197
+ private
198
+
199
+ # Generate next directory from latest_dir.
200
+ # Need proper CONTCAR. If not, raise NoContcarError.
201
+ def prepare_next
202
+ raise NoContcarError unless File.exist? "#{latest_dir.dir}/CONTCAR"
203
+
204
+ new_dir = self.class.next_name(latest_dir.dir)
205
+ Dir.mkdir new_dir
206
+
207
+ #FileUtils.cp("#{latest_dir.dir}/CHG" , "#{new_dir}/CHG" )
208
+ #FileUtils.cp("#{latest_dir.dir}/CHGCAR" , "#{new_dir}/CHGCAR" )
209
+ #FileUtils.cp("#{latest_dir.dir}/DOSCAR" , "#{new_dir}/DOSCAR" )
210
+ #FileUtils.cp("#{latest_dir.dir}/EIGENVAL", "#{new_dir}/EIGENVAL")
211
+ #FileUtils.cp("#{latest_dir.dir}/INCAR" , "#{new_dir}/INCAR" )
212
+ #FileUtils.cp("#{latest_dir.dir}/KPOINTS" , "#{new_dir}/KPOINTS" )
213
+ #FileUtils.cp("#{latest_dir.dir}/OSZICAR" , "#{new_dir}/OSZICAR" )
214
+ #FileUtils.cp("#{latest_dir.dir}/PCDAT" , "#{new_dir}/PCDAT" )
215
+ #FileUtils.cp("#{latest_dir.dir}/POTCAR" , "#{new_dir}/POTCAR" )
216
+ #FileUtils.cp("#{latest_dir.dir}/WAVECAR" , "#{new_dir}/WAVECAR" )
217
+ #FileUtils.cp("#{latest_dir.dir}/XDATCAR" , "#{new_dir}/XDATCAR" )
218
+
219
+ possible_files = ["CHG", "CHGCAR", "DOSCAR", "EIGENVAL",
220
+ "OSZICAR", "PCDAT", "WAVECAR", "XDATCAR"]
221
+ possible_files.each do |file|
222
+ if File.exist? "#{latest_dir.dir}/#{file}"
223
+ FileUtils.cp("#{latest_dir.dir}/#{file}", "#{new_dir}/#{file}")
224
+ end
225
+ end
226
+
227
+ necessary_files = ["INCAR", "KPOINTS", "POTCAR"]
228
+ necessary_files.each do |file|
229
+ FileUtils.cp("#{latest_dir.dir}/#{file}", "#{new_dir}/#{file}")
230
+ end
231
+
232
+ FileUtils.cp("#{latest_dir.dir}/CONTCAR" , "#{new_dir}/POSCAR" ) # change name
233
+ # without POSCAR, OUTCAR, vasprun.xml
234
+ VaspUtils::VaspDir.new(new_dir)
235
+ end
236
+
237
+ def clean_queue_files
238
+ rm_list = []
239
+ rm_list += Dir.glob "#{@dir}/lock*"
240
+ rm_list += Dir.glob "#{@dir}/*.sh"
241
+ rm_list += Dir.glob "#{@dir}/*.log"
242
+ rm_list += Dir.glob "#{@dir}/*.o*"
243
+ rm_list.each do |file|
244
+ FileUtils.rm_rf file
245
+ end
89
246
  end
90
- raise NoVaspDirError, @dir
91
- end
92
-
93
- private
94
-
95
- # Generate next directory of latest_dir.
96
- def prepare_next
97
- new_dir = self.class.next_name(latest_dir.dir)
98
- Dir.mkdir new_dir
99
- FileUtils.cp("#{latest_dir.dir}/CHG" , "#{new_dir}/CHG" )
100
- FileUtils.cp("#{latest_dir.dir}/CHGCAR" , "#{new_dir}/CHGCAR" )
101
- FileUtils.cp("#{latest_dir.dir}/DOSCAR" , "#{new_dir}/DOSCAR" )
102
- FileUtils.cp("#{latest_dir.dir}/EIGENVAL", "#{new_dir}/EIGENVAL")
103
- FileUtils.cp("#{latest_dir.dir}/INCAR" , "#{new_dir}/INCAR" )
104
- FileUtils.cp("#{latest_dir.dir}/KPOINTS" , "#{new_dir}/KPOINTS" )
105
- FileUtils.cp("#{latest_dir.dir}/OSZICAR" , "#{new_dir}/OSZICAR" )
106
- FileUtils.cp("#{latest_dir.dir}/PCDAT" , "#{new_dir}/PCDAT" )
107
- FileUtils.cp("#{latest_dir.dir}/POTCAR" , "#{new_dir}/POTCAR" )
108
- FileUtils.cp("#{latest_dir.dir}/WAVECAR" , "#{new_dir}/WAVECAR" )
109
- FileUtils.cp("#{latest_dir.dir}/XDATCAR" , "#{new_dir}/XDATCAR" )
110
- FileUtils.cp("#{latest_dir.dir}/CONTCAR" , "#{new_dir}/POSCAR" ) # change name
111
- # without POSCAR, OUTCAR, vasprun.xml
112
- VaspUtils::VaspDir.new(new_dir)
113
- end
114
247
 
115
248
  end
116
249