hpc-task 0.1.2__py3-none-any.whl → 0.2.0__py3-none-any.whl
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.
- hpc_task/hpc.py +8 -8
- hpc_task/hpc_calculator/vasp.py +42 -0
- {hpc_task-0.1.2.dist-info → hpc_task-0.2.0.dist-info}/METADATA +3 -2
- hpc_task-0.2.0.dist-info/RECORD +11 -0
- hpc_task-0.1.2.dist-info/RECORD +0 -11
- {hpc_task-0.1.2.dist-info → hpc_task-0.2.0.dist-info}/WHEEL +0 -0
- {hpc_task-0.1.2.dist-info → hpc_task-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {hpc_task-0.1.2.dist-info → hpc_task-0.2.0.dist-info}/top_level.txt +0 -0
hpc_task/hpc.py
CHANGED
|
@@ -79,7 +79,7 @@ class HPCTask:
|
|
|
79
79
|
abs_workdir = stdout.read().decode('utf-8').strip().split()[-1]
|
|
80
80
|
workdir = Path(abs_workdir).relative_to(Path(self._remote_parent_workdir))
|
|
81
81
|
if self.workdir is None:
|
|
82
|
-
self.workdir =
|
|
82
|
+
self.workdir = workdir.as_posix()
|
|
83
83
|
return self.workdir
|
|
84
84
|
|
|
85
85
|
@property
|
|
@@ -292,7 +292,6 @@ class HPCTask:
|
|
|
292
292
|
print(f"Waiting for the queue 10 seconds...")
|
|
293
293
|
sleep(10)
|
|
294
294
|
status = self.status
|
|
295
|
-
need_sync = False
|
|
296
295
|
elif status in ('SUSPENDED', 'DONE'):
|
|
297
296
|
output = ''
|
|
298
297
|
err = f"Job {self.jobid} status: {status}"
|
|
@@ -327,12 +326,12 @@ class HPCTask:
|
|
|
327
326
|
rel_path = Path(root).relative_to(local_path)
|
|
328
327
|
remote_dir = remote_path / rel_path
|
|
329
328
|
if str(rel_path) != ".":
|
|
330
|
-
_ensure_remote_dir_exists(sftp_client,
|
|
329
|
+
_ensure_remote_dir_exists(sftp_client, remote_dir.as_posix())
|
|
331
330
|
# 上传文件
|
|
332
331
|
for file in files:
|
|
333
332
|
local_file = Path(root) / file
|
|
334
333
|
remote_file = remote_dir / file
|
|
335
|
-
sftp_client.put(
|
|
334
|
+
sftp_client.put(local_file.as_posix(), remote_file.as_posix(), confirm=False)
|
|
336
335
|
|
|
337
336
|
return None
|
|
338
337
|
|
|
@@ -365,13 +364,14 @@ def _ensure_remote_dir_exists(sftp, remote_dir):
|
|
|
365
364
|
except FileNotFoundError:
|
|
366
365
|
# 递归创建目录
|
|
367
366
|
parts = Path(remote_dir).parts
|
|
368
|
-
current_path = parts[0]
|
|
367
|
+
current_path = Path(parts[0])
|
|
369
368
|
for part in parts[1:]: # 跳过根目录
|
|
370
|
-
current_path = os.path.join(current_path, part)
|
|
369
|
+
# current_path = os.path.join(current_path, part)
|
|
370
|
+
current_path = current_path / part
|
|
371
371
|
try:
|
|
372
|
-
sftp.stat(current_path)
|
|
372
|
+
sftp.stat(current_path.as_posix())
|
|
373
373
|
except FileNotFoundError:
|
|
374
|
-
sftp.mkdir(current_path)
|
|
374
|
+
sftp.mkdir(current_path.as_posix())
|
|
375
375
|
|
|
376
376
|
def _download_dir(sftp, remote, local):
|
|
377
377
|
os.makedirs(local, exist_ok=True)
|
hpc_task/hpc_calculator/vasp.py
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import subprocess
|
|
3
|
+
from pathlib import Path
|
|
2
4
|
|
|
5
|
+
from ase.calculators import calculator
|
|
3
6
|
from ase.calculators.vasp import Vasp as ase_Vasp
|
|
7
|
+
import ase.io
|
|
4
8
|
from hpc_task.hpc import HPCTask
|
|
5
9
|
|
|
6
10
|
|
|
@@ -44,3 +48,41 @@ class Vasp(ase_Vasp):
|
|
|
44
48
|
if out is not None:
|
|
45
49
|
out.write(stdout)
|
|
46
50
|
return returncode, stderr
|
|
51
|
+
|
|
52
|
+
def execute_only(self):
|
|
53
|
+
"""
|
|
54
|
+
仅仅执行 command 命令,从文件夹中读取 INCAR、POTCAR、POSCAR、KPOINTS
|
|
55
|
+
"""
|
|
56
|
+
self.read_potcar(filename=self._indir('POTCAR'))
|
|
57
|
+
self.read_incar(filename=self._indir('INCAR'))
|
|
58
|
+
self.read_kpoints(filename=self._indir('KPOINTS'))
|
|
59
|
+
atoms = ase.io.read(filename=self._indir('POSCAR'))
|
|
60
|
+
# 需要读进去ase-sort.dat,否则结果会报错
|
|
61
|
+
sortfile = self._indir('ase-sort.dat')
|
|
62
|
+
if os.path.isfile(sortfile):
|
|
63
|
+
self.sort = []
|
|
64
|
+
self.resort = []
|
|
65
|
+
with open(sortfile) as fd:
|
|
66
|
+
for line in fd:
|
|
67
|
+
sort, resort = line.split()
|
|
68
|
+
self.sort.append(int(sort))
|
|
69
|
+
self.resort.append(int(resort))
|
|
70
|
+
else:
|
|
71
|
+
# Redo the sorting
|
|
72
|
+
self.initialize(atoms)
|
|
73
|
+
|
|
74
|
+
command = self.make_command(self.command)
|
|
75
|
+
with self._txt_outstream() as out:
|
|
76
|
+
errorcode, stderr = self._run(command=command,
|
|
77
|
+
out=out,
|
|
78
|
+
directory=self.directory)
|
|
79
|
+
|
|
80
|
+
if errorcode:
|
|
81
|
+
raise calculator.CalculationFailed(
|
|
82
|
+
'{} in {} returned an error: {:d} stderr {}'.format(
|
|
83
|
+
self.name, Path(self.directory).resolve(), errorcode,
|
|
84
|
+
stderr))
|
|
85
|
+
|
|
86
|
+
# Read results from calculation
|
|
87
|
+
self.update_atoms(atoms)
|
|
88
|
+
self.read_results()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hpc_task
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: HPC Task python library.
|
|
5
5
|
Home-page: https://gitee.com/pjren/hpc_task
|
|
6
6
|
Author: Renpj
|
|
@@ -61,13 +61,14 @@ hpc.close() # 此时可以关闭 ssh 通道
|
|
|
61
61
|
# 在运行时候再重新构造和连接 hpc
|
|
62
62
|
hpc = HPCTask(jobid=jobid) # workdir 会根据 jobid 提取得到
|
|
63
63
|
hpc.connect(target_host)
|
|
64
|
-
|
|
64
|
+
hpc.get_workdir()
|
|
65
65
|
# 结构、计算参数设置
|
|
66
66
|
atoms = ase.Atoms('N2', positions=[(0., 0., 0.), (1.4, 0., 0.)],
|
|
67
67
|
cell=[10, 10, 10], pbc=True)
|
|
68
68
|
# calc 设置
|
|
69
69
|
calc = hpc_Vasp(
|
|
70
70
|
xc='pbe',
|
|
71
|
+
directory=hpc.workdir, # 必须设置, 会新建文件夹,并进入文件夹执行命令
|
|
71
72
|
command='mpirun -np 8 vasp544_std', # 必须设置,或者提供了 ASE vasp 的相关设置
|
|
72
73
|
hpctask=hpc, # 这个非常关键,必须提供
|
|
73
74
|
gamma=True,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
hpc_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
hpc_task/hpc.py,sha256=nAf7dpoNh9gopk4GbYyPACvtZTCtwe8KfhR0h1pR0Nk,15219
|
|
3
|
+
hpc_task/hpc_calculator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
hpc_task/hpc_calculator/lasp.py,sha256=HD-DCyXoP0C3zuhgB8Da94QrADyZlrIa-ZlcFPvlpnQ,1059
|
|
5
|
+
hpc_task/hpc_calculator/vasp.py,sha256=_hOfeD2_izj-sJ_QELsm4MItP3Ci07VSvj72g2TTReE,3001
|
|
6
|
+
hpc_task/templates/__init__.py,sha256=qLeR7AflskortkH8K4eXnRvINl3otLLKHhTNO6Wnh8Q,695
|
|
7
|
+
hpc_task-0.2.0.dist-info/licenses/LICENSE,sha256=iEk8UVtFW_L7ddFiCE_WFUjbOCaVc5fwNapeDmeY0WA,1063
|
|
8
|
+
hpc_task-0.2.0.dist-info/METADATA,sha256=38lHbW5qoZq-aGIJmgZ1xiMWmB9XltR1Z20g4EDHPDg,2235
|
|
9
|
+
hpc_task-0.2.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
10
|
+
hpc_task-0.2.0.dist-info/top_level.txt,sha256=6mflaHAkVGFi5mREsN5zh0KOO13pTNrTBRAAcwmHMVA,9
|
|
11
|
+
hpc_task-0.2.0.dist-info/RECORD,,
|
hpc_task-0.1.2.dist-info/RECORD
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
hpc_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
hpc_task/hpc.py,sha256=LKgxvHjymGzA287sZJJt4XrpnpjhgMMlBrMd55fpVBE,15152
|
|
3
|
-
hpc_task/hpc_calculator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
hpc_task/hpc_calculator/lasp.py,sha256=HD-DCyXoP0C3zuhgB8Da94QrADyZlrIa-ZlcFPvlpnQ,1059
|
|
5
|
-
hpc_task/hpc_calculator/vasp.py,sha256=ipFqlFIDQNAa6DI51lwvY9hlacZ-Fdp2tZe16xDqjF0,1418
|
|
6
|
-
hpc_task/templates/__init__.py,sha256=qLeR7AflskortkH8K4eXnRvINl3otLLKHhTNO6Wnh8Q,695
|
|
7
|
-
hpc_task-0.1.2.dist-info/licenses/LICENSE,sha256=iEk8UVtFW_L7ddFiCE_WFUjbOCaVc5fwNapeDmeY0WA,1063
|
|
8
|
-
hpc_task-0.1.2.dist-info/METADATA,sha256=_7d5ZpZnZ9rkJWzJwhSKxpZFuqOyRe3IK6azeFp9M-I,2114
|
|
9
|
-
hpc_task-0.1.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
10
|
-
hpc_task-0.1.2.dist-info/top_level.txt,sha256=6mflaHAkVGFi5mREsN5zh0KOO13pTNrTBRAAcwmHMVA,9
|
|
11
|
-
hpc_task-0.1.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|