dockonsurf / modules / calculation.py @ f3004731
Historique | Voir | Annoter | Télécharger (2,46 ko)
1 | 3d6a9d3c | Carles | import os |
---|---|---|---|
2 | 3d6a9d3c | Carles | import logging |
3 | 3d6a9d3c | Carles | |
4 | 3d6a9d3c | Carles | logger = logging.getLogger('DockOnSurf')
|
5 | 3d6a9d3c | Carles | |
6 | 3d6a9d3c | Carles | |
7 | f3004731 | Carles | def create_bak_calc_dir(run_type): |
8 | f3004731 | Carles | """Checks if calculations directory already exists, backs it up if so and
|
9 | f3004731 | Carles | creates an empty one.
|
10 | f3004731 | Carles | @param run_type: Type of calculation. 'isolated', 'screening' or
|
11 | f3004731 | Carles | 'refinement'
|
12 | 3d6a9d3c | Carles | """
|
13 | f3004731 | Carles | dir_name = run_type |
14 | 3d6a9d3c | Carles | bak_num = 0
|
15 | 3d6a9d3c | Carles | while dir_name in os.listdir("."): |
16 | 3d6a9d3c | Carles | bak_num += 1
|
17 | 3d6a9d3c | Carles | dir_name = dir_name.split(".")[0] + f".bak{bak_num}" |
18 | 3d6a9d3c | Carles | if bak_num > 0: |
19 | f3004731 | Carles | os.rename(run_type, dir_name) |
20 | f3004731 | Carles | logger.warning(f"'{run_type}' directory already present. Moved former "
|
21 | 3d6a9d3c | Carles | f"directory to {dir_name}")
|
22 | f3004731 | Carles | os.mkdir(run_type) |
23 | 3d6a9d3c | Carles | |
24 | 3d6a9d3c | Carles | |
25 | f3004731 | Carles | def prep_cp2k(inp_file, run_type, atms_list): |
26 | f3004731 | Carles | """Prepares the directories to run isolated calculation with CP2K.
|
27 | 3d6a9d3c | Carles |
|
28 | f3004731 | Carles | @param inp_file: CP2K Input file to run the calculations with.
|
29 | f3004731 | Carles | @param run_type: Type of calculation. 'isolated', 'screening' or
|
30 | f3004731 | Carles | 'refinement'
|
31 | f3004731 | Carles | @param atms_list: list of ase.Atoms objects to run the calculation of.
|
32 | f3004731 | Carles | @return: None
|
33 | f3004731 | Carles | """
|
34 | f3004731 | Carles | from shutil import copy |
35 | f3004731 | Carles | import ase.io |
36 | f3004731 | Carles | from pycp2k import CP2K |
37 | f3004731 | Carles | cp2k = CP2K() |
38 | f3004731 | Carles | cp2k.parse(inp_file) |
39 | f3004731 | Carles | force_eval = cp2k.CP2K_INPUT.FORCE_EVAL_list[0]
|
40 | f3004731 | Carles | coord_file = force_eval.SUBSYS.TOPOLOGY.Coord_file_name |
41 | f3004731 | Carles | |
42 | f3004731 | Carles | # Creating and setting up directories for every atoms configuration.
|
43 | f3004731 | Carles | for i, conf in enumerate(atms_list): |
44 | f3004731 | Carles | os.mkdir(f'{run_type}/conf_{i}')
|
45 | f3004731 | Carles | copy(inp_file, f'{run_type}/conf_{i}/')
|
46 | f3004731 | Carles | ase.io.write(f'{run_type}/conf_{i}/{coord_file}', conf)
|
47 | f3004731 | Carles | |
48 | f3004731 | Carles | |
49 | f3004731 | Carles | def run_calc(run_type, inp_vars, atms_list): |
50 | 3d6a9d3c | Carles | """Directs the calculation run according to the provided arguments.
|
51 | 3d6a9d3c | Carles |
|
52 | f3004731 | Carles | @param run_type: Type of calculation. 'isolated', 'screening' or
|
53 | f3004731 | Carles | 'refinement'
|
54 | 3d6a9d3c | Carles | @param inp_vars: Calculation parameters from input file.
|
55 | f3004731 | Carles | @param atms_list: List of ase.Atoms objects containing the sets of atoms
|
56 | f3004731 | Carles | aimed to run the calculations of.
|
57 | 3d6a9d3c | Carles | """
|
58 | 3d6a9d3c | Carles | run_types = ['isolated', 'screening', 'refinement'] |
59 | 3d6a9d3c | Carles | run_type_err = f"'run_type' should be one of the following: {run_types}"
|
60 | 3d6a9d3c | Carles | if not isinstance(run_type, str) or run_type.lower() not in run_types: |
61 | 3d6a9d3c | Carles | logger.error(run_type_err) |
62 | 3d6a9d3c | Carles | raise ValueError(run_type_err) |
63 | 3d6a9d3c | Carles | |
64 | 3d6a9d3c | Carles | logger.info(f"Running {run_type} calculation with {inp_vars['code']} on "
|
65 | 3d6a9d3c | Carles | f"{inp_vars['batch_q_sys']}")
|
66 | f3004731 | Carles | create_bak_calc_dir(run_type) |
67 | 3d6a9d3c | Carles | if run_type == 'isolated': |
68 | f3004731 | Carles | if inp_vars['code'] == 'cp2k': |
69 | f3004731 | Carles | prep_cp2k(inp_vars['isol_inp_file'], run_type, atms_list) |