From ce5f488ca6930a65ec87645734597f92a5f41d89 Mon Sep 17 00:00:00 2001 From: Han Wang Date: Fri, 5 Jun 2020 15:25:49 +0800 Subject: [PATCH 001/154] add base classes --- dpgen/auto_test/EOS.py | 48 ++++++++++ dpgen/auto_test/Interaction.py | 101 ++++++++++++++++++++ dpgen/auto_test/Property.py | 116 +++++++++++++++++++++++ dpgen/auto_test/common.py | 168 +++++++++++++++++++++++++++++++++ 4 files changed, 433 insertions(+) create mode 100644 dpgen/auto_test/EOS.py create mode 100644 dpgen/auto_test/Interaction.py create mode 100644 dpgen/auto_test/Property.py create mode 100644 dpgen/auto_test/common.py diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py new file mode 100644 index 000000000..bb441bfa2 --- /dev/null +++ b/dpgen/auto_test/EOS.py @@ -0,0 +1,48 @@ +from Property import Property + +class EOS (Property) : + def __init__ (self, + parameter) : + """ + Constructor + + Parameters + ---------- + parameters : dict + A dict that specifies the interaction. + """ + pass + + def make_confs(self, + work_path, + path_to_equi): + """ + Make configurations needed to compute the property. + The tasks directory will be named as work_path/task.xxxxxx + + Parameters + ---------- + work_path : str + The path where the task are located + path_to_equi : str + The path of the task that equilibrated the configuration. + """ + pass + + def _cmpt(self, + output_file, + all_tasks, + all_res): + """ + Compute the property. + + Parameters + ---------- + output_file: + The file to output the property + all_tasks : list of str + The list of directories of tasks + all_res : list of str + The list of results + """ + pass diff --git a/dpgen/auto_test/Interaction.py b/dpgen/auto_test/Interaction.py new file mode 100644 index 000000000..c59510d40 --- /dev/null +++ b/dpgen/auto_test/Interaction.py @@ -0,0 +1,101 @@ +from abc import ABC,abstractmethod + +class Interaction(ABC): + @abstractmethod + def __init__ (self, + paramters, + path_to_poscar) : + """ + Constructor + + Parameters + ---------- + parameters : dict + A dict that specifies the interaction. + path_to_poscar : str + The path to POSCAR. Indicating in which system the interaction will be initialized. + """ + pass + + @abstractmethod + def make_potential_files(self, + output_dir): + """ + Prepare potential files for a computational task using this interaction. + For example, the VASP interaction prepares POTCAR. + DeePMD interaction prepares frozen model(s). + + Parameters + ---------- + output_dir : str + The directory storing the potential files. + """ + pass + + @abstractmethod + def make_input_file(self, + output_dir, + task_type, + task_param): + """ + Prepare input files for a computational task using this interaction. + For example, the VASP interaction prepares INCAR. + LAMMPS interaction (including DeePMD, MEAM...) prepares in.lammps. + The parameter of this interaction will be stored in 'output_dir/interaction.json' + + Parameters + ---------- + output_dir : str + The directory storing the input files. + task_type : str + Can be + - "relaxation:": structure relaxation + - "static": static computation calculates the energy, force... of a strcture + task_parame: dict + The parameters of the task. + For example the VASP interaction can be provided with + { "ediff": 1e-6, "ediffg": 1e-5 } + """ + pass + + @abstractmethod + def post (self): + """ + Postprocess the task after the computation. + IMPORTANT: The output configuration should be converted and stored in a CONTCAR file. + + Returns + ------- + result_dict: dict + A dict that storing the result. For example: + { "energy": xxx, "force": [xxx] } + """ + pass + + @property + @staticmethod + @abstractmethod + def forward_files(self): + """ + Return forward files. + """ + pass + + @property + @staticmethod + @abstractmethod + def forward_common_files(self): + """ + Return forward common files. + """ + pass + + @property + @staticmethod + @abstractmethod + def backward_files(self): + """ + Return backward files. + """ + pass + diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py new file mode 100644 index 000000000..6c5a3adc8 --- /dev/null +++ b/dpgen/auto_test/Property.py @@ -0,0 +1,116 @@ +import os,glob,json +from abc import ABC,abstractmethod + +class Property (ABC) : + @abstractmethod + def __init__ (self, + parameter) : + """ + Constructor + + Parameters + ---------- + parameters : dict + A dict that specifies the interaction. + """ + pass + + @abstractmethod + def make_confs(self, + path_to_work, + path_to_equi, + refine = False): + """ + Make configurations needed to compute the property. + The tasks directory will be named as path_to_work/task.xxxxxx + IMPORTANT: handel the case when the directory exists. + + Parameters + ---------- + path_to_work : str + The path where the tasks for the property are located + path_to_equi : str + -refine == False: The path to the directory that equilibrated the configuration. + -refine == True: The path to the directory that has property confs. + refine: str + To refine existing property confs or generate property confs from a equilibrated conf + + Returns + ------- + task_list: list of str + The list of task directories. + """ + pass + + @property + @abstractmethod + def task_type(self): + """ + Return the type of each computational task, for example, 'relaxation', 'static'.... + """ + + @property + @abstractmethod + def task_param(self): + """ + Return the parameter of each computational task, for example, {'ediffg': 1e-4} + """ + + def post(self, + output_file, + print_file, + path_to_work): + """ + Postprocess the finished tasks to compute the property. + Output the result to a json database + + Parameters + ---------- + output_file: + The file to output the property + path_to_work: + The working directory where the computational tasks locate. + """ + path_to_work = os.path.abs_path(path_to_work) + task_dirs = os.path.join(path_to_work, 'task.[0-9]*[0-9]') + task_dirs.sort() + all_res = [] + for ii in task_dirs: + with open(os.path.join(ii, 'interaction.json')) as fp: + idata = json.load(fp) + poscar = os.path.join(ii, 'POSCAR') + inter = make_interaction(idata, poscar) + res = inter.post() + all_res.append(res) + res, ptr = self.cmpt(task_dirs, all_res) + with open(output_file, 'w') as fp: + json.dump(fp, res, indent=4) + with open(print_file, 'w') as fp: + fp.write(ptr) + + + @abstractmethod + def _cmpt(self, + output_file, + all_tasks, + all_res): + """ + Compute the property. + + Parameters + ---------- + output_file: + The file to output the property + all_tasks : list of str + The list of directories to the tasks + all_res : list of str + The list of results + + Returns: + ------- + res_data: dist + The dict storing the result of the property + ptr_data: str + The result printed in string format + """ + pass diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py new file mode 100644 index 000000000..98601132b --- /dev/null +++ b/dpgen/auto_test/common.py @@ -0,0 +1,168 @@ +import os +from VASP import VASP +from DEEPMD_LMP import DEEPMD_LMP +from MEAM_LMP import MEAM_LMP + +def make_interaction(paramters, + path_to_poscar) : + """ + Make an instance of Interaction + """ + inter_type = paramters['type'] + if inter_type == 'vasp': + return VASP(paramters, path_to_poscar) + elif inter_type == 'deepmd': + return DEEPMD_LMP(paramters, path_to_poscar) + elif inter_type == 'meam': + return MEAM_LMP(paramters, path_to_poscar) + else: + raise RuntimeError(f'unknow interaction type {inter_type}') + +def make_interaction_files(paramters) : + """ + Make the forward and backward file of an Interaction + """ + inter_type = paramters['type'] + if inter_type == 'vasp': + return VASP.forward_files, VASP.forward_common_files, VASP.backward_files + elif inter_type == 'deepmd': + return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files + elif inter_type == 'meam': + return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files + else: + raise RuntimeError(f'unknow interaction type {inter_type}') + +def make_property(paramters) : + """ + Make an instance of Property + """ + prop_type = paramters['type'] + if prop_type == 'eos': + return EOS(paramters) + elif prop_type == 'elastic': + return Elastic(paramters) + elif prop_type == 'vacancy': + return Vacancy(paramters) + else: + raise RuntimeError(f'unknow property type {prop_type}') + +def make_equi(confs, + inter_param, + relax_param): + # find all POSCARs and their name like mp-xxx + # ... + + # generate a list of task names like mp-xxx/relaxation + # ... + + # make task directories like mp-xxx/relaxation + # if mp-xxx/exists then print a warning and exit. + # ... + + # copy POSCARs to mp-xxx/relaxation + # ... + + # generate task files + for ii in task_dirs: + poscar = os.path.join(ii, 'POSCAR') + inter = make_interaction(inter_param, poscar) + inter.make_potential_files(ii) + inter.make_interaction(ii, 'relaxation', relax_param) + + +def run_equi(confs, + inter_param): + # find all POSCARs and their name like mp-xxx + # ... + + # generate a list of task names like mp-xxx/relaxation + # ... + + # dispatch the tasks + forward_files, forward_common_files, backward_files = make_interaction_files(inter_param) + backward_files += logs + # ... + pass + + +def post_equi(confs): + # find all POSCARs and their name like mp-xxx + # ... + + # generate a list of task names like mp-xxx/relaxation + # ... + + # dump the relaxation result. + for ii in task_dirs: + poscar = os.path.join(ii, 'POSCAR') + inter = make_interaction(inter_param, poscar) + res = inter.post() + with open('result.json', 'w') as fp: + json.dump(fp, res, indent=4) + + +def make_property(confs, + inter_param, + property_list): + # find all POSCARs and their name like mp-xxx + # ... + for ii in conf_dirs: + for jj in property_list: + # generate working directory like mp-xxx/eos_00 if jj['type'] == 'eos' + # handel the exception that the working directory exists + # ... + + # determine the suffix: from scratch or refine + # ... + + property_type = jj['type'] + path_to_equi = os.path.join(ii, 'relaxation') + path_to_work = os.path.join(ii, property_type + '_' + suffix) + + prop = make_property(jj) + task_list = prop.make_confs(path_to_work, path_to_equi, do_refine) + + for kk in task_list: + poscar = os.path.join(kk, 'POSCAR') + inter = make_interaction(inter_param, poscar) + inter.make_potential_files(kk) + inter.make_input_file(kk, prop.task_type, prop.task.pararm) + + +def run_property(confs, + inter_param, + property_list): + # find all POSCARs and their name like mp-xxx + # ... + task_list = [] + for ii in conf_dirs: + for jj in property_list: + # determine the suffix: from scratch or refine + # ... + property_type = jj['type'] + path_to_work = os.path.join(ii, property_type + '_' + suffix) + + tmp_task_list = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) + tmp_task_list.sort() + task_list.append(tmp_task_list) + + # dispatch the tasks + forward_files, forward_common_files, backward_files = make_interaction_files(inter_param) + backward_files += logs + # ... + pass + +def post_property(confs, + inter_param, + property_list): + # find all POSCARs and their name like mp-xxx + # ... + task_list = [] + for ii in conf_dirs: + for jj in property_list: + # determine the suffix: from scratch or refine + # ... + property_type = jj['type'] + path_to_work = os.path.join(ii, property_type + '_' + suffix) + prop = make_property(jj) + prop.post('result.json', 'result.out', path_to_work) From 94a0a9ab1ff170215e4a1e44d2023d621c5a5787 Mon Sep 17 00:00:00 2001 From: Han Wang Date: Fri, 5 Jun 2020 17:46:17 +0800 Subject: [PATCH 002/154] fix bug --- dpgen/auto_test/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py index 98601132b..154982909 100644 --- a/dpgen/auto_test/common.py +++ b/dpgen/auto_test/common.py @@ -67,7 +67,7 @@ def make_equi(confs, poscar = os.path.join(ii, 'POSCAR') inter = make_interaction(inter_param, poscar) inter.make_potential_files(ii) - inter.make_interaction(ii, 'relaxation', relax_param) + inter.make_input_file(ii, 'relaxation', relax_param) def run_equi(confs, From 09dc7a945721bdec676eebf688e1735b5dc0966c Mon Sep 17 00:00:00 2001 From: Han Wang Date: Fri, 5 Jun 2020 18:24:01 +0800 Subject: [PATCH 003/154] rename interaction -> task. fix a few bugs --- dpgen/auto_test/Property.py | 24 ++++++++++--------- dpgen/auto_test/{Interaction.py => Task.py} | 22 ++++++++--------- dpgen/auto_test/common.py | 26 ++++++++++----------- 3 files changed, 37 insertions(+), 35 deletions(-) rename dpgen/auto_test/{Interaction.py => Task.py} (77%) diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index 6c5a3adc8..c853d50c0 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -48,6 +48,7 @@ def task_type(self): """ Return the type of each computational task, for example, 'relaxation', 'static'.... """ + pass @property @abstractmethod @@ -55,11 +56,12 @@ def task_param(self): """ Return the parameter of each computational task, for example, {'ediffg': 1e-4} """ + pass - def post(self, - output_file, - print_file, - path_to_work): + def compute(self, + output_file, + print_file, + path_to_work): """ Postprocess the finished tasks to compute the property. Output the result to a json database @@ -76,11 +78,11 @@ def post(self, task_dirs.sort() all_res = [] for ii in task_dirs: - with open(os.path.join(ii, 'interaction.json')) as fp: + with open(os.path.join(ii, 'task.json')) as fp: idata = json.load(fp) poscar = os.path.join(ii, 'POSCAR') - inter = make_interaction(idata, poscar) - res = inter.post() + task = make_task(idata, poscar) + res = task.compute() all_res.append(res) res, ptr = self.cmpt(task_dirs, all_res) with open(output_file, 'w') as fp: @@ -90,10 +92,10 @@ def post(self, @abstractmethod - def _cmpt(self, - output_file, - all_tasks, - all_res): + def _compute_lower(self, + output_file, + all_tasks, + all_res): """ Compute the property. diff --git a/dpgen/auto_test/Interaction.py b/dpgen/auto_test/Task.py similarity index 77% rename from dpgen/auto_test/Interaction.py rename to dpgen/auto_test/Task.py index c59510d40..2477e5c26 100644 --- a/dpgen/auto_test/Interaction.py +++ b/dpgen/auto_test/Task.py @@ -1,6 +1,6 @@ from abc import ABC,abstractmethod -class Interaction(ABC): +class Task(ABC): @abstractmethod def __init__ (self, paramters, @@ -13,7 +13,7 @@ def __init__ (self, parameters : dict A dict that specifies the interaction. path_to_poscar : str - The path to POSCAR. Indicating in which system the interaction will be initialized. + The path to POSCAR. Indicating in which system the task will be initialized. """ pass @@ -21,9 +21,9 @@ def __init__ (self, def make_potential_files(self, output_dir): """ - Prepare potential files for a computational task using this interaction. - For example, the VASP interaction prepares POTCAR. - DeePMD interaction prepares frozen model(s). + Prepare potential files for a computational task. + For example, the VASP prepares POTCAR. + DeePMD prepares frozen model(s). Parameters ---------- @@ -38,10 +38,10 @@ def make_input_file(self, task_type, task_param): """ - Prepare input files for a computational task using this interaction. - For example, the VASP interaction prepares INCAR. - LAMMPS interaction (including DeePMD, MEAM...) prepares in.lammps. - The parameter of this interaction will be stored in 'output_dir/interaction.json' + Prepare input files for a computational task + For example, the VASP prepares INCAR. + LAMMPS (including DeePMD, MEAM...) prepares in.lammps. + IMPORTANT: Task parameters should be stored in output_dir/task.json Parameters ---------- @@ -59,9 +59,9 @@ def make_input_file(self, pass @abstractmethod - def post (self): + def compute (self): """ - Postprocess the task after the computation. + Compute output of the task. IMPORTANT: The output configuration should be converted and stored in a CONTCAR file. Returns diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py index 154982909..83c9b2cee 100644 --- a/dpgen/auto_test/common.py +++ b/dpgen/auto_test/common.py @@ -3,10 +3,10 @@ from DEEPMD_LMP import DEEPMD_LMP from MEAM_LMP import MEAM_LMP -def make_interaction(paramters, +def make_task(paramters, path_to_poscar) : """ - Make an instance of Interaction + Make an instance of Task """ inter_type = paramters['type'] if inter_type == 'vasp': @@ -16,11 +16,11 @@ def make_interaction(paramters, elif inter_type == 'meam': return MEAM_LMP(paramters, path_to_poscar) else: - raise RuntimeError(f'unknow interaction type {inter_type}') + raise RuntimeError(f'unknow interaction {inter_type}') -def make_interaction_files(paramters) : +def make_task_trans_files(paramters) : """ - Make the forward and backward file of an Interaction + Make the forward and backward file of an Task """ inter_type = paramters['type'] if inter_type == 'vasp': @@ -30,7 +30,7 @@ def make_interaction_files(paramters) : elif inter_type == 'meam': return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files else: - raise RuntimeError(f'unknow interaction type {inter_type}') + raise RuntimeError(f'unknow interaction {inter_type}') def make_property(paramters) : """ @@ -65,7 +65,7 @@ def make_equi(confs, # generate task files for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') - inter = make_interaction(inter_param, poscar) + inter = make_task(inter_param, poscar) inter.make_potential_files(ii) inter.make_input_file(ii, 'relaxation', relax_param) @@ -79,7 +79,7 @@ def run_equi(confs, # ... # dispatch the tasks - forward_files, forward_common_files, backward_files = make_interaction_files(inter_param) + forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) backward_files += logs # ... pass @@ -95,8 +95,8 @@ def post_equi(confs): # dump the relaxation result. for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') - inter = make_interaction(inter_param, poscar) - res = inter.post() + inter = make_task(inter_param, poscar) + res = inter.compute() with open('result.json', 'w') as fp: json.dump(fp, res, indent=4) @@ -124,7 +124,7 @@ def make_property(confs, for kk in task_list: poscar = os.path.join(kk, 'POSCAR') - inter = make_interaction(inter_param, poscar) + inter = make_task(inter_param, poscar) inter.make_potential_files(kk) inter.make_input_file(kk, prop.task_type, prop.task.pararm) @@ -147,7 +147,7 @@ def run_property(confs, task_list.append(tmp_task_list) # dispatch the tasks - forward_files, forward_common_files, backward_files = make_interaction_files(inter_param) + forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) backward_files += logs # ... pass @@ -165,4 +165,4 @@ def post_property(confs, property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) prop = make_property(jj) - prop.post('result.json', 'result.out', path_to_work) + prop.compute('result.json', 'result.out', path_to_work) From 596a2faa60d09e8d1b3de10f4d3a6d8cd502be18 Mon Sep 17 00:00:00 2001 From: Han Wang Date: Mon, 8 Jun 2020 09:05:10 +0800 Subject: [PATCH 004/154] Task.compute should input the task directory. make the names more clear --- dpgen/auto_test/Property.py | 10 ++++++---- dpgen/auto_test/Task.py | 25 ++++++++++++++++++++----- dpgen/auto_test/common.py | 21 ++++++++++----------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index c853d50c0..f6dea9561 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -11,7 +11,7 @@ def __init__ (self, Parameters ---------- parameters : dict - A dict that specifies the interaction. + A dict that defines the property. """ pass @@ -69,7 +69,9 @@ def compute(self, Parameters ---------- output_file: - The file to output the property + The file to output the property in json format + print_file: + The file to output the property in txt format path_to_work: The working directory where the computational tasks locate. """ @@ -78,11 +80,11 @@ def compute(self, task_dirs.sort() all_res = [] for ii in task_dirs: - with open(os.path.join(ii, 'task.json')) as fp: + with open(os.path.join(ii, 'inter.json')) as fp: idata = json.load(fp) poscar = os.path.join(ii, 'POSCAR') task = make_task(idata, poscar) - res = task.compute() + res = task.compute(ii) all_res.append(res) res, ptr = self.cmpt(task_dirs, all_res) with open(output_file, 'w') as fp: diff --git a/dpgen/auto_test/Task.py b/dpgen/auto_test/Task.py index 2477e5c26..197dc0c77 100644 --- a/dpgen/auto_test/Task.py +++ b/dpgen/auto_test/Task.py @@ -3,14 +3,14 @@ class Task(ABC): @abstractmethod def __init__ (self, - paramters, + inter_paramter, path_to_poscar) : """ Constructor Parameters ---------- - parameters : dict + inter_parameter : dict A dict that specifies the interaction. path_to_poscar : str The path to POSCAR. Indicating in which system the task will be initialized. @@ -24,11 +24,16 @@ def make_potential_files(self, Prepare potential files for a computational task. For example, the VASP prepares POTCAR. DeePMD prepares frozen model(s). + IMPORTANT: Interaction should be stored in output_dir/inter.json Parameters ---------- output_dir : str The directory storing the potential files. + Outputs + ------- + inter.json: output file + The task information is stored in `output_dir/inter.json` """ pass @@ -41,7 +46,6 @@ def make_input_file(self, Prepare input files for a computational task For example, the VASP prepares INCAR. LAMMPS (including DeePMD, MEAM...) prepares in.lammps. - IMPORTANT: Task parameters should be stored in output_dir/task.json Parameters ---------- @@ -54,21 +58,32 @@ def make_input_file(self, task_parame: dict The parameters of the task. For example the VASP interaction can be provided with - { "ediff": 1e-6, "ediffg": 1e-5 } + { "ediff": 1e-6, "ediffg": 1e-5 } """ pass @abstractmethod - def compute (self): + def compute (self, + output_dir): """ Compute output of the task. IMPORTANT: The output configuration should be converted and stored in a CONTCAR file. + Parameters + ---------- + output_dir : str + The directory storing the input and output files. + Returns ------- result_dict: dict A dict that storing the result. For example: { "energy": xxx, "force": [xxx] } + + Outputs + ------- + CONTCAR: output file + The output configuration is converted to CONTCAR and stored in the `output_dir` """ pass diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py index 83c9b2cee..8ff62c437 100644 --- a/dpgen/auto_test/common.py +++ b/dpgen/auto_test/common.py @@ -3,26 +3,26 @@ from DEEPMD_LMP import DEEPMD_LMP from MEAM_LMP import MEAM_LMP -def make_task(paramters, - path_to_poscar) : +def make_task(inter_parameter, + path_to_poscar) : """ Make an instance of Task """ - inter_type = paramters['type'] + inter_type = inter_parameter['type'] if inter_type == 'vasp': - return VASP(paramters, path_to_poscar) + return VASP(inter_parameter, path_to_poscar) elif inter_type == 'deepmd': - return DEEPMD_LMP(paramters, path_to_poscar) + return DEEPMD_LMP(inter_parameter, path_to_poscar) elif inter_type == 'meam': - return MEAM_LMP(paramters, path_to_poscar) + return MEAM_LMP(inter_parameter, path_to_poscar) else: raise RuntimeError(f'unknow interaction {inter_type}') -def make_task_trans_files(paramters) : +def make_task_trans_files(inter_parameter) : """ Make the forward and backward file of an Task """ - inter_type = paramters['type'] + inter_type = inter_parameter['type'] if inter_type == 'vasp': return VASP.forward_files, VASP.forward_common_files, VASP.backward_files elif inter_type == 'deepmd': @@ -82,7 +82,6 @@ def run_equi(confs, forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) backward_files += logs # ... - pass def post_equi(confs): @@ -96,8 +95,8 @@ def post_equi(confs): for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') inter = make_task(inter_param, poscar) - res = inter.compute() - with open('result.json', 'w') as fp: + res = inter.compute(ii) + with open(os.path.join(ii, 'result.json'), 'w') as fp: json.dump(fp, res, indent=4) From 3ef017730a3a61132d498cfb4e86abb2dd72bf4d Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 15 Jun 2020 17:32:29 +0800 Subject: [PATCH 005/154] atest-refact --- .DS_Store | Bin 0 -> 8196 bytes dpgen/.DS_Store | Bin 0 -> 8196 bytes dpgen/auto_test/.DS_Store | Bin 0 -> 8196 bytes dpgen/auto_test/DEEPMD_LMP.py | 145 ++++++ dpgen/auto_test/EAM_ALLOY_LMP.py | 146 ++++++ dpgen/auto_test/EAM_FS_LMP.py | 146 ++++++ dpgen/auto_test/EOS.py | 133 ++++-- dpgen/auto_test/Elastic.py | 145 ++++++ dpgen/auto_test/Interstitial.py | 140 ++++++ dpgen/auto_test/MEAM_LMP.py | 159 ++++++ dpgen/auto_test/Property.py | 21 +- dpgen/auto_test/Surface.py | 145 ++++++ dpgen/auto_test/Task.py | 2 +- dpgen/auto_test/VASP.py | 170 +++++++ dpgen/auto_test/Vacancy.py | 127 +++++ dpgen/auto_test/common.py | 244 ++++++++-- dpgen/auto_test/lib/lammps.py | 21 + dpgen/auto_test/lib/util.py | 2 +- dpgen/auto_test/refine.py | 35 ++ dpgen/auto_test/reproduce.py | 99 ++++ dpgen/auto_test/run.py | 798 ++----------------------------- 21 files changed, 1829 insertions(+), 849 deletions(-) create mode 100644 .DS_Store create mode 100644 dpgen/.DS_Store create mode 100644 dpgen/auto_test/.DS_Store create mode 100644 dpgen/auto_test/DEEPMD_LMP.py create mode 100644 dpgen/auto_test/EAM_ALLOY_LMP.py create mode 100644 dpgen/auto_test/EAM_FS_LMP.py create mode 100644 dpgen/auto_test/Elastic.py create mode 100644 dpgen/auto_test/Interstitial.py create mode 100644 dpgen/auto_test/MEAM_LMP.py create mode 100644 dpgen/auto_test/Surface.py create mode 100644 dpgen/auto_test/VASP.py create mode 100644 dpgen/auto_test/Vacancy.py create mode 100644 dpgen/auto_test/refine.py create mode 100644 dpgen/auto_test/reproduce.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f76a96d989843ca98f71d9e654666aa8037324f7 GIT binary patch literal 8196 zcmeHMTWl0n82-OfU}gY2+@wQTTqq!yQWp!@0+ppLLV*Ti3vIbAvpYjOaXPc?%(g(O zsZrDzqw$g$uQ9|oNPN;L@zD!JV`3!UqCV)0k4B@3Px_xZvp|8G_@WZ#Bob`wDpEh$swP!Wo-$QYG)0@C9qJnJhr2>EEC;P- z>3|sRF~fm;-0${%_j2FN?{n{1l$ST?&H>~TEHA8z%_o)tvD((e96>$uyrcKzt6s?1xurlsS^;E9tXr$!%qQLYN{$v`#N ztn#JtOLT*wHu;I7>V?V@zp5-z)utI8J9cV0ebx}qe0MQ)d@tB%mjaeKy(Zw*b`*SX zPstYco`Ua|2fZMt&n%d3q3oKWy~TCAoRfCY8`{T1(c2&RrLZk>>~%O+=yJMV4($7F z4seF-b`A@4sAs3oO)XxwDzk3G=Jrc7ZmZEXZT6g=At!M1uH9z_1>3V6uYd2bV}%3z z87wb!jyiTpRcFHO_RK;1((UtVbz{Dj)RrR3z0p3v=sx_`vRNdO^ znt9ueRZY#T+SxNC(TtTX_bNR5`rd*+ILPY>q}ph0QxyHeVe#x;W)SW!+8#eXT3y=M zrYL>FvcJJb~x%3SPx)cpY!z9lVS4cpo3&Q+$qZoAshrHv)d~HE$FEh(Neuc-9*AH z`Xpwr8aX#;nUp@6i7Ks)+B!|IW+qE(leQtHPhrkVYm2s7(@DH*(yXSIX?#@uWB#3? zvvi(5q>q_*U(omTBmGQ&Fy~a%U>-AWK2lhSJFx;QQIFMFk0xf{Mr^`XY{Pc!Uh2i+<4v%b(K8V z_xf2|Ve0sRWOQ>QFiB3oR^h`YoR(6@_m>0Qrn(Gm+ zq6oh+DWec>qI8^Pl#a8!{D&d;)9fl@vauYKk~LiZ^$!8b{V#zhO78!NfwyM!7k8-K AlmGw# literal 0 HcmV?d00001 diff --git a/dpgen/.DS_Store b/dpgen/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cd2d8c0a9aa2777c0c8892de6b575e8daacdb9a4 GIT binary patch literal 8196 zcmeHMTWl0n82-OfU}m^<3WZ(<$VwxZP;e_!?y|jswGz;6X}K=5I|EFd&eWaREv3}d zsL=-l@sb#CFT}SJeZm;ylUInw#MpR?8WZ1qGQJt(|E#BxGP=}wUDg!svbGZaKmXTMZrPRK}^ zvhEmb-g9(l^wikt@kd{h z(INgqP|bDGzC3-XZcy%&p;o~XV zF9r5PHaj?FyNlfd9qQ!VMN5~jSd-qcWk=W4y!kb{rY)=+C_90ZckTUVP_RAA@s9V8 zI97P#0E6a*&N0U>s%kCVKF=Jor}V}34UJ8PA#JYsR8|=*<()@LPB^MJE6S8Uzh>St zBc&a(cn7kBvtMK`5ki?&YddzepE)dM-x zs;xKrT{CaHs&2{Wv}v1+fwDwW)qCaSR&Bd6Sn!92IFx{+Xpz$yqr*5Np8S9rgnNc< zPweU<>o~gZlws@_x^~MFds3P+tK`W?2sCHXa-{MN(@5+1KDmz$@vl_FG)m9V89Ga^ z(Cc)b-lBKuW4cI}=u`TfzNH`OXZn?Xr$6XV`U?scVKExeh~-#^yO73a+>0G(M+bVb z7Y`zfJ{(2?7LMUKhH(<37{h5ii8DBh=kPpU#U#$-4ZMlB@gCmC2lx=5;R}2xH&|66 z?ru4*wD_KT)4Zch-1r@>Ix-z`o4R-I`k#pV&0N9O+64>i7AUHOM zHK8IFNt#6Tsn8=j$ZI$`713H-vb4hEE6kQm?`QVeClx^mxz z6T8sEOzcBH_F)hQA|~3*L3wRCZFnJySdMeD566dGq zUpZU!T;Ds++6r^8bxcOLHUcx`_8LU~-+lAn|8MOelHDZ;BnbQ~1W?_T?dsqqZuS`$ zxps={QLds0y9p^H7jA@!n2*wNmY4r9SpdL9LEiyT0{{|T9NAK;Zc@0PUpJJpz*0eo6c27LV>ub>UCrcf7#$iy z20{ix20{ix20{k@4-C+r&5N|azAwCC9WoFya9c9K*M}%w9OD5_3-p%`s{A7WAwL56 zh1!fa2%`bU1DqB}9x5n82}LLdM+_9E2olR2>(aF7yv4&{V?mbgevb1{Rj+V|-qZ4N*&rLn_lE?^yRRJpJ zW%%-JdX_uZCO%J;y_m^~^u8{oCo4_uBk{eI~_nTbi+gYdm03 zfH`KgQ<%$8zPM~vWc{YCvBu^D?bnvyQOOi#Wp(eE>6#hK=-1q=Ve6(n++8$vZ)AXo zvOV*(Y2;gfCzb>E|^(T$RHg4^5j2Gzo>sP$VYKufulNbs23?~!HZrXHl(6rswl-IC1oZcED; zR$yw{OQx>gF~MeFY`IUOr*G)XI-{eMk1Nb-qD_+6l_7rbBbw_S%NaJ^-p?+oc1Th` z_q6J|p-Xk~&0@BF2I}H5(UWN>QDHmnSchN`49LL*JOxj~Gw=$$376m*;Yl3AG-^1E zIXr`T^za;>$H(w-d=j6>SMfD`9pAvW@LhZlFXIRJA%2Em;CJEy%SvKBD*B}wzo%C4 zE|OS-Z)s&iHxp~*;Qbx{kyyW3#uZw%VrBKJwRM}f?Ywt?>&zt1o44yF(@TpQ|Lk#!Nqg(JEfBAX(tjI=Gf^^vU# zD<|d3{^0FOEW#F%NQHNo(x|WsQnBzhDa{eKnDi>VEy@9f0e{bgTaIi}Xo>pA+PeT3 z;WB&#pOEIhgdgB1_yztXy~$XKt4VFO7{Rr8H`e18Y`|@}2b)NF`*1%V#11@!he>@Y z?7?2_#{tZufv0fq`)WeS$vLE_yVc$0$!Y_xz3W>1mdMx&5b4V zw&mEvWGN|h?%=R@YcWtR(y8I+|APyE|G%}84zmdv2pO2e09Ldo+Y@A3XxZmy?I>NR z=;DQsn-=JYP~{)T3H{?Z;mjX~)Q-|n9up66S|C}d{OcbA)Nudzi5KjL`~NH%w^i$J DqCM8o literal 0 HcmV?d00001 diff --git a/dpgen/auto_test/DEEPMD_LMP.py b/dpgen/auto_test/DEEPMD_LMP.py new file mode 100644 index 000000000..8d938efe2 --- /dev/null +++ b/dpgen/auto_test/DEEPMD_LMP.py @@ -0,0 +1,145 @@ +import os +import warnings +import json +from Task import Task +import dpdata +import dpgen.auto_test.lib.lammps as lammps + + +class DEEPMD_LMP(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.model = os.path.abspath(inter_parameter['model']) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def make_potential_files(self, + output_dir): + model_file = os.path.basename(self.model) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model: + os.remove(model_file) + os.symlink(os.path.relpath(self.model), model_file) + else: + os.symlink(os.path.relpath(self.model), model_file) + os.chdir(cwd) + + with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: + json.dump(self.inter, fp, indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + with open(os.path.join(output_dir, 'task.json'), 'w') as fp: + json.dump(task_param, fp, indent=4) + # lines in lammps.in related to model + # line_model = lammps.inter_deepmd(self.inter) + # line_model = "pair_style deepmd %s \n" % (os.path.basename(self.model)) + # line_model += "pair_coeff\n" + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + model_name = os.path.basename(self.model) + deepmd_version = self.model.get("deepmd_version", "0.12") + + model_param = {'model_name': [model_name], + 'param_type': self.type_map, + 'deepmd_version': deepmd_version} + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_deepmd, model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_deepmd, model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_deepmd, model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial'): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_deepmd, + model_param, B0, bp, etol, ftol, maxiter, maxeval) + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_deepmd, model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump') + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + return result_dict + + def forward_files(self): + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + + def forward_common_files(self): + return ['in.lammps', os.path.basename(self.model)] + + def backward_files(self): + return ['log.lammps', 'deepmd.out', 'dump.relax'] diff --git a/dpgen/auto_test/EAM_ALLOY_LMP.py b/dpgen/auto_test/EAM_ALLOY_LMP.py new file mode 100644 index 000000000..d442f2f4a --- /dev/null +++ b/dpgen/auto_test/EAM_ALLOY_LMP.py @@ -0,0 +1,146 @@ +import os +import warnings +import json +from Task import Task +import dpdata +import dpgen.auto_test.lib.lammps as lammps + + +class EAM_ALLOY_LMP(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.model = os.path.abspath(inter_parameter['model']) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def make_potential_files(self, + output_dir): + model_file = os.path.basename(self.model) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model: + os.remove(model_file) + os.symlink(os.path.relpath(self.model), model_file) + else: + os.symlink(os.path.relpath(self.model), model_file) + os.chdir(cwd) + + with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: + json.dump(self.inter, fp, indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + with open(os.path.join(output_dir, 'task.json'), 'w') as fp: + json.dump(task_param, fp, indent=4) + # lines in lammps.in related to model + # line_model = "pair_style eam/alloy \n" + # line_model += "pair_coeff * * %s " % (os.path.basename(self.model)) + # for ii in self.type_map: + # line_model += ii + ' ' + # line_model += '\n' + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + model_name = os.path.basename(self.model) + + model_param = {'model_name': model_name, + 'param_type': self.type_map} + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial' and not reprod_opt): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_eam_alloy, + model_param, B0, bp, etol, ftol, maxiter, maxeval) + + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump') + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + return result_dict + + def forward_files(self): + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + + def forward_common_files(self): + return ['in.lammps', os.path.basename(self.model)] + + def backward_files(self): + return ['log.lammps', 'eam_alloy.out', 'dump.relax'] diff --git a/dpgen/auto_test/EAM_FS_LMP.py b/dpgen/auto_test/EAM_FS_LMP.py new file mode 100644 index 000000000..e5a1ef9e9 --- /dev/null +++ b/dpgen/auto_test/EAM_FS_LMP.py @@ -0,0 +1,146 @@ +import os +import warnings +import json +from Task import Task +import dpdata +import dpgen.auto_test.lib.lammps as lammps + + +class EAM_FS_LMP(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.model = os.path.abspath(inter_parameter['model']) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def make_potential_files(self, + output_dir): + model_file = os.path.basename(self.model) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model: + os.remove(model_file) + os.symlink(os.path.relpath(self.model), model_file) + else: + os.symlink(os.path.relpath(self.model), model_file) + os.chdir(cwd) + + with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: + json.dump(self.inter, fp, indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + with open(os.path.join(output_dir, 'task.json'), 'w') as fp: + json.dump(task_param, fp, indent=4) + # lines in lammps.in related to model + # line_model = "pair_style eam/fs \n" + # line_model += "pair_coeff * * %s " % (os.path.basename(self.model)) + # for ii in self.type_map: + # line_model += ii + ' ' + # line_model += '\n' + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + model_name = os.path.basename(self.model) + + model_param = {'model_name': model_name, + 'param_type': self.type_map} + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_eam_fs, model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_fs, model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_eam_fs, model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial'): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_eam_fs, + model_param, B0, bp, etol, ftol, maxiter, maxeval) + + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_fs, model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump') + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + return result_dict + + def forward_files(self): + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + + def forward_common_files(self): + return ['in.lammps', os.path.basename(self.model)] + + def backward_files(self): + return ['log.lammps', 'eam_fs.out', 'dump.relax'] diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index bb441bfa2..c56c525de 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -1,48 +1,89 @@ from Property import Property +from refine import make_refine +import reproduce +import dpgen.auto_test.lib.vasp as vasp +import numpy as np +import os, json -class EOS (Property) : - def __init__ (self, - parameter) : - """ - Constructor - - Parameters - ---------- - parameters : dict - A dict that specifies the interaction. - """ - pass - - def make_confs(self, - work_path, - path_to_equi): - """ - Make configurations needed to compute the property. - The tasks directory will be named as work_path/task.xxxxxx - - Parameters - ---------- - work_path : str - The path where the task are located - path_to_equi : str - The path of the task that equilibrated the configuration. - """ - pass - - def _cmpt(self, - output_file, - all_tasks, - all_res): - """ - Compute the property. - - Parameters - ---------- - output_file: - The file to output the property - all_tasks : list of str - The list of directories of tasks - all_res : list of str - The list of results - """ - pass + +class EOS(Property): + def __init__(self, + parameter): + self.parameter = parameter + self.vol_start = parameter['vol_start'] + self.vol_end = parameter['vol_end'] + self.vol_step = parameter['vol_step'] + self.change_box = parameter.get('change_box', True) + self.reprod = parameter.get('reprod-opt', False) + + def make_confs(self, + path_to_work, + path_to_equi, + refine=False): + path_to_work = os.path.abspath(path_to_work) + path_to_equi = os.path.abspath(path_to_equi) + cwd = os.getcwd() + task_list = [] + if refine: + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + (self.vol_end-self.vol_start)/self.vol_step) + os.chdir(cwd) + if self.reprod: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + task_list = reproduce.make_repro(vasp_path, path_to_work) + os.chdir(cwd) + else: + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + vol_to_poscar = vasp.poscar_vol(equi_contcar) / vasp.poscar_natoms(equi_contcar) + for vol in np.arange(self.vol_start, self.vol_end, self.vol_step): + task_num = (vol - self.vol_start) / self.vol_step + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for ii in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(ii): + os.remove(ii) + task_list.append(output_task) + os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') + scale = (vol / vol_to_poscar) ** (1. / 3.) + self.parameter['scale2equi'] = scale # 06/14 + vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) + os.chdir(cwd) + return task_list + + def task_type(self): + return self.parameter['type'] + + def task_param(self): + return self.parameter + + def _compute_lower(self, + output_file, + all_tasks, + all_res): + output_file = os.path.abspath(output_file) + res_data = {} + ptr_data = "output_file\n" + if not self.reprod: + ptr_data += ' VpA(A^3) EpA(eV)\n' + for ii in range(len(all_tasks)): + vol = self.vol_start + ii * self.vol_step + res_data[vol] = all_res[ii]['energy'] + ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy']) + + else: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + + with open(output_file, 'w') as fp: + json.dump(res_data, fp, indent=4) + + return res_data, ptr_data diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py new file mode 100644 index 000000000..90168cfd1 --- /dev/null +++ b/dpgen/auto_test/Elastic.py @@ -0,0 +1,145 @@ +from Property import Property +from refine import make_refine +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps +from pymatgen.core.structure import Structure +from pymatgen.analysis.elasticity.strain import DeformedStructureSet, Strain +from pymatgen.analysis.elasticity.stress import Stress +from pymatgen.analysis.elasticity.elastic import ElasticTensor +import numpy as np +import os, json + + +class Elastic(Property): + def __init__(self, + parameter): + self.parameter = parameter + default_norm_def = 2e-3 + default_shear_def = 5e-3 + self.norm_deform = parameter.get('norm_deform', default_norm_def) + self.shear_deform = parameter.get('shear_deform', default_shear_def) + + def make_confs(self, + path_to_work, + path_to_equi, + refine=False): + path_to_work = os.path.abspath(path_to_work) + path_to_equi = os.path.abspath(path_to_equi) + task_list = [] + cwd = os.getcwd() + + norm_def = self.norm_deform + shear_def = self.shear_deform + norm_strains = [-norm_def, -0.5 * norm_def, 0.5 * norm_def, norm_def] + shear_strains = [-shear_def, -0.5 * shear_def, 0.5 * shear_def, shear_def] + print('gen with norm ' + str(norm_strains)) + print('gen with shear ' + str(shear_strains)) + + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + dfm_ss = DeformedStructureSet(ss, + symmetry=False, + norm_strains=norm_strains, + shear_strains=shear_strains) + n_dfm = len(dfm_ss) + + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + # stress + equi_outcar = os.path.join(path_to_equi, 'OUTCAR') + equi_log = os.path.join(path_to_equi, 'log.lammps') + if os.path.exists(equi_outcar): + stress = vasp.get_stress(equi_outcar) + np.savetxt('equi.stress.out', stress) + elif os.path.exists(equi_log): + stress = lammps.get_stress(equi_log) + np.savetxt('equi.stress.out', stress) + os.chdir(cwd) + + if refine: + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + n_dfm) + os.chdir(cwd) + else: + for ii in range(n_dfm): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') + # record strain + strain = Strain.from_deformation(dfm_ss.deformations[ii]) + np.savetxt('strain.out', strain) + os.chdir(cwd) + return task_list + + def task_type(self): + return self.parameter['type'] + + def task_param(self): + return self.parameter + + def _compute_lower(self, + output_file, + all_tasks, + all_res): + output_file = os.path.abspath(output_file) + res_data = {} + ptr_data = output_file + '\n' + equi_stress = Stress(np.loadtxt(os.path.join(os.path.dirname(output_file), 'equi.stress.out'))) + lst_strain = [] + lst_stress = [] + for ii in all_tasks: + with open(os.path.join(ii, 'inter.json')) as fp: + idata = json.load(fp) + inter_type = idata['type'] + strain = np.loadtxt(os.path.join(ii, 'strain.out')) + if inter_type == 'vasp': + stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) + # convert from pressure in kB to stress + stress *= -1000 + lst_strain.append(Strain(strain)) + lst_stress.append(Stress(stress)) + elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: + stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) + # convert from pressure to stress + stress = -stress + lst_strain.append(Strain(strain)) + lst_stress.append(Stress(stress)) + et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress=equi_stress, vasp=False) + res_data['elastic_tensor'] = [] + for ii in range(6): + for jj in range(6): + res_data['elastic_tensor'].append(et.voigt[ii][jj] / 1e4) + ptr_data += "%7.2f " % (et.voigt[ii][jj] / 1e4) + ptr_data += '\n' + + BV = et.k_voigt / 1e4 + GV = et.g_voigt / 1e4 + EV = 9 * BV * GV / (3 * BV + GV) + uV = 0.5 * (3 * BV - 2 * GV) / (3 * BV + GV) + + res_data['BV'] = BV + res_data['GV'] = GV + res_data['EV'] = EV + res_data['uV'] = uV + ptr_data += "# Bulk Modulus BV = %.2f GPa\n" % BV + ptr_data += "# Shear Modulus GV = %.2f GPa\n" % GV + ptr_data += "# Youngs Modulus EV = %.2f GPa\n" % EV + ptr_data += "# Poission Ratio uV = %.2f " % uV + + with open(output_file, 'w') as fp: + json.dump(res_data, fp, indent=4) + + return res_data, ptr_data diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py new file mode 100644 index 000000000..8d779f575 --- /dev/null +++ b/dpgen/auto_test/Interstitial.py @@ -0,0 +1,140 @@ +from Property import Property +from refine import make_refine +import reproduce +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps +from pymatgen.core.structure import Structure +from pymatgen.analysis.defects.generators import InterstitialGenerator +import numpy as np +import os,json + + +class Interstitial(Property): + def __init__(self, + parameter): + self.parameter = parameter + default_supercell = [1, 1, 1] + self.supercell = parameter.get('supercell', default_supercell) + self.insert_ele = parameter['insert_ele'] + self.reprod = parameter.get('reprod-opt', False) + + def make_confs(self, + path_to_work, + path_to_equi, + refine=False): + path_to_work = os.path.abspath(path_to_work) + path_to_equi = os.path.abspath(path_to_equi) + task_list = [] + cwd = os.getcwd() + + print('gen interstitial with supercell ' + str(self.supercell) + ' with element ' + str(self.insert_ele)) + + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + # gen defects + dss = [] + for ii in self.insert_ele: + vds = InterstitialGenerator(ss, ii) + for jj in vds: + temp = jj.generate_defect_structure(self.supercell) + smallest_distance = list(set(temp.distance_matrix.ravel()))[1] + if 'conf_filters' in self.parameter and 'min_dist' in self.parameter['conf_filters']: + min_dist = self.parameter['conf_filters']['min_dist'] + if smallest_distance >= min_dist: + dss.append(temp) + else: + dss.append(temp) + # dss.append(jj.generate_defect_structure(self.supercell)) + + if refine: + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(dss)) + for ii in task_list: + os.chdir(ii) + np.savetxt('supercell.out', self.supercell, fmt='%d') + os.chdir(cwd) + + if self.reprod: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + task_list = reproduce.make_repro(vasp_path,path_to_work) + os.chdir(cwd) + + else: + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + + for ii in range(len(dss)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + dss[ii].to('POSCAR', 'POSCAR') + np.savetxt('supercell.out', self.supercell, fmt='%d') + os.chdir(cwd) + + return task_list + + def task_type(self): + return self.parameter['type'] + + def task_param(self): + return self.parameter + + def _compute_lower(self, + output_file, + all_tasks, + all_res): + output_file = os.path.abspath(output_file) + res_data = {} + ptr_data = os.path.dirname(output_file) + '\n' + + + if not self.reprod: + ptr_data += "Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n" + for ii in all_tasks: + with open(os.path.join(ii, 'inter.json')) as fp: + idata = json.load(fp) + inter_type = idata['type'] + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + structure_dir = os.path.basename(ii) + + if inter_type == 'vasp': + equi_outcar = os.path.join(equi_path, 'OUTCAR') + equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) + + elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: + equi_log = os.path.join(equi_path, 'log.lammps') + equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) + + else: + raise RuntimeError('interaction type not supported') + + natoms = len(all_res[ii]['force']) / 3 + epa = all_res[ii]['energy'] / natoms + evac = epa * natoms - equi_epa * natoms + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms) + res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] + + else: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + + with open(output_file, 'w') as fp: + json.dump(res_data, fp, indent=4) + + return res_data, ptr_data diff --git a/dpgen/auto_test/MEAM_LMP.py b/dpgen/auto_test/MEAM_LMP.py new file mode 100644 index 000000000..31366abbb --- /dev/null +++ b/dpgen/auto_test/MEAM_LMP.py @@ -0,0 +1,159 @@ +import os +import warnings +import json +from Task import Task +import dpdata +import dpgen.auto_test.lib.lammps as lammps + + +class MEAM_LMP(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.model = list(map(os.path.abspath,(inter_parameter['model']))) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def make_potential_files(self, + output_dir): + model_lib = os.path.basename(self.model[0]) + model_file = os.path.basename(self.model[1]) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_lib): + link_lib = os.readlink(model_lib) + if not os.path.abspath(link_lib) == self.model[0]: + os.remove(model_lib) + os.symlink(os.path.relpath(self.model[0]), model_lib) + else: + os.symlink(os.path.relpath(self.model[0]), model_lib) + + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model[1]: + os.remove(model_file) + os.symlink(os.path.relpath(self.model[1]), model_file) + else: + os.symlink(os.path.relpath(self.model[1]), model_file) + + os.chdir(cwd) + + with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: + json.dump(self.inter, fp, indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + with open(os.path.join(output_dir, 'task.json'), 'w') as fp: + json.dump(task_param, fp, indent=4) + # lines in lammps.in related to model + # line_model = "pair_style meam \n" + # line_model += "pair_coeff * * %s " % (os.path.basename(self.model[0])) + # for ii in self.type_map: + # line_model += ii + ' ' + # line_model += "%s " % (os.path.basename(self.model[1])) + # for ii in self.type_map: + # line_model += ii + ' ' + # line_model += '\n' + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + model_name = list(map(os.path.basename,self.model)) + + model_param = {'model_name': model_name, + 'param_type': self.type_map} + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_meam, model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_meam, model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_meam, model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial'): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_meam, + model_param, B0, bp, etol, ftol, maxiter, maxeval) + + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_meam, model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump') + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms))} + return result_dict + + def forward_files(self): + return ['conf.lmp', 'in.lammps', list(map(os.path.basename,self.model))] + + def forward_common_files(self): + return ['in.lammps', list(map(os.path.basename,self.model))] + + def backward_files(self): + return ['log.lammps', 'meam.out', 'dump.relax'] diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index f6dea9561..ee19d5c63 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -1,5 +1,6 @@ import os,glob,json from abc import ABC,abstractmethod +from common import make_task class Property (ABC) : @abstractmethod @@ -63,9 +64,9 @@ def compute(self, print_file, path_to_work): """ - Postprocess the finished tasks to compute the property. + Postprocess the finished tasks to compute the property. Output the result to a json database - + Parameters ---------- output_file: @@ -75,9 +76,9 @@ def compute(self, path_to_work: The working directory where the computational tasks locate. """ - path_to_work = os.path.abs_path(path_to_work) - task_dirs = os.path.join(path_to_work, 'task.[0-9]*[0-9]') - task_dirs.sort() + path_to_work = os.path.abspath(path_to_work) + task_dirs = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) + task_dirs.sort() all_res = [] for ii in task_dirs: with open(os.path.join(ii, 'inter.json')) as fp: @@ -86,11 +87,15 @@ def compute(self, task = make_task(idata, poscar) res = task.compute(ii) all_res.append(res) - res, ptr = self.cmpt(task_dirs, all_res) - with open(output_file, 'w') as fp: - json.dump(fp, res, indent=4) + + cwd = os.getcwd() + os.chdir(path_to_work) + res, ptr = self._compute_lower(output_file, task_dirs, all_res) + # with open(output_file, 'w') as fp: + # json.dump(fp, res, indent=4) with open(print_file, 'w') as fp: fp.write(ptr) + os.chdir(cwd) @abstractmethod diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py new file mode 100644 index 000000000..399e8e91d --- /dev/null +++ b/dpgen/auto_test/Surface.py @@ -0,0 +1,145 @@ +from Property import Property +from refine import make_refine +import reproduce +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps +from pymatgen.core.structure import Structure +from pymatgen.core.surface import generate_all_slabs +import numpy as np +import os,json + + +class Surface(Property): + def __init__(self, + parameter): + self.parameter = parameter + self.min_slab_size = parameter['min_slab_size'] + self.min_vacuum_size = parameter['min_vacuum_size'] + self.pert_xz = parameter['pert_xz'] + default_max_miller = 2 + self.miller = parameter.get('max_miller', default_max_miller) + self.static = parameter.get('static-opt', False) + self.relax = parameter.get('change_box', False) + self.reprod = parameter.get('reprod-opt', False) + + def make_confs(self, + path_to_work, + path_to_equi, + refine=False): + path_to_work = os.path.abspath(path_to_work) + path_to_equi = os.path.abspath(path_to_equi) + task_list = [] + cwd = os.getcwd() + + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + ptypes = vasp.get_poscar_types(equi_contcar) + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + # gen structure + ss = Structure.from_file(equi_contcar) + # gen slabs + all_slabs = generate_all_slabs(ss, self.max_miller, self.min_slab_size, self.min_vacuum_size) + + + if refine: + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(all_slabs)) + # record miller + for ii in range(len(task_list)): + os.chdir(task_list[ii]) + np.savetxt('miller.out', all_slabs[ii].miller_index, fmt='%d') + os.chdir(cwd) + + if self.reprod: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + task_list = reproduce.make_repro(vasp_path, path_to_work) + os.chdir(cwd) + + else: + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + for ii in range(len(all_slabs)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + print("# %03d generate " % ii, output_task, " \t %d atoms" % len(all_slabs[ii].sites)) + # make confs + all_slabs[ii].to('POSCAR', 'POSCAR.tmp') + vasp.regulate_poscar('POSCAR.tmp', 'POSCAR') + vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) + vasp.perturb_xz('POSCAR', 'POSCAR', self.pert_xz) + # record miller + np.savetxt('miller.out', all_slabs[ii].miller_index, fmt='%d') + os.chdir(cwd) + + return task_list + + def task_type(self): + return self.parameter['type'] + + def task_param(self): + return self.parameter + + def _compute_lower(self, + output_file, + all_tasks, + all_res): + output_file = os.path.abspath(output_file) + res_data = {} + ptr_data = os.path.dirname(output_file) + '\n' + + if not self.reprod: + ptr_data += "Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n" + for ii in all_tasks: + with open(os.path.join(ii, 'inter.json')) as fp: + idata = json.load(fp) + inter_type = idata['type'] + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + structure_dir = os.path.basename(ii) + if inter_type == 'vasp': + equi_outcar = os.path.join(equi_path, 'OUTCAR') + equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) + outcar = os.path.join(ii, 'OUTCAR') + natoms, epa, vpa = vasp.get_nev(outcar) + if self.static: + e0 = np.array(vasp.get_energies(outcar)) / natoms + epa = e0[0] + boxes = vasp.get_boxes(outcar) + AA = np.linalg.norm(np.cross(boxes[0][0], boxes[0][1])) + + elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: + equi_log = os.path.join(equi_path, 'log.lammps') + equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) + lmp_log = os.path.join(ii, 'log.lammps') + natoms, epa, vpa = lammps.get_nev(lmp_log) + AA = lammps.get_base_area(lmp_log) + + else: + raise RuntimeError('interaction type not supported') + + Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 + evac = (epa * natoms - equi_epa * natoms) / AA * Cf + ptr_data += "%s: \t%7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa) + res_data[structure_dir] = [evac, epa, equi_epa] + + else: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_path, all_tasks, ptr_data) + + with open(output_file, 'w') as fp: + json.dump(res_data, fp, indent=4) + + return res_data, ptr_data diff --git a/dpgen/auto_test/Task.py b/dpgen/auto_test/Task.py index 197dc0c77..69e0700a6 100644 --- a/dpgen/auto_test/Task.py +++ b/dpgen/auto_test/Task.py @@ -3,7 +3,7 @@ class Task(ABC): @abstractmethod def __init__ (self, - inter_paramter, + inter_parameter, path_to_poscar) : """ Constructor diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py new file mode 100644 index 000000000..0bf1134b1 --- /dev/null +++ b/dpgen/auto_test/VASP.py @@ -0,0 +1,170 @@ +import os +import json +import warnings +from Task import Task +from dpgen.generator.lib.vasp import incar_upper +from pymatgen.io.vasp import Incar, Kpoints +from dpgen import dlog +import dpgen.auto_test.lib.vasp as vasp + + +class VASP(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.incar = inter_parameter['incar'] + self.potcars = inter_parameter['potcars'] + default_potcar_prefix = '' + self.potcar_prefix = inter_parameter.get('potcar_prefix',default_potcar_prefix) + self.path_to_poscar = path_to_poscar + + def make_potential_files(self, + output_dir): + with open(os.path.join(output_dir, 'POTCAR'), 'w') as fp: + for ii in self.potcars: + with open(os.path.join(self.potcar_prefix, self.potcars[ii]), 'r') as fin: + for line in fin: + print(line.strip('\n'), file=fp) + + with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: + json.dump(self.inter, fp, indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + with open(os.path.join(output_dir, 'task.json'), 'w') as fp: + json.dump(task_param, fp, indent=4) + + assert (os.path.exists(self.incar)), 'no INCAR file for relaxation' + relax_incar_path = os.path.abspath(self.incar) + incar = incar_upper(Incar.from_file(relax_incar_path)) + + if 'ISIF' in incar: + isif = incar.get('ISIF') + else: + isif = 3 + + if 'NSW' in incar: + nsw = incar.get('NSW') + else: + nsw = 200 + + try: + kspacing = incar.get('KSPACING') + except KeyError: + raise RuntimeError("KSPACING must be given in INCAR") + + if 'KGAMMA' in incar: + kgamma = incar.get('KGAMMA') + else: + kgamma = False + + + if task_type in ['relaxation', 'vacancy', 'interstitial']: + isif = 3 + + if task_type == 'static': + nsw = 0 + + if task_type == 'eos': + if 'change_box' in task_param and not task_param['change_box']: + isif = 2 + else: + isif = 4 + + if task_type == 'elastic': + isif = 2 + + if task_type == 'surface': + if 'static-opt' in task_param and task_param['static-opt']: + nsw = 0 + elif 'change_box' in task_param and task_param['change_box']: + isif = 4 + else: + isif = 2 + + if not ('ISIF' in incar and incar.get('ISIF') == isif): + dlog.info("%s:%s setting ISIF to %d" % (__file__, self.make_input_file.__name__, isif)) + incar['ISIF'] = isif + + if not ('NSW' in incar and incar.get('NSW') == nsw): + dlog.info("%s:%s setting NSW to %d" % (__file__, self.make_input_file.__name__, nsw)) + incar['NSW'] = nsw + + + if 'ediff' in task_param: + dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['ediff'])) + incar['EDIFF'] = task_param['ediff'] + + if 'ediffg' in task_param: + dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['ediffg'])) + incar['EDIFFG'] = task_param['ediffg'] + + if 'encut' in task_param: + dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['encut'])) + incar['ENCUT'] = task_param['encut'] + + if 'kspacing' in task_param: + dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['kspacing'])) + incar['KSPACING'] = task_param['kspacing'] + + if 'kgamma' in task_param: + dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['kgamma'])) + incar['KGAMMA'] = task_param['kgamma'] + + fc = incar.get_string() + # write incar + with open(os.path.join(output_dir, 'INCAR'), 'w') as fp: + fp.write(fc) + + ret = vasp.make_kspacing_kpoints(self.path_to_poscar, kspacing, kgamma) + kp = Kpoints.from_string(ret) + kp.write_file(os.path.join(output_dir, "KPOINTS")) + + def compute(self, + output_dir): + outcar = os.path.join(output_dir, 'OUTCAR') + if not os.path.isfile(outcar): + warnings.warn("cannot find OUTCAR in " + output_dir + " skip") + return None + else: + force = [] + position = [] + energy = [] + with open(outcar, 'r') as fp: + if 'Elapsed time (sec):' not in fp.read(): + warnings.warn("incomplete job " + outcar+ " skip") + return None + else: + fp.seek(0) + for line in fp: + if 'TOTAL-FORCE' in line: + position.append([]) + force.append([]) + fp.readline() + while True: + ss = fp.readline().split() + if len(ss) != 6: + break + position[-1].append(float(ss[0])) + force[-1].append(float(ss[3])) + position[-1].append(float(ss[1])) + force[-1].append(float(ss[4])) + position[-1].append(float(ss[2])) + force[-1].append(float(ss[5])) + elif 'free energy TOTEN' in line: + energy.append(float(line.split()[4])) + if len(force) > 0 and len(energy) > 0: + result_dict = {"energy": energy[-1], "force": force[-1]} + return result_dict + + def forward_files(self): + return ['INCAR', 'POSCAR', 'POTCAR'] + + def forward_common_files(self): + return ['INCAR', 'POTCAR'] + + def backward_files(self): + return ['OUTCAR', 'VASP.out', 'CONTCAR', 'OSZICAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py new file mode 100644 index 000000000..a6e0f98ec --- /dev/null +++ b/dpgen/auto_test/Vacancy.py @@ -0,0 +1,127 @@ +from Property import Property +from refine import make_refine +import reproduce +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps +from pymatgen.core.structure import Structure +from pymatgen.analysis.defects.generators import VacancyGenerator +import numpy as np +import os,json + + +class Vacancy (Property) : + def __init__ (self, + parameter) : + self.parameter = parameter + default_supercell = [1, 1, 1] + self.supercell = parameter.get('supercell', default_supercell) + self.reprod = parameter.get('reprod-opt', False) + + def make_confs(self, + path_to_work, + path_to_equi, + refine=False): + path_to_work = os.path.abspath(path_to_work) + path_to_equi = os.path.abspath(path_to_equi) + task_list = [] + cwd = os.getcwd() + + print('gen vacancy with supercell ' + str(self.supercell)) + + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + vds = VacancyGenerator(ss) + dss = [] + for jj in vds: + dss.append(jj.generate_defect_structure(self.supercell)) + + if refine: + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(dss)) + for ii in task_list: + os.chdir(ii) + np.savetxt('supercell.out', self.supercell, fmt='%d') + os.chdir(cwd) + + if self.reprod: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + task_list = reproduce.make_repro(vasp_path, path_to_work) + os.chdir(cwd) + + else: + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') +# task_poscar = os.path.join(output, 'POSCAR') + + for ii in range(len(dss)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + dss[ii].to('POSCAR', 'POSCAR') + np.savetxt('supercell.out', self.supercell, fmt='%d') + os.chdir(cwd) + return task_list + + def task_type(self): + return self.parameter['type'] + + def task_param(self): + return self.parameter + + def _compute_lower(self, + output_file, + all_tasks, + all_res): + output_file = os.path.abspath(output_file) + res_data = {} + ptr_data = os.path.dirname(output_file)+'\n' + + + if not self.reprod: + ptr_data += "Structure: \tVac_E(eV) E(eV) equi_E(eV)\n" + for ii in all_tasks: + with open(os.path.join(ii, 'inter.json')) as fp: + idata = json.load(fp) + inter_type = idata['type'] + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + structure_dir = os.path.basename(ii) + + if inter_type == 'vasp': + equi_outcar = os.path.join(equi_path, 'OUTCAR') + equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) + elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: + equi_log = os.path.join(equi_path, 'log.lammps') + equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) + + else: + raise RuntimeError('interaction type not supported') + + natoms = len(all_res[ii]['force']) / 3 + epa = all_res[ii]['energy'] / natoms + evac = epa * natoms - equi_epa * natoms + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms) + res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] + + else: + if 'vasp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_path for reproduction") + vasp_path = os.path.abspath(self.parameter['vasp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + + with open(output_file, 'w') as fp: + json.dump(res_data, fp, indent=4) + + return res_data, ptr_data diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py index 8ff62c437..c0ba841f7 100644 --- a/dpgen/auto_test/common.py +++ b/dpgen/auto_test/common.py @@ -2,9 +2,24 @@ from VASP import VASP from DEEPMD_LMP import DEEPMD_LMP from MEAM_LMP import MEAM_LMP +from EAM_FS_LMP import EAM_FS_LMP +from EAM_ALLOY_LMP import EAM_ALLOY_LMP +from EOS import EOS +from Elastic import Elastic +from Vacancy import Vacancy +from Interstitial import Interstitial +from Surface import Surface +import dpgen.auto_test.lib.crys as crys +import glob, warnings, json +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine +import dpgen.auto_test.lib.util as util +from dpgen.dispatcher.Dispatcher import make_dispatcher -def make_task(inter_parameter, - path_to_poscar) : +lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] + + +def make_task(inter_parameter, + path_to_poscar): """ Make an instance of Task """ @@ -15,10 +30,15 @@ def make_task(inter_parameter, return DEEPMD_LMP(inter_parameter, path_to_poscar) elif inter_type == 'meam': return MEAM_LMP(inter_parameter, path_to_poscar) + elif inter_type == 'eam_fs': + return EAM_FS_LMP(inter_parameter, path_to_poscar) + elif inter_type == 'eam_alloy': + return EAM_ALLOY_LMP(inter_parameter, path_to_poscar) else: - raise RuntimeError(f'unknow interaction {inter_type}') + raise RuntimeError(f'unknown interaction {inter_type}') -def make_task_trans_files(inter_parameter) : + +def make_task_trans_files(inter_parameter): """ Make the forward and backward file of an Task """ @@ -29,10 +49,15 @@ def make_task_trans_files(inter_parameter) : return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files elif inter_type == 'meam': return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files + elif inter_type == 'eam_fs': + return EAM_FS_LMP.forward_files, EAM_FS_LMP.forward_common_files, EAM_FS_LMP.backward_files + elif inter_type == 'eam_alloy': + return EAM_ALLOY_LMP.forward_files, EAM_ALLOY_LMP.forward_common_files, EAM_ALLOY_LMP.backward_files else: - raise RuntimeError(f'unknow interaction {inter_type}') + raise RuntimeError(f'unknown interaction {inter_type}') + -def make_property(paramters) : +def make_property(paramters): """ Make an instance of Property """ @@ -43,25 +68,70 @@ def make_property(paramters) : return Elastic(paramters) elif prop_type == 'vacancy': return Vacancy(paramters) + elif prop_type == 'interstitial': + return Interstitial(paramters) + elif prop_type == 'surface': + return Surface(paramters) else: - raise RuntimeError(f'unknow property type {prop_type}') + raise RuntimeError(f'unknown property type {prop_type}') -def make_equi(confs, + +def make_equi(confs, inter_param, relax_param): # find all POSCARs and their name like mp-xxx # ... + ele_list = [key for key in inter_param['type_map'].keys()] + conf_dirs = glob.glob(confs) + conf_dirs.sort() # generate a list of task names like mp-xxx/relaxation # ... - + cwd = os.getcwd() + # generate poscar for single element crystal + if len(ele_list) == 1: + for ii in conf_dirs: + os.chdir(ii) + crys_type = ii[3:] + if crys_type == 'fcc': + if not os.path.exists('POSCAR'): + crys.fcc(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'hcp': + if not os.path.exists('POSCAR'): + crys.hcp(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'dhcp': + if not os.path.exists('POSCAR'): + crys.dhcp(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'bcc': + if not os.path.exists('POSCAR'): + crys.bcc(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'diamond': + if not os.path.exists('POSCAR'): + crys.diamond(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'sc': + if not os.path.exists('POSCAR'): + crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') + os.chdir(cwd) + task_dirs = [] # make task directories like mp-xxx/relaxation # if mp-xxx/exists then print a warning and exit. # ... - - # copy POSCARs to mp-xxx/relaxation - # ... - + for ii in conf_dirs: + poscar = os.path.abspath(os.path.join(ii, 'POSCAR')) + if not os.path.exists(poscar): + raise FileNotFoundError('no configuration for autotest') + relax_dirs = os.path.abspath(os.path.join(ii, 'relaxation')) + if os.path.exists(relax_dirs): + warnings.warn('%s already exists' % relax_dirs) + else: + os.makedirs(relax_dirs) + task_dirs.append(relax_dirs) + os.chdir(relax_dirs) + # copy POSCARs to mp-xxx/relaxation + # ... + os.symlink(os.path.relpath(poscar), 'POSCAR') + os.chdir(cwd) + task_dirs.sort() # generate task files for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') @@ -70,23 +140,65 @@ def make_equi(confs, inter.make_input_file(ii, 'relaxation', relax_param) -def run_equi(confs, - inter_param): +def run_equi(confs, + inter_param, + mdata): # find all POSCARs and their name like mp-xxx # ... - + conf_dirs = glob.glob(confs) + conf_dirs.sort() # generate a list of task names like mp-xxx/relaxation # ... + work_path_list = [] + for ii in conf_dirs: + work_path_list.append(os.path.join(ii, 'relaxation')) + all_task = [] + for ii in work_path_list: + all_task.append(os.path.join(ii, '.')) + + inter_type = inter_param['type'] + # vasp + if inter_type == "vasp": + mdata = decide_fp_machine(mdata) + elif inter_type in lammps_task_type: + mdata = decide_model_devi_machine(mdata) + else: + raise RuntimeError("unknown task %s, something wrong" % task_type) # dispatch the tasks forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) - backward_files += logs + # backward_files += logs # ... + run_tasks = util.collect_task(all_task, inter_type) + if len(run_tasks) == 0: + return + else: + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + for ii in range(len(work_path_list)): + work_path = work_path_list[ii] + disp = make_dispatcher(machine, resources, work_path, run_tasks[ii], group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks[ii], + group_size, + forward_common_files, + forward_files, + backward_files, + outlog=inter_type + '.out', + errlog=inter_type + '.err') -def post_equi(confs): +def post_equi(confs, inter_param): # find all POSCARs and their name like mp-xxx # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() + task_dirs = [] + for ii in conf_dirs: + task_dirs.append(os.path.abspath(os.path.join(ii, 'relaxation'))) + task_dirs.sort() # generate a list of task names like mp-xxx/relaxation # ... @@ -97,70 +209,128 @@ def post_equi(confs): inter = make_task(inter_param, poscar) res = inter.compute(ii) with open(os.path.join(ii, 'result.json'), 'w') as fp: - json.dump(fp, res, indent=4) - - -def make_property(confs, + json.dump(res, fp, indent=4) + + +def make_property(confs, inter_param, property_list): # find all POSCARs and their name like mp-xxx # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() for ii in conf_dirs: for jj in property_list: + if 'init_from_suffix' and 'output_suffix' in jj: + do_refine = True + suffix = jj['output_suffix'] + else: + do_refine = False + suffix = 0 # generate working directory like mp-xxx/eos_00 if jj['type'] == 'eos' # handel the exception that the working directory exists # ... - + # determine the suffix: from scratch or refine # ... - + property_type = jj['type'] path_to_equi = os.path.join(ii, 'relaxation') path_to_work = os.path.join(ii, property_type + '_' + suffix) - + + if os.path.exists(path_to_work): + warnings.warn('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) + prop = make_property(jj) task_list = prop.make_confs(path_to_work, path_to_equi, do_refine) - + for kk in task_list: - poscar = os.path.join(kk, 'POSCAR') + poscar = os.path.join(kk, 'POSCAR') inter = make_task(inter_param, poscar) inter.make_potential_files(kk) inter.make_input_file(kk, prop.task_type, prop.task.pararm) -def run_property(confs, - inter_param, - property_list): +def run_property(confs, + inter_param, + property_list, + mdata): # find all POSCARs and their name like mp-xxx # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() task_list = [] + work_path_list = [] for ii in conf_dirs: for jj in property_list: # determine the suffix: from scratch or refine # ... + if 'init_from_suffix' and 'output_suffix' in jj: + suffix = jj['output_suffix'] + else: + suffix = 0 + property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) - + + work_path_list.append(path_to_work) tmp_task_list = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) tmp_task_list.sort() task_list.append(tmp_task_list) - + # dispatch the tasks forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) - backward_files += logs + # backward_files += logs # ... - pass + task_type = inter_param['type'] + # vasp + if task_type == "vasp": + mdata = decide_fp_machine(mdata) + elif task_type in lammps_task_type: + mdata = decide_model_devi_machine(mdata) + else: + raise RuntimeError("unknown task %s, something wrong" % task_type) -def post_property(confs, - inter_param, + for ii in range(len(work_path_list)): + work_path = work_path_list[ii] + all_task = task_list[ii] + run_tasks = util.collect_task(all_task, task_type) + if len(run_tasks) == 0: + return + else: + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, task_type) + disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks, + group_size, + forward_common_files, + forward_files, + backward_files, + outlog=task_type + '.out', + errlog=task_type + '.err') + + +def post_property(confs, + # inter_param, property_list): # find all POSCARs and their name like mp-xxx # ... - task_list = [] + # task_list = [] + conf_dirs = glob.glob(confs) + conf_dirs.sort() for ii in conf_dirs: for jj in property_list: # determine the suffix: from scratch or refine # ... + if 'init_from_suffix' and 'output_suffix' in jj: + suffix = jj['output_suffix'] + else: + suffix = 0 property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) prop = make_property(jj) diff --git a/dpgen/auto_test/lib/lammps.py b/dpgen/auto_test/lib/lammps.py index aafc35e21..5c0650a7f 100644 --- a/dpgen/auto_test/lib/lammps.py +++ b/dpgen/auto_test/lib/lammps.py @@ -125,6 +125,26 @@ def inter_meam(param) : ret += line return ret +def inter_eam_fs(param) : #06/08 eam.fs interaction + ret = "" + line = "pair_style eam/fs \n" + line += "pair_coeff * * %s " % param['model_name'] + for ii in param['param_type']: + line += ii + ' ' + line += '\n' + ret += line + return ret + +def inter_eam_alloy(param) : #06/08 eam.alloy interaction + ret = "" + line = "pair_style eam/alloy \n" + line += "pair_coeff * * %s " % param['model_name'] + for ii in param['param_type']: + line += ii + ' ' + line += '\n' + ret += line + return ret + def make_lammps_eval(conf, ntypes, interaction, param) : """ make lammps input for equilibritation @@ -144,6 +164,7 @@ def make_lammps_eval(conf, ntypes, interaction, param) : ret += "compute mype all pe\n" ret += "thermo 100\n" ret += "thermo_style custom step pe pxx pyy pzz pxy pxz pyz lx ly lz vol c_mype\n" + ret += "dump 1 all custom 100 dump.relax id type xs ys zs fx fy fz\n" #06/09 give dump.relax ret += "run 0\n" ret += "variable N equal count(all)\n" ret += "variable V equal vol\n" diff --git a/dpgen/auto_test/lib/util.py b/dpgen/auto_test/lib/util.py index 06fd27208..316d33e13 100644 --- a/dpgen/auto_test/lib/util.py +++ b/dpgen/auto_test/lib/util.py @@ -6,7 +6,7 @@ from dpgen.auto_test.lib import lammps from dpgen.auto_test.lib.utils import cmd_append_log -lammps_task_type=['deepmd','meam','eam'] +lammps_task_type=['deepmd','meam','eam_fs','eam_alloy'] # 06/13 revised def voigt_to_stress(inpt) : ret = np.zeros((3,3)) diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py new file mode 100644 index 000000000..0e401c03f --- /dev/null +++ b/dpgen/auto_test/refine.py @@ -0,0 +1,35 @@ +import os,re,glob + +def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): + init_from = re.sub(output_suffix, init_from_suffix, path_to_work) + if not os.path.exists(init_from): + raise FileNotFoundError("the init_from directory not existed for refine") + + output = path_to_work + init_from_task_tot = glob.glob(os.path.join(init_from, 'task.[0-9]*[0-9]')) + + if not len(init_from_task_tot) == task_num: + raise RuntimeError("refine tasks not equal to init") + + task_list = [] + for ii in range(task_num): + output_task = os.path.join(output, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + init_from_task = os.path.join(init_from, 'task.%06d' % ii) + if not os.path.exists(init_from_task): + raise FileNotFoundError("the init_from_task directory not existed for refine") + contcar = os.path.join(init_from_task, 'CONTCAR') + init_poscar = os.path.join(init_from_task, 'POSCAR') + if os.path.exists(contcar): + os.symlink(os.path.relpath(contcar), 'POSCAR') + elif os.path.exists(init_poscar): + os.symlink(os.path.relpath(init_poscar), 'POSCAR') + else: + raise FileNotFoundError("no CONTCAR or POSCAR in the init_from directory") + + return task_list diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py new file mode 100644 index 000000000..1f9ae6717 --- /dev/null +++ b/dpgen/auto_test/reproduce.py @@ -0,0 +1,99 @@ +import os,glob,warnings +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps +import numpy as np + +def make_repro(vasp_path, path_to_work): + if not os.path.exists(vasp_path): + raise RuntimeError("please do VASP calcualtions first") + vasp_task = glob.glob(os.path.join(vasp_path, 'task.[0-9]*[0-9]')) + assert len(vasp_task) > 0, "Please do VASP calcualtions first" + vasp_task.sort() + task_num = 0 + task_list = [] + for ii in vasp_task: + # get vasp energy + outcar = os.path.join(ii, 'OUTCAR') + energies = vasp.get_energies(outcar) + # get xdat + xdatcar = os.path.join(ii, 'XDATCAR') + os.chdir(path_to_work) + if os.path.exists('XDATCAR'): + os.remove('XDATCAR') + os.symlink(os.path.relpath(xdatcar), 'XDATCAR') + xdat_lines = open('XDATCAR', 'r').read().split('\n') + natoms = vasp.poscar_natoms('XDATCAR') + xdat_secsize = natoms + 8 + xdat_nframes = len(xdat_lines) // xdat_secsize + if xdat_nframes > len(energies): + warnings.warn('nframes %d in xdatcar is larger than energy %d, use the last %d frames' % ( + xdat_nframes, len(energies), len(energies))) + xdat_nlines = -1 * len(energies) * xdat_secsize # 06/12 revised + xdat_lines = xdat_lines[xdat_nlines:] + xdat_nframes = len(xdat_lines) // xdat_secsize + print(xdat_nframes, len(energies)) + + # loop over frames + for jj in range(xdat_nframes): + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + task_num += 1 + task_list.append(output_task) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + # clear dir + for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(kk): + os.remove(kk) + # make conf + with open('POSCAR', 'w') as fp: + fp.write('\n'.join(xdat_lines[jj * xdat_secsize:(jj + 1) * xdat_secsize])) + + return task_list + +def post_repro(vasp_path, all_tasks, ptr_data): + ptr_data += "Reproduce: VASP_path DFT_E(eV/atom) LMP_E(eV/atom) Difference(eV/atom)\n" + vasp_task = glob.glob(os.path.join(vasp_path, 'task.[0-9]*[0-9]')) + assert len(vasp_task) > 0, "Please do VASP calcualtions first" + vasp_task.sort() + vasp_ener_tot = [] + lmp_ener_tot = [] + res_data = {} + for ii in vasp_task: + # compute vasp + outcar = os.path.join(ii, 'OUTCAR') + vasp_ener = np.array(vasp.get_energies(outcar)) + vasp_ener_file = os.path.join(ii, 'ener.vasp.out') + # compute reprod + lmp_ener = [] + + if len(all_tasks) < (len(vasp_ener_tot) + len(vasp_ener)): + raise RuntimeError ("lammps tasks reproduced not equal to vasp") + + natoms = 1 + for jj in range(len(vasp_ener_tot),(len(vasp_ener_tot) + len(vasp_ener))): #all_tasks[len(vasp_ener_tot):(len(vasp_ener_tot) + len(vasp_ener))]: + log_lmp = os.path.join(all_tasks[jj], 'log.lammps') + if not os.path.exists(log_lmp): + raise RuntimeError("lammps reproduce not finished") + natoms, epa, vpa = lammps.get_nev(log_lmp) + lmp_ener.append(epa) + lmp_ener_tot.append(epa) + vasp_epa = list(vasp_ener)[jj-len(vasp_ener_tot)] / natoms + ptr_data += '%s %7.3f %7.3f %7.3f\n' % (vasp_task[ii], vasp_epa, + epa, epa-vasp_epa) + lmp_ener = np.array(lmp_ener) + lmp_ener = np.reshape(lmp_ener, [-1, 1]) + vasp_ener_tot += list(vasp_ener) + vasp_ener = np.reshape(vasp_ener, [-1, 1]) / natoms + error_start = 1 + lmp_ener -= lmp_ener[-1] - vasp_ener[-1] + diff = lmp_ener - vasp_ener + diff = diff[error_start:] + error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) + res_data[ii] = {'nframes': len(vasp_ener), 'error': error} + np.savetxt(vasp_ener_file, vasp_ener[error_start:]) + if not len(vasp_ener_tot) == len(lmp_ener_tot): + raise RuntimeError("lammps tasks reproduced not equal to vasp") +# for ii in range(len(lmp_ener_tot)): +# ptr_data += '%7.3f %7.3f %7.3f\n' % (vasp_ener_tot[ii], lmp_ener_tot[ii], +# lmp_ener_tot[ii] - vasp_ener_tot[ii]) + return res_data, ptr_data diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 9c5380893..300383efe 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,788 +1,74 @@ #!/usr/bin/env python3 -""" -init: crystal configuration -task: - 00.equi - 01.eos - 02.elastic - 03.vacancy - 04.interstitial - 05.surf - 06.phonon -""" - - -import sys -import os, re, argparse, filecmp, json, glob -import dpgen.auto_test.lib.util as util -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -import random +import argparse, json import logging -import warnings -import shutil -import time -import numpy as np -import subprocess as sp -from dpgen.auto_test.lib.utils import make_iter_name -from dpgen.auto_test.lib.utils import create_path -from dpgen.auto_test.lib.utils import copy_file_list -from dpgen.auto_test.lib.utils import replace -from dpgen.dispatcher.Dispatcher import make_dispatcher -from dpgen.auto_test.lib.utils import log_iter -from dpgen.auto_test.lib.utils import record_iter -from dpgen.auto_test.lib.utils import log_iter -from dpgen.auto_test.lib.pwscf import make_pwscf_input -from dpgen.auto_test.lib.siesta import make_siesta_input -from dpgen.auto_test import gen_00_equi,cmpt_00_equi -from dpgen.auto_test import gen_01_eos,cmpt_01_eos -from dpgen.auto_test import gen_02_elastic,cmpt_02_elastic -from dpgen.auto_test import gen_03_vacancy,cmpt_03_vacancy -from dpgen.auto_test import gen_04_interstitial,cmpt_04_interstitial -from dpgen.auto_test import gen_05_surf,cmpt_05_surf -from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine -#from dpgen.auto_test import gen_06_phonon,cmpt_06_phonon -from dpgen.auto_test import gen_confs -import requests -from hashlib import sha1 - -lammps_task_type=['deepmd','meam','eam'] - -def gen_equi(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - cwd=os.getcwd() - #vasp - if task_type=="vasp": - gen_00_equi.make_vasp(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type: - gen_00_equi.make_lammps (jdata, conf_dir,task_type) - else : - raise RuntimeError ("unknow task %s, something wrong" % task_type) - os.chdir(cwd) - -def run_equi(task_type,jdata,mdata): - #rmprint("This module has been run !") - - work_path=util.make_work_path(jdata,'00.equi',False,False,False) - all_task = glob.glob(os.path.join(work_path,'.')) - - #vasp - if task_type=="vasp": - mdata=decide_fp_machine(mdata) - - forward_files = ['INCAR', 'POTCAR', 'KPOINTS'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - backward_files = ['OUTCAR', task_type+'.out' , 'CONTCAR','OSZICAR'] - common_files=['POSCAR'] - - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - - forward_files = ['conf.lmp', 'lammps.in'] - backward_files = ['dump.relax','log.lammps', task_type+'.out'] - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - common_files = model_name - - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] - - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - #debug# - #print(' '.join(common_files)) - #print(' '.join(forward_files)) - #print(' '.join(backward_files)) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - - -def cmpt_equi(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - cmpt_shift=jdata['alloy_shift'] - #vasp - if task_type=="vasp": - n, e, v, s = cmpt_00_equi.comput_vasp_nev(jdata, conf_dir,cmpt_shift) - #lammps - elif task_type in lammps_task_type: - n, e, v, s = cmpt_00_equi.comput_lmp_nev(conf_dir, task_type,cmpt_shift) - else : - raise RuntimeError ("unknow task %s, something wrong" % task_type) - if cmpt_shift: - print('conf_dir:\t EpA(eV) VpA(A^3) ener_shift(eV)') - print("%s\t %8.4f %7.3f %8.4f" % (conf_dir, e, v, s)) - else: - print('conf_dir:\t EpA(eV) VpA(A^3)') - print("%s\t %8.4f %7.3f " % (conf_dir, e, v)) - -def gen_eos(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - fix_shape = True - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_01_eos.make_vasp(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type: - if fix_shape : - gen_01_eos.make_lammps_fixv(jdata, conf_dir,task_type) - else : - gen_01_eos.make_lammps(jdata, conf_dir,task_type) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def run_eos(task_type,jdata,mdata): - work_path=util.make_work_path(jdata,'01.eos',False,False,False) - - all_task = glob.glob(os.path.join(work_path, "vol-*")) - all_task.sort() - - #vasp - if task_type=="vasp": - mdata=decide_fp_machine(mdata) - - forward_files = ['INCAR', 'POSCAR','POTCAR','KPOINTS'] - backward_files = ['OUTCAR', task_type+'.out' , 'OSZICAR'] - common_files=['INCAR','POTCAR'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - forward_files = ['conf.lmp', 'lammps.in']+model_name - backward_files = ['log.lammps', task_type+'.out'] - common_files=['lammps.in']+model_name - - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] - - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - -def cmpt_eos(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - #vasp - if task_type == "vasp": - cmpt_01_eos.comput_vasp_eos(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type: - cmpt_01_eos.comput_lmp_eos(jdata, conf_dir, task_type) - else : - raise RuntimeError("unknow task ", task_type) - -def gen_elastic(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_02_elastic.make_vasp(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type: - gen_02_elastic.make_lammps (jdata, conf_dir,task_type) - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - os.chdir(cwd) - -def run_elastic(task_type,jdata,mdata): - work_path=util.make_work_path(jdata,'02.elastic',False,False,False) - - all_task = glob.glob(os.path.join(work_path, "dfm-*")) - all_task.sort() - - #vasp - if task_type == "vasp": - mdata=decide_fp_machine(mdata) - - forward_files = ['INCAR', 'POSCAR','POTCAR','KPOINTS'] - backward_files = ['OUTCAR', task_type+'.out' , 'CONTCAR','OSZICAR'] - common_files=['INCAR','POTCAR','KPOINTS'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - forward_files = ['conf.lmp', 'lammps.in','strain.out']+model_name - backward_files = ['log.lammps', task_type+'.out'] - common_files=['lammps.in']+model_name - - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] - - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - -def cmpt_elastic(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - if task_type == "vasp": - cmpt_02_elastic.cmpt_vasp(jdata, conf_dir) - elif task_type in lammps_task_type: - cmpt_02_elastic.cmpt_deepmd_lammps(jdata, conf_dir, task_type) - else : - raise RuntimeError ("unknow task %s, something wrong" % task_type) +from dpgen.auto_test import common -def gen_vacancy(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - supercell=jdata['supercell'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_03_vacancy.make_vasp(jdata, conf_dir, supercell) - #deepmd - elif task_type in lammps_task_type: - gen_03_vacancy.make_lammps(jdata, conf_dir, task_type, supercell) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) +lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] -def run_vacancy(task_type,jdata,mdata): - work_path=util.make_work_path(jdata,'03.vacancy',False,False,False) - all_task = glob.glob(os.path.join(work_path,'struct-*')) +def run_task(step, json_file, machine_file=''): + with open(json_file, 'r') as fp: + jdata = json.load(fp) - #vasp - if task_type == "vasp": - mdata=decide_fp_machine(mdata) + confs = jdata['structures'] + inter_parameter = jdata['interaction'] - forward_files = ['INCAR', 'POSCAR','POTCAR','KPOINTS'] - backward_files = ['OUTCAR', task_type+'.out' , 'OSZICAR'] - common_files=['INCAR','POTCAR'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') + if step == 'make' and 'relaxation' in jdata: + relax_param = jdata['relaxation'] + common.make_equi(confs, inter_parameter, relax_param) - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) + elif step == 'make' and 'properties' in jdata: + property_list = jdata['properties'] + common.make_property(confs, inter_parameter, property_list) - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - common_files = model_name - forward_files = ['conf.lmp', 'lammps.in']+model_name - backward_files = ['log.lammps',task_type+'.out'] - common_files=['lammps.in']+model_name + elif step == 'run' and 'relaxation' in jdata: + with open(machine_file, 'r') as fp: + mdata = json.load(fp) + common.run_equi(confs, inter_parameter, mdata) - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] + elif step == 'run' and 'properties' in jdata: + with open(machine_file, 'r') as fp: + mdata = json.load(fp) + property_list = jdata['properties'] + common.run_property(confs, inter_parameter, property_list, mdata) - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - -def cmpt_vacancy(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - supercell=jdata['supercell'] - #vasp - if task_type == "vasp": - cmpt_03_vacancy.cmpt_vasp(jdata, conf_dir, supercell) - #lammps - elif task_type in lammps_task_type: - cmpt_03_vacancy.cmpt_deepmd_lammps(jdata, conf_dir, supercell, task_type) - else : - raise RuntimeError("unknow task ", task_type) - -def gen_interstitial(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - supercell=jdata['supercell'] - insert_ele=jdata['insert_ele'] - reprod_opt=jdata['reprod-opt'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_04_interstitial.make_vasp(jdata, conf_dir, supercell, insert_ele) - #lammps - elif task_type in lammps_task_type: - if not reprod_opt: - gen_04_interstitial.make_lammps(jdata, conf_dir, supercell, insert_ele, task_type) - else : - gen_04_interstitial.make_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_type) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def run_interstitial(task_type,jdata,mdata): - - reprod_opt=jdata['reprod-opt'] - work_path=util.make_work_path(jdata,'04.interstitial',reprod_opt,False,False) - all_task = glob.glob(os.path.join(work_path,'struct-*')) - - #vasp - if task_type == "vasp": - mdata=decide_fp_machine(mdata) - - forward_files = ['INCAR', 'POSCAR','POTCAR',"KPOINTS"] - backward_files = ['OUTCAR', task_type+'.out' , 'XDATCAR','OSZICAR'] - common_files=['INCAR'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - - if reprod_opt: - all_frame=[] - for ii in all_task: - all_frame+=(glob.glob(os.path.join(ii,'frame.*'))) - work_path = all_task - all_task = all_frame - - run_tasks_ = [] - for ii in all_task: - fres = os.path.join(ii, 'log.lammps') - if os.path.isfile(fres) : - if not lammps.check_finished(fres): - run_tasks_.append(ii) - else : - run_tasks_.append(ii) + elif step == 'post' and 'relaxation' in jdata: + common.post_equi(confs, inter_parameter) - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - forward_files = ['conf.lmp', 'lammps.in']+model_name - backward_files = ['log.lammps', task_type+'.out'] - common_files=['lammps.in']+model_name + elif step == 'post' and 'properties' in jdata: + property_list = jdata['properties'] + common.post_property(confs, property_list) - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] - - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - if reprod_opt: - for ii in work_path: - run_tasks=[] - for jj in run_tasks_: - if ii in jj: - run_tasks.append(os.path.basename(jj)) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - ii, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') else: - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - -def cmpt_interstitial(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - supercell=jdata['supercell'] - insert_ele=jdata['insert_ele'] - reprod_opt=jdata['reprod-opt'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - cmpt_04_interstitial.cmpt_vasp(jdata, conf_dir, supercell, insert_ele) - #lammps - elif task_type in lammps_task_type: - if not reprod_opt: - cmpt_04_interstitial.cmpt_deepmd_lammps(jdata, conf_dir, supercell, insert_ele, task_type) - else : - task_name=task_type+'-reprod' - cmpt_04_interstitial.cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_name) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def gen_surf(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - max_miller=jdata['max_miller'] - relax_box=jdata['relax_box'] - static=jdata['static-opt'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_05_surf.make_vasp(jdata, conf_dir, max_miller, static = static, relax_box = relax_box) - #lammps - elif task_type in lammps_task_type : - gen_05_surf.make_lammps(jdata, conf_dir, max_miller, static = static, relax_box = relax_box, task_type = task_type) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def run_surf(task_type,jdata,mdata): - static=jdata['static-opt'] - work_path=util.make_work_path(jdata,'05.surf',False,static,False) - - all_task = glob.glob(os.path.join(work_path,'struct-*')) - - #vasp - if task_type == "vasp": - mdata=decide_fp_machine(mdata) - - forward_files = ['INCAR', 'POSCAR','POTCAR','KPOINTS'] - backward_files = ['OUTCAR', task_type+'.out' , 'OSZICAR'] - common_files=['INCAR','POTCAR'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - - #lammps - elif task_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - forward_files = ['conf.lmp', 'lammps.in']+model_name - backward_files = ['log.lammps',task_type+'.out'] - common_files=['lammps.in']+model_name + raise RuntimeError('unknown tasks') - if len(model_name)>1 and task_type == 'deepmd': - backward_files = backward_files + ['model_devi.out'] - - else: - raise RuntimeError ("unknow task %s, something wrong" % task_type) - - run_tasks = util.collect_task(all_task,task_type) - if len(run_tasks)==0: return - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - -def cmpt_surf(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - static_opt=jdata['static-opt'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - cmpt_05_surf.cmpt_vasp(jdata, conf_dir, static = static_opt) - #lammps - elif task_type in lammps_task_type : - if static_opt: - task_name =task_type+'-static' - else: - task_name =task_type - cmpt_05_surf.cmpt_deepmd_lammps(jdata, conf_dir, task_name, static = static_opt) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def gen_phonon(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - gen_06_phonon.make_vasp(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type: - gen_06_phonon.make_lammps(jdata, conf_dir, task_type) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def run_phonon(task_type,jdata,mdata): - user= ('user_incar' in jdata.keys()) - work_path=util.make_work_path(jdata,'06.phonon',False,False,user) - - all_task = glob.glob(os.path.join(work_path,'.')) - - #vasp - if task_type == "vasp": - mdata=decide_fp_machine(mdata) - machine,resources,command,group_size=util.get_machine_info(mdata,task_type) - - run_tasks = util.collect_task(all_task,task_type) - forward_files = ['INCAR', 'POTCAR','KPOINTS','KPOINTS'] - backward_files = ['OUTCAR', task_type+'.out' , 'OSZICAR','vasprun.xml'] - common_files=['POSCAR'] - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - mdata['fp_resources']['cvasp'] = True - forward_files.append('cvasp.py') - - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - common_files, - forward_files, - backward_files, - outlog=task_type+'.out', - errlog=task_type+'.err') - #lammps - elif task_type in lammps_task_type: - None - else: - raise RuntimeError ("unknown task %s, something wrong" % task_type) - -def cmpt_phonon(task_type,jdata,mdata): - conf_dir=jdata['conf_dir'] - cwd=os.getcwd() - #vasp - if task_type == "vasp": - cmpt_06_phonon.cmpt_vasp(jdata, conf_dir) - #lammps - elif task_type in lammps_task_type : - cmpt_06_phonon.cmpt_lammps(jdata,conf_dir, task_type) - else : - raise RuntimeError("unknow task ", task_type) - os.chdir(cwd) - -def run_task (json_file, machine_file) : - with open (json_file, 'r') as fp : - jdata = json.load (fp) - with open (machine_file, 'r') as fp: - mdata = json.load (fp) - - record = "record.auto_test" - - confs = jdata['conf_dir'] - ele_list=[key for key in jdata['potcar_map'].keys()] - key_id = jdata['key_id'] - - ii = jdata['task_type'] - jj=jdata['task'] - task_list=['equi','eos','elastic','vacancy','interstitial','surf','phonon'] - - if isinstance(jj,str): - if jj=='all': - all_task_list=task_list.copy() - else: - try: - assert jj in task_list - except AssertionError: - raise RuntimeError ("unknow task %s, something wrong" % jj) - all_task_list=[jj] - elif isinstance(jj,list): - try: - assert set(jj).issubset(set(task_list)) - except AssertionError: - raise RuntimeError ("unknow task %s, some tasks may not supported" % ' '.join(jj)) - all_task_list=jj.copy() - else: - raise RuntimeError ('unknow format for task, it must be a string or list') - - task_type_list=['vasp']+lammps_task_type - #if jj not in task_list : - # raise RuntimeError ("unknow task %s, something wrong" % jj) - if ii not in task_type_list : - raise RuntimeError ("unknow task type %s, something wrong" % ii) - - #gen_configuration - if 'confs' in confs and (not os.path.exists(confs+'/POSCAR')) : - print('generate %s' % (ele_list)) - if len(ele_list) == 1 : - gen_confs.gen_element(ele_list[0],key_id) - else : - gen_confs.gen_alloy(ele_list,key_id) - #default task - log_iter ("gen_equi", ii, "equi") - gen_equi (ii, jdata, mdata) - log_iter ("run_equi", ii, "equi") - run_equi (ii, jdata, mdata) - log_iter ("cmpt_equi", ii,"equi") - cmpt_equi (ii, jdata, mdata) - for jj in all_task_list: - if jj == "eos": - log_iter ("gen_eos", ii, "eos") - gen_eos (ii, jdata, mdata) - log_iter ("run_eos", ii, "eos") - run_eos (ii, jdata, mdata) - log_iter ("cmpt_eos", ii, "eos") - cmpt_eos (ii, jdata, mdata) - if jj=="elastic": - log_iter ("gen_elastic", ii, "elastic") - gen_elastic (ii, jdata, mdata) - log_iter ("run_elastic", ii, "elastic") - run_elastic (ii, jdata, mdata) - log_iter ("cmpt_elastic", ii, "elastic") - cmpt_elastic (ii, jdata, mdata) - if jj=="vacancy": - log_iter ("gen_vacancy", ii, "vacancy") - gen_vacancy (ii, jdata, mdata) - log_iter ("run_vacancy", ii, "vacancy") - run_vacancy (ii, jdata, mdata) - log_iter ("cmpt_vacancy", ii, "vacancy") - cmpt_vacancy (ii, jdata, mdata) - if jj=="interstitial": - log_iter ("gen_interstitial", ii, "interstitial") - gen_interstitial (ii, jdata, mdata) - log_iter ("run_interstitial", ii, "interstitial") - run_interstitial (ii, jdata, mdata) - log_iter ("cmpt_interstitial", ii, "interstitial") - cmpt_interstitial (ii, jdata, mdata) - if jj=="surf": - log_iter ("gen_surf", ii, "surf") - gen_surf (ii, jdata, mdata) - log_iter ("run_surf", ii, "surf") - run_surf (ii, jdata, mdata) - log_iter ("cmpt_surf", ii, "surf") - cmpt_surf (ii, jdata, mdata) - ''' - if jj=="phonon": - log_iter ("gen_phonon", ii, "phonon") - gen_phonon (ii, jdata, mdata) - log_iter ("run_phonon", ii, "phonon") - run_phonon (ii, jdata, mdata) - log_iter ("cmpt_phonon", ii, "phonon") - cmpt_phonon (ii, jdata, mdata) - ''' - record_iter (record, confs, ii, jj) def gen_test(args): - logging.info ("start auto-testing") - run_task (args.PARAM, args.MACHINE) - logging.info ("finished!") + logging.info("start auto-testing") + run_task(args.STEP, args.PARAM, args.MACHINE) + logging.info("finished!") -def _main () : +def _main(): parser = argparse.ArgumentParser() + parser.add_argument("STEP", type=str, + help="Make or run or post") parser.add_argument("PARAM", type=str, help="The parameters of the generator") parser.add_argument("MACHINE", type=str, - help="The settings of the machine running the generator") + help="The settings of the machine running the generator", + default=None) args = parser.parse_args() - logging.basicConfig (level=logging.INFO, format='%(asctime)s %(message)s') + logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s') # logging.basicConfig (filename="compute_string.log", filemode="a", level=logging.INFO, format='%(asctime)s %(message)s') logging.getLogger("paramiko").setLevel(logging.WARNING) - logging.info ("start auto-testing") - run_task (args.PARAM, args.MACHINE) - logging.info ("finished!") + logging.info("start auto-testing") + run_task(args.STEP, args.PARAM, args.MACHINE) + logging.info("finished!") + if __name__ == '__main__': _main() From 86153c4d36e2a5cf1cc9c5127423f6d10a0a93a6 Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+TongqiWen@users.noreply.github.com> Date: Mon, 15 Jun 2020 17:36:35 +0800 Subject: [PATCH 006/154] Delete .DS_Store --- dpgen/auto_test/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dpgen/auto_test/.DS_Store diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store deleted file mode 100644 index c89e774cacd25f10cf287d56efc543f02ca81e24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2GIp6h5adFf)L?g(97X#f1V=D7gF-OQEve7E37v;%SpdL9LEiyT0{{|T9NAK;Zc@0PUpJJpz*0eo6c27LV>ub>UCrcf7#$iy z20{ix20{ix20{k@4-C+r&5N|azAwCC9WoFya9c9K*M}%w9OD5_3-p%`s{A7WAwL56 zh1!fa2%`bU1DqB}9x5n82}LLdM+_9E2olR2>(aF7yv4&{V?mbgevb1{Rj+V|-qZ4N*&rLn_lE?^yRRJpJ zW%%-JdX_uZCO%J;y_m^~^u8{oCo4_uBk{eI~_nTbi+gYdm03 zfH`KgQ<%$8zPM~vWc{YCvBu^D?bnvyQOOi#Wp(eE>6#hK=-1q=Ve6(n++8$vZ)AXo zvOV*(Y2;gfCzb>E|^(T$RHg4^5j2Gzo>sP$VYKufulNbs23?~!HZrXHl(6rswl-IC1oZcED; zR$yw{OQx>gF~MeFY`IUOr*G)XI-{eMk1Nb-qD_+6l_7rbBbw_S%NaJ^-p?+oc1Th` z_q6J|p-Xk~&0@BF2I}H5(UWN>QDHmnSchN`49LL*JOxj~Gw=$$376m*;Yl3AG-^1E zIXr`T^za;>$H(w-d=j6>SMfD`9pAvW@LhZlFXIRJA%2Em;CJEy%SvKBD*B}wzo%C4 zE|OS-Z)s&iHxp~*;Qbx{kyyW3#uZw%VrBKJwRM}f?Ywt?>&zt1o44yF(@TpQ|Lk#!Nqg(JEfBAX(tjI=Gf^^vU# zD<|d3{^0FOEW#F%NQHNo(x|WsQnBzhDa{eKnDi>VEy@9f0e{bgTaIi}Xo>pA+PeT3 z;WB&#pOEIhgdgB1_yztXy~$XKt4VFO7{Rr8H`e18Y`|@}2b)NF`*1%V#11@!he>@Y z?7?2_#{tZufv0fq`)WeS$vLE_yVc$0$!Y_xz3W>1mdMx&5b4V zw&mEvWGN|h?%=R@YcWtR(y8I+|APyE|G%}84zmdv2pO2e09Ldo+Y@A3XxZmy?I>NR z=;DQsn-=JYP~{)T3H{?Z;mjX~)Q-|n9up66S|C}d{OcbA)Nudzi5KjL`~NH%w^i$J DqCM8o From 3ce682e5cbb3972a9b86491b80d77af414a84478 Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+TongqiWen@users.noreply.github.com> Date: Mon, 15 Jun 2020 17:37:05 +0800 Subject: [PATCH 007/154] Delete .DS_Store --- .DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index f76a96d989843ca98f71d9e654666aa8037324f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMTWl0n82-OfU}gY2+@wQTTqq!yQWp!@0+ppLLV*Ti3vIbAvpYjOaXPc?%(g(O zsZrDzqw$g$uQ9|oNPN;L@zD!JV`3!UqCV)0k4B@3Px_xZvp|8G_@WZ#Bob`wDpEh$swP!Wo-$QYG)0@C9qJnJhr2>EEC;P- z>3|sRF~fm;-0${%_j2FN?{n{1l$ST?&H>~TEHA8z%_o)tvD((e96>$uyrcKzt6s?1xurlsS^;E9tXr$!%qQLYN{$v`#N ztn#JtOLT*wHu;I7>V?V@zp5-z)utI8J9cV0ebx}qe0MQ)d@tB%mjaeKy(Zw*b`*SX zPstYco`Ua|2fZMt&n%d3q3oKWy~TCAoRfCY8`{T1(c2&RrLZk>>~%O+=yJMV4($7F z4seF-b`A@4sAs3oO)XxwDzk3G=Jrc7ZmZEXZT6g=At!M1uH9z_1>3V6uYd2bV}%3z z87wb!jyiTpRcFHO_RK;1((UtVbz{Dj)RrR3z0p3v=sx_`vRNdO^ znt9ueRZY#T+SxNC(TtTX_bNR5`rd*+ILPY>q}ph0QxyHeVe#x;W)SW!+8#eXT3y=M zrYL>FvcJJb~x%3SPx)cpY!z9lVS4cpo3&Q+$qZoAshrHv)d~HE$FEh(Neuc-9*AH z`Xpwr8aX#;nUp@6i7Ks)+B!|IW+qE(leQtHPhrkVYm2s7(@DH*(yXSIX?#@uWB#3? zvvi(5q>q_*U(omTBmGQ&Fy~a%U>-AWK2lhSJFx;QQIFMFk0xf{Mr^`XY{Pc!Uh2i+<4v%b(K8V z_xf2|Ve0sRWOQ>QFiB3oR^h`YoR(6@_m>0Qrn(Gm+ zq6oh+DWec>qI8^Pl#a8!{D&d;)9fl@vauYKk~LiZ^$!8b{V#zhO78!NfwyM!7k8-K AlmGw# From 9dc7fdba0eac9bc3c686006f82619e780fe53877 Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+TongqiWen@users.noreply.github.com> Date: Mon, 15 Jun 2020 17:37:26 +0800 Subject: [PATCH 008/154] Delete .DS_Store --- dpgen/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dpgen/.DS_Store diff --git a/dpgen/.DS_Store b/dpgen/.DS_Store deleted file mode 100644 index cd2d8c0a9aa2777c0c8892de6b575e8daacdb9a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMTWl0n82-OfU}m^<3WZ(<$VwxZP;e_!?y|jswGz;6X}K=5I|EFd&eWaREv3}d zsL=-l@sb#CFT}SJeZm;ylUInw#MpR?8WZ1qGQJt(|E#BxGP=}wUDg!svbGZaKmXTMZrPRK}^ zvhEmb-g9(l^wikt@kd{h z(INgqP|bDGzC3-XZcy%&p;o~XV zF9r5PHaj?FyNlfd9qQ!VMN5~jSd-qcWk=W4y!kb{rY)=+C_90ZckTUVP_RAA@s9V8 zI97P#0E6a*&N0U>s%kCVKF=Jor}V}34UJ8PA#JYsR8|=*<()@LPB^MJE6S8Uzh>St zBc&a(cn7kBvtMK`5ki?&YddzepE)dM-x zs;xKrT{CaHs&2{Wv}v1+fwDwW)qCaSR&Bd6Sn!92IFx{+Xpz$yqr*5Np8S9rgnNc< zPweU<>o~gZlws@_x^~MFds3P+tK`W?2sCHXa-{MN(@5+1KDmz$@vl_FG)m9V89Ga^ z(Cc)b-lBKuW4cI}=u`TfzNH`OXZn?Xr$6XV`U?scVKExeh~-#^yO73a+>0G(M+bVb z7Y`zfJ{(2?7LMUKhH(<37{h5ii8DBh=kPpU#U#$-4ZMlB@gCmC2lx=5;R}2xH&|66 z?ru4*wD_KT)4Zch-1r@>Ix-z`o4R-I`k#pV&0N9O+64>i7AUHOM zHK8IFNt#6Tsn8=j$ZI$`713H-vb4hEE6kQm?`QVeClx^mxz z6T8sEOzcBH_F)hQA|~3*L3wRCZFnJySdMeD566dGq zUpZU!T;Ds++6r^8bxcOLHUcx`_8LU~-+lAn|8MOelHDZ;BnbQ~1W?_T?dsqqZuS`$ zxps={QLds0y9p^H7jA@!n2*wNmY4r9 Date: Thu, 18 Jun 2020 17:58:19 +0800 Subject: [PATCH 009/154] add some parameters for SSHSession --- dpgen/dispatcher/SSHContext.py | 49 +++++++++++++++++++++++----------- dpgen/remote/RemoteJob.py | 32 +++++++++++++++++----- 2 files changed, 60 insertions(+), 21 deletions(-) diff --git a/dpgen/dispatcher/SSHContext.py b/dpgen/dispatcher/SSHContext.py index a6ac3c1d4..b13733de7 100644 --- a/dpgen/dispatcher/SSHContext.py +++ b/dpgen/dispatcher/SSHContext.py @@ -16,12 +16,24 @@ def __init__ (self, jdata) : self.remote_password = None if 'password' in self.remote_profile : self.remote_password = self.remote_profile['password'] + self.local_key_filename = None + if 'key_filename' in self.remote_profile: + self.local_key_filename = self.remote_profile['key_filename'] + self.remote_timeout = None + if 'timeout' in self.remote_profile: + self.remote_timeout = self.remote_profile['timeout'] + self.local_key_passphrase = None + if 'passphrase' in self.remote_profile: + self.local_key_passphrase = self.remote_profile['passphrase'] self.remote_workpath = self.remote_profile['work_path'] self.ssh = None - self._setup_ssh(self.remote_host, - self.remote_port, - username=self.remote_uname, - password=self.remote_password) + self.ssh = self._setup_ssh(hostname=self.remote_host, + port=self.remote_port, + username=self.remote_uname, + password=self.remote_password, + key_filename=self.local_key_filename, + timeout=self.remote_timeout, + passphrase=self.local_key_passphrase) def ensure_alive(self, max_check = 10, @@ -32,12 +44,15 @@ def ensure_alive(self, raise RuntimeError('cannot connect ssh after %d failures at interval %d s' % (max_check, sleep_time)) dlog.info('connection check failed, try to reconnect to ' + self.remote_host) - self._setup_ssh(self.remote_host, - self.remote_port, - username=self.remote_uname, - password=self.remote_password) + self.ssh = self._setup_ssh(hostname=self.remote_host, + port=self.remote_port, + username=self.remote_uname, + password=self.remote_password, + key_filename=self.local_key_filename, + timeout=self.remote_timeout, + passphrase=self.local_key_passphrase) count += 1 - time.sleep(sleep) + time.sleep(sleep_time) def _check_alive(self): if self.ssh == None: @@ -51,13 +66,17 @@ def _check_alive(self): def _setup_ssh(self, hostname, - port, - username = None, - password = None): - self.ssh = paramiko.SSHClient() - # ssh_client.load_system_host_keys() + port=22, + username=None, + password=None, + key_filename=None, + timeout=None, + passphrase=None): + self.ssh = paramiko.SSHClient() + # ssh_client.load_system_host_keys() self.ssh.set_missing_host_key_policy(paramiko.WarningPolicy) - self.ssh.connect(hostname, port=port, username=username, password=password) + self.ssh.connect(hostname, port, username, password, + key_filename, timeout, passphrase) assert(self.ssh.get_transport().is_active()) transport = self.ssh.get_transport() transport.set_keepalive(60) diff --git a/dpgen/remote/RemoteJob.py b/dpgen/remote/RemoteJob.py index 2450b59f5..057eb3d3e 100644 --- a/dpgen/remote/RemoteJob.py +++ b/dpgen/remote/RemoteJob.py @@ -108,18 +108,38 @@ def __init__ (self, jdata) : self.remote_password = None if 'password' in self.remote_profile : self.remote_password = self.remote_profile['password'] + self.local_key_filename = None + if 'key_filename' in self.remote_profile: + self.local_key_filename = self.remote_profile['key_filename'] + self.remote_timeout = None + if 'timeout' in self.remote_profile: + self.remote_timeout = self.remote_profile['timeout'] + self.local_key_passphrase = None + if 'passphrase' in self.remote_profile: + self.local_key_passphrase = self.remote_profile['passphrase'] self.remote_workpath = self.remote_profile['work_path'] - self.ssh = self._setup_ssh(self.remote_host, self.remote_port, username = self.remote_uname,password=self.remote_password) + self.ssh = self._setup_ssh(hostname=self.remote_host, + port=self.remote_port, + username=self.remote_uname, + password=self.remote_password, + key_filename=self.local_key_filename, + timeout=self.remote_timeout, + passphrase=self.local_key_passphrase) def _setup_ssh(self, hostname, - port, - username = None, - password = None): - ssh_client = paramiko.SSHClient() + port=22, + username=None, + password=None, + key_filename=None, + timeout=None, + passphrase=None + ): + ssh_client = paramiko.SSHClient() ssh_client.load_system_host_keys() ssh_client.set_missing_host_key_policy(paramiko.WarningPolicy) - ssh_client.connect(hostname, port=port, username=username, password=password) + ssh_client.connect(hostname, port, username, password, + key_filename, timeout, passphrase) assert(ssh_client.get_transport().is_active()) return ssh_client From 846c616959243f1f4bf9d1d5ff6d7c0696096411 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Fri, 19 Jun 2020 22:47:36 +0800 Subject: [PATCH 010/154] refine on 19th --- dpgen/auto_test/EOS.py | 24 +-- dpgen/auto_test/Elastic.py | 2 +- dpgen/auto_test/Interstitial.py | 16 +- dpgen/auto_test/Surface.py | 26 ++-- dpgen/auto_test/Task.py | 1 - dpgen/auto_test/VASP.py | 12 +- dpgen/auto_test/Vacancy.py | 16 +- dpgen/auto_test/common.py | 29 ++-- dpgen/auto_test/refine.py | 4 +- dpgen/auto_test/reproduce.py | 253 +++++++++++++++++++++----------- 10 files changed, 243 insertions(+), 140 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index c56c525de..df7832462 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -28,13 +28,13 @@ def make_confs(self, task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work, - (self.vol_end-self.vol_start)/self.vol_step) + (self.vol_end - self.vol_start) / self.vol_step) os.chdir(cwd) if self.reprod: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - task_list = reproduce.make_repro(vasp_path, path_to_work) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: equi_contcar = os.path.join(path_to_equi, 'CONTCAR') @@ -69,19 +69,19 @@ def _compute_lower(self, all_res): output_file = os.path.abspath(output_file) res_data = {} - ptr_data = "output_file\n" + ptr_data = "conf_dir: " + os.path.dirname(output_file) + "\n" if not self.reprod: ptr_data += ' VpA(A^3) EpA(eV)\n' for ii in range(len(all_tasks)): vol = self.vol_start + ii * self.vol_step - res_data[vol] = all_res[ii]['energy'] - ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy']) + res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) * 3 + ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force']) * 3) else: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_lmp_path, all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 90168cfd1..9cb1bed2e 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -96,7 +96,7 @@ def _compute_lower(self, all_res): output_file = os.path.abspath(output_file) res_data = {} - ptr_data = output_file + '\n' + ptr_data = os.path.dirname(output_file) + '\n' equi_stress = Stress(np.loadtxt(os.path.join(os.path.dirname(output_file), 'equi.stress.out'))) lst_strain = [] lst_stress = [] diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 8d779f575..0fe2c304e 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -60,10 +60,10 @@ def make_confs(self, os.chdir(cwd) if self.reprod: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - task_list = reproduce.make_repro(vasp_path,path_to_work) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + task_list = reproduce.make_repro(vasp_lmp_path,path_to_work) os.chdir(cwd) else: @@ -129,10 +129,10 @@ def _compute_lower(self, res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_lmp_path,all_tasks,ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 399e8e91d..c38a54acf 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -53,10 +53,10 @@ def make_confs(self, os.chdir(cwd) if self.reprod: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - task_list = reproduce.make_repro(vasp_path, path_to_work) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: @@ -99,6 +99,7 @@ def _compute_lower(self, res_data = {} ptr_data = os.path.dirname(output_file) + '\n' + if not self.reprod: ptr_data += "Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n" for ii in all_tasks: @@ -130,14 +131,19 @@ def _compute_lower(self, Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 evac = (epa * natoms - equi_epa * natoms) / AA * Cf - ptr_data += "%s: \t%7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa) - res_data[structure_dir] = [evac, epa, equi_epa] + miller_index = [] + with open(os.path.join(ii,'miller.out'),'r') as fin: + ss = int(fin.readline().split()[0]) + miller_index.append(ss) + + ptr_data += "%s: \t%7.3f %8.3f %8.3f\n" % (miller_index, evac, epa, equi_epa) + res_data[miller_index] = [evac, epa, equi_epa] else: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_path, all_tasks, ptr_data) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_lmp_path, all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Task.py b/dpgen/auto_test/Task.py index 69e0700a6..bd4cae3fa 100644 --- a/dpgen/auto_test/Task.py +++ b/dpgen/auto_test/Task.py @@ -113,4 +113,3 @@ def backward_files(self): Return backward files. """ pass - diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 0bf1134b1..e3ade8101 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -65,8 +65,6 @@ def make_input_file(self, if task_type in ['relaxation', 'vacancy', 'interstitial']: isif = 3 - if task_type == 'static': - nsw = 0 if task_type == 'eos': if 'change_box' in task_param and not task_param['change_box']: @@ -85,6 +83,10 @@ def make_input_file(self, else: isif = 2 + if task_type == 'static' \ + or ('reprod_opt' in task_param and task_param['reprod_opt']): + nsw = 0 + if not ('ISIF' in incar and incar.get('ISIF') == isif): dlog.info("%s:%s setting ISIF to %d" % (__file__, self.make_input_file.__name__, isif)) incar['ISIF'] = isif @@ -156,9 +158,9 @@ def compute(self, force[-1].append(float(ss[5])) elif 'free energy TOTEN' in line: energy.append(float(line.split()[4])) - if len(force) > 0 and len(energy) > 0: - result_dict = {"energy": energy[-1], "force": force[-1]} - return result_dict + if len(force) > 0 and len(energy) > 0: + result_dict = {"energy": energy[-1], "force": force[-1]} + return result_dict def forward_files(self): return ['INCAR', 'POSCAR', 'POTCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index a6e0f98ec..702b09ccc 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -49,10 +49,10 @@ def make_confs(self, os.chdir(cwd) if self.reprod: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - task_list = reproduce.make_repro(vasp_path, path_to_work) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: @@ -116,10 +116,10 @@ def _compute_lower(self, res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: - if 'vasp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_path for reproduction") - vasp_path = os.path.abspath(self.parameter['vasp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_path,all_tasks,ptr_data) + if 'vasp_lmp_path' not in self.parameter: + raise RuntimeError("please provide the vasp_lmp_path for reproduction") + vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) + res_data, ptr_data = reproduce.post_repro(vasp_lmp_path,all_tasks,ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py index c0ba841f7..943681e20 100644 --- a/dpgen/auto_test/common.py +++ b/dpgen/auto_test/common.py @@ -151,7 +151,7 @@ def run_equi(confs, # ... work_path_list = [] for ii in conf_dirs: - work_path_list.append(os.path.join(ii, 'relaxation')) + work_path_list.append(os.path.abspath(os.path.join(ii, 'relaxation'))) all_task = [] for ii in work_path_list: all_task.append(os.path.join(ii, '.')) @@ -163,7 +163,7 @@ def run_equi(confs, elif inter_type in lammps_task_type: mdata = decide_model_devi_machine(mdata) else: - raise RuntimeError("unknown task %s, something wrong" % task_type) + raise RuntimeError("unknown task %s, something wrong" % inter_type) # dispatch the tasks forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) @@ -224,9 +224,12 @@ def make_property(confs, if 'init_from_suffix' and 'output_suffix' in jj: do_refine = True suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + do_refine = False + suffix = 'reprod' else: do_refine = False - suffix = 0 + suffix = '00' # generate working directory like mp-xxx/eos_00 if jj['type'] == 'eos' # handel the exception that the working directory exists # ... @@ -269,6 +272,8 @@ def run_property(confs, # ... if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + suffix = 'reprod' else: suffix = 0 @@ -284,24 +289,24 @@ def run_property(confs, forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) # backward_files += logs # ... - task_type = inter_param['type'] + inter_type = inter_param['type'] # vasp - if task_type == "vasp": + if inter_type == "vasp": mdata = decide_fp_machine(mdata) - elif task_type in lammps_task_type: + elif inter_type in lammps_task_type: mdata = decide_model_devi_machine(mdata) else: - raise RuntimeError("unknown task %s, something wrong" % task_type) + raise RuntimeError("unknown task %s, something wrong" % inter_type) for ii in range(len(work_path_list)): work_path = work_path_list[ii] all_task = task_list[ii] - run_tasks = util.collect_task(all_task, task_type) + run_tasks = util.collect_task(all_task, inter_type) if len(run_tasks) == 0: return else: run_tasks = [os.path.basename(ii) for ii in all_task] - machine, resources, command, group_size = util.get_machine_info(mdata, task_type) + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) disp.run_jobs(resources, command, @@ -311,8 +316,8 @@ def run_property(confs, forward_common_files, forward_files, backward_files, - outlog=task_type + '.out', - errlog=task_type + '.err') + outlog=inter_type + '.out', + errlog=inter_type + '.err') def post_property(confs, @@ -329,6 +334,8 @@ def post_property(confs, # ... if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + suffix = 'reprod' else: suffix = 0 property_type = jj['type'] diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index 0e401c03f..616b14089 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -3,7 +3,7 @@ def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): init_from = re.sub(output_suffix, init_from_suffix, path_to_work) if not os.path.exists(init_from): - raise FileNotFoundError("the init_from directory not existed for refine") + raise FileNotFoundError("the init_from directory does not exist for refine") output = path_to_work init_from_task_tot = glob.glob(os.path.join(init_from, 'task.[0-9]*[0-9]')) @@ -22,7 +22,7 @@ def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): task_list.append(output_task) init_from_task = os.path.join(init_from, 'task.%06d' % ii) if not os.path.exists(init_from_task): - raise FileNotFoundError("the init_from_task directory not existed for refine") + raise FileNotFoundError("the init_from_task directory does not exist for refine") contcar = os.path.join(init_from_task, 'CONTCAR') init_poscar = os.path.join(init_from_task, 'POSCAR') if os.path.exists(contcar): diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 1f9ae6717..503dcc821 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -1,99 +1,188 @@ -import os,glob,warnings +import os, glob, warnings import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps import numpy as np +import dpdata -def make_repro(vasp_path, path_to_work): - if not os.path.exists(vasp_path): - raise RuntimeError("please do VASP calcualtions first") - vasp_task = glob.glob(os.path.join(vasp_path, 'task.[0-9]*[0-9]')) - assert len(vasp_task) > 0, "Please do VASP calcualtions first" - vasp_task.sort() + +def make_repro(vasp_lmp_path, path_to_work): + if not os.path.exists(vasp_lmp_path): + raise RuntimeError("please do VASP or LAMMPS calcualtions first") + vasp_lmp_task = glob.glob(os.path.join(vasp_lmp_path, 'task.[0-9]*[0-9]')) + assert len(vasp_lmp_task) > 0, "Please do VASP or LAMMPS calculations first" + vasp_lmp_task.sort() task_num = 0 task_list = [] - for ii in vasp_task: - # get vasp energy + for ii in vasp_lmp_task: + # get vasp or lmp energy outcar = os.path.join(ii, 'OUTCAR') - energies = vasp.get_energies(outcar) - # get xdat - xdatcar = os.path.join(ii, 'XDATCAR') - os.chdir(path_to_work) - if os.path.exists('XDATCAR'): - os.remove('XDATCAR') - os.symlink(os.path.relpath(xdatcar), 'XDATCAR') - xdat_lines = open('XDATCAR', 'r').read().split('\n') - natoms = vasp.poscar_natoms('XDATCAR') - xdat_secsize = natoms + 8 - xdat_nframes = len(xdat_lines) // xdat_secsize - if xdat_nframes > len(energies): - warnings.warn('nframes %d in xdatcar is larger than energy %d, use the last %d frames' % ( - xdat_nframes, len(energies), len(energies))) - xdat_nlines = -1 * len(energies) * xdat_secsize # 06/12 revised - xdat_lines = xdat_lines[xdat_nlines:] - xdat_nframes = len(xdat_lines) // xdat_secsize - print(xdat_nframes, len(energies)) - - # loop over frames - for jj in range(xdat_nframes): - output_task = os.path.join(path_to_work, 'task.%06d' % task_num) - task_num += 1 - task_list.append(output_task) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - # clear dir - for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(kk): - os.remove(kk) - # make conf - with open('POSCAR', 'w') as fp: - fp.write('\n'.join(xdat_lines[jj * xdat_secsize:(jj + 1) * xdat_secsize])) + log_lmp = os.path.join(ii, 'log.lammps') + if os.path.exists(outcar): + energies = vasp.get_energies(outcar) + # get xdat + xdatcar = os.path.join(ii, 'XDATCAR') + os.chdir(path_to_work) + if os.path.exists('XDATCAR'): + os.remove('XDATCAR') + os.symlink(os.path.relpath(xdatcar), 'XDATCAR') + xdat_lines = open('XDATCAR', 'r').read().split('\n') + natoms = vasp.poscar_natoms('XDATCAR') + xdat_secsize = natoms + 8 + xdat_nframes = len(xdat_lines) // xdat_secsize + if xdat_nframes > len(energies): + warnings.warn('nframes %d in xdatcar is larger than energy %d, use the last %d frames' % ( + xdat_nframes, len(energies), len(energies))) + xdat_nlines = -1 * len(energies) * xdat_secsize # 06/12 revised + xdat_lines = xdat_lines[xdat_nlines:] + xdat_nframes = len(xdat_lines) // xdat_secsize + print(xdat_nframes, len(energies)) + + # loop over frames + for jj in range(xdat_nframes): + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + task_num += 1 + task_list.append(output_task) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + # clear dir + for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(kk): + os.remove(kk) + # make conf + with open('POSCAR', 'w') as fp: + fp.write('\n'.join(xdat_lines[jj * xdat_secsize:(jj + 1) * xdat_secsize])) + + elif os.path.exists(log_lmp): + # get dump + dump = os.path.join(ii, 'dump.relax') + if not os.path.exists(dump): + raise FileNotFoundError("the LAMMPS calculations should output the snapshots as dump.relax") + + energies = get_energy_fordump(dump, log_lmp) + + # loop over frames + for jj in range(len(energies)): + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + task_num += 1 + task_list.append(output_task) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + # clear dir + for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(kk): + os.remove(kk) + + # make conf + d_dump = dpdata.System(dump, fmt='lammps/dump') + d_dump.to('vasp/poscar', 'POSCAR', frame_idx=jj) return task_list -def post_repro(vasp_path, all_tasks, ptr_data): - ptr_data += "Reproduce: VASP_path DFT_E(eV/atom) LMP_E(eV/atom) Difference(eV/atom)\n" - vasp_task = glob.glob(os.path.join(vasp_path, 'task.[0-9]*[0-9]')) - assert len(vasp_task) > 0, "Please do VASP calcualtions first" - vasp_task.sort() + +def get_energy_fordump(dump, log_lmp): + dump = os.path.basename(dump) + with open(log_lmp, 'r') as fin: + lines = fin.read().split('\n') + for idx, jj in lines: + if dump == jj.split()[5]: + dump_freq = int(jj.split()[4]) + if 'Step PotEng' in jj: + step_idx = idx + if 'Loop time' in jj: + end_idx = idx + energies = [] + + for jj in lines[step_idx + 1, end_idx]: + step = int(jj.split()[0]) + if step % dump_freq == 0: + energies.append(float(jj.split()[1])) + + return energies + + +def post_repro(vasp_lmp_path, all_tasks, ptr_data): + ptr_data += "Reproduce: Initial_path DFT_E(eV/atom) LMP_E(eV/atom) Difference(eV/atom)\n" + vasp_lmp_task = glob.glob(os.path.join(vasp_lmp_path, 'task.[0-9]*[0-9]')) + assert len(vasp_lmp_task) > 0, "Please do VASP or LAMMPS calcualtions first" + vasp_lmp_task.sort() vasp_ener_tot = [] lmp_ener_tot = [] res_data = {} - for ii in vasp_task: - # compute vasp + + for ii in vasp_lmp_task: + # compute vasp or lammps outcar = os.path.join(ii, 'OUTCAR') - vasp_ener = np.array(vasp.get_energies(outcar)) - vasp_ener_file = os.path.join(ii, 'ener.vasp.out') - # compute reprod - lmp_ener = [] - - if len(all_tasks) < (len(vasp_ener_tot) + len(vasp_ener)): - raise RuntimeError ("lammps tasks reproduced not equal to vasp") - - natoms = 1 - for jj in range(len(vasp_ener_tot),(len(vasp_ener_tot) + len(vasp_ener))): #all_tasks[len(vasp_ener_tot):(len(vasp_ener_tot) + len(vasp_ener))]: - log_lmp = os.path.join(all_tasks[jj], 'log.lammps') - if not os.path.exists(log_lmp): - raise RuntimeError("lammps reproduce not finished") - natoms, epa, vpa = lammps.get_nev(log_lmp) - lmp_ener.append(epa) - lmp_ener_tot.append(epa) - vasp_epa = list(vasp_ener)[jj-len(vasp_ener_tot)] / natoms - ptr_data += '%s %7.3f %7.3f %7.3f\n' % (vasp_task[ii], vasp_epa, - epa, epa-vasp_epa) - lmp_ener = np.array(lmp_ener) - lmp_ener = np.reshape(lmp_ener, [-1, 1]) - vasp_ener_tot += list(vasp_ener) - vasp_ener = np.reshape(vasp_ener, [-1, 1]) / natoms - error_start = 1 - lmp_ener -= lmp_ener[-1] - vasp_ener[-1] - diff = lmp_ener - vasp_ener - diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) - res_data[ii] = {'nframes': len(vasp_ener), 'error': error} - np.savetxt(vasp_ener_file, vasp_ener[error_start:]) + loglammps = os.path.join(ii, 'log.lammps') + if os.path.exists(outcar): + vasp_ener = np.array(vasp.get_energies(outcar)) + vasp_ener_file = os.path.join(ii, 'ener.vasp.out') + # compute reprod + lmp_ener = [] + + if len(all_tasks) < (len(vasp_ener_tot) + len(vasp_ener)): + raise RuntimeError("lammps tasks reproduced not equal to vasp") + + natoms = 1 + for jj in range(len(vasp_ener_tot), (len(vasp_ener_tot) + len( + vasp_ener))): # all_tasks[len(vasp_ener_tot):(len(vasp_ener_tot) + len(vasp_ener))]: + log_lmp = os.path.join(all_tasks[jj], 'log.lammps') + if not os.path.exists(log_lmp): + raise RuntimeError("lammps reproduce not finished") + natoms, epa, vpa = lammps.get_nev(log_lmp) + lmp_ener.append(epa) + lmp_ener_tot.append(epa) + vasp_epa = list(vasp_ener)[jj - len(vasp_ener_tot)] / natoms + ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, vasp_epa, + epa, epa - vasp_epa) + lmp_ener = np.array(lmp_ener) + lmp_ener = np.reshape(lmp_ener, [-1, 1]) + vasp_ener_tot += list(vasp_ener) + vasp_ener = np.reshape(vasp_ener, [-1, 1]) / natoms + error_start = 1 + lmp_ener -= lmp_ener[-1] - vasp_ener[-1] + diff = lmp_ener - vasp_ener + diff = diff[error_start:] + error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)-1) # start from diff[1], so one element fewer + res_data[ii] = {'nframes': len(vasp_ener), 'error': error} + np.savetxt(vasp_ener_file, vasp_ener[error_start:]) + + elif os.path.exists(loglammps): + dump = os.path.join(ii, 'dump.relax') + lmp_ener = np.array(get_energy_fordump(dump, loglammps)) + lmp_ener_file = os.path.join(ii, 'ener.lammps.out') + # compute reprod + vasp_ener = [] + + if len(all_tasks) < (len(lmp_ener_tot) + len(lmp_ener)): + raise RuntimeError("vasp tasks reproduced not equal to lammps") + + for jj in range(len(lmp_ener_tot), (len(lmp_ener_tot) + len(lmp_ener))): + outcar = os.path.join(all_tasks[jj], 'OUTCAR') + if not os.path.exists(outcar): + raise RuntimeError("vasp reproduce not finished") + natoms, epa, vpa = vasp.get_nev(outcar) + vasp_ener.append(epa) + vasp_ener_tot.append(epa) + lmp_epa = list(lmp_ener)[jj - len(lmp_ener_tot)] / natoms + ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, epa, + lmp_epa, lmp_epa - epa) + + vasp_ener = np.array(vasp_ener) + vasp_ener = np.reshape(vasp_ener, [-1, 1]) + lmp_ener_tot += list(lmp_ener) + lmp_ener = np.reshape(lmp_ener, [-1, 1]) / natoms + # counting error from the first frame + error_start = 0 + lmp_ener -= lmp_ener[-1] - vasp_ener[-1] + diff = lmp_ener - vasp_ener + diff = diff[error_start:] + error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) + res_data[ii] = {'nframes': len(lmp_ener), 'error': error} + np.savetxt(lmp_ener_file, lmp_ener[error_start:]) + if not len(vasp_ener_tot) == len(lmp_ener_tot): raise RuntimeError("lammps tasks reproduced not equal to vasp") -# for ii in range(len(lmp_ener_tot)): -# ptr_data += '%7.3f %7.3f %7.3f\n' % (vasp_ener_tot[ii], lmp_ener_tot[ii], -# lmp_ener_tot[ii] - vasp_ener_tot[ii]) + # for ii in range(len(lmp_ener_tot)): + # ptr_data += '%7.3f %7.3f %7.3f\n' % (vasp_ener_tot[ii], lmp_ener_tot[ii], + # lmp_ener_tot[ii] - vasp_ener_tot[ii]) return res_data, ptr_data From b521218792911144e5f34f54628ab11c694bbcc3 Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 21 Jun 2020 17:37:33 +0800 Subject: [PATCH 011/154] add command line parser --- dpgen/auto_test/DEEPMD_LMP.py | 2 +- dpgen/auto_test/EAM_ALLOY_LMP.py | 2 +- dpgen/auto_test/EAM_FS_LMP.py | 2 +- dpgen/auto_test/EOS.py | 6 +- dpgen/auto_test/Elastic.py | 4 +- dpgen/auto_test/Interstitial.py | 10 +- dpgen/auto_test/MEAM_LMP.py | 2 +- dpgen/auto_test/Property.py | 2 +- dpgen/auto_test/Surface.py | 6 +- dpgen/auto_test/VASP.py | 11 +- dpgen/auto_test/Vacancy.py | 12 +- dpgen/auto_test/common.py | 344 ------------------------------- dpgen/auto_test/common_equi.py | 145 +++++++++++++ dpgen/auto_test/common_prop.py | 165 +++++++++++++++ dpgen/auto_test/common_task.py | 51 +++++ dpgen/auto_test/run.py | 40 +--- dpgen/main.py | 19 +- 17 files changed, 404 insertions(+), 419 deletions(-) delete mode 100644 dpgen/auto_test/common.py create mode 100644 dpgen/auto_test/common_equi.py create mode 100644 dpgen/auto_test/common_prop.py create mode 100644 dpgen/auto_test/common_task.py diff --git a/dpgen/auto_test/DEEPMD_LMP.py b/dpgen/auto_test/DEEPMD_LMP.py index 8d938efe2..0b7b9a0f1 100644 --- a/dpgen/auto_test/DEEPMD_LMP.py +++ b/dpgen/auto_test/DEEPMD_LMP.py @@ -1,9 +1,9 @@ import os import warnings import json -from Task import Task import dpdata import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.Task import Task class DEEPMD_LMP(Task): diff --git a/dpgen/auto_test/EAM_ALLOY_LMP.py b/dpgen/auto_test/EAM_ALLOY_LMP.py index d442f2f4a..9bf799682 100644 --- a/dpgen/auto_test/EAM_ALLOY_LMP.py +++ b/dpgen/auto_test/EAM_ALLOY_LMP.py @@ -1,9 +1,9 @@ import os import warnings import json -from Task import Task import dpdata import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.Task import Task class EAM_ALLOY_LMP(Task): diff --git a/dpgen/auto_test/EAM_FS_LMP.py b/dpgen/auto_test/EAM_FS_LMP.py index e5a1ef9e9..f40ad446b 100644 --- a/dpgen/auto_test/EAM_FS_LMP.py +++ b/dpgen/auto_test/EAM_FS_LMP.py @@ -1,9 +1,9 @@ import os import warnings import json -from Task import Task import dpdata import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.Task import Task class EAM_FS_LMP(Task): diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index df7832462..79d2b6d93 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -1,6 +1,6 @@ -from Property import Property -from refine import make_refine -import reproduce +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp import numpy as np import os, json diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 9cb1bed2e..f683a5f7d 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -1,5 +1,5 @@ -from Property import Property -from refine import make_refine +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 0fe2c304e..a617f4347 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -1,8 +1,8 @@ -from Property import Property -from refine import make_refine -import reproduce +from dpgen.auto_test.Property import Property import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test.reproduce import make_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import InterstitialGenerator import numpy as np @@ -63,7 +63,7 @@ def make_confs(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = reproduce.make_repro(vasp_lmp_path,path_to_work) + task_list = make_repro(vasp_lmp_path,path_to_work) os.chdir(cwd) else: @@ -132,7 +132,7 @@ def _compute_lower(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_lmp_path,all_tasks,ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path,all_tasks,ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/MEAM_LMP.py b/dpgen/auto_test/MEAM_LMP.py index 31366abbb..0e3eef1e7 100644 --- a/dpgen/auto_test/MEAM_LMP.py +++ b/dpgen/auto_test/MEAM_LMP.py @@ -1,9 +1,9 @@ import os import warnings import json -from Task import Task import dpdata import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.Task import Task class MEAM_LMP(Task): diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index ee19d5c63..d25fcde2d 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -1,6 +1,6 @@ import os,glob,json from abc import ABC,abstractmethod -from common import make_task +from dpgen.auto_test.common_task import make_task class Property (ABC) : @abstractmethod diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index c38a54acf..79b54d86e 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -1,6 +1,6 @@ -from Property import Property -from refine import make_refine -import reproduce +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index e3ade8101..c5152ba8f 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -1,11 +1,10 @@ import os import json -import warnings -from Task import Task -from dpgen.generator.lib.vasp import incar_upper -from pymatgen.io.vasp import Incar, Kpoints from dpgen import dlog import dpgen.auto_test.lib.vasp as vasp +from dpgen.auto_test.Task import Task +from dpgen.generator.lib.vasp import incar_upper +from pymatgen.io.vasp import Incar, Kpoints class VASP(Task): @@ -129,7 +128,7 @@ def compute(self, output_dir): outcar = os.path.join(output_dir, 'OUTCAR') if not os.path.isfile(outcar): - warnings.warn("cannot find OUTCAR in " + output_dir + " skip") + dlog.warning("cannot find OUTCAR in " + output_dir + " skip") return None else: force = [] @@ -137,7 +136,7 @@ def compute(self, energy = [] with open(outcar, 'r') as fp: if 'Elapsed time (sec):' not in fp.read(): - warnings.warn("incomplete job " + outcar+ " skip") + dlog.warning("incomplete job " + outcar+ " skip") return None else: fp.seek(0) diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 702b09ccc..0067d54f9 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -1,10 +1,10 @@ -from Property import Property -from refine import make_refine -import reproduce -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test.reproduce import make_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import VacancyGenerator +import dpgen.auto_test.lib.vasp as vasp +import dpgen.auto_test.lib.lammps as lammps import numpy as np import os,json @@ -52,7 +52,7 @@ def make_confs(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) + task_list = make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: diff --git a/dpgen/auto_test/common.py b/dpgen/auto_test/common.py deleted file mode 100644 index 943681e20..000000000 --- a/dpgen/auto_test/common.py +++ /dev/null @@ -1,344 +0,0 @@ -import os -from VASP import VASP -from DEEPMD_LMP import DEEPMD_LMP -from MEAM_LMP import MEAM_LMP -from EAM_FS_LMP import EAM_FS_LMP -from EAM_ALLOY_LMP import EAM_ALLOY_LMP -from EOS import EOS -from Elastic import Elastic -from Vacancy import Vacancy -from Interstitial import Interstitial -from Surface import Surface -import dpgen.auto_test.lib.crys as crys -import glob, warnings, json -from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine -import dpgen.auto_test.lib.util as util -from dpgen.dispatcher.Dispatcher import make_dispatcher - -lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] - - -def make_task(inter_parameter, - path_to_poscar): - """ - Make an instance of Task - """ - inter_type = inter_parameter['type'] - if inter_type == 'vasp': - return VASP(inter_parameter, path_to_poscar) - elif inter_type == 'deepmd': - return DEEPMD_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'meam': - return MEAM_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_fs': - return EAM_FS_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP(inter_parameter, path_to_poscar) - else: - raise RuntimeError(f'unknown interaction {inter_type}') - - -def make_task_trans_files(inter_parameter): - """ - Make the forward and backward file of an Task - """ - inter_type = inter_parameter['type'] - if inter_type == 'vasp': - return VASP.forward_files, VASP.forward_common_files, VASP.backward_files - elif inter_type == 'deepmd': - return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files - elif inter_type == 'meam': - return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files - elif inter_type == 'eam_fs': - return EAM_FS_LMP.forward_files, EAM_FS_LMP.forward_common_files, EAM_FS_LMP.backward_files - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP.forward_files, EAM_ALLOY_LMP.forward_common_files, EAM_ALLOY_LMP.backward_files - else: - raise RuntimeError(f'unknown interaction {inter_type}') - - -def make_property(paramters): - """ - Make an instance of Property - """ - prop_type = paramters['type'] - if prop_type == 'eos': - return EOS(paramters) - elif prop_type == 'elastic': - return Elastic(paramters) - elif prop_type == 'vacancy': - return Vacancy(paramters) - elif prop_type == 'interstitial': - return Interstitial(paramters) - elif prop_type == 'surface': - return Surface(paramters) - else: - raise RuntimeError(f'unknown property type {prop_type}') - - -def make_equi(confs, - inter_param, - relax_param): - # find all POSCARs and their name like mp-xxx - # ... - ele_list = [key for key in inter_param['type_map'].keys()] - conf_dirs = glob.glob(confs) - conf_dirs.sort() - - # generate a list of task names like mp-xxx/relaxation - # ... - cwd = os.getcwd() - # generate poscar for single element crystal - if len(ele_list) == 1: - for ii in conf_dirs: - os.chdir(ii) - crys_type = ii[3:] - if crys_type == 'fcc': - if not os.path.exists('POSCAR'): - crys.fcc(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'hcp': - if not os.path.exists('POSCAR'): - crys.hcp(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'dhcp': - if not os.path.exists('POSCAR'): - crys.dhcp(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'bcc': - if not os.path.exists('POSCAR'): - crys.bcc(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'diamond': - if not os.path.exists('POSCAR'): - crys.diamond(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'sc': - if not os.path.exists('POSCAR'): - crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') - os.chdir(cwd) - task_dirs = [] - # make task directories like mp-xxx/relaxation - # if mp-xxx/exists then print a warning and exit. - # ... - for ii in conf_dirs: - poscar = os.path.abspath(os.path.join(ii, 'POSCAR')) - if not os.path.exists(poscar): - raise FileNotFoundError('no configuration for autotest') - relax_dirs = os.path.abspath(os.path.join(ii, 'relaxation')) - if os.path.exists(relax_dirs): - warnings.warn('%s already exists' % relax_dirs) - else: - os.makedirs(relax_dirs) - task_dirs.append(relax_dirs) - os.chdir(relax_dirs) - # copy POSCARs to mp-xxx/relaxation - # ... - os.symlink(os.path.relpath(poscar), 'POSCAR') - os.chdir(cwd) - task_dirs.sort() - # generate task files - for ii in task_dirs: - poscar = os.path.join(ii, 'POSCAR') - inter = make_task(inter_param, poscar) - inter.make_potential_files(ii) - inter.make_input_file(ii, 'relaxation', relax_param) - - -def run_equi(confs, - inter_param, - mdata): - # find all POSCARs and their name like mp-xxx - # ... - conf_dirs = glob.glob(confs) - conf_dirs.sort() - # generate a list of task names like mp-xxx/relaxation - # ... - work_path_list = [] - for ii in conf_dirs: - work_path_list.append(os.path.abspath(os.path.join(ii, 'relaxation'))) - all_task = [] - for ii in work_path_list: - all_task.append(os.path.join(ii, '.')) - - inter_type = inter_param['type'] - # vasp - if inter_type == "vasp": - mdata = decide_fp_machine(mdata) - elif inter_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - else: - raise RuntimeError("unknown task %s, something wrong" % inter_type) - - # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) - # backward_files += logs - # ... - run_tasks = util.collect_task(all_task, inter_type) - if len(run_tasks) == 0: - return - else: - run_tasks = [os.path.basename(ii) for ii in all_task] - machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) - for ii in range(len(work_path_list)): - work_path = work_path_list[ii] - disp = make_dispatcher(machine, resources, work_path, run_tasks[ii], group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks[ii], - group_size, - forward_common_files, - forward_files, - backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') - - -def post_equi(confs, inter_param): - # find all POSCARs and their name like mp-xxx - # ... - conf_dirs = glob.glob(confs) - conf_dirs.sort() - task_dirs = [] - for ii in conf_dirs: - task_dirs.append(os.path.abspath(os.path.join(ii, 'relaxation'))) - task_dirs.sort() - - # generate a list of task names like mp-xxx/relaxation - # ... - - # dump the relaxation result. - for ii in task_dirs: - poscar = os.path.join(ii, 'POSCAR') - inter = make_task(inter_param, poscar) - res = inter.compute(ii) - with open(os.path.join(ii, 'result.json'), 'w') as fp: - json.dump(res, fp, indent=4) - - -def make_property(confs, - inter_param, - property_list): - # find all POSCARs and their name like mp-xxx - # ... - conf_dirs = glob.glob(confs) - conf_dirs.sort() - for ii in conf_dirs: - for jj in property_list: - if 'init_from_suffix' and 'output_suffix' in jj: - do_refine = True - suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: - do_refine = False - suffix = 'reprod' - else: - do_refine = False - suffix = '00' - # generate working directory like mp-xxx/eos_00 if jj['type'] == 'eos' - # handel the exception that the working directory exists - # ... - - # determine the suffix: from scratch or refine - # ... - - property_type = jj['type'] - path_to_equi = os.path.join(ii, 'relaxation') - path_to_work = os.path.join(ii, property_type + '_' + suffix) - - if os.path.exists(path_to_work): - warnings.warn('%s already exists' % path_to_work) - else: - os.makedirs(path_to_work) - - prop = make_property(jj) - task_list = prop.make_confs(path_to_work, path_to_equi, do_refine) - - for kk in task_list: - poscar = os.path.join(kk, 'POSCAR') - inter = make_task(inter_param, poscar) - inter.make_potential_files(kk) - inter.make_input_file(kk, prop.task_type, prop.task.pararm) - - -def run_property(confs, - inter_param, - property_list, - mdata): - # find all POSCARs and their name like mp-xxx - # ... - conf_dirs = glob.glob(confs) - conf_dirs.sort() - task_list = [] - work_path_list = [] - for ii in conf_dirs: - for jj in property_list: - # determine the suffix: from scratch or refine - # ... - if 'init_from_suffix' and 'output_suffix' in jj: - suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: - suffix = 'reprod' - else: - suffix = 0 - - property_type = jj['type'] - path_to_work = os.path.join(ii, property_type + '_' + suffix) - - work_path_list.append(path_to_work) - tmp_task_list = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) - tmp_task_list.sort() - task_list.append(tmp_task_list) - - # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) - # backward_files += logs - # ... - inter_type = inter_param['type'] - # vasp - if inter_type == "vasp": - mdata = decide_fp_machine(mdata) - elif inter_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - else: - raise RuntimeError("unknown task %s, something wrong" % inter_type) - - for ii in range(len(work_path_list)): - work_path = work_path_list[ii] - all_task = task_list[ii] - run_tasks = util.collect_task(all_task, inter_type) - if len(run_tasks) == 0: - return - else: - run_tasks = [os.path.basename(ii) for ii in all_task] - machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - forward_common_files, - forward_files, - backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') - - -def post_property(confs, - # inter_param, - property_list): - # find all POSCARs and their name like mp-xxx - # ... - # task_list = [] - conf_dirs = glob.glob(confs) - conf_dirs.sort() - for ii in conf_dirs: - for jj in property_list: - # determine the suffix: from scratch or refine - # ... - if 'init_from_suffix' and 'output_suffix' in jj: - suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: - suffix = 'reprod' - else: - suffix = 0 - property_type = jj['type'] - path_to_work = os.path.join(ii, property_type + '_' + suffix) - prop = make_property(jj) - prop.compute('result.json', 'result.out', path_to_work) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py new file mode 100644 index 000000000..2e3a0585b --- /dev/null +++ b/dpgen/auto_test/common_equi.py @@ -0,0 +1,145 @@ +import os +import dpgen.auto_test.lib.crys as crys +import glob, warnings, json +import dpgen.auto_test.lib.util as util +from dpgen import dlog +from dpgen.dispatcher.Dispatcher import make_dispatcher +from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine + +lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] + +def make_equi(confs, + inter_param, + relax_param): + # find all POSCARs and their name like mp-xxx + # ... + ele_list = [key for key in inter_param['type_map'].keys()] + conf_dirs = glob.glob(confs) + conf_dirs.sort() + + # generate a list of task names like mp-xxx/relaxation + # ... + cwd = os.getcwd() + # generate poscar for single element crystal + if len(ele_list) == 1: + for ii in conf_dirs: + os.chdir(ii) + crys_type = ii[3:] + if crys_type == 'fcc': + if not os.path.exists('POSCAR'): + crys.fcc(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'hcp': + if not os.path.exists('POSCAR'): + crys.hcp(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'dhcp': + if not os.path.exists('POSCAR'): + crys.dhcp(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'bcc': + if not os.path.exists('POSCAR'): + crys.bcc(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'diamond': + if not os.path.exists('POSCAR'): + crys.diamond(ele_list[0]).to('POSCAR', 'POSCAR') + elif crys_type == 'sc': + if not os.path.exists('POSCAR'): + crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') + os.chdir(cwd) + task_dirs = [] + # make task directories like mp-xxx/relaxation + # if mp-xxx/exists then print a warning and exit. + # ... + for ii in conf_dirs: + poscar = os.path.abspath(os.path.join(ii, 'POSCAR')) + if not os.path.exists(poscar): + raise FileNotFoundError('no configuration for autotest') + relax_dirs = os.path.abspath(os.path.join(ii, 'relaxation')) + if os.path.exists(relax_dirs): + dlog.warning('%s already exists' % relax_dirs) + else: + os.makedirs(relax_dirs) + task_dirs.append(relax_dirs) + os.chdir(relax_dirs) + # copy POSCARs to mp-xxx/relaxation + # ... + os.symlink(os.path.relpath(poscar), 'POSCAR') + os.chdir(cwd) + task_dirs.sort() + # generate task files + for ii in task_dirs: + poscar = os.path.join(ii, 'POSCAR') + inter = make_task(inter_param, poscar) + inter.make_potential_files(ii) + inter.make_input_file(ii, 'relaxation', relax_param) + + +def run_equi(confs, + inter_param, + mdata): + # find all POSCARs and their name like mp-xxx + # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() + # generate a list of task names like mp-xxx/relaxation + # ... + work_path_list = [] + for ii in conf_dirs: + work_path_list.append(os.path.abspath(os.path.join(ii, 'relaxation'))) + all_task = [] + for ii in work_path_list: + all_task.append(os.path.join(ii, '.')) + + inter_type = inter_param['type'] + # vasp + if inter_type == "vasp": + mdata = decide_fp_machine(mdata) + elif inter_type in lammps_task_type: + mdata = decide_model_devi_machine(mdata) + else: + raise RuntimeError("unknown task %s, something wrong" % inter_type) + + # dispatch the tasks + forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # backward_files += logs + # ... + run_tasks = util.collect_task(all_task, inter_type) + if len(run_tasks) == 0: + return + else: + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + for ii in range(len(work_path_list)): + work_path = work_path_list[ii] + disp = make_dispatcher(machine, resources, work_path, run_tasks[ii], group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks[ii], + group_size, + forward_common_files, + forward_files, + backward_files, + outlog=inter_type + '.out', + errlog=inter_type + '.err') + + +def post_equi(confs, inter_param): + # find all POSCARs and their name like mp-xxx + # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() + task_dirs = [] + for ii in conf_dirs: + task_dirs.append(os.path.abspath(os.path.join(ii, 'relaxation'))) + task_dirs.sort() + + # generate a list of task names like mp-xxx/relaxation + # ... + + # dump the relaxation result. + for ii in task_dirs: + poscar = os.path.join(ii, 'POSCAR') + inter = make_task(inter_param, poscar) + res = inter.compute(ii) + with open(os.path.join(ii, 'result.json'), 'w') as fp: + json.dump(res, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py new file mode 100644 index 000000000..7c5936dd4 --- /dev/null +++ b/dpgen/auto_test/common_prop.py @@ -0,0 +1,165 @@ +import os +from dpgen.auto_test.EOS import EOS +from dpgen.auto_test.Elastic import Elastic +from dpgen.auto_test.Vacancy import Vacancy +from dpgen.auto_test.Interstitial import Interstitial +from dpgen.auto_test.Surface import Surface +from dpgen.auto_test.common_task import make_task,make_task_trans_files + +import dpgen.auto_test.lib.crys as crys +import glob, warnings, json +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine +import dpgen.auto_test.lib.util as util +from dpgen.dispatcher.Dispatcher import make_dispatcher + +lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] + +def make_property_instance(paramters): + """ + Make an instance of Property + """ + prop_type = paramters['type'] + if prop_type == 'eos': + return EOS(paramters) + elif prop_type == 'elastic': + return Elastic(paramters) + elif prop_type == 'vacancy': + return Vacancy(paramters) + elif prop_type == 'interstitial': + return Interstitial(paramters) + elif prop_type == 'surface': + return Surface(paramters) + else: + raise RuntimeError(f'unknown property type {prop_type}') + + +def make_property(confs, + inter_param, + property_list): + # find all POSCARs and their name like mp-xxx + # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() + for ii in conf_dirs: + for jj in property_list: + if 'init_from_suffix' and 'output_suffix' in jj: + do_refine = True + suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + do_refine = False + suffix = 'reprod' + else: + do_refine = False + suffix = '00' + # generate working directory like mp-xxx/eos_00 if jj['type'] == 'eos' + # handel the exception that the working directory exists + # ... + + # determine the suffix: from scratch or refine + # ... + + property_type = jj['type'] + path_to_equi = os.path.join(ii, 'relaxation') + path_to_work = os.path.join(ii, property_type + '_' + suffix) + + if os.path.exists(path_to_work): + warnings.warn('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) + + prop = make_property_instance(jj) + task_list = prop.make_confs(path_to_work, path_to_equi, do_refine) + + for kk in task_list: + poscar = os.path.join(kk, 'POSCAR') + inter = make_task(inter_param, poscar) + inter.make_potential_files(kk) + inter.make_input_file(kk, prop.task_type, prop.task.pararm) + + +def run_property(confs, + inter_param, + property_list, + mdata): + # find all POSCARs and their name like mp-xxx + # ... + conf_dirs = glob.glob(confs) + conf_dirs.sort() + task_list = [] + work_path_list = [] + for ii in conf_dirs: + for jj in property_list: + # determine the suffix: from scratch or refine + # ... + if 'init_from_suffix' and 'output_suffix' in jj: + suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + suffix = 'reprod' + else: + suffix = 0 + + property_type = jj['type'] + path_to_work = os.path.join(ii, property_type + '_' + suffix) + + work_path_list.append(path_to_work) + tmp_task_list = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) + tmp_task_list.sort() + task_list.append(tmp_task_list) + + # dispatch the tasks + forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # backward_files += logs + # ... + inter_type = inter_param['type'] + # vasp + if inter_type == "vasp": + mdata = decide_fp_machine(mdata) + elif inter_type in lammps_task_type: + mdata = decide_model_devi_machine(mdata) + else: + raise RuntimeError("unknown task %s, something wrong" % inter_type) + + for ii in range(len(work_path_list)): + work_path = work_path_list[ii] + all_task = task_list[ii] + run_tasks = util.collect_task(all_task, inter_type) + if len(run_tasks) == 0: + return + else: + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks, + group_size, + forward_common_files, + forward_files, + backward_files, + outlog=inter_type + '.out', + errlog=inter_type + '.err') + + +def post_property(confs, + # inter_param, + property_list): + # find all POSCARs and their name like mp-xxx + # ... + # task_list = [] + conf_dirs = glob.glob(confs) + conf_dirs.sort() + for ii in conf_dirs: + for jj in property_list: + # determine the suffix: from scratch or refine + # ... + if 'init_from_suffix' and 'output_suffix' in jj: + suffix = jj['output_suffix'] + elif 'reprod-opt' in jj and jj['reprod-opt']: + suffix = 'reprod' + else: + suffix = 0 + property_type = jj['type'] + path_to_work = os.path.join(ii, property_type + '_' + suffix) + prop = make_property_instance(jj) + prop.compute('result.json', 'result.out', path_to_work) diff --git a/dpgen/auto_test/common_task.py b/dpgen/auto_test/common_task.py new file mode 100644 index 000000000..864010850 --- /dev/null +++ b/dpgen/auto_test/common_task.py @@ -0,0 +1,51 @@ +import os +import dpgen.auto_test.lib.crys as crys +import glob, warnings, json +import dpgen.auto_test.lib.util as util + +from dpgen.auto_test.VASP import VASP +from dpgen.auto_test.DEEPMD_LMP import DEEPMD_LMP +from dpgen.auto_test.MEAM_LMP import MEAM_LMP +from dpgen.auto_test.EAM_FS_LMP import EAM_FS_LMP +from dpgen.auto_test.EAM_ALLOY_LMP import EAM_ALLOY_LMP + + +def make_task(inter_parameter, + path_to_poscar): + """ + Make an instance of Task + """ + inter_type = inter_parameter['type'] + if inter_type == 'vasp': + return VASP(inter_parameter, path_to_poscar) + elif inter_type == 'deepmd': + return DEEPMD_LMP(inter_parameter, path_to_poscar) + elif inter_type == 'meam': + return MEAM_LMP(inter_parameter, path_to_poscar) + elif inter_type == 'eam_fs': + return EAM_FS_LMP(inter_parameter, path_to_poscar) + elif inter_type == 'eam_alloy': + return EAM_ALLOY_LMP(inter_parameter, path_to_poscar) + else: + raise RuntimeError(f'unknown interaction {inter_type}') + + +def make_task_trans_files(inter_parameter): + """ + Make the forward and backward file of an Task + """ + inter_type = inter_parameter['type'] + if inter_type == 'vasp': + return VASP.forward_files, VASP.forward_common_files, VASP.backward_files + elif inter_type == 'deepmd': + return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files + elif inter_type == 'meam': + return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files + elif inter_type == 'eam_fs': + return EAM_FS_LMP.forward_files, EAM_FS_LMP.forward_common_files, EAM_FS_LMP.backward_files + elif inter_type == 'eam_alloy': + return EAM_ALLOY_LMP.forward_files, EAM_ALLOY_LMP.forward_common_files, EAM_ALLOY_LMP.backward_files + else: + raise RuntimeError(f'unknown interaction {inter_type}') + + diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 300383efe..69e253daf 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -2,7 +2,8 @@ import argparse, json import logging -from dpgen.auto_test import common +from dpgen.auto_test.common_prop import make_property +from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -16,29 +17,29 @@ def run_task(step, json_file, machine_file=''): if step == 'make' and 'relaxation' in jdata: relax_param = jdata['relaxation'] - common.make_equi(confs, inter_parameter, relax_param) + make_equi(confs, inter_parameter, relax_param) elif step == 'make' and 'properties' in jdata: property_list = jdata['properties'] - common.make_property(confs, inter_parameter, property_list) + make_property(confs, inter_parameter, property_list) elif step == 'run' and 'relaxation' in jdata: with open(machine_file, 'r') as fp: mdata = json.load(fp) - common.run_equi(confs, inter_parameter, mdata) + run_equi(confs, inter_parameter, mdata) elif step == 'run' and 'properties' in jdata: with open(machine_file, 'r') as fp: mdata = json.load(fp) property_list = jdata['properties'] - common.run_property(confs, inter_parameter, property_list, mdata) + run_property(confs, inter_parameter, property_list, mdata) elif step == 'post' and 'relaxation' in jdata: - common.post_equi(confs, inter_parameter) + post_equi(confs, inter_parameter) elif step == 'post' and 'properties' in jdata: property_list = jdata['properties'] - common.post_property(confs, property_list) + post_property(confs, property_list) else: raise RuntimeError('unknown tasks') @@ -46,29 +47,6 @@ def run_task(step, json_file, machine_file=''): def gen_test(args): logging.info("start auto-testing") - run_task(args.STEP, args.PARAM, args.MACHINE) + run_task(args.TASK, args.PARAM, args.MACHINE) logging.info("finished!") - -def _main(): - parser = argparse.ArgumentParser() - parser.add_argument("STEP", type=str, - help="Make or run or post") - parser.add_argument("PARAM", type=str, - help="The parameters of the generator") - parser.add_argument("MACHINE", type=str, - help="The settings of the machine running the generator", - default=None) - args = parser.parse_args() - - logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s') - # logging.basicConfig (filename="compute_string.log", filemode="a", level=logging.INFO, format='%(asctime)s %(message)s') - logging.getLogger("paramiko").setLevel(logging.WARNING) - - logging.info("start auto-testing") - run_task(args.STEP, args.PARAM, args.MACHINE) - logging.info("finished!") - - -if __name__ == '__main__': - _main() diff --git a/dpgen/main.py b/dpgen/main.py index 7d180b596..003196c78 100644 --- a/dpgen/main.py +++ b/dpgen/main.py @@ -65,19 +65,8 @@ def main(): parser_auto_gen_param.add_argument('PARAM', type=str, help="parameter file, json/yaml format") parser_auto_gen_param.set_defaults(func=auto_gen_param) - # parser_init.add_argument("-p",'--parameter', type=str, dest='param', - # help="parameter file, json/yaml format") - # parser_init.add_argument("-s","--stage", type=int, dest='stage', - # help="the stage of init, can be 1, 2, 3 or 4. " - # "1: Setup vasp jobs for relaxation. " - # "2: Collect vasp relaxed confs (if relax is not skiped). Perturb system. " - # "3: Setup vasp jobs for MD of perturbed system. " - # "4: Collect vasp md confs, make deepmd data. ") - # parser_init.add_argument("directories", metavar="dir", default=".", - # type=str, nargs="*", - # help="directory to process (default to .)") - # parser_init.set_defaults(func=gen_data) + # parser_init_reaction parser_init_reaction = subparsers.add_parser( "init_reaction", help="Generating initial data for reactive systems.") parser_init_reaction.add_argument('PARAM', type=str, @@ -147,10 +136,12 @@ def main(): parser_run.set_defaults(func=gen_simplify) # test - parser_test = subparsers.add_parser("test", help="Auto-test for Deep Potential.") + parser_test = subparsers.add_parser("autotest", help="Auto-test for Deep Potential.") + parser_test.add_argument('TASK', type=str, + help="task can be make, run or post") parser_test.add_argument('PARAM', type=str, help="parameter file, json/yaml format") - parser_test.add_argument('MACHINE', type=str, + parser_test.add_argument('MACHINE', type=str,default=None,nargs="?", help="machine file, json/yaml format") parser_test.set_defaults(func=gen_test) From 5853ee04234d058428ea1b3ff05c6e4589fc3784 Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 21 Jun 2020 18:04:41 +0800 Subject: [PATCH 012/154] update VASP.py --- dpgen/auto_test/VASP.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index c5152ba8f..a62ae1fe4 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -1,6 +1,7 @@ import os import json from dpgen import dlog +from dpgen.util import sepline import dpgen.auto_test.lib.vasp as vasp from dpgen.auto_test.Task import Task from dpgen.generator.lib.vasp import incar_upper @@ -33,6 +34,7 @@ def make_input_file(self, output_dir, task_type, task_param): + sepline(ch=output_dir) with open(os.path.join(output_dir, 'task.json'), 'w') as fp: json.dump(task_param, fp, indent=4) @@ -64,7 +66,6 @@ def make_input_file(self, if task_type in ['relaxation', 'vacancy', 'interstitial']: isif = 3 - if task_type == 'eos': if 'change_box' in task_param and not task_param['change_box']: isif = 2 @@ -87,32 +88,33 @@ def make_input_file(self, nsw = 0 if not ('ISIF' in incar and incar.get('ISIF') == isif): - dlog.info("%s:%s setting ISIF to %d" % (__file__, self.make_input_file.__name__, isif)) + dlog.info("%s setting ISIF to %d" % ( self.make_input_file.__name__, isif)) incar['ISIF'] = isif if not ('NSW' in incar and incar.get('NSW') == nsw): - dlog.info("%s:%s setting NSW to %d" % (__file__, self.make_input_file.__name__, nsw)) + dlog.info("%s setting NSW to %d" % ( self.make_input_file.__name__, nsw)) incar['NSW'] = nsw if 'ediff' in task_param: - dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['ediff'])) + dlog.info("%s setting ediff to %s" % (self.make_input_file.__name__, task_param['ediff'])) incar['EDIFF'] = task_param['ediff'] if 'ediffg' in task_param: - dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['ediffg'])) + dlog.info("%s setting ediffg to %s" % ( self.make_input_file.__name__, task_param['ediffg'])) incar['EDIFFG'] = task_param['ediffg'] if 'encut' in task_param: - dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['encut'])) + dlog.info("%s setting encut to %s" % (self.make_input_file.__name__, task_param['encut'])) incar['ENCUT'] = task_param['encut'] + if 'kspacing' in task_param: - dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['kspacing'])) + dlog.info("%s setting kspacing to %s" %( self.make_input_file.__name__, task_param['kspacing'])) incar['KSPACING'] = task_param['kspacing'] if 'kgamma' in task_param: - dlog.info("%s:%s setting ediff to %s" % (__file__, self.make_input_file.__name__, task_param['kgamma'])) + dlog.info("%s setting kgamma to %s" % ( self.make_input_file.__name__, task_param['kgamma'])) incar['KGAMMA'] = task_param['kgamma'] fc = incar.get_string() From bdf9e90e509eed9b94888685730f52603a23795b Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 21 Jun 2020 18:34:30 +0800 Subject: [PATCH 013/154] update vasp.py Incar.write_file --- dpgen/auto_test/VASP.py | 6 +----- dpgen/auto_test/run.py | 5 +---- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index a62ae1fe4..75f1be90f 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -117,11 +117,7 @@ def make_input_file(self, dlog.info("%s setting kgamma to %s" % ( self.make_input_file.__name__, task_param['kgamma'])) incar['KGAMMA'] = task_param['kgamma'] - fc = incar.get_string() - # write incar - with open(os.path.join(output_dir, 'INCAR'), 'w') as fp: - fp.write(fc) - + incar.write_file(os.path.join(output_dir,'INCAR')) ret = vasp.make_kspacing_kpoints(self.path_to_poscar, kspacing, kgamma) kp = Kpoints.from_string(ret) kp.write_file(os.path.join(output_dir, "KPOINTS")) diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 69e253daf..b7de663d1 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,12 +1,10 @@ #!/usr/bin/env python3 import argparse, json -import logging from dpgen.auto_test.common_prop import make_property from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi -lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] - +#lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] def run_task(step, json_file, machine_file=''): with open(json_file, 'r') as fp: @@ -44,7 +42,6 @@ def run_task(step, json_file, machine_file=''): else: raise RuntimeError('unknown tasks') - def gen_test(args): logging.info("start auto-testing") run_task(args.TASK, args.PARAM, args.MACHINE) From 427c9675a3e6389b63a93e3127c7718c89b5c53a Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 21 Jun 2020 18:37:06 +0800 Subject: [PATCH 014/154] fix bug run.py --- dpgen/auto_test/run.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index b7de663d1..7abd887f6 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse, json +from dpgen import dlog from dpgen.auto_test.common_prop import make_property from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi @@ -43,7 +44,7 @@ def run_task(step, json_file, machine_file=''): raise RuntimeError('unknown tasks') def gen_test(args): - logging.info("start auto-testing") + dlog.info("start auto-testing") run_task(args.TASK, args.PARAM, args.MACHINE) - logging.info("finished!") + dlog.info("finished!") From 2db42014709fe91f74824498809f39e9069a4267 Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 21 Jun 2020 23:56:47 +0800 Subject: [PATCH 015/154] support debug & update configuration direction match pattern --- dpgen/auto_test/DEEPMD_LMP.py | 4 ++-- dpgen/auto_test/common_equi.py | 23 +++++++++++++++-------- dpgen/auto_test/run.py | 3 +++ dpgen/main.py | 2 ++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/dpgen/auto_test/DEEPMD_LMP.py b/dpgen/auto_test/DEEPMD_LMP.py index 0b7b9a0f1..8bda4b67b 100644 --- a/dpgen/auto_test/DEEPMD_LMP.py +++ b/dpgen/auto_test/DEEPMD_LMP.py @@ -42,7 +42,7 @@ def make_input_file(self, # lines in lammps.in related to model # line_model = lammps.inter_deepmd(self.inter) # line_model = "pair_style deepmd %s \n" % (os.path.basename(self.model)) - # line_model += "pair_coeff\n" + # line_model += "pair_coeff\n etol = 1e-12 ftol = 1e-6 @@ -74,7 +74,7 @@ def make_input_file(self, static = task_param['static-opt'] model_name = os.path.basename(self.model) - deepmd_version = self.model.get("deepmd_version", "0.12") + deepmd_version = self.inter.get("deepmd_version", "0.12") model_param = {'model_name': [model_name], 'param_type': self.type_map, diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 2e3a0585b..4d3d97152 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -14,8 +14,12 @@ def make_equi(confs, relax_param): # find all POSCARs and their name like mp-xxx # ... + dlog.debug('debug info make equi') ele_list = [key for key in inter_param['type_map'].keys()] - conf_dirs = glob.glob(confs) + dlog.debug("ele_list %s"%':'.join(ele_list)) + conf_dirs =[] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() # generate a list of task names like mp-xxx/relaxation @@ -25,23 +29,25 @@ def make_equi(confs, if len(ele_list) == 1: for ii in conf_dirs: os.chdir(ii) - crys_type = ii[3:] - if crys_type == 'fcc': + crys_type = ii.split('/')[-1] + dlog.debug('crys_type: %s'%crys_type) + dlog.debug('pwd: %s'%os.getcwd()) + if crys_type == 'std-fcc': if not os.path.exists('POSCAR'): crys.fcc(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'hcp': + elif crys_type == 'std-hcp': if not os.path.exists('POSCAR'): crys.hcp(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'dhcp': + elif crys_type == 'std-dhcp': if not os.path.exists('POSCAR'): crys.dhcp(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'bcc': + elif crys_type == 'std-bcc': if not os.path.exists('POSCAR'): crys.bcc(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'diamond': + elif crys_type == 'std-diamond': if not os.path.exists('POSCAR'): crys.diamond(ele_list[0]).to('POSCAR', 'POSCAR') - elif crys_type == 'sc': + elif crys_type == 'std-sc': if not os.path.exists('POSCAR'): crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') os.chdir(cwd) @@ -68,6 +74,7 @@ def make_equi(confs, # generate task files for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') + dlog.debug('task_dir %s'%ii) inter = make_task(inter_param, poscar) inter.make_potential_files(ii) inter.make_input_file(ii, 'relaxation', relax_param) diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 7abd887f6..b00cf808f 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse, json +import logging from dpgen import dlog from dpgen.auto_test.common_prop import make_property from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi @@ -45,6 +46,8 @@ def run_task(step, json_file, machine_file=''): def gen_test(args): dlog.info("start auto-testing") + if args.debug: + dlog.setLevel(logging.DEBUG) run_task(args.TASK, args.PARAM, args.MACHINE) dlog.info("finished!") diff --git a/dpgen/main.py b/dpgen/main.py index 003196c78..6dcdc4ccd 100644 --- a/dpgen/main.py +++ b/dpgen/main.py @@ -143,6 +143,8 @@ def main(): help="parameter file, json/yaml format") parser_test.add_argument('MACHINE', type=str,default=None,nargs="?", help="machine file, json/yaml format") + parser_test.add_argument('-d','--debug', action='store_true', + help="log debug info") parser_test.set_defaults(func=gen_test) # db From 887d91758e2ca79ba82eb4deae989842aa958929 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 00:21:20 +0800 Subject: [PATCH 016/154] support materials project MPRester --- dpgen/auto_test/common_equi.py | 5 +++++ dpgen/auto_test/mpdb.py | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 dpgen/auto_test/mpdb.py diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 4d3d97152..481810128 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -6,6 +6,7 @@ from dpgen.dispatcher.Dispatcher import make_dispatcher from dpgen.auto_test.common_task import make_task,make_task_trans_files from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine +from dpgen.auto_test.mpdb import get_structure lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -50,6 +51,10 @@ def make_equi(confs, elif crys_type == 'std-sc': if not os.path.exists('POSCAR'): crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') + elif 'mp-' in crys_type: + if not os.path.exists('POSCAR'): + get_structure(crys_type).to('POSCAR', 'POSCAR') + os.chdir(cwd) task_dirs = [] # make task directories like mp-xxx/relaxation diff --git a/dpgen/auto_test/mpdb.py b/dpgen/auto_test/mpdb.py new file mode 100644 index 000000000..4a76c9c8d --- /dev/null +++ b/dpgen/auto_test/mpdb.py @@ -0,0 +1,25 @@ +import os +from dpgen import dlog +from pymatgen import MPRester,Structure +from pymatgen.ext.matproj import MPRestError + +web="materials.org" + +def check_apikey(): + try: + apikey=os.environ['MAPI_KEY'] + except KeyError: + print("You have to get a MAPI_KEY from "+web) + print("and execute following command:") + print('echo "export MAPI_KEY=yourkey">> ~/.bashrc') + print("source ~/.bashrc") + os._exit(0) + try: + return MPRester(apikey) + except MPRestError: + dlog.info("MPRester Error, you need to prepare POSCAR manually") + os._exit(0) + +def get_structure(mp_id): + mpr=check_apikey() + return mpr.get_structure_by_material_id(mp_id) From 4157ce1dfbc6fffebb021a701d55f9915036406a Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 02:21:20 +0800 Subject: [PATCH 017/154] ele_list revised --- dpgen/auto_test/.idea/.gitignore | 8 ++++++++ dpgen/auto_test/.idea/auto_test.iml | 12 ++++++++++++ .../.idea/inspectionProfiles/profiles_settings.xml | 6 ++++++ dpgen/auto_test/.idea/misc.xml | 7 +++++++ dpgen/auto_test/.idea/modules.xml | 8 ++++++++ dpgen/auto_test/.idea/vcs.xml | 6 ++++++ dpgen/auto_test/common_equi.py | 5 ++++- 7 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 dpgen/auto_test/.idea/.gitignore create mode 100644 dpgen/auto_test/.idea/auto_test.iml create mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 dpgen/auto_test/.idea/misc.xml create mode 100644 dpgen/auto_test/.idea/modules.xml create mode 100644 dpgen/auto_test/.idea/vcs.xml diff --git a/dpgen/auto_test/.idea/.gitignore b/dpgen/auto_test/.idea/.gitignore new file mode 100644 index 000000000..73f69e095 --- /dev/null +++ b/dpgen/auto_test/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/dpgen/auto_test/.idea/auto_test.iml b/dpgen/auto_test/.idea/auto_test.iml new file mode 100644 index 000000000..8b8c39547 --- /dev/null +++ b/dpgen/auto_test/.idea/auto_test.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml new file mode 100644 index 000000000..bc8e5ad67 --- /dev/null +++ b/dpgen/auto_test/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml new file mode 100644 index 000000000..1c0447018 --- /dev/null +++ b/dpgen/auto_test/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml new file mode 100644 index 000000000..b2bdec2d7 --- /dev/null +++ b/dpgen/auto_test/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 481810128..1eea389e9 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -16,7 +16,10 @@ def make_equi(confs, # find all POSCARs and their name like mp-xxx # ... dlog.debug('debug info make equi') - ele_list = [key for key in inter_param['type_map'].keys()] + if 'type_map' in inter_param: + ele_list = [key for key in inter_param['type_map'].keys()] + else: + ele_list = [key for key in inter_param['potcars'].keys()] dlog.debug("ele_list %s"%':'.join(ele_list)) conf_dirs =[] for conf in confs: From 2e1be3b359e6357ea4f536ebb83a340533512710 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 02:34:55 +0800 Subject: [PATCH 018/154] conf.lmp path --- dpgen/auto_test/DEEPMD_LMP.py | 2 +- dpgen/auto_test/EAM_ALLOY_LMP.py | 2 +- dpgen/auto_test/EAM_FS_LMP.py | 2 +- dpgen/auto_test/MEAM_LMP.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dpgen/auto_test/DEEPMD_LMP.py b/dpgen/auto_test/DEEPMD_LMP.py index 8bda4b67b..ced229a24 100644 --- a/dpgen/auto_test/DEEPMD_LMP.py +++ b/dpgen/auto_test/DEEPMD_LMP.py @@ -36,7 +36,7 @@ def make_input_file(self, output_dir, task_type, task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) with open(os.path.join(output_dir, 'task.json'), 'w') as fp: json.dump(task_param, fp, indent=4) # lines in lammps.in related to model diff --git a/dpgen/auto_test/EAM_ALLOY_LMP.py b/dpgen/auto_test/EAM_ALLOY_LMP.py index 9bf799682..8311ebddb 100644 --- a/dpgen/auto_test/EAM_ALLOY_LMP.py +++ b/dpgen/auto_test/EAM_ALLOY_LMP.py @@ -36,7 +36,7 @@ def make_input_file(self, output_dir, task_type, task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) with open(os.path.join(output_dir, 'task.json'), 'w') as fp: json.dump(task_param, fp, indent=4) # lines in lammps.in related to model diff --git a/dpgen/auto_test/EAM_FS_LMP.py b/dpgen/auto_test/EAM_FS_LMP.py index f40ad446b..b2c208636 100644 --- a/dpgen/auto_test/EAM_FS_LMP.py +++ b/dpgen/auto_test/EAM_FS_LMP.py @@ -36,7 +36,7 @@ def make_input_file(self, output_dir, task_type, task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) with open(os.path.join(output_dir, 'task.json'), 'w') as fp: json.dump(task_param, fp, indent=4) # lines in lammps.in related to model diff --git a/dpgen/auto_test/MEAM_LMP.py b/dpgen/auto_test/MEAM_LMP.py index 0e3eef1e7..65a05dfc4 100644 --- a/dpgen/auto_test/MEAM_LMP.py +++ b/dpgen/auto_test/MEAM_LMP.py @@ -46,7 +46,7 @@ def make_input_file(self, output_dir, task_type, task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), 'conf.lmp') + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) with open(os.path.join(output_dir, 'task.json'), 'w') as fp: json.dump(task_param, fp, indent=4) # lines in lammps.in related to model From 8d81718e37c06a2a0cce5e8d3e64b9ebb2f96df0 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 09:28:09 +0800 Subject: [PATCH 019/154] fix confs list --- dpgen/auto_test/common_equi.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 1eea389e9..bcc79f3e4 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -93,7 +93,9 @@ def run_equi(confs, mdata): # find all POSCARs and their name like mp-xxx # ... - conf_dirs = glob.glob(confs) + conf_dirs = [] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() # generate a list of task names like mp-xxx/relaxation # ... @@ -141,7 +143,9 @@ def run_equi(confs, def post_equi(confs, inter_param): # find all POSCARs and their name like mp-xxx # ... - conf_dirs = glob.glob(confs) + conf_dirs = [] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() task_dirs = [] for ii in conf_dirs: From d5ef95b8f41cbeba5b837eeb99f1c6e5f29932be Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 10:12:28 +0800 Subject: [PATCH 020/154] delete redundancy --- dpgen/auto_test/.idea/.gitignore | 8 -------- dpgen/auto_test/.idea/auto_test.iml | 12 ------------ .../.idea/inspectionProfiles/profiles_settings.xml | 6 ------ dpgen/auto_test/.idea/misc.xml | 7 ------- dpgen/auto_test/.idea/modules.xml | 8 -------- dpgen/auto_test/.idea/vcs.xml | 6 ------ 6 files changed, 47 deletions(-) delete mode 100644 dpgen/auto_test/.idea/.gitignore delete mode 100644 dpgen/auto_test/.idea/auto_test.iml delete mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 dpgen/auto_test/.idea/misc.xml delete mode 100644 dpgen/auto_test/.idea/modules.xml delete mode 100644 dpgen/auto_test/.idea/vcs.xml diff --git a/dpgen/auto_test/.idea/.gitignore b/dpgen/auto_test/.idea/.gitignore deleted file mode 100644 index 73f69e095..000000000 --- a/dpgen/auto_test/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/dpgen/auto_test/.idea/auto_test.iml b/dpgen/auto_test/.idea/auto_test.iml deleted file mode 100644 index 8b8c39547..000000000 --- a/dpgen/auto_test/.idea/auto_test.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2..000000000 --- a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml deleted file mode 100644 index bc8e5ad67..000000000 --- a/dpgen/auto_test/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml deleted file mode 100644 index 1c0447018..000000000 --- a/dpgen/auto_test/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml deleted file mode 100644 index b2bdec2d7..000000000 --- a/dpgen/auto_test/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From f58a7e2ef0c036284868c5708190854dce0e375f Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 10:15:23 +0800 Subject: [PATCH 021/154] fix common_prop conf path --- dpgen/auto_test/common_prop.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 7c5936dd4..dc00073b7 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -38,7 +38,11 @@ def make_property(confs, property_list): # find all POSCARs and their name like mp-xxx # ... - conf_dirs = glob.glob(confs) + #conf_dirs = glob.glob(confs) + #conf_dirs.sort() + conf_dirs = [] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() for ii in conf_dirs: for jj in property_list: @@ -83,7 +87,11 @@ def run_property(confs, mdata): # find all POSCARs and their name like mp-xxx # ... - conf_dirs = glob.glob(confs) + #conf_dirs = glob.glob(confs) + #conf_dirs.sort() + conf_dirs = [] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() task_list = [] work_path_list = [] @@ -147,7 +155,11 @@ def post_property(confs, # find all POSCARs and their name like mp-xxx # ... # task_list = [] - conf_dirs = glob.glob(confs) + #conf_dirs = glob.glob(confs) + #conf_dirs.sort() + conf_dirs = [] + for conf in confs: + conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() for ii in conf_dirs: for jj in property_list: From 9c70ec1c23dbf9d5304c561ffbf447991a4755ee Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 10:33:19 +0800 Subject: [PATCH 022/154] fix inter.make_input_file --- dpgen/auto_test/common_prop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index dc00073b7..628845fa2 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -78,7 +78,7 @@ def make_property(confs, poscar = os.path.join(kk, 'POSCAR') inter = make_task(inter_param, poscar) inter.make_potential_files(kk) - inter.make_input_file(kk, prop.task_type, prop.task.pararm) + inter.make_input_file(kk, prop.task_type, prop.task_param) def run_property(confs, From fb8e06a7d73fad57b6b4cf12f833dd7418ad5cce Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 10:36:34 +0800 Subject: [PATCH 023/154] parse OUTCAR via dpdata --- dpgen/auto_test/VASP.py | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 75f1be90f..946a81cc8 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -5,6 +5,7 @@ import dpgen.auto_test.lib.vasp as vasp from dpgen.auto_test.Task import Task from dpgen.generator.lib.vasp import incar_upper +from dpdata import LabeledSystem from pymatgen.io.vasp import Incar, Kpoints @@ -129,35 +130,12 @@ def compute(self, dlog.warning("cannot find OUTCAR in " + output_dir + " skip") return None else: - force = [] - position = [] - energy = [] - with open(outcar, 'r') as fp: - if 'Elapsed time (sec):' not in fp.read(): - dlog.warning("incomplete job " + outcar+ " skip") - return None - else: - fp.seek(0) - for line in fp: - if 'TOTAL-FORCE' in line: - position.append([]) - force.append([]) - fp.readline() - while True: - ss = fp.readline().split() - if len(ss) != 6: - break - position[-1].append(float(ss[0])) - force[-1].append(float(ss[3])) - position[-1].append(float(ss[1])) - force[-1].append(float(ss[4])) - position[-1].append(float(ss[2])) - force[-1].append(float(ss[5])) - elif 'free energy TOTEN' in line: - energy.append(float(line.split()[4])) - if len(force) > 0 and len(energy) > 0: - result_dict = {"energy": energy[-1], "force": force[-1]} - return result_dict + ls=LabeledSystem(outcar) + if len(ls)>0: + force = ls.sub_system([-1]).data['forces'][0].tolist() + energy = ls.sub_system([-1]).data['energies'][0].tolist() + virials= ls.sub_system([-1]).data['virials'][0].tolist() + return {"energy": energy, "force": force, "virials":virials} def forward_files(self): return ['INCAR', 'POSCAR', 'POTCAR'] From f46a8e5ad057d6819737b1d33803e62709dd6248 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 11:57:39 +0800 Subject: [PATCH 024/154] fix inter.make_input_file --- dpgen/auto_test/common_prop.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 628845fa2..1ddbe885a 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -5,6 +5,7 @@ from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen import dlog import dpgen.auto_test.lib.crys as crys import glob, warnings, json @@ -78,7 +79,8 @@ def make_property(confs, poscar = os.path.join(kk, 'POSCAR') inter = make_task(inter_param, poscar) inter.make_potential_files(kk) - inter.make_input_file(kk, prop.task_type, prop.task_param) + dlog.debug(prop.task_type()) ### debug + inter.make_input_file(kk, prop.task_type(), prop.task_param()) def run_property(confs, From e4b0e145814cd3ad491ceafeb269d7b41d29c676 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 12:23:25 +0800 Subject: [PATCH 025/154] surface miller --- dpgen/auto_test/Surface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 79b54d86e..b4ac82f30 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -38,7 +38,7 @@ def make_confs(self, # gen structure ss = Structure.from_file(equi_contcar) # gen slabs - all_slabs = generate_all_slabs(ss, self.max_miller, self.min_slab_size, self.min_vacuum_size) + all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) if refine: From 6b62b324bc2da8c374faf99c533bdbe50f853a12 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 12:43:39 +0800 Subject: [PATCH 026/154] update Lammps code framework --- dpgen/auto_test/Lammps.py | 179 +++++++++++++++++++++++++++++++++ dpgen/auto_test/common_equi.py | 14 ++- dpgen/auto_test/common_prop.py | 12 ++- dpgen/auto_test/common_task.py | 35 +------ 4 files changed, 200 insertions(+), 40 deletions(-) create mode 100644 dpgen/auto_test/Lammps.py diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py new file mode 100644 index 000000000..8abc721e8 --- /dev/null +++ b/dpgen/auto_test/Lammps.py @@ -0,0 +1,179 @@ +import os +import warnings +import json +import dpdata +import dpgen.auto_test.lib.lammps as lammps +from monty.serialization import loadfn,dumpfn +from dpgen.auto_test.Task import Task +from dpgen.auto_test.lib.lammps import inter_deepmd,inter_meam,inter_eam_fs,inter_eam_alloy + +supported_inter=["deepmd",'meam','eam_fs','eam_alloy'] + +class Lammps(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.inter_type = inter_parameter['type'] + assert self.inter_type in supported_inter + self.set_inter_type_func() + self.model = os.path.abspath(inter_parameter['model']) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def set_inter_type_func(self): + + if self.inter_type=="deepmd": + self.inter_func= inter_deepmd + + elif self.inter_type=='meam': + self.inter_func= inter_meam + + elif self.inter_type=='eam_fs': + self.inter_func= inter_eam_fs + + else: + self.inter_func= inter_eam_alloy + + def set_model_param(self): + + if self.inter_type=="deepmd": + model_name = os.path.basename(self.model) + deepmd_version = self.inter.get("deepmd_version", "0.12") + self.model_param = {'model_name': [model_name], + 'param_type': self.type_map, + 'deepmd_version': deepmd_version} + elif self.inter_type=='meam': + model_name = list(map(os.path.basename,self.model)) + self.model_param = {'model_name': model_name, + 'param_type': self.type_map} + else: + model_name = os.path.basename(self.model) + self.model_param = {'model_name': model_name, + 'param_type': self.type_map} + + + def make_potential_files(self, + output_dir): + model_file = os.path.basename(self.model) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model: + os.remove(model_file) + os.symlink(os.path.relpath(self.model), model_file) + else: + os.symlink(os.path.relpath(self.model), model_file) + os.chdir(cwd) + + dumpfn(self.inter,os.path.join(output_dir, 'inter.json'),indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) + + dumpfn(os.path.join(output_dir, 'task.json'),indent=4) + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + self.set_model_param() + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial'): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, self.inter_func, + self.model_param, B0, bp, etol, ftol, maxiter, maxeval) + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir,inter_param): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump',) + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + return result_dict + + def forward_files(self): + if self.inter_type=='meam': + return ['conf.lmp', 'in.lammps', list(map(os.path.basename,self.model))] + else: + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + + def forward_common_files(self): + if self.inter_type=='meam': + return ['in.lammps', list(map(os.path.basename,self.model))] + else: + return ['in.lammps', os.path.basename(self.model)] + + def backward_files(self): + return ['log.lammps', 'lmp.out', 'dump.relax'] diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index bcc79f3e4..a754a1a42 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -4,7 +4,7 @@ import dpgen.auto_test.lib.util as util from dpgen import dlog from dpgen.dispatcher.Dispatcher import make_dispatcher -from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen.auto_test.common_task import make_task from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure @@ -116,7 +116,11 @@ def run_equi(confs, raise RuntimeError("unknown task %s, something wrong" % inter_type) # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # POSCAR here is useless + virtual_task = make_task(inter_param, "POSCAR") + forward_files= virtual_task.forward_files() + forward_common_files = virtual_task.forward_common_files() + backward_files = virtual_task.backward_files() # backward_files += logs # ... run_tasks = util.collect_task(all_task, inter_type) @@ -136,8 +140,8 @@ def run_equi(confs, forward_common_files, forward_files, backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') + outlog='lmp.out', + errlog='lmp.err') def post_equi(confs, inter_param): @@ -159,6 +163,6 @@ def post_equi(confs, inter_param): for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') inter = make_task(inter_param, poscar) - res = inter.compute(ii) + res = inter.compute(ii,inter_param) with open(os.path.join(ii, 'result.json'), 'w') as fp: json.dump(res, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index dc00073b7..a6a993b7c 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -4,7 +4,7 @@ from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface -from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen.auto_test.common_task import make_task import dpgen.auto_test.lib.crys as crys import glob, warnings, json @@ -115,7 +115,11 @@ def run_property(confs, task_list.append(tmp_task_list) # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # POSCAR here is useless + virtual_task = make_task(inter_param, "POSCAR") + forward_files= virtual_task.forward_files() + forward_common_files = virtual_task.forward_common_files() + backward_files = virtual_task.backward_files() # backward_files += logs # ... inter_type = inter_param['type'] @@ -145,8 +149,8 @@ def run_property(confs, forward_common_files, forward_files, backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') + outlog='lmp.out', + errlog='lmp.err') def post_property(confs, diff --git a/dpgen/auto_test/common_task.py b/dpgen/auto_test/common_task.py index 864010850..80a19f725 100644 --- a/dpgen/auto_test/common_task.py +++ b/dpgen/auto_test/common_task.py @@ -4,10 +4,7 @@ import dpgen.auto_test.lib.util as util from dpgen.auto_test.VASP import VASP -from dpgen.auto_test.DEEPMD_LMP import DEEPMD_LMP -from dpgen.auto_test.MEAM_LMP import MEAM_LMP -from dpgen.auto_test.EAM_FS_LMP import EAM_FS_LMP -from dpgen.auto_test.EAM_ALLOY_LMP import EAM_ALLOY_LMP +from dpgen.auto_test.Lammps import Lammps def make_task(inter_parameter, @@ -18,34 +15,10 @@ def make_task(inter_parameter, inter_type = inter_parameter['type'] if inter_type == 'vasp': return VASP(inter_parameter, path_to_poscar) - elif inter_type == 'deepmd': - return DEEPMD_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'meam': - return MEAM_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_fs': - return EAM_FS_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP(inter_parameter, path_to_poscar) + elif inter_type in ['deepmd','meam','eam_fs','eam_alloy']: + return Lammps(inter_parameter, path_to_poscar) else: - raise RuntimeError(f'unknown interaction {inter_type}') + raise RuntimeError(f'unsupported interaction {inter_type}') -def make_task_trans_files(inter_parameter): - """ - Make the forward and backward file of an Task - """ - inter_type = inter_parameter['type'] - if inter_type == 'vasp': - return VASP.forward_files, VASP.forward_common_files, VASP.backward_files - elif inter_type == 'deepmd': - return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files - elif inter_type == 'meam': - return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files - elif inter_type == 'eam_fs': - return EAM_FS_LMP.forward_files, EAM_FS_LMP.forward_common_files, EAM_FS_LMP.backward_files - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP.forward_files, EAM_ALLOY_LMP.forward_common_files, EAM_ALLOY_LMP.backward_files - else: - raise RuntimeError(f'unknown interaction {inter_type}') - From 5e2b0efde124cd3652b76c046ec2cfb60e7c7339 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 13:33:35 +0800 Subject: [PATCH 027/154] update autotest run.py --- dpgen/auto_test/run.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index b00cf808f..cb2e1594e 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,20 +1,22 @@ #!/usr/bin/env python3 -import argparse, json +import argparse import logging from dpgen import dlog +from monty.serialization import loadfn,dumpfn from dpgen.auto_test.common_prop import make_property from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi #lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] -def run_task(step, json_file, machine_file=''): - with open(json_file, 'r') as fp: - jdata = json.load(fp) - +def run_task(step, param_file, machine_file=None): + jdata=loadfn(param_file) confs = jdata['structures'] inter_parameter = jdata['interaction'] + if machine_file: + mdata=loadfn(machine_file) + if step == 'make' and 'relaxation' in jdata: relax_param = jdata['relaxation'] make_equi(confs, inter_parameter, relax_param) @@ -24,13 +26,9 @@ def run_task(step, json_file, machine_file=''): make_property(confs, inter_parameter, property_list) elif step == 'run' and 'relaxation' in jdata: - with open(machine_file, 'r') as fp: - mdata = json.load(fp) run_equi(confs, inter_parameter, mdata) elif step == 'run' and 'properties' in jdata: - with open(machine_file, 'r') as fp: - mdata = json.load(fp) property_list = jdata['properties'] run_property(confs, inter_parameter, property_list, mdata) From fd308a39720077a7d12c16ef1e21aaf4ba714153 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 13:45:02 +0800 Subject: [PATCH 028/154] haidi update lammps framework --- dpgen/auto_test/Lammps.py | 179 +++++++++++++++++++++++++++++++++ dpgen/auto_test/common_equi.py | 14 ++- dpgen/auto_test/common_prop.py | 12 ++- dpgen/auto_test/common_task.py | 34 +------ 4 files changed, 200 insertions(+), 39 deletions(-) create mode 100644 dpgen/auto_test/Lammps.py diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py new file mode 100644 index 000000000..8abc721e8 --- /dev/null +++ b/dpgen/auto_test/Lammps.py @@ -0,0 +1,179 @@ +import os +import warnings +import json +import dpdata +import dpgen.auto_test.lib.lammps as lammps +from monty.serialization import loadfn,dumpfn +from dpgen.auto_test.Task import Task +from dpgen.auto_test.lib.lammps import inter_deepmd,inter_meam,inter_eam_fs,inter_eam_alloy + +supported_inter=["deepmd",'meam','eam_fs','eam_alloy'] + +class Lammps(Task): + def __init__(self, + inter_parameter, + path_to_poscar): + self.inter = inter_parameter + self.inter_type = inter_parameter['type'] + assert self.inter_type in supported_inter + self.set_inter_type_func() + self.model = os.path.abspath(inter_parameter['model']) + self.type_map = inter_parameter['type_map'] + self.path_to_poscar = path_to_poscar + + def set_inter_type_func(self): + + if self.inter_type=="deepmd": + self.inter_func= inter_deepmd + + elif self.inter_type=='meam': + self.inter_func= inter_meam + + elif self.inter_type=='eam_fs': + self.inter_func= inter_eam_fs + + else: + self.inter_func= inter_eam_alloy + + def set_model_param(self): + + if self.inter_type=="deepmd": + model_name = os.path.basename(self.model) + deepmd_version = self.inter.get("deepmd_version", "0.12") + self.model_param = {'model_name': [model_name], + 'param_type': self.type_map, + 'deepmd_version': deepmd_version} + elif self.inter_type=='meam': + model_name = list(map(os.path.basename,self.model)) + self.model_param = {'model_name': model_name, + 'param_type': self.type_map} + else: + model_name = os.path.basename(self.model) + self.model_param = {'model_name': model_name, + 'param_type': self.type_map} + + + def make_potential_files(self, + output_dir): + model_file = os.path.basename(self.model) + cwd = os.getcwd() + os.chdir(output_dir) + if os.path.islink(model_file): + link_file = os.readlink(model_file) + if not os.path.abspath(link_file) == self.model: + os.remove(model_file) + os.symlink(os.path.relpath(self.model), model_file) + else: + os.symlink(os.path.relpath(self.model), model_file) + os.chdir(cwd) + + dumpfn(self.inter,os.path.join(output_dir, 'inter.json'),indent=4) + + def make_input_file(self, + output_dir, + task_type, + task_param): + lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) + + dumpfn(os.path.join(output_dir, 'task.json'),indent=4) + + etol = 1e-12 + ftol = 1e-6 + maxiter = 5000 + maxeval = 500000 + change_box = True + B0 = 70 + bp = 0 + scale2equi = 1 + ntypes = len(self.type_map) + reprod_opt = False + static = False + + if 'etol' in task_param: + etol = task_param['etol'] + if 'ftol' in task_param: + ftol = task_param['ftol'] + if 'maxiter' in task_param: + maxiter = task_param['maxiter'] + if 'maxeval' in task_param: + maxeval = task_param['maxeval'] + if 'change_box' in task_param: + change_box = task_param['change_box'] + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + if 'reprod_opt' in task_param: + reprod_opt = task_param['reprod_opt'] + if 'static-opt' in task_param: + static = task_param['static-opt'] + + self.set_model_param() + + fc = '' + if task_type == 'relaxation' \ + or (task_type == 'eos' and not change_box) \ + or (task_type == 'surface' and not static): + fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, change_box) + + if task_type == 'static' \ + or (task_type == 'surface' and static): + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + + if task_type == 'elastic': + fc = lammps.make_lammps_elastic('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval) + + if task_type == 'vacancy' \ + or (task_type == 'eos' and change_box) \ + or (task_type == 'interstitial'): + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, self.inter_func, + self.model_param, B0, bp, etol, ftol, maxiter, maxeval) + if reprod_opt: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + + def compute(self, + output_dir,inter_param): + log_lammps = os.path.join(output_dir, 'log.lammps') + if not os.path.isfile(log_lammps): + warnings.warn("cannot find log.lammps in " + output_dir + " skip") + return None + else: + with open(log_lammps, 'r') as fp: + if 'Total wall time:' not in fp.read(): + warnings.warn("lammps not finished " + log_lammps + " skip") + return None + else: + fp.seek(0) + lines = fp.read().split('\n') + for ii in lines: + if ("Total number of atoms" in ii) and (not 'print' in ii): + natoms = float(ii.split('=')[1].split()[0]) + if ("Final energy per atoms" in ii) and (not 'print' in ii): + epa = float(ii.split('=')[1].split()[0]) + + dump = os.path.join(output_dir, 'dump.relax') + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump, fmt='lammps/dump',) + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + force = d_dump['forces'] + + result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + return result_dict + + def forward_files(self): + if self.inter_type=='meam': + return ['conf.lmp', 'in.lammps', list(map(os.path.basename,self.model))] + else: + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + + def forward_common_files(self): + if self.inter_type=='meam': + return ['in.lammps', list(map(os.path.basename,self.model))] + else: + return ['in.lammps', os.path.basename(self.model)] + + def backward_files(self): + return ['log.lammps', 'lmp.out', 'dump.relax'] diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index bcc79f3e4..bdc8ec532 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -4,7 +4,7 @@ import dpgen.auto_test.lib.util as util from dpgen import dlog from dpgen.dispatcher.Dispatcher import make_dispatcher -from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen.auto_test.common_task import make_task from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure @@ -116,7 +116,11 @@ def run_equi(confs, raise RuntimeError("unknown task %s, something wrong" % inter_type) # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # POSCAR here is useless + virtual_task = make_task(inter_param, "POSCAR") + forward_files = virtual_task.forward_files() + forward_common_files = virtual_task.forward_common_files() + backward_files = virtual_task.backward_files() # backward_files += logs # ... run_tasks = util.collect_task(all_task, inter_type) @@ -136,8 +140,8 @@ def run_equi(confs, forward_common_files, forward_files, backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') + outlog='lmp.out', + errlog='lmp.err') def post_equi(confs, inter_param): @@ -159,6 +163,6 @@ def post_equi(confs, inter_param): for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') inter = make_task(inter_param, poscar) - res = inter.compute(ii) + res = inter.compute(ii,inter_param) with open(os.path.join(ii, 'result.json'), 'w') as fp: json.dump(res, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 1ddbe885a..ce2569d32 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -4,7 +4,7 @@ from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface -from dpgen.auto_test.common_task import make_task,make_task_trans_files +from dpgen.auto_test.common_task import make_task from dpgen import dlog import dpgen.auto_test.lib.crys as crys @@ -117,7 +117,11 @@ def run_property(confs, task_list.append(tmp_task_list) # dispatch the tasks - forward_files, forward_common_files, backward_files = make_task_trans_files(inter_param) + # POSCAR here is useless + virtual_task = make_task(inter_param, "POSCAR") + forward_files = virtual_task.forward_files() + forward_common_files = virtual_task.forward_common_files() + backward_files = virtual_task.backward_files() # backward_files += logs # ... inter_type = inter_param['type'] @@ -147,8 +151,8 @@ def run_property(confs, forward_common_files, forward_files, backward_files, - outlog=inter_type + '.out', - errlog=inter_type + '.err') + outlog='lmp.out', + errlog='lmp.err') def post_property(confs, diff --git a/dpgen/auto_test/common_task.py b/dpgen/auto_test/common_task.py index 864010850..f63550703 100644 --- a/dpgen/auto_test/common_task.py +++ b/dpgen/auto_test/common_task.py @@ -4,10 +4,7 @@ import dpgen.auto_test.lib.util as util from dpgen.auto_test.VASP import VASP -from dpgen.auto_test.DEEPMD_LMP import DEEPMD_LMP -from dpgen.auto_test.MEAM_LMP import MEAM_LMP -from dpgen.auto_test.EAM_FS_LMP import EAM_FS_LMP -from dpgen.auto_test.EAM_ALLOY_LMP import EAM_ALLOY_LMP +from dpgen.auto_test.Lammps import Lammps def make_task(inter_parameter, @@ -18,34 +15,11 @@ def make_task(inter_parameter, inter_type = inter_parameter['type'] if inter_type == 'vasp': return VASP(inter_parameter, path_to_poscar) - elif inter_type == 'deepmd': - return DEEPMD_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'meam': - return MEAM_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_fs': - return EAM_FS_LMP(inter_parameter, path_to_poscar) - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP(inter_parameter, path_to_poscar) + elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: + return Lammps(inter_parameter, path_to_poscar) else: - raise RuntimeError(f'unknown interaction {inter_type}') + raise RuntimeError(f'unsupported interaction {inter_type}') -def make_task_trans_files(inter_parameter): - """ - Make the forward and backward file of an Task - """ - inter_type = inter_parameter['type'] - if inter_type == 'vasp': - return VASP.forward_files, VASP.forward_common_files, VASP.backward_files - elif inter_type == 'deepmd': - return DEEPMD_LMP.forward_files, DEEPMD_LMP.forward_common_files, DEEPMD_LMP.backward_files - elif inter_type == 'meam': - return MEAM_LMP.forward_files, MEAM_LMP.forward_common_files, MEAM_LMP.backward_files - elif inter_type == 'eam_fs': - return EAM_FS_LMP.forward_files, EAM_FS_LMP.forward_common_files, EAM_FS_LMP.backward_files - elif inter_type == 'eam_alloy': - return EAM_ALLOY_LMP.forward_files, EAM_ALLOY_LMP.forward_common_files, EAM_ALLOY_LMP.backward_files - else: - raise RuntimeError(f'unknown interaction {inter_type}') From 02f77a90248299ea647a8668f4ccff31eb9a2676 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 14:26:56 +0800 Subject: [PATCH 029/154] fix Lammps.py on line 78 --- dpgen/auto_test/Lammps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 8abc721e8..d261a6333 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -75,7 +75,7 @@ def make_input_file(self, task_param): lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) - dumpfn(os.path.join(output_dir, 'task.json'),indent=4) + dumpfn(task_param, os.path.join(output_dir, 'task.json'),indent=4) etol = 1e-12 ftol = 1e-6 From f2a9f2cdebd0e80fd8f22fd4fe261c5b7cdf901a Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 15:04:55 +0800 Subject: [PATCH 030/154] fix common_equi on get_structure position --- dpgen/auto_test/common_equi.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index bdc8ec532..1725f9fe7 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -10,6 +10,7 @@ lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] + def make_equi(confs, inter_param, relax_param): @@ -20,8 +21,8 @@ def make_equi(confs, ele_list = [key for key in inter_param['type_map'].keys()] else: ele_list = [key for key in inter_param['potcars'].keys()] - dlog.debug("ele_list %s"%':'.join(ele_list)) - conf_dirs =[] + dlog.debug("ele_list %s" % ':'.join(ele_list)) + conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() @@ -34,8 +35,8 @@ def make_equi(confs, for ii in conf_dirs: os.chdir(ii) crys_type = ii.split('/')[-1] - dlog.debug('crys_type: %s'%crys_type) - dlog.debug('pwd: %s'%os.getcwd()) + dlog.debug('crys_type: %s' % crys_type) + dlog.debug('pwd: %s' % os.getcwd()) if crys_type == 'std-fcc': if not os.path.exists('POSCAR'): crys.fcc(ele_list[0]).to('POSCAR', 'POSCAR') @@ -54,9 +55,6 @@ def make_equi(confs, elif crys_type == 'std-sc': if not os.path.exists('POSCAR'): crys.sc(ele_list[0]).to('POSCAR', 'POSCAR') - elif 'mp-' in crys_type: - if not os.path.exists('POSCAR'): - get_structure(crys_type).to('POSCAR', 'POSCAR') os.chdir(cwd) task_dirs = [] @@ -64,6 +62,12 @@ def make_equi(confs, # if mp-xxx/exists then print a warning and exit. # ... for ii in conf_dirs: + crys_type = ii.split('/')[-1] + dlog.debug('crys_type: %s' % crys_type) + + if 'mp-' in crys_type and not os.path.exists(os.path.join(ii, 'POSCAR')): + get_structure(crys_type).to('POSCAR', os.path.join(ii, 'POSCAR')) + poscar = os.path.abspath(os.path.join(ii, 'POSCAR')) if not os.path.exists(poscar): raise FileNotFoundError('no configuration for autotest') @@ -82,7 +86,7 @@ def make_equi(confs, # generate task files for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') - dlog.debug('task_dir %s'%ii) + dlog.debug('task_dir %s' % ii) inter = make_task(inter_param, poscar) inter.make_potential_files(ii) inter.make_input_file(ii, 'relaxation', relax_param) @@ -163,6 +167,6 @@ def post_equi(confs, inter_param): for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') inter = make_task(inter_param, poscar) - res = inter.compute(ii,inter_param) + res = inter.compute(ii, inter_param) with open(os.path.join(ii, 'result.json'), 'w') as fp: json.dump(res, fp, indent=4) From fdbcdd174d8468c34dc3d7d63865fb1f328bc2cd Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 15:19:19 +0800 Subject: [PATCH 031/154] fix Lammps.py bug --- dpgen/auto_test/Lammps.py | 19 +++++++++++++++---- dpgen/auto_test/Property.py | 4 ++-- dpgen/auto_test/VASP.py | 4 ++-- .../{common_task.py => calculator.py} | 9 ++++----- dpgen/auto_test/common_equi.py | 18 +++++++++--------- dpgen/auto_test/common_prop.py | 19 ++++++++----------- 6 files changed, 40 insertions(+), 33 deletions(-) rename dpgen/auto_test/{common_task.py => calculator.py} (77%) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index d261a6333..53a3d2e84 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -3,6 +3,7 @@ import json import dpdata import dpgen.auto_test.lib.lammps as lammps +from dpgen import dlog from monty.serialization import loadfn,dumpfn from dpgen.auto_test.Task import Task from dpgen.auto_test.lib.lammps import inter_deepmd,inter_meam,inter_eam_fs,inter_eam_alloy @@ -155,12 +156,22 @@ def compute(self, epa = float(ii.split('=')[1].split()[0]) dump = os.path.join(output_dir, 'dump.relax') + _tmp=inter_param['type_map'] + dlog.debug(_tmp) + type_map={k:v for v,k in _tmp.items()} + dlog.debug(type_map) + type_map_list=[] + for ii in range(len(type_map)): + type_map_list.append(type_map[ii]) contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump',) + d_dump = dpdata.System(dump, fmt='lammps/dump',type_map=type_map_list) d_dump.to('vasp/poscar', contcar, frame_idx=-1) - force = d_dump['forces'] - result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} + #TODO parsing force via dpdata + #force = d_dump['forces'] + force=[] + + result_dict = {"energy": natoms * epa, "force":force} return result_dict def forward_files(self): @@ -176,4 +187,4 @@ def forward_common_files(self): return ['in.lammps', os.path.basename(self.model)] def backward_files(self): - return ['log.lammps', 'lmp.out', 'dump.relax'] + return ['log.lammps', 'outlog', 'dump.relax'] diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index d25fcde2d..f0120b9f1 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -1,6 +1,6 @@ import os,glob,json from abc import ABC,abstractmethod -from dpgen.auto_test.common_task import make_task +from dpgen.auto_test.calculator import make_calculator class Property (ABC) : @abstractmethod @@ -84,7 +84,7 @@ def compute(self, with open(os.path.join(ii, 'inter.json')) as fp: idata = json.load(fp) poscar = os.path.join(ii, 'POSCAR') - task = make_task(idata, poscar) + task = make_calculator(idata, poscar) res = task.compute(ii) all_res.append(res) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 946a81cc8..76588d0f0 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -124,7 +124,7 @@ def make_input_file(self, kp.write_file(os.path.join(output_dir, "KPOINTS")) def compute(self, - output_dir): + output_dir,inter_param=None): outcar = os.path.join(output_dir, 'OUTCAR') if not os.path.isfile(outcar): dlog.warning("cannot find OUTCAR in " + output_dir + " skip") @@ -144,4 +144,4 @@ def forward_common_files(self): return ['INCAR', 'POTCAR'] def backward_files(self): - return ['OUTCAR', 'VASP.out', 'CONTCAR', 'OSZICAR'] + return ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] diff --git a/dpgen/auto_test/common_task.py b/dpgen/auto_test/calculator.py similarity index 77% rename from dpgen/auto_test/common_task.py rename to dpgen/auto_test/calculator.py index 7fb6523bd..b9204ba19 100644 --- a/dpgen/auto_test/common_task.py +++ b/dpgen/auto_test/calculator.py @@ -1,13 +1,9 @@ import os -import dpgen.auto_test.lib.crys as crys -import glob, warnings, json -import dpgen.auto_test.lib.util as util - from dpgen.auto_test.VASP import VASP from dpgen.auto_test.Lammps import Lammps -def make_task(inter_parameter, +def make_calculator(inter_parameter, path_to_poscar): """ Make an instance of Task @@ -17,6 +13,9 @@ def make_task(inter_parameter, return VASP(inter_parameter, path_to_poscar) elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: return Lammps(inter_parameter, path_to_poscar) +# if inter_type == 'siesta': +# return Siesta(inter_parameter, path_to_poscar) +# pass else: raise RuntimeError(f'unsupported interaction {inter_type}') diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index bdc8ec532..3d37d6f7f 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -4,7 +4,7 @@ import dpgen.auto_test.lib.util as util from dpgen import dlog from dpgen.dispatcher.Dispatcher import make_dispatcher -from dpgen.auto_test.common_task import make_task +from dpgen.auto_test.calculator import make_calculator from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure @@ -83,7 +83,7 @@ def make_equi(confs, for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') dlog.debug('task_dir %s'%ii) - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) inter.make_potential_files(ii) inter.make_input_file(ii, 'relaxation', relax_param) @@ -117,10 +117,10 @@ def run_equi(confs, # dispatch the tasks # POSCAR here is useless - virtual_task = make_task(inter_param, "POSCAR") - forward_files = virtual_task.forward_files() - forward_common_files = virtual_task.forward_common_files() - backward_files = virtual_task.backward_files() + virutual_calculator = make_calculator(inter_param, "POSCAR") + forward_files = virutual_calculator.forward_files() + forward_common_files = virutual_calculator.forward_common_files() + backward_files = virutual_calculator.backward_files() # backward_files += logs # ... run_tasks = util.collect_task(all_task, inter_type) @@ -140,8 +140,8 @@ def run_equi(confs, forward_common_files, forward_files, backward_files, - outlog='lmp.out', - errlog='lmp.err') + outlog='outlog', + errlog='errlog') def post_equi(confs, inter_param): @@ -162,7 +162,7 @@ def post_equi(confs, inter_param): # dump the relaxation result. for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) res = inter.compute(ii,inter_param) with open(os.path.join(ii, 'result.json'), 'w') as fp: json.dump(res, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 85ea458e3..d68eae4a7 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -4,11 +4,8 @@ from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface -from dpgen.auto_test.common_task import make_task -<<<<<<< HEAD -======= +from dpgen.auto_test.calculator import make_calculator from dpgen import dlog ->>>>>>> 02f77a90248299ea647a8668f4ccff31eb9a2676 import dpgen.auto_test.lib.crys as crys import glob, warnings, json @@ -80,7 +77,7 @@ def make_property(confs, for kk in task_list: poscar = os.path.join(kk, 'POSCAR') - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) inter.make_potential_files(kk) dlog.debug(prop.task_type()) ### debug inter.make_input_file(kk, prop.task_type(), prop.task_param()) @@ -121,10 +118,10 @@ def run_property(confs, # dispatch the tasks # POSCAR here is useless - virtual_task = make_task(inter_param, "POSCAR") - forward_files = virtual_task.forward_files() - forward_common_files = virtual_task.forward_common_files() - backward_files = virtual_task.backward_files() + virutual_calculator = make_calculator(inter_param, "POSCAR") + forward_files = virutual_calculator.forward_files() + forward_common_files = virutual_calculator.forward_common_files() + backward_files = virutual_calculator.backward_files() # backward_files += logs # ... inter_type = inter_param['type'] @@ -154,8 +151,8 @@ def run_property(confs, forward_common_files, forward_files, backward_files, - outlog='lmp.out', - errlog='lmp.err') + outlog='outlog', + errlog='errlog') def post_property(confs, From 663d596b538039c1c479514dae2d28dd637cc9df Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 15:22:54 +0800 Subject: [PATCH 032/154] fix common_equi on get_structure position --- dpgen/auto_test/common_equi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 1725f9fe7..f21af7553 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -64,7 +64,7 @@ def make_equi(confs, for ii in conf_dirs: crys_type = ii.split('/')[-1] dlog.debug('crys_type: %s' % crys_type) - + if 'mp-' in crys_type and not os.path.exists(os.path.join(ii, 'POSCAR')): get_structure(crys_type).to('POSCAR', os.path.join(ii, 'POSCAR')) From 389b3665e0b76e364e3fd3b8db47187b0ccba6cf Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 15:34:08 +0800 Subject: [PATCH 033/154] delete redundant file --- dpgen/auto_test/DEEPMD_LMP.py | 145 ---------------------------- dpgen/auto_test/EAM_ALLOY_LMP.py | 146 ---------------------------- dpgen/auto_test/EAM_FS_LMP.py | 146 ---------------------------- dpgen/auto_test/MEAM_LMP.py | 159 ------------------------------- dpgen/auto_test/common_equi.py | 5 +- dpgen/auto_test/common_prop.py | 8 +- 6 files changed, 6 insertions(+), 603 deletions(-) delete mode 100644 dpgen/auto_test/DEEPMD_LMP.py delete mode 100644 dpgen/auto_test/EAM_ALLOY_LMP.py delete mode 100644 dpgen/auto_test/EAM_FS_LMP.py delete mode 100644 dpgen/auto_test/MEAM_LMP.py diff --git a/dpgen/auto_test/DEEPMD_LMP.py b/dpgen/auto_test/DEEPMD_LMP.py deleted file mode 100644 index ced229a24..000000000 --- a/dpgen/auto_test/DEEPMD_LMP.py +++ /dev/null @@ -1,145 +0,0 @@ -import os -import warnings -import json -import dpdata -import dpgen.auto_test.lib.lammps as lammps -from dpgen.auto_test.Task import Task - - -class DEEPMD_LMP(Task): - def __init__(self, - inter_parameter, - path_to_poscar): - self.inter = inter_parameter - self.model = os.path.abspath(inter_parameter['model']) - self.type_map = inter_parameter['type_map'] - self.path_to_poscar = path_to_poscar - - def make_potential_files(self, - output_dir): - model_file = os.path.basename(self.model) - cwd = os.getcwd() - os.chdir(output_dir) - if os.path.islink(model_file): - link_file = os.readlink(model_file) - if not os.path.abspath(link_file) == self.model: - os.remove(model_file) - os.symlink(os.path.relpath(self.model), model_file) - else: - os.symlink(os.path.relpath(self.model), model_file) - os.chdir(cwd) - - with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: - json.dump(self.inter, fp, indent=4) - - def make_input_file(self, - output_dir, - task_type, - task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) - with open(os.path.join(output_dir, 'task.json'), 'w') as fp: - json.dump(task_param, fp, indent=4) - # lines in lammps.in related to model - # line_model = lammps.inter_deepmd(self.inter) - # line_model = "pair_style deepmd %s \n" % (os.path.basename(self.model)) - # line_model += "pair_coeff\n - - etol = 1e-12 - ftol = 1e-6 - maxiter = 5000 - maxeval = 500000 - change_box = True - B0 = 70 - bp = 0 - scale2equi = 1 - ntypes = len(self.type_map) - reprod_opt = False - static = False - - if 'etol' in task_param: - etol = task_param['etol'] - if 'ftol' in task_param: - ftol = task_param['ftol'] - if 'maxiter' in task_param: - maxiter = task_param['maxiter'] - if 'maxeval' in task_param: - maxeval = task_param['maxeval'] - if 'change_box' in task_param: - change_box = task_param['change_box'] - if 'scale2equi' in task_param: - scale2equi = task_param['scale2equi'] - if 'reprod_opt' in task_param: - reprod_opt = task_param['reprod_opt'] - if 'static-opt' in task_param: - static = task_param['static-opt'] - - model_name = os.path.basename(self.model) - deepmd_version = self.inter.get("deepmd_version", "0.12") - - model_param = {'model_name': [model_name], - 'param_type': self.type_map, - 'deepmd_version': deepmd_version} - - fc = '' - if task_type == 'relaxation' \ - or (task_type == 'eos' and not change_box) \ - or (task_type == 'surface' and not static): - fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_deepmd, model_param, - etol, ftol, maxiter, maxeval, change_box) - - if task_type == 'static' \ - or (task_type == 'surface' and static): - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_deepmd, model_param) - - if task_type == 'elastic': - fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_deepmd, model_param, - etol, ftol, maxiter, maxeval) - - if task_type == 'vacancy' \ - or (task_type == 'eos' and change_box) \ - or (task_type == 'interstitial'): - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_deepmd, - model_param, B0, bp, etol, ftol, maxiter, maxeval) - if reprod_opt: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_deepmd, model_param) - - with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: - fp.write(fc) - - def compute(self, - output_dir): - log_lammps = os.path.join(output_dir, 'log.lammps') - if not os.path.isfile(log_lammps): - warnings.warn("cannot find log.lammps in " + output_dir + " skip") - return None - else: - with open(log_lammps, 'r') as fp: - if 'Total wall time:' not in fp.read(): - warnings.warn("lammps not finished " + log_lammps + " skip") - return None - else: - fp.seek(0) - lines = fp.read().split('\n') - for ii in lines: - if ("Total number of atoms" in ii) and (not 'print' in ii): - natoms = float(ii.split('=')[1].split()[0]) - if ("Final energy per atoms" in ii) and (not 'print' in ii): - epa = float(ii.split('=')[1].split()[0]) - - dump = os.path.join(output_dir, 'dump.relax') - contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump') - d_dump.to('vasp/poscar', contcar, frame_idx=-1) - force = d_dump['forces'] - - result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} - return result_dict - - def forward_files(self): - return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] - - def forward_common_files(self): - return ['in.lammps', os.path.basename(self.model)] - - def backward_files(self): - return ['log.lammps', 'deepmd.out', 'dump.relax'] diff --git a/dpgen/auto_test/EAM_ALLOY_LMP.py b/dpgen/auto_test/EAM_ALLOY_LMP.py deleted file mode 100644 index 8311ebddb..000000000 --- a/dpgen/auto_test/EAM_ALLOY_LMP.py +++ /dev/null @@ -1,146 +0,0 @@ -import os -import warnings -import json -import dpdata -import dpgen.auto_test.lib.lammps as lammps -from dpgen.auto_test.Task import Task - - -class EAM_ALLOY_LMP(Task): - def __init__(self, - inter_parameter, - path_to_poscar): - self.inter = inter_parameter - self.model = os.path.abspath(inter_parameter['model']) - self.type_map = inter_parameter['type_map'] - self.path_to_poscar = path_to_poscar - - def make_potential_files(self, - output_dir): - model_file = os.path.basename(self.model) - cwd = os.getcwd() - os.chdir(output_dir) - if os.path.islink(model_file): - link_file = os.readlink(model_file) - if not os.path.abspath(link_file) == self.model: - os.remove(model_file) - os.symlink(os.path.relpath(self.model), model_file) - else: - os.symlink(os.path.relpath(self.model), model_file) - os.chdir(cwd) - - with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: - json.dump(self.inter, fp, indent=4) - - def make_input_file(self, - output_dir, - task_type, - task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) - with open(os.path.join(output_dir, 'task.json'), 'w') as fp: - json.dump(task_param, fp, indent=4) - # lines in lammps.in related to model - # line_model = "pair_style eam/alloy \n" - # line_model += "pair_coeff * * %s " % (os.path.basename(self.model)) - # for ii in self.type_map: - # line_model += ii + ' ' - # line_model += '\n' - - etol = 1e-12 - ftol = 1e-6 - maxiter = 5000 - maxeval = 500000 - change_box = True - B0 = 70 - bp = 0 - scale2equi = 1 - ntypes = len(self.type_map) - reprod_opt = False - static = False - - if 'etol' in task_param: - etol = task_param['etol'] - if 'ftol' in task_param: - ftol = task_param['ftol'] - if 'maxiter' in task_param: - maxiter = task_param['maxiter'] - if 'maxeval' in task_param: - maxeval = task_param['maxeval'] - if 'change_box' in task_param: - change_box = task_param['change_box'] - if 'scale2equi' in task_param: - scale2equi = task_param['scale2equi'] - if 'reprod_opt' in task_param: - reprod_opt = task_param['reprod_opt'] - if 'static-opt' in task_param: - static = task_param['static-opt'] - - model_name = os.path.basename(self.model) - - model_param = {'model_name': model_name, - 'param_type': self.type_map} - - fc = '' - if task_type == 'relaxation' \ - or (task_type == 'eos' and not change_box) \ - or (task_type == 'surface' and not static): - fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param, - etol, ftol, maxiter, maxeval, change_box) - - if task_type == 'static' \ - or (task_type == 'surface' and static): - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param) - - if task_type == 'elastic': - fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param, - etol, ftol, maxiter, maxeval) - - if task_type == 'vacancy' \ - or (task_type == 'eos' and change_box) \ - or (task_type == 'interstitial' and not reprod_opt): - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_eam_alloy, - model_param, B0, bp, etol, ftol, maxiter, maxeval) - - if reprod_opt: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_alloy, model_param) - - with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: - fp.write(fc) - - def compute(self, - output_dir): - log_lammps = os.path.join(output_dir, 'log.lammps') - if not os.path.isfile(log_lammps): - warnings.warn("cannot find log.lammps in " + output_dir + " skip") - return None - else: - with open(log_lammps, 'r') as fp: - if 'Total wall time:' not in fp.read(): - warnings.warn("lammps not finished " + log_lammps + " skip") - return None - else: - fp.seek(0) - lines = fp.read().split('\n') - for ii in lines: - if ("Total number of atoms" in ii) and (not 'print' in ii): - natoms = float(ii.split('=')[1].split()[0]) - if ("Final energy per atoms" in ii) and (not 'print' in ii): - epa = float(ii.split('=')[1].split()[0]) - - dump = os.path.join(output_dir, 'dump.relax') - contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump') - d_dump.to('vasp/poscar', contcar, frame_idx=-1) - force = d_dump['forces'] - - result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} - return result_dict - - def forward_files(self): - return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] - - def forward_common_files(self): - return ['in.lammps', os.path.basename(self.model)] - - def backward_files(self): - return ['log.lammps', 'eam_alloy.out', 'dump.relax'] diff --git a/dpgen/auto_test/EAM_FS_LMP.py b/dpgen/auto_test/EAM_FS_LMP.py deleted file mode 100644 index b2c208636..000000000 --- a/dpgen/auto_test/EAM_FS_LMP.py +++ /dev/null @@ -1,146 +0,0 @@ -import os -import warnings -import json -import dpdata -import dpgen.auto_test.lib.lammps as lammps -from dpgen.auto_test.Task import Task - - -class EAM_FS_LMP(Task): - def __init__(self, - inter_parameter, - path_to_poscar): - self.inter = inter_parameter - self.model = os.path.abspath(inter_parameter['model']) - self.type_map = inter_parameter['type_map'] - self.path_to_poscar = path_to_poscar - - def make_potential_files(self, - output_dir): - model_file = os.path.basename(self.model) - cwd = os.getcwd() - os.chdir(output_dir) - if os.path.islink(model_file): - link_file = os.readlink(model_file) - if not os.path.abspath(link_file) == self.model: - os.remove(model_file) - os.symlink(os.path.relpath(self.model), model_file) - else: - os.symlink(os.path.relpath(self.model), model_file) - os.chdir(cwd) - - with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: - json.dump(self.inter, fp, indent=4) - - def make_input_file(self, - output_dir, - task_type, - task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) - with open(os.path.join(output_dir, 'task.json'), 'w') as fp: - json.dump(task_param, fp, indent=4) - # lines in lammps.in related to model - # line_model = "pair_style eam/fs \n" - # line_model += "pair_coeff * * %s " % (os.path.basename(self.model)) - # for ii in self.type_map: - # line_model += ii + ' ' - # line_model += '\n' - - etol = 1e-12 - ftol = 1e-6 - maxiter = 5000 - maxeval = 500000 - change_box = True - B0 = 70 - bp = 0 - scale2equi = 1 - ntypes = len(self.type_map) - reprod_opt = False - static = False - - if 'etol' in task_param: - etol = task_param['etol'] - if 'ftol' in task_param: - ftol = task_param['ftol'] - if 'maxiter' in task_param: - maxiter = task_param['maxiter'] - if 'maxeval' in task_param: - maxeval = task_param['maxeval'] - if 'change_box' in task_param: - change_box = task_param['change_box'] - if 'scale2equi' in task_param: - scale2equi = task_param['scale2equi'] - if 'reprod_opt' in task_param: - reprod_opt = task_param['reprod_opt'] - if 'static-opt' in task_param: - static = task_param['static-opt'] - - model_name = os.path.basename(self.model) - - model_param = {'model_name': model_name, - 'param_type': self.type_map} - - fc = '' - if task_type == 'relaxation' \ - or (task_type == 'eos' and not change_box) \ - or (task_type == 'surface' and not static): - fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_eam_fs, model_param, - etol, ftol, maxiter, maxeval, change_box) - - if task_type == 'static' \ - or (task_type == 'surface' and static): - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_fs, model_param) - - if task_type == 'elastic': - fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_eam_fs, model_param, - etol, ftol, maxiter, maxeval) - - if task_type == 'vacancy' \ - or (task_type == 'eos' and change_box) \ - or (task_type == 'interstitial'): - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_eam_fs, - model_param, B0, bp, etol, ftol, maxiter, maxeval) - - if reprod_opt: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_eam_fs, model_param) - - with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: - fp.write(fc) - - def compute(self, - output_dir): - log_lammps = os.path.join(output_dir, 'log.lammps') - if not os.path.isfile(log_lammps): - warnings.warn("cannot find log.lammps in " + output_dir + " skip") - return None - else: - with open(log_lammps, 'r') as fp: - if 'Total wall time:' not in fp.read(): - warnings.warn("lammps not finished " + log_lammps + " skip") - return None - else: - fp.seek(0) - lines = fp.read().split('\n') - for ii in lines: - if ("Total number of atoms" in ii) and (not 'print' in ii): - natoms = float(ii.split('=')[1].split()[0]) - if ("Final energy per atoms" in ii) and (not 'print' in ii): - epa = float(ii.split('=')[1].split()[0]) - - dump = os.path.join(output_dir, 'dump.relax') - contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump') - d_dump.to('vasp/poscar', contcar, frame_idx=-1) - force = d_dump['forces'] - - result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms * 3))} - return result_dict - - def forward_files(self): - return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] - - def forward_common_files(self): - return ['in.lammps', os.path.basename(self.model)] - - def backward_files(self): - return ['log.lammps', 'eam_fs.out', 'dump.relax'] diff --git a/dpgen/auto_test/MEAM_LMP.py b/dpgen/auto_test/MEAM_LMP.py deleted file mode 100644 index 65a05dfc4..000000000 --- a/dpgen/auto_test/MEAM_LMP.py +++ /dev/null @@ -1,159 +0,0 @@ -import os -import warnings -import json -import dpdata -import dpgen.auto_test.lib.lammps as lammps -from dpgen.auto_test.Task import Task - - -class MEAM_LMP(Task): - def __init__(self, - inter_parameter, - path_to_poscar): - self.inter = inter_parameter - self.model = list(map(os.path.abspath,(inter_parameter['model']))) - self.type_map = inter_parameter['type_map'] - self.path_to_poscar = path_to_poscar - - def make_potential_files(self, - output_dir): - model_lib = os.path.basename(self.model[0]) - model_file = os.path.basename(self.model[1]) - cwd = os.getcwd() - os.chdir(output_dir) - if os.path.islink(model_lib): - link_lib = os.readlink(model_lib) - if not os.path.abspath(link_lib) == self.model[0]: - os.remove(model_lib) - os.symlink(os.path.relpath(self.model[0]), model_lib) - else: - os.symlink(os.path.relpath(self.model[0]), model_lib) - - if os.path.islink(model_file): - link_file = os.readlink(model_file) - if not os.path.abspath(link_file) == self.model[1]: - os.remove(model_file) - os.symlink(os.path.relpath(self.model[1]), model_file) - else: - os.symlink(os.path.relpath(self.model[1]), model_file) - - os.chdir(cwd) - - with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: - json.dump(self.inter, fp, indent=4) - - def make_input_file(self, - output_dir, - task_type, - task_param): - lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir,'conf.lmp')) - with open(os.path.join(output_dir, 'task.json'), 'w') as fp: - json.dump(task_param, fp, indent=4) - # lines in lammps.in related to model - # line_model = "pair_style meam \n" - # line_model += "pair_coeff * * %s " % (os.path.basename(self.model[0])) - # for ii in self.type_map: - # line_model += ii + ' ' - # line_model += "%s " % (os.path.basename(self.model[1])) - # for ii in self.type_map: - # line_model += ii + ' ' - # line_model += '\n' - - etol = 1e-12 - ftol = 1e-6 - maxiter = 5000 - maxeval = 500000 - change_box = True - B0 = 70 - bp = 0 - scale2equi = 1 - ntypes = len(self.type_map) - reprod_opt = False - static = False - - if 'etol' in task_param: - etol = task_param['etol'] - if 'ftol' in task_param: - ftol = task_param['ftol'] - if 'maxiter' in task_param: - maxiter = task_param['maxiter'] - if 'maxeval' in task_param: - maxeval = task_param['maxeval'] - if 'change_box' in task_param: - change_box = task_param['change_box'] - if 'scale2equi' in task_param: - scale2equi = task_param['scale2equi'] - if 'reprod_opt' in task_param: - reprod_opt = task_param['reprod_opt'] - if 'static-opt' in task_param: - static = task_param['static-opt'] - - model_name = list(map(os.path.basename,self.model)) - - model_param = {'model_name': model_name, - 'param_type': self.type_map} - - fc = '' - if task_type == 'relaxation' \ - or (task_type == 'eos' and not change_box) \ - or (task_type == 'surface' and not static): - fc = lammps.make_lammps_equi('conf.lmp', ntypes, lammps.inter_meam, model_param, - etol, ftol, maxiter, maxeval, change_box) - - if task_type == 'static' \ - or (task_type == 'surface' and static): - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_meam, model_param) - - if task_type == 'elastic': - fc = lammps.make_lammps_elastic('conf.lmp', ntypes, lammps.inter_meam, model_param, - etol, ftol, maxiter, maxeval) - - if task_type == 'vacancy' \ - or (task_type == 'eos' and change_box) \ - or (task_type == 'interstitial'): - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, lammps.inter_meam, - model_param, B0, bp, etol, ftol, maxiter, maxeval) - - if reprod_opt: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, lammps.inter_meam, model_param) - - with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: - fp.write(fc) - - def compute(self, - output_dir): - log_lammps = os.path.join(output_dir, 'log.lammps') - if not os.path.isfile(log_lammps): - warnings.warn("cannot find log.lammps in " + output_dir + " skip") - return None - else: - with open(log_lammps, 'r') as fp: - if 'Total wall time:' not in fp.read(): - warnings.warn("lammps not finished " + log_lammps + " skip") - return None - else: - fp.seek(0) - lines = fp.read().split('\n') - for ii in lines: - if ("Total number of atoms" in ii) and (not 'print' in ii): - natoms = float(ii.split('=')[1].split()[0]) - if ("Final energy per atoms" in ii) and (not 'print' in ii): - epa = float(ii.split('=')[1].split()[0]) - - dump = os.path.join(output_dir, 'dump.relax') - contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump') - d_dump.to('vasp/poscar', contcar, frame_idx=-1) - force = d_dump['forces'] - - result_dict = {"energy": natoms * epa, "force": list(force[-1].reshape(natoms))} - return result_dict - - def forward_files(self): - return ['conf.lmp', 'in.lammps', list(map(os.path.basename,self.model))] - - def forward_common_files(self): - return ['in.lammps', list(map(os.path.basename,self.model))] - - def backward_files(self): - return ['log.lammps', 'meam.out', 'dump.relax'] diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 3d37d6f7f..bbf2af6ed 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -7,6 +7,7 @@ from dpgen.auto_test.calculator import make_calculator from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure +from monty.serialization import loadfn,dumpfn lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -164,5 +165,5 @@ def post_equi(confs, inter_param): poscar = os.path.join(ii, 'POSCAR') inter = make_calculator(inter_param, poscar) res = inter.compute(ii,inter_param) - with open(os.path.join(ii, 'result.json'), 'w') as fp: - json.dump(res, fp, indent=4) + + dumpfn(ret,os.path.join(ii, 'result.json'),indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index d68eae4a7..5b7dc2dd1 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -1,4 +1,4 @@ -import os +import os,glob from dpgen.auto_test.EOS import EOS from dpgen.auto_test.Elastic import Elastic from dpgen.auto_test.Vacancy import Vacancy @@ -7,11 +7,9 @@ from dpgen.auto_test.calculator import make_calculator from dpgen import dlog -import dpgen.auto_test.lib.crys as crys -import glob, warnings, json -from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine import dpgen.auto_test.lib.util as util from dpgen.dispatcher.Dispatcher import make_dispatcher +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -68,7 +66,7 @@ def make_property(confs, path_to_work = os.path.join(ii, property_type + '_' + suffix) if os.path.exists(path_to_work): - warnings.warn('%s already exists' % path_to_work) + dlog.warning('%s already exists' % path_to_work) else: os.makedirs(path_to_work) From 2199a1dcc1416261223fe2c81b98a450d8236d64 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 15:35:55 +0800 Subject: [PATCH 034/154] delete old version --- dpgen/auto_test/cmpt_00_equi.py | 120 -------- dpgen/auto_test/cmpt_01_eos.py | 81 ----- dpgen/auto_test/cmpt_02_elastic.py | 139 --------- dpgen/auto_test/cmpt_03_vacancy.py | 136 --------- dpgen/auto_test/cmpt_04_interstitial.py | 177 ----------- dpgen/auto_test/cmpt_05_surf.py | 134 -------- dpgen/auto_test/cmpt_06_phonon.py | 117 ------- dpgen/auto_test/gen_00_equi.py | 193 ------------ dpgen/auto_test/gen_01_eos.py | 358 ---------------------- dpgen/auto_test/gen_02_elastic.py | 258 ---------------- dpgen/auto_test/gen_03_vacancy.py | 245 --------------- dpgen/auto_test/gen_04_interstitial.py | 391 ------------------------ dpgen/auto_test/gen_05_surf.py | 299 ------------------ dpgen/auto_test/gen_06_phonon.py | 287 ----------------- 14 files changed, 2935 deletions(-) delete mode 100755 dpgen/auto_test/cmpt_00_equi.py delete mode 100755 dpgen/auto_test/cmpt_01_eos.py delete mode 100755 dpgen/auto_test/cmpt_02_elastic.py delete mode 100755 dpgen/auto_test/cmpt_03_vacancy.py delete mode 100755 dpgen/auto_test/cmpt_04_interstitial.py delete mode 100755 dpgen/auto_test/cmpt_05_surf.py delete mode 100644 dpgen/auto_test/cmpt_06_phonon.py delete mode 100755 dpgen/auto_test/gen_00_equi.py delete mode 100755 dpgen/auto_test/gen_01_eos.py delete mode 100755 dpgen/auto_test/gen_02_elastic.py delete mode 100755 dpgen/auto_test/gen_03_vacancy.py delete mode 100755 dpgen/auto_test/gen_04_interstitial.py delete mode 100755 dpgen/auto_test/gen_05_surf.py delete mode 100644 dpgen/auto_test/gen_06_phonon.py diff --git a/dpgen/auto_test/cmpt_00_equi.py b/dpgen/auto_test/cmpt_00_equi.py deleted file mode 100755 index cffa8faf5..000000000 --- a/dpgen/auto_test/cmpt_00_equi.py +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env python3 - -import os, glob, argparse, json, warnings, re -import numpy as np -import dpgen.auto_test.lib.lammps as lammps -import dpgen.auto_test.lib.vasp as vasp - -global_equi_name = '00.equi' - -def comput_e_shift(poscar, task_name) : - a_types = vasp.get_poscar_types(poscar) - a_natoms = vasp.get_poscar_natoms(poscar) - ener_shift = 0 - if len(a_types) > 1 : - if not os.path.isdir('stables') : - raise RuntimeError('no dir "stable". Stable energy and volume of components should be computed before calculating formation energy of an alloy') - for ii in range(len(a_types)) : - ref_e_file = a_types[ii] + '.' + task_name + '.e' - ref_e_file = os.path.join('stables', ref_e_file) - ener = float(open(ref_e_file).read()) - ener_shift += a_natoms[ii] * ener - return ener_shift - -def comput_lmp_nev(conf_dir, task_name,write_shift = False) : - conf_path = re.sub('confs', global_equi_name, conf_dir) - conf_path = os.path.abspath(conf_path) - poscar = os.path.join(conf_path, 'POSCAR') - ele_types = vasp.get_poscar_types(poscar) - - lmp_path = os.path.join(conf_path, task_name) - log_lammps = os.path.join(lmp_path, 'log.lammps') - if os.path.isfile(log_lammps): - natoms, epa, vpa = lammps.get_nev(log_lammps) - if write_shift and len(ele_types)>1: - ener_shift = comput_e_shift(poscar, task_name) - shift = (epa * natoms - ener_shift) / natoms - return natoms,epa,vpa,shift - if len(ele_types)==1: - stable_dir = 'stables' - os.makedirs(stable_dir, exist_ok=True) - name_prefix=os.path.join(stable_dir,'%s.%s' % (ele_types[0], task_name)) - open(name_prefix + '.e', 'w').write('%.16f\n' % (epa)) - open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa)) - return natoms, epa, vpa , None - else : - return None, None, None, None - -def comput_vasp_nev(jdata, conf_dir, write_shift = False) : - - conf_path = re.sub('confs', global_equi_name, conf_dir) - conf_path = os.path.abspath(conf_path) - poscar = os.path.join(conf_path, 'POSCAR') - ele_types = vasp.get_poscar_types(poscar) - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - vasp_path = os.path.join(conf_path, vasp_str) - outcar = os.path.join(vasp_path, 'OUTCAR') - # tag_fin = os.path.join(vasp_path, 'tag_finished') - if not os.path.isfile(outcar) : - warnings.warn("cannot find OUTCAR in "+vasp_path+" skip") - elif not vasp.check_finished(outcar): - warnings.warn("incomplete job "+vasp_path+" use the last frame") - if os.path.isfile(outcar): - natoms, epa, vpa = vasp.get_nev(outcar) - if write_shift and len(ele_types)>1: - ener_shift = comput_e_shift(poscar, vasp_str) - shift = (epa * natoms - ener_shift) / natoms - return natoms,epa,vpa,shift - if len(ele_types)==1: - stable_dir = 'stables' - os.makedirs(stable_dir, exist_ok=True) - name_prefix=os.path.join(stable_dir,'%s.'% (ele_types[0])+vasp_str) - open(name_prefix + '.e', 'w').write('%.16f\n' % (epa)) - open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa)) - return natoms, epa, vpa, None - else : - return None, None, None, None - -def _main(): - parser = argparse.ArgumentParser( - description="cmpt 00.equi") - parser.add_argument('TASK', type=str, - choices = ['all', 'vasp', 'deepmd', 'meam'], - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='the json param') - parser.add_argument('CONF', type=str, - help='the dir of conf') - parser.add_argument('-s','--stable', action = 'store_true', - help='the dir of conf') - args = parser.parse_args() - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - if args.TASK == 'all' : - ln, le, lv = comput_lmp_nev(args.CONF, 'deepmd', args.stable) - mn, me, mv = comput_lmp_nev(args.CONF, 'meam', args.stable) - vn, ve, vv = comput_vasp_nev(jdata, args.CONF, args.stable) - if le == None or ve == None or lv == None or vv == None: - print("%s" % args.CONF) - else : - print("%s\t %8.4f %8.4f %8.4f %7.3f %7.3f %7.3f %8.4f %7.3f" % (args.CONF, ve, le, (me), vv, lv, (mv), (le-ve), (lv-vv))) - elif args.TASK == 'vasp' : - vn, ve, vv = comput_vasp_nev(jdata, args.CONF, args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, ve, vv)) - elif args.TASK == 'deepmd' : - ln, le, lv = comput_lmp_nev(args.CONF, 'deepmd', args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, le, lv)) - elif args.TASK == 'meam' : - ln, le, lv = comput_lmp_nev(args.CONF, 'meam', args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, le, lv)) - - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_01_eos.py b/dpgen/auto_test/cmpt_01_eos.py deleted file mode 100755 index 385475059..000000000 --- a/dpgen/auto_test/cmpt_01_eos.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 - -import os, glob, argparse, json, re -import dpgen.auto_test.lib.util as util -import dpgen.auto_test.lib.lammps as lammps -import dpgen.auto_test.lib.vasp as vasp - -global_task_name = '01.eos' - -def comput_lmp_eos(jdata,conf_dir, task_name) : - conf_path = re.sub('confs', global_task_name, conf_dir) - conf_path = os.path.abspath(conf_path) - conf_path = os.path.join(conf_path, task_name) - vol_paths = glob.glob(os.path.join(conf_path, 'vol-*')) - vol_paths.sort(key=lambda k : float(k.split('-')[-1])) - result = os.path.join(conf_path,'result') - print('Vpa(A^3)\tEpA(eV)') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n VpA(A^3) EpA(eV)\n'% (conf_dir)) - for ii in vol_paths : - log_lammps = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(log_lammps) - print(vpa, epa) - fp.write('%7.3f %8.4f \n' % (vpa,epa)) - fp.close() - if 'upload_username' in jdata.keys() and task_name =='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('eos','deepmd',upload_username,result) - -def comput_vasp_eos(jdata, conf_dir) : - conf_path = re.sub('confs', global_task_name, conf_dir) - conf_path = os.path.abspath(conf_path) - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - task_path = os.path.join(conf_path, vasp_str) - vol_paths = glob.glob(os.path.join(task_path, 'vol-*')) - vol_paths.sort(key=lambda k : float(k.split('-')[-1])) - result = os.path.join(task_path,'result') - print('Vpa(A^3)\tEpA(eV)') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n VpA(A^3) EpA(eV)\n'% (conf_dir)) - for ii in vol_paths : - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - print(vpa, epa) - fp.write('%7.3f %8.4f \n' % (vpa,epa)) - fp.close() - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('eos','vasp',upload_username,result) - -def _main(): - parser = argparse.ArgumentParser( - description="cmpt 01.eos") - parser.add_argument('TASK', type=str, - choices = ['vasp', 'deepmd', 'meam'], - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - if args.TASK == 'vasp': - comput_vasp_eos(jdata, args.CONF) - elif args.TASK == 'deepmd' : - comput_lmp_eos(jdata,args.CONF, args.TASK) - elif args.TASK == 'meam' : - comput_lmp_eos(jdata,args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_02_elastic.py b/dpgen/auto_test/cmpt_02_elastic.py deleted file mode 100755 index b1a0c9229..000000000 --- a/dpgen/auto_test/cmpt_02_elastic.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -import dpgen.auto_test.lib.util as util -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '02.elastic' - -def result_et(et,conf_dir,result): - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - for ii in range(6) : - for jj in range(6) : - fp.write ("%7.2f " % (et.voigt[ii][jj] / 1e4)) - fp.write('\n') - BV = et.k_voigt / 1e4 - GV = et.g_voigt / 1e4 - EV = 9*BV*GV/(3*BV+GV) - uV = 0.5*(3*BV-2*GV)/(3*BV+GV) - fp.write("# Bulk Modulus BV = %.2f GPa\n" % (BV)) - fp.write("# Shear Modulus GV = %.2f GPa\n" % (GV)) - fp.write("# Youngs Modulus EV = %.2f GPa\n" % (EV)) - fp.write("# Poission Ratio uV = %.2f \n" % (uV)) - fp.close() - - -def print_et (et): - for ii in range(6) : - for jj in range(6) : - sys.stdout.write ("%7.2f " % (et.voigt[ii][jj] / 1e4)) - sys.stdout.write('\n') - BV = et.k_voigt / 1e4 - GV = et.g_voigt / 1e4 - EV = 9*BV*GV/(3*BV+GV) - uV = 0.5*(3*BV-2*GV)/(3*BV+GV) - print("# Bulk Modulus BV = %.2f GPa" % (BV)) - print("# Shear Modulus GV = %.2f GPa" % (GV)) - print("# Youngs Modulus EV = %.2f GPa" % (EV)) - print("# Poission Ratio uV = %.2f " % (uV)) - -def cmpt_vasp(jdata, conf_dir) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - task_path = os.path.join(task_path, vasp_str) - - equi_stress = Stress(np.loadtxt(os.path.join(task_path, 'equi.stress.out'))) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) - # convert from pressure in kB to stress - stress *= -1000 - lst_strain.append(Strain(strain)) - lst_stress.append(Stress(stress)) - et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = equi_stress, vasp = False) - # et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = None) - # bar to GPa - # et = -et / 1e4 - print_et(et) - result = os.path.join(task_path,'result') - result_et(et,conf_dir,result) - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('elastic','vasp',upload_username,result) - - -def cmpt_deepmd_lammps(jdata, conf_dir, task_name) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_name) - equi_stress = Stress(np.loadtxt(os.path.join(task_path, 'equi.stress.out'))) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) - # convert from pressure to stress - stress = -stress - lst_strain.append(Strain(strain)) - lst_stress.append(Stress(stress)) - et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = equi_stress, vasp = False) - # et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = None) - # bar to GPa - # et = -et / 1e4 - print_et(et) - result = os.path.join(task_path,'result') - result_et(et,conf_dir,result) - if 'upload_username' in jdata.keys() and task_name=='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('elastic','deepmd',upload_username,result) - - - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 02.elastic") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_03_vacancy.py b/dpgen/auto_test/cmpt_03_vacancy.py deleted file mode 100755 index a53602d38..000000000 --- a/dpgen/auto_test/cmpt_03_vacancy.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '03.vacancy' - -def comput_e_shift(poscar, task_name) : - a_types = vasp.get_poscar_types(poscar) - a_natoms = vasp.get_poscar_natoms(poscar) - ener_shift = 0 - if not os.path.isdir('stables') : - raise RuntimeError('no dir "stable". Stable energy and volume of components should be computed before calculating formation energy of an alloy') - for ii in range(len(a_types)) : - ref_e_file = a_types[ii] + '.' + task_name + '.e' - ref_e_file = os.path.join('stables', ref_e_file) - ener = float(open(ref_e_file).read()) - ener_shift += a_natoms[ii] * ener - return ener_shift - -def cmpt_vasp(jdata, conf_dir, supercell) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - print("# ", task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-*' % (copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - struct_poscar = os.path.join(ii, 'POSCAR') - #energy_shift = comput_e_shift(struct_poscar, vasp_str) - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.write("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.close() - # evac = epa * natoms - energy_shift - # sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, energy_shift)) - # sys.stdout.write ("%s: %7.3f \n" % (structure_dir, evac)) - -def cmpt_deepmd_lammps(jdata, conf_dir, supercell, task_name) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - print("# ", task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-*' % (copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - struct_poscar = os.path.join(ii, 'POSCAR') - #energy_shift = comput_e_shift(struct_poscar, task_name) - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.close() - # evac = epa * natoms - energy_shift - # sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, energy_shift)) - # sys.stdout.write ("%s: %7.3f\n" % (structure_dir, evac)) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 03.vacancy") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF, args.COPY) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_04_interstitial.py b/dpgen/auto_test/cmpt_04_interstitial.py deleted file mode 100755 index 6b029909c..000000000 --- a/dpgen/auto_test/cmpt_04_interstitial.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '04.interstitial' - -def cmpt_vasp(jdata, conf_dir, supercell, insert_ele) : - for ii in insert_ele: - _cmpt_vasp(jdata, conf_dir, supercell, ii) - -def _cmpt_vasp(jdata, conf_dir, supercell, insert_ele) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-%s-*' % (insert_ele, copy_str)) - print(struct_path_widecard) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.close() - -def cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_name) : - for ii in insert_ele: - _cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, ii, task_name) - -def _cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_name) : - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - vasp_path = os.path.join(task_path, vasp_str) - lmps_path = os.path.join(task_path, task_name + vasp_str.replace('vasp','')) - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_widecard = os.path.join(vasp_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - vasp_struct = glob.glob(struct_widecard) - vasp_struct.sort() - cwd=os.getcwd() - - for vs in vasp_struct : - # compute vasp - outcar = os.path.join(vs, 'OUTCAR') - vasp_ener = np.array(vasp.get_energies(outcar)) - vasp_ener_file = os.path.join(vs, 'ener.vasp.out') - # compute reprod - struct_basename = os.path.basename(vs) - ls = os.path.join(lmps_path, struct_basename) - frame_widecard = os.path.join(ls, 'frame.*') - frames = glob.glob(frame_widecard) - frames.sort() - lmp_ener = [] - for ii in frames : - log_lmp = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(log_lmp) - lmp_ener.append(epa) - lmp_ener = np.array(lmp_ener) - lmp_ener = np.reshape(lmp_ener, [-1,1]) - lmp_ener_file = os.path.join(ls, 'ener.lmp.out') - vasp_ener = np.reshape(vasp_ener, [-1,1]) / natoms - error_start = 1 - lmp_ener -= lmp_ener[-1] - vasp_ener[-1] - diff = lmp_ener - vasp_ener - diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) - np.savetxt(vasp_ener_file, vasp_ener[error_start:]) - np.savetxt(lmp_ener_file, lmp_ener[error_start:]) - print(os.path.basename(ls), 'EpA_std_err=',error) - -def cmpt_deepmd_lammps(jdata, conf_dir, supercell, insert_ele, task_name) : - for ii in insert_ele: - _cmpt_deepmd_lammps(jdata, conf_dir, supercell, ii, task_name) - -def _cmpt_deepmd_lammps(jdata, conf_dir, supercell, insert_ele, task_name) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name.split('-')[0]) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - print(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.close() - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 04.interstitial") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='define the supercell') - parser.add_argument('ELEMENT', type=str, nargs = '+', - help='the inserted element') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF, args.COPY, args.ELEMENT) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'deepmd-reprod' : - cmpt_deepmd_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'meam-reprod' : - cmpt_deepmd_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_05_surf.py b/dpgen/auto_test/cmpt_05_surf.py deleted file mode 100755 index fde28911d..000000000 --- a/dpgen/auto_test/cmpt_05_surf.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.util as util -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -global_equi_name = '00.equi' -global_task_name = '05.surf' - -def cmpt_vasp(jdata, conf_dir, static = False) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - if static : - if 'scf_incar' in jdata.keys(): - vasp_static_str='vasp-static-scf_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_static_str='vasp-static-k%.2f' % (kspacing) - task_path = os.path.join(task_path, vasp_static_str) - else : - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - struct_path_widecard = os.path.join(task_path, 'struct-*-m*m') - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s" % (conf_dir)) - sys.stdout.write ("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - if static : - e0 = np.array(vasp.get_energies(outcar)) / natoms - epa = e0[0] - boxes = vasp.get_boxes(outcar) - AA = np.linalg.norm(np.cross(boxes[0][0], boxes[0][1])) - Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 - evac = (epa * natoms - equi_epa * natoms) / AA * Cf - sys.stdout.write ("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.write("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.close() - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('surf','vasp',upload_username,result) - -def cmpt_deepmd_lammps(jdata, conf_dir, task_name, static = False) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name.split('-')[0]) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - struct_path_widecard = os.path.join(task_path, 'struct-*-m*m') - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s" % (conf_dir)) - sys.stdout.write ("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - AA = lammps.get_base_area(lmp_log) - Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 - evac = (epa * natoms - equi_epa * natoms) / AA * Cf - sys.stdout.write ("%s: \t%7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.write("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.close() - if 'upload_username' in jdata.keys() and task_name=='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('surf','deepmd',upload_username,result) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 05.surf") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'vasp-static': - cmpt_vasp(jdata, args.CONF, static = True) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'deepmd-static' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK, static = True) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam-static' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK, static = True) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_06_phonon.py b/dpgen/auto_test/cmpt_06_phonon.py deleted file mode 100644 index cefa615fe..000000000 --- a/dpgen/auto_test/cmpt_06_phonon.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from phonopy import Phonopy -from phonopy.structure.atoms import PhonopyAtoms - -import yaml -import phonopy - - - - -global_equi_name = '00.equi' -global_task_name = '06.phonon' - -''' -link poscar -link potcar -make incar -''' - -def get_force_from_dump(cell): - na=len(cell) - with open("dump.relax","r") as fp: - lines = fp.readlines() - flag=False - index=[] - forces=[] - for line in lines: - if flag: - data=line.split() - index.append(data[0]) - forces.append(data[5:9]) - if len(forces)==na: - break - if 'fx fy fz' in line: - flag=True - index = np.asarray(index, int) - indexing = np.argsort(index) - if len(forces)==na: - forces=np.asarray(np.reshape(forces,(na,3)),float)[indexing, :] - else: - raise RuntimeError('Incomplete result: dump.relax') - return forces - -def cmpt_vasp(jdata, conf_dir) : - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - supercell_matrix=jdata['supercell_matrix'] - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('vasprun.xml'): - os.system('phonopy --fc vasprun.xml') - if os.path.isfile('FORCE_CONSTANTS'): - os.system('phonopy --dim="%d %d %d" -c POSCAR-unitcell band.conf'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.system('phonopy-bandplot --gnuplot band.yaml > band.dat') - print('band.dat is created') - else: - print('FORCE_CONSTANTS No such file') - else: - print('vasprun.xml No such file') - - - -def cmpt_lammps(jdata, conf_dir, task_type) : - supercell_matrix=jdata['supercell_matrix'] - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - task_poscar = os.path.join(task_path, 'POSCAR') - - os.chdir(task_path) - if os.path.isfile('FORCE_CONSTANTS'): - os.system('phonopy --dim="%d %d %d" -c POSCAR band.conf'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.system('phonopy-bandplot --gnuplot band.yaml > band.dat') - else: - print('FORCE_CONSTANTS No such file') - - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 06.phonon") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - cmpt_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_00_equi.py b/dpgen/auto_test/gen_00_equi.py deleted file mode 100755 index a2b5b00c9..000000000 --- a/dpgen/auto_test/gen_00_equi.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_task_name = '00.equi' - -''' -link poscar -link potcar -make incar -''' -def make_vasp(jdata, conf_dir) : - conf_path = os.path.abspath(conf_dir) - equi_path = re.sub('confs', global_task_name, conf_path) - os.makedirs(equi_path, exist_ok = True) - cwd = os.getcwd() - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(equi_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(equi_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - is_alloy = \ - os.path.exists( - os.path.join( - os.path.join(conf_path, '..'), - 'alloy' - ) - ) - # read potcar - with open(to_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - isif = 3 - if incar.get('ISIF') != isif: - dlog.info("%s:%s setting ISIF to %d" % (__file__, make_vasp.__name__, isif)) - incar['ISIF'] = isif - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - vasp_path = os.path.join(equi_path, 'vasp-relax_incar' ) - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, is_alloy, True, True, npar, kpar, kspacing, kgamma) - vasp_path = os.path.join(equi_path, 'vasp-k%.2f' % kspacing) - - os.makedirs(vasp_path, exist_ok = True) - os.chdir(vasp_path) - - # write incar - with open('INCAR', 'w') as fp : - fp.write(fc) - - # gen poscar - if os.path.exists('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(to_poscar), 'POSCAR') - - # gen kpoints - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, 'cvasp.py') - - # gen potcar - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - os.chdir(cwd) - -def make_lammps (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - conf_path = os.path.abspath(conf_dir) - equi_path = re.sub('confs', global_task_name, conf_path) - os.makedirs(equi_path, exist_ok = True) - cwd = os.getcwd() - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(equi_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(equi_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - # lmp path - lmp_path = os.path.join(equi_path, task_type) - os.makedirs(lmp_path, exist_ok = True) - print(lmp_path) - # lmp conf - conf_file = os.path.join(lmp_path, 'conf.lmp') - lammps.cvt_lammps_conf(to_poscar, os.path.relpath(conf_file)) - ptypes = vasp.get_poscar_types(to_poscar) - lammps.apply_type_map(conf_file, type_map, ptypes) - # lmp input - if task_type=='deepmd': - fc = lammps.make_lammps_equi(os.path.basename(conf_file), - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type=='meam': - fc = lammps.make_lammps_equi(os.path.basename(conf_file), - ntypes, - lammps.inter_meam, - model_param) - with open(os.path.join(lmp_path, 'lammps.in'), 'w') as fp : - fp.write(fc) - # link models - os.chdir(lmp_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 00.equi") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_01_eos.py b/dpgen/auto_test/gen_01_eos.py deleted file mode 100755 index ba9fae386..000000000 --- a/dpgen/auto_test/gen_01_eos.py +++ /dev/null @@ -1,358 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from pymatgen.core.structure import Structure -from pymatgen.io.vasp import Incar -from dpgen import ROOT_PATH - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_equi_name = '00.equi' -global_task_name = '01.eos' - -''' -link poscar -link potcar -make incar -''' -def make_vasp(jdata, conf_dir) : - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - eos_relax_cell_shape = jdata.get('eos_relax_cell_shape', True) - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok = True) - # link poscar - cwd = os.getcwd() - from_poscar = os.path.join(equi_contcar) - to_poscar = os.path.join(task_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(task_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - vol_to_poscar = vasp.poscar_vol(to_poscar) / vasp.poscar_natoms(to_poscar) - # print(to_poscar, vol_to_poscar) - is_alloy = \ - os.path.exists( - os.path.join( - os.path.join(conf_path, '..'), - 'alloy' - ) - ) - # read potcar - with open(to_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - if eos_relax_cell_shape: - isif = 4 - else: - isif = 2 - if incar.get('ISIF') != isif: - dlog.info("%s:%s setting ISIF to %d" % (__file__, make_vasp.__name__, isif)) - incar['ISIF'] = isif - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, is_alloy, True, False, npar, kpar, kspacing, kgamma) - - os.chdir(task_path) - - with open('INCAR', 'w') as fp : - fp.write(fc) - # gen potcar - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # loop over volumes - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(task_path, 'vol-%.2f' % vol) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - for ii in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR'] : - if os.path.exists(ii) : - os.remove(ii) - # link incar, potcar - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - # gen poscar - os.symlink(os.path.relpath(to_poscar), 'POSCAR.orig') - scale = (vol / vol_to_poscar) ** (1./3.) - # print(scale) - vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) - # print(vol_path, vasp.poscar_vol('POSCAR') / vasp.poscar_natoms('POSCAR')) - # gen kpoints - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(vol_path,'cvasp.py')) - os.chdir(cwd) - - -def make_lammps (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - - # # get equi props - # equi_path = re.sub('confs', global_equi_name, conf_path) - # equi_path = os.path.join(equi_path, 'lmp') - # equi_log = os.path.join(equi_path, 'log.lammps') - # if not os.path.isfile(equi_log) : - # raise RuntimeError("the system should be equilibriated first") - # natoms, epa, vpa = lammps.get_nev(equi_log) - # task path - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - os.makedirs(task_path, exist_ok = True) - cwd = os.getcwd() - conf_path = os.path.abspath(conf_dir) - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(task_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(task_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - volume = vasp.poscar_vol(to_poscar) - natoms = vasp.poscar_natoms(to_poscar) - vpa = volume / natoms - # structrure - ss = Structure.from_file(to_poscar) - - # lmp path - lmp_path = os.path.join(task_path, task_type) - os.makedirs(lmp_path, exist_ok = True) - #Null lammps.in - f_lammps_in = os.path.join(lmp_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - None - # # lmp conf - # conf_file = os.path.join(lmp_path, 'conf.lmp') - # lammps.cvt_lammps_conf(to_poscar, conf_file) - # ptypes = vasp.get_poscar_types(to_poscar) - # lammps.apply_type_map(conf_file, deepmd_type_map, ptypes) - - os.chdir(lmp_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models =[os.path.join(lmp_path,ii) for ii in model_name] - - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(lmp_path, 'vol-%.2f' % vol) - print('# generate %s' % (vol_path)) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - #print(vol_path) - for ii in ['conf.lmp', 'conf.lmp'] + model_name : - if os.path.exists(ii) : - os.remove(ii) - # # link conf - # os.symlink(os.path.relpath(conf_file), 'conf.lmp') - # make conf - scale_ss = ss.copy() - scale_ss.scale_lattice(vol * natoms) - scale_ss.to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # make lammps input - scale = (vol / vpa) ** (1./3.) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale,lammps.inter_deepmd, model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale,lammps.inter_meam, model_param) - with open(os.path.join(vol_path, 'lammps.in'), 'w') as fp : - fp.write(fc) - os.chdir(cwd) - -def make_lammps_fixv (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - - - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - - # get equi props - equi_path = re.sub('confs', global_equi_name, conf_dir) - task_path = re.sub('confs', global_task_name, conf_dir) - equi_path = os.path.join(equi_path, task_type) - task_path = os.path.join(task_path, task_type) - equi_path = os.path.abspath(equi_path) - task_path = os.path.abspath(task_path) - equi_dump = os.path.join(equi_path, 'dump.relax') - os.makedirs(task_path, exist_ok = True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - - cwd = os.getcwd() - volume = vasp.poscar_vol(task_poscar) - natoms = vasp.poscar_natoms(task_poscar) - vpa = volume / natoms - # structrure - ss = Structure.from_file(task_poscar) - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param, - change_box = False) - elif task_type=='meam': - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_meam, - model_param, - change_box = False) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - # make vols - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(task_path, 'vol-%.2f' % vol) - print('# generate %s' % (vol_path)) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - for ii in ['conf.lmp', 'conf.lmp', 'lammps.in'] + model_name : - if os.path.exists(ii) : - os.remove(ii) - # make conf - scale_ss = ss.copy() - scale_ss.scale_lattice(vol * natoms) - scale_ss.to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models,model_name) : - os.symlink(os.path.relpath(ii), jj) - # make lammps input - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 01.eos") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('-f', '--fix-shape', action = 'store_true', - help='fix shape of box') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - # print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam': - if args.fix_shape : - make_lammps_fixv(jdata, args.CONF,args.TASK) - else : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_02_elastic.py b/dpgen/auto_test/gen_02_elastic.py deleted file mode 100755 index 13b20a715..000000000 --- a/dpgen/auto_test/gen_02_elastic.py +++ /dev/null @@ -1,258 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from pymatgen.core.structure import Structure -from pymatgen.analysis.elasticity.strain import Deformation, DeformedStructureSet, Strain -from pymatgen.io.vasp import Incar -from dpgen import ROOT_PATH - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_equi_name = '00.equi' -global_task_name = '02.elastic' - -def make_vasp(jdata, conf_dir) : - default_norm_def = 2e-3 - default_shear_def = 5e-3 - norm_def = jdata.get('norm_deform', default_norm_def) - shear_def = jdata.get('shear_deform', default_shear_def) - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # stress - equi_outcar = os.path.join(equi_path, 'OUTCAR') - stress = vasp.get_stress(equi_outcar) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - if incar.get('ISIF') != 2: - dlog.info("%s:%s setting ISIF to 2" % (__file__, make_vasp.__name__)) - incar['ISIF'] = 2 - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, False, False, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints - fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) - with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: - fp.write(fc) - # gen tasks - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR', 'KPOINTS'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'KPOINTS')), 'KPOINTS') - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(dfm_path,'cvasp.py')) - os.chdir(cwd) - - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - norm_def = jdata['norm_deform'] - shear_def = jdata['shear_deform'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - # ss = Structure.from_file(conf_poscar) - # print(ss) - # ss = ss.from_file(task_poscar) - # print(ss) - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - print('gen with norm '+str(norm_strains)) - print('gen with shear '+str(shear_strains)) - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen tasks - cwd = os.getcwd() - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type=='meam': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 02.elastic") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK=='meam': - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - - diff --git a/dpgen/auto_test/gen_03_vacancy.py b/dpgen/auto_test/gen_03_vacancy.py deleted file mode 100755 index f50591b45..000000000 --- a/dpgen/auto_test/gen_03_vacancy.py +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.core import Vacancy -from pymatgen.analysis.defects.generators import VacancyGenerator - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '03.vacancy' - -def make_vasp(jdata, conf_dir, supercell = [1,1,1]) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defects - vds = VacancyGenerator(ss) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, True, True, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%03d' % (copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - os.chdir(cwd) - -def make_lammps(jdata, conf_dir, task_type, supercell) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - # equi_path = re.sub('confs', global_equi_name, conf_path) - # equi_path = os.path.join(equi_path, 'lmp') - # equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - # gen task poscar - task_poscar = os.path.join(task_path, 'POSCAR') - # lammps.poscar_from_last_dump(equi_dump, task_poscar, deepmd_type_map) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - # gen structure from equi poscar - ss = Structure.from_file(task_poscar) - # gen defects - vds = VacancyGenerator(ss) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen tasks - cwd = os.getcwd() - # make lammps.in, relax at 0 bar (scale = 1) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%03d' % (copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - os.chdir(cwd) - -def _main() : - parser = argparse.ArgumentParser( - description="gen 03.vacancy") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.COPY) - elif args.TASK == 'deepmd' or args.TASK=='meam' : - make_lammps(jdata, args.CONF, args.TASK, args.COPY) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_04_interstitial.py b/dpgen/auto_test/gen_04_interstitial.py deleted file mode 100755 index f1c10c4c3..000000000 --- a/dpgen/auto_test/gen_04_interstitial.py +++ /dev/null @@ -1,391 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, warnings, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.core import Interstitial -from pymatgen.analysis.defects.generators import InterstitialGenerator - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '04.interstitial' - -def make_vasp(json, conf_dir, supercell, insert_ele) : - for ii in insert_ele : - _make_vasp(json, conf_dir, supercell, ii) - -def _make_vasp(jdata, conf_dir, supercell, insert_ele) : - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - print("task poscar: ", task_poscar) - ss = Structure.from_file(task_poscar) - # gen defects - vds = InterstitialGenerator(ss, insert_ele) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, True, True, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%s-%03d' % (insert_ele,copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - # gen potcar - with open('POSCAR','r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - - os.chdir(cwd) - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - os.chdir(struct_path) - - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - - # link incar - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - os.chdir(cwd) - - -def make_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_type) : - for ii in insert_ele : - _make_reprod_traj(jdata, conf_dir, supercell, ii, task_type) - -def _make_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_type) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - lmps_str= task_type + '-reprod-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str = 'vasp-k%.2f' % (kspacing) - lmps_str = task_type + '-reprod-k%.2f' % (kspacing) - - vasp_path = os.path.join(task_path, vasp_str) - lmps_path = os.path.join(task_path, lmps_str) - - os.makedirs(lmps_path, exist_ok = True) - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_widecard = os.path.join(vasp_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - vasp_struct = glob.glob(struct_widecard) - assert len(vasp_struct)>0 ,"Please compute the interstitial defect using vasp first" - vasp_struct.sort() - cwd=os.getcwd() - - # make lammps.in - if task_type =='deepmd': - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(lmps_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - - for vs in vasp_struct : - # get vasp energy - outcar = os.path.join(vs, 'OUTCAR') - energies = vasp.get_energies(outcar) - # get xdat - xdatcar = os.path.join(vs, 'XDATCAR') - struct_basename = os.path.basename(vs) - ls = os.path.join(lmps_path, struct_basename) - print(ls) - os.makedirs(ls, exist_ok = True) - os.chdir(ls) - if os.path.exists('XDATCAR') : - os.remove('XDATCAR') - os.symlink(os.path.relpath(xdatcar), 'XDATCAR') - xdat_lines = open('XDATCAR', 'r').read().split('\n') - natoms = vasp.poscar_natoms('XDATCAR') - xdat_secsize = natoms + 8 - xdat_nframes = len(xdat_lines) // xdat_secsize - if xdat_nframes > len(energies) : - warnings.warn('nframes %d in xdat is larger than energy %d, use the last %d frames' % (xdat_nframes, len(energies), len(energies))) - xdat_nlines = len(energies) * xdat_secsize - xdat_lines = xdat_lines[xdat_nlines:] - xdat_nframes = len(xdat_lines) // xdat_secsize - print(xdat_nframes, len(energies)) - #link lammps.in and model - for jj in ['lammps.in'] + model_name : - if os.path.islink(jj): - os.unlink(jj) - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(ls,ii) for ii in model_name] - - # loop over frames - for ii in range(xdat_nframes) : - frame_path = 'frame.%06d' % ii - os.makedirs(frame_path, exist_ok=True) - os.chdir(frame_path) - # clear dir - for jj in ['conf.lmp'] : - if os.path.isfile(jj): - os.remove(jj) - for jj in ['lammps.in'] + model_name : - if os.path.islink(jj): - os.unlink(jj) - # link lammps in - os.symlink(os.path.relpath('../lammps.in'), 'lammps.in') - # make conf - with open('POSCAR', 'w') as fp : - fp.write('\n'.join(xdat_lines[ii*xdat_secsize:(ii+1)*xdat_secsize])) - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link models - for (kk,ll) in zip(share_models, model_name) : - os.symlink(os.path.relpath(kk), ll) - os.chdir(ls) - os.chdir(cwd) - - - -def make_lammps(jdata, conf_dir, supercell, insert_ele, task_type) : - for ii in insert_ele: - _make_lammps(jdata, conf_dir, supercell, ii, task_type) - -def _make_lammps(jdata, conf_dir, supercell, insert_ele, task_type) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - #equi_path = os.path.join(equi_path, task_type) - #equi_dump = os.path.join(equi_path, 'dump.relax') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - #lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - os.chdir(cwd) - # gen structure from equi poscar - print("task poscar: ", task_poscar) - ss = Structure.from_file(task_poscar) - # gen defects - vds = InterstitialGenerator(ss, insert_ele) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen tasks - cwd = os.getcwd() - # make lammps.in, relax at 0 bar (scale = 1) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%s-%03d' % (insert_ele,copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 04.interstitial") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='define the supercell') - parser.add_argument('ELEMENT', type=str, nargs = '+', - help='the inserted element') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.COPY, args.ELEMENT) - elif args.TASK == 'deepmd' or args.TASK=='meam': - make_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'deepmd-reprod' or args.TASK == 'meam-reprod': - args.TASK=args.TASK.replace('-reprod','') - make_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_05_surf.py b/dpgen/auto_test/gen_05_surf.py deleted file mode 100755 index ee6cd662d..000000000 --- a/dpgen/auto_test/gen_05_surf.py +++ /dev/null @@ -1,299 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.surface import generate_all_slabs, Structure - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '05.surf' - -def make_vasp(jdata, conf_dir, max_miller = 2, relax_box = False, static = False) : - - min_slab_size = jdata['min_slab_size'] - min_vacuum_size = jdata['min_vacuum_size'] - pert_xz = jdata['pert_xz'] - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - # get conf poscar - # conf_path = os.path.abspath(conf_dir) - # conf_poscar = os.path.join(conf_path, 'POSCAR') - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - if static: - if 'scf_incar' in jdata.keys(): - vasp_static_str='vasp-static-scf_incar' - else: - vasp_static_str='vasp-static-k%.2f' % (kspacing) - task_path = os.path.join(task_path, vasp_static_str) - else : - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - ptypes = vasp.get_poscar_types(task_poscar) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen slabs - all_slabs = generate_all_slabs(ss, max_miller, min_slab_size, min_vacuum_size) - # gen incar - if static : - if 'scf_incar' in jdata.keys(): - scf_incar_path = jdata['scf_incar'] - assert(os.path.exists(scf_incar_path)) - scf_incar_path = os.path.abspath(scf_incar_path) - incar = incar_upper(Incar.from_file(scf_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_static_incar(ecut, ediff, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - else : - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, relax_box, False, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen tasks - cwd = os.getcwd() - for ii in range(len(all_slabs)) : - slab = all_slabs[ii] - miller_str = "m%d.%d.%dm" % (slab.miller_index[0], slab.miller_index[1], slab.miller_index[2]) - # make dir - struct_path = os.path.join(task_path, 'struct-%03d-%s' % (ii, miller_str)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - print("# %03d generate " % ii, struct_path, " \t %d atoms" % len(slab.sites)) - # make conf - slab.to('POSCAR', 'POSCAR.tmp') - vasp.regulate_poscar('POSCAR.tmp', 'POSCAR') - vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) - vasp.perturb_xz('POSCAR', 'POSCAR', pert_xz) - # record miller - np.savetxt('miller.out', slab.miller_index, fmt='%d') - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - cwd = os.getcwd() - -def make_lammps(jdata, conf_dir, max_miller = 2, static = False, relax_box = False, task_type = 'wrong-task') : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - min_slab_size = jdata['min_slab_size'] - min_vacuum_size = jdata['min_vacuum_size'] - - # get equi poscar - # conf_path = os.path.abspath(conf_dir) - # conf_poscar = os.path.join(conf_path, 'POSCAR') - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - if static: - task_path = os.path.join(task_path, task_type+'-static') - else: - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - ss = Structure.from_file(task_poscar) - # gen slabs - all_slabs = generate_all_slabs(ss, max_miller, min_slab_size, min_vacuum_size) - # make lammps.in - if task_type =='deepmd': - if static : - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - else : - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param, - change_box = relax_box) - elif task_type =='meam': - if static : - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - else : - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_meam, - model_param, - change_box = relax_box) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(all_slabs)) : - slab = all_slabs[ii] - miller_str = "m%d.%d.%dm" % (slab.miller_index[0], slab.miller_index[1], slab.miller_index[2]) - # make dir - struct_path = os.path.join(task_path, 'struct-%03d-%s' % (ii, miller_str)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - print("# %03d generate " % ii, struct_path, " \t %d atoms" % len(slab.sites)) - # make conf - slab.to('POSCAR', 'POSCAR') - vasp.regulate_poscar('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record miller - np.savetxt('miller.out', slab.miller_index, fmt='%d') - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - -def _main() : - parser = argparse.ArgumentParser( - description="gen 05.surf") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('MAX_MILLER', type=int, - help='the maximum miller index') - parser.add_argument('-r', '--relax-box', action = 'store_true', - help='set if the box is relaxed, otherwise only relax atom positions') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.MAX_MILLER, static = False, relax_box = args.relax_box) - elif args.TASK == 'vasp-static': - make_vasp(jdata, args.CONF, args.MAX_MILLER, static = True, relax_box = args.relax_box) - elif args.TASK == 'deepmd' or args.TASK =='meam': - make_lammps(jdata, args.CONF, args.MAX_MILLER, static = False, relax_box = args.relax_box, task_type = args.TASK) - elif args.TASK == 'deepmd-static' or args.TASK == 'meam-static': - args.TASK=args.TASK.replace('-static','') - make_lammps(jdata, args.CONF, args.MAX_MILLER, static = True, relax_box = args.relax_box, task_type = args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_06_phonon.py b/dpgen/auto_test/gen_06_phonon.py deleted file mode 100644 index 09e9ef9b3..000000000 --- a/dpgen/auto_test/gen_06_phonon.py +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from phonopy.structure.atoms import PhonopyAtoms -import yaml - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '06.phonon' - -''' -link poscar -link potcar -make incar -''' - -def get_structure_from_poscar(file_name, number_of_dimensions=3): - """ - Read crystal structure from a VASP POSCAR type file - :param file_name: POSCAR filename - :param number_of_dimensions: number of dimensions of the crystal structure - :return: Atoms (phonopy) type object containing the crystal structure - """ - # Check file exists - if not os.path.isfile(file_name): - print('Structure file does not exist!') - exit() - - # Read from VASP POSCAR file - poscar_file = open(file_name, 'r') - data_lines = poscar_file.read().split('\n') - poscar_file.close() - - multiply = float(data_lines[1]) - direct_cell = np.array([data_lines[i].split() - for i in range(2, 2+number_of_dimensions)], dtype=float) - direct_cell *= multiply - scaled_positions = None - positions = None - - try: - number_of_types = np.array(data_lines[3+number_of_dimensions].split(),dtype=int) - - coordinates_type = data_lines[4+number_of_dimensions][0] - if coordinates_type == 'D' or coordinates_type == 'd' : - - scaled_positions = np.array([data_lines[8+k].split()[0:3] - for k in range(np.sum(number_of_types))],dtype=float) - else: - positions = np.array([data_lines[8+k].split()[0:3] - for k in range(np.sum(number_of_types))],dtype=float) - - atomic_types = [] - for i,j in enumerate(data_lines[5].split()): - atomic_types.append([j]*number_of_types[i]) - atomic_types = [item for sublist in atomic_types for item in sublist] - - # Old style POSCAR format - except ValueError: - number_of_types = np.array(data_lines[5].split(), dtype=int) - coordinates_type = data_lines[6][0] - if coordinates_type == 'D' or coordinates_type == 'd': - scaled_positions = np.array([data_lines[7+k].split()[0:3] - for k in range(np.sum(number_of_types))], dtype=float) - else: - positions = np.array([data_lines[7+k].split()[0:3] - for k in range(np.sum(number_of_types))], dtype=float) - - atomic_types = [] - for i,j in enumerate(data_lines[0].split()): - atomic_types.append([j]*number_of_types[i]) - atomic_types = [item for sublist in atomic_types for item in sublist] - - return PhonopyAtoms(symbols=atomic_types, - scaled_positions=scaled_positions, - cell=direct_cell) - -def make_vasp(jdata, conf_dir) : - - supercell_matrix=jdata['supercell_matrix'] - band_path=jdata['band'] - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - if 'user_incar' in jdata.keys(): - vasp_user_str='vasp-user_incar' - else: - vasp_user_str='vasp-k%.2f' % kspacing - task_path = os.path.join(task_path, vasp_user_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - print(task_path) - if os.path.isfile('POSCAR-unitcell') : - os.remove('POSCAR-unitcell') - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR-unitcell') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR-unitcell') - # gen incar - if 'user_incar' in jdata.keys(): - user_incar_path = jdata['user_incar'] - assert(os.path.exists(user_incar_path)) - user_incar_path = os.path.abspath(user_incar_path) - incar = incar_upper(Incar.from_file(user_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_phonon_incar(ecut, ediff, npar, kpar, kspacing = None, kgamma = None) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert(os.path.exists(potcar_map[ii])) - potcar_list.append(potcar_map[ii]) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints -# fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) -# with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: -# fp.write(fc) - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(task_path,'cvasp.py')) - - # gen band.conf - os.chdir(task_path) - with open('band.conf','w') as fp: - fp.write('ATOM_NAME = ') - for ii in ele_list: - fp.write(ii) - fp.write(' ') - fp.write('\n') - fp.write('DIM = %d %d %d\n'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - fp.write('BAND = %s\n'%band_path) - fp.write('FORCE_CONSTANTS=READ') - # gen POSCAR - os.system('phonopy -d --dim="%d %d %d" -c POSCAR-unitcell'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.symlink('SPOSCAR', 'POSCAR') - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - supercell_matrix=jdata['supercell_matrix'] - band_path=jdata['band'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - - task_poscar = os.path.join(task_path, 'POSCAR') - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(conf_poscar), 'POSCAR') - os.chdir(cwd) - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - - print(task_path) - # make conf.lmp - conf_file = os.path.join(task_path, 'conf.lmp') - lammps.cvt_lammps_conf(task_poscar, os.path.relpath(conf_file)) - ptypes = vasp.get_poscar_types(task_poscar) - lammps.apply_type_map(conf_file, type_map, ptypes) - # make lammps.in - ntypes=len(ele_list) - unitcell=get_structure_from_poscar(task_poscar) - if task_type=='deepmd': - fc = lammps.make_lammps_phonon('conf.lmp', - unitcell.masses, - lammps.inter_deepmd, - model_param) - if task_type=='meam': - fc = lammps.make_lammps_phonon('conf.lmp', - unitcell.masses, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - # link models - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # gen band.conf - os.chdir(task_path) - with open('band.conf','w') as fp: - fp.write('ATOM_NAME = ') - for ii in ele_list: - fp.write(ii) - fp.write(' ') - fp.write('\n') - fp.write('DIM = %d %d %d\n'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - fp.write('BAND = %s\n'%band_path) - fp.write('FORCE_CONSTANTS=READ\n') - os.system('phonolammps lammps.in --dim %d %d %d -c POSCAR'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 06.phonon") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - From fcc922ff76bfcc34ae269b30a9667fe3180cf554 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 15:36:19 +0800 Subject: [PATCH 035/154] delete old version --- dpgen/auto_test/cmpt_07_SScurve.py | 93 --------- dpgen/auto_test/gen_07_SScurve.py | 309 ----------------------------- 2 files changed, 402 deletions(-) delete mode 100644 dpgen/auto_test/cmpt_07_SScurve.py delete mode 100644 dpgen/auto_test/gen_07_SScurve.py diff --git a/dpgen/auto_test/cmpt_07_SScurve.py b/dpgen/auto_test/cmpt_07_SScurve.py deleted file mode 100644 index f8e23ddbe..000000000 --- a/dpgen/auto_test/cmpt_07_SScurve.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - - -global_equi_name = '00.equi' -global_task_name = '07.SScurve' - -def cmpt_vasp(jdata, conf_dir) : - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - strain_direct=jdata['strain_direct'] - a,b=strain_direct[0],strain_direct[1] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - print('conf_dir:',conf_dir) - print('strain\t stress(kB)') - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) - # convert from pressure in kB to stress - stress = -stress - lst_strain.append(strain[a,b]) - lst_stress.append(stress[a,b]) - index=np.argsort(lst_strain) - for ii in range(len(lst_strain)): - print('%7.4f %7.4f'%(lst_strain[index[ii]],lst_stress[index[ii]])) - - -def cmpt_lammps(jdata, conf_dir, task_name) : - strain_direct=jdata['strain_direct'] - a,b=strain_direct[0],strain_direct[1] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_name) - - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - print('conf_dir:',conf_dir) - print('strain\t stress(kB)') - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) - # convert from pressure to stress - stress = -stress/1000 - lst_strain.append(strain[a,b]) - lst_stress.append(stress[a,b]) - index=np.argsort(lst_strain) - for ii in range(len(lst_strain)): - print('%7.4f %7.4f'%(lst_strain[index[ii]],lst_stress[index[ii]])) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 07.SScurve") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' : - cmpt_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam' : - cmpt_lammps(jdata, args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_07_SScurve.py b/dpgen/auto_test/gen_07_SScurve.py deleted file mode 100644 index 557aaccf3..000000000 --- a/dpgen/auto_test/gen_07_SScurve.py +++ /dev/null @@ -1,309 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.elasticity.strain import Deformation, DeformedStructureSet, Strain - -global_equi_name = '00.equi' -global_task_name = '07.SScurve' - -def make_vasp(jdata, conf_dir, norm_def = 2e-3, shear_def = 5e-3) : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - strain_start=jdata['strain_start'] - strain_end=jdata['strain_end'] - strain_step=jdata['strain_step'] - strain_direct=jdata['strain_direct'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, 'vasp-k%.2f' % kspacing) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # stress - equi_outcar = os.path.join(equi_path, 'OUTCAR') - stress = vasp.get_stress(equi_outcar) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains=np.arange(strain_start,strain_end,strain_step) - print('gen with norm '+str(norm_strains)) - deformations=[] - for ii in norm_strains: - strain = Strain.from_index_amount(strain_direct, ii) - deformations.append(strain.get_deformation_matrix()) - deformed_structures = [defo.apply_to_structure(ss) - for defo in deformations] - n_dfm = len(deformed_structures) - # gen incar - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, False, False, npar=npar, kpar=kpar, kspacing = None, kgamma = None) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert(os.path.exists(potcar_map[ii])) - potcar_list.append(potcar_map[ii]) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints - fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) - with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: - fp.write(fc) - # gen tasks - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR', 'KPOINTS'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - deformed_structures[ii].to('POSCAR', 'POSCAR') - # record strain - strain = Strain.from_deformation(deformations[ii]) - np.savetxt('strain.out', strain) - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'KPOINTS')), 'KPOINTS') - cwd = os.getcwd() - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - strain_start=jdata['strain_start'] - strain_end=jdata['strain_end'] - strain_step=jdata['strain_step'] - strain_direct=jdata['strain_direct'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains=np.arange(strain_start,strain_end,strain_step) - print('gen with norm '+str(norm_strains)) - deformations=[] - for ii in norm_strains: - strain = Strain.from_index_amount(strain_direct, ii) - deformations.append(strain.get_deformation_matrix()) - deformed_structures = [defo.apply_to_structure(ss) - for defo in deformations] - n_dfm = len(deformed_structures) - # gen tasks - cwd = os.getcwd() - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - - - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - if task_type =='deepmd': - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = glob.glob(os.path.join(task_path, '*pb')) - else: - share_models = models - - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - -def make_meam_lammps(jdata, conf_dir) : - meam_potfile_dir = jdata['meam_potfile_dir'] - meam_potfile_dir = os.path.abspath(meam_potfile_dir) - meam_potfile = jdata['meam_potfile'] - meam_potfile = [os.path.join(meam_potfile_dir,ii) for ii in meam_potfile] - meam_potfile_name = jdata['meam_potfile'] - type_map = jdata['meam_type_map'] - ntypes = len(type_map) - meam_param = {'meam_potfile' : jdata['meam_potfile'], - 'meam_type': jdata['meam_param_type']} - - norm_def = jdata['norm_deform'] - shear_def = jdata['shear_deform'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, 'meam') - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'meam') - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - # ss = Structure.from_file(conf_poscar) - # print(ss) - # ss = ss.from_file(task_poscar) - # print(ss) - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - print('gen with norm '+str(norm_strains)) - print('gen with shear '+str(shear_strains)) - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen tasks - cwd = os.getcwd() - # make lammps.in - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - meam_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + meam_potfile_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(meam_potfile, meam_potfile_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 07.SScurve") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK == 'meam' : - make_lammps(jdata, args.CONF,args.TASK) - #elif args.TASK == 'meam' : - # make_meam_lammps(jdata, args.CONF) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - From 182987c6129681498dbcd92aeeb2b1b0e657d273 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 16:52:51 +0800 Subject: [PATCH 036/154] remove redundanct files and minor revisions --- dpgen/auto_test/.DS_Store | Bin 0 -> 6148 bytes dpgen/auto_test/DEEPMD_LMP.py | 145 --------- dpgen/auto_test/EAM_ALLOY_LMP.py | 146 --------- dpgen/auto_test/EAM_FS_LMP.py | 146 --------- dpgen/auto_test/EOS.py | 2 +- dpgen/auto_test/Lammps.py | 135 ++++---- dpgen/auto_test/MEAM_LMP.py | 159 ---------- dpgen/auto_test/Property.py | 4 +- dpgen/auto_test/VASP.py | 4 +- dpgen/auto_test/calculator.py | 22 ++ dpgen/auto_test/cmpt_00_equi.py | 120 -------- dpgen/auto_test/cmpt_01_eos.py | 81 ----- dpgen/auto_test/cmpt_02_elastic.py | 139 --------- dpgen/auto_test/cmpt_03_vacancy.py | 136 --------- dpgen/auto_test/cmpt_04_interstitial.py | 177 ----------- dpgen/auto_test/cmpt_05_surf.py | 134 -------- dpgen/auto_test/cmpt_06_phonon.py | 117 ------- dpgen/auto_test/cmpt_07_SScurve.py | 93 ------ dpgen/auto_test/common_equi.py | 23 +- dpgen/auto_test/common_prop.py | 24 +- dpgen/auto_test/gen_00_equi.py | 193 ------------ dpgen/auto_test/gen_01_eos.py | 358 ---------------------- dpgen/auto_test/gen_02_elastic.py | 258 ---------------- dpgen/auto_test/gen_03_vacancy.py | 245 --------------- dpgen/auto_test/gen_04_interstitial.py | 391 ------------------------ dpgen/auto_test/gen_05_surf.py | 299 ------------------ dpgen/auto_test/gen_06_phonon.py | 287 ----------------- dpgen/auto_test/gen_07_SScurve.py | 309 ------------------- dpgen/auto_test/refine.py | 3 +- dpgen/auto_test/run.py | 18 +- 30 files changed, 144 insertions(+), 4024 deletions(-) create mode 100644 dpgen/auto_test/.DS_Store delete mode 100644 dpgen/auto_test/DEEPMD_LMP.py delete mode 100644 dpgen/auto_test/EAM_ALLOY_LMP.py delete mode 100644 dpgen/auto_test/EAM_FS_LMP.py delete mode 100644 dpgen/auto_test/MEAM_LMP.py create mode 100644 dpgen/auto_test/calculator.py delete mode 100755 dpgen/auto_test/cmpt_00_equi.py delete mode 100755 dpgen/auto_test/cmpt_01_eos.py delete mode 100755 dpgen/auto_test/cmpt_02_elastic.py delete mode 100755 dpgen/auto_test/cmpt_03_vacancy.py delete mode 100755 dpgen/auto_test/cmpt_04_interstitial.py delete mode 100755 dpgen/auto_test/cmpt_05_surf.py delete mode 100644 dpgen/auto_test/cmpt_06_phonon.py delete mode 100644 dpgen/auto_test/cmpt_07_SScurve.py delete mode 100755 dpgen/auto_test/gen_00_equi.py delete mode 100755 dpgen/auto_test/gen_01_eos.py delete mode 100755 dpgen/auto_test/gen_02_elastic.py delete mode 100755 dpgen/auto_test/gen_03_vacancy.py delete mode 100755 dpgen/auto_test/gen_04_interstitial.py delete mode 100755 dpgen/auto_test/gen_05_surf.py delete mode 100644 dpgen/auto_test/gen_06_phonon.py delete mode 100644 dpgen/auto_test/gen_07_SScurve.py diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 1 : - if not os.path.isdir('stables') : - raise RuntimeError('no dir "stable". Stable energy and volume of components should be computed before calculating formation energy of an alloy') - for ii in range(len(a_types)) : - ref_e_file = a_types[ii] + '.' + task_name + '.e' - ref_e_file = os.path.join('stables', ref_e_file) - ener = float(open(ref_e_file).read()) - ener_shift += a_natoms[ii] * ener - return ener_shift - -def comput_lmp_nev(conf_dir, task_name,write_shift = False) : - conf_path = re.sub('confs', global_equi_name, conf_dir) - conf_path = os.path.abspath(conf_path) - poscar = os.path.join(conf_path, 'POSCAR') - ele_types = vasp.get_poscar_types(poscar) - - lmp_path = os.path.join(conf_path, task_name) - log_lammps = os.path.join(lmp_path, 'log.lammps') - if os.path.isfile(log_lammps): - natoms, epa, vpa = lammps.get_nev(log_lammps) - if write_shift and len(ele_types)>1: - ener_shift = comput_e_shift(poscar, task_name) - shift = (epa * natoms - ener_shift) / natoms - return natoms,epa,vpa,shift - if len(ele_types)==1: - stable_dir = 'stables' - os.makedirs(stable_dir, exist_ok=True) - name_prefix=os.path.join(stable_dir,'%s.%s' % (ele_types[0], task_name)) - open(name_prefix + '.e', 'w').write('%.16f\n' % (epa)) - open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa)) - return natoms, epa, vpa , None - else : - return None, None, None, None - -def comput_vasp_nev(jdata, conf_dir, write_shift = False) : - - conf_path = re.sub('confs', global_equi_name, conf_dir) - conf_path = os.path.abspath(conf_path) - poscar = os.path.join(conf_path, 'POSCAR') - ele_types = vasp.get_poscar_types(poscar) - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - vasp_path = os.path.join(conf_path, vasp_str) - outcar = os.path.join(vasp_path, 'OUTCAR') - # tag_fin = os.path.join(vasp_path, 'tag_finished') - if not os.path.isfile(outcar) : - warnings.warn("cannot find OUTCAR in "+vasp_path+" skip") - elif not vasp.check_finished(outcar): - warnings.warn("incomplete job "+vasp_path+" use the last frame") - if os.path.isfile(outcar): - natoms, epa, vpa = vasp.get_nev(outcar) - if write_shift and len(ele_types)>1: - ener_shift = comput_e_shift(poscar, vasp_str) - shift = (epa * natoms - ener_shift) / natoms - return natoms,epa,vpa,shift - if len(ele_types)==1: - stable_dir = 'stables' - os.makedirs(stable_dir, exist_ok=True) - name_prefix=os.path.join(stable_dir,'%s.'% (ele_types[0])+vasp_str) - open(name_prefix + '.e', 'w').write('%.16f\n' % (epa)) - open(name_prefix + '.v', 'w').write('%.16f\n' % (vpa)) - return natoms, epa, vpa, None - else : - return None, None, None, None - -def _main(): - parser = argparse.ArgumentParser( - description="cmpt 00.equi") - parser.add_argument('TASK', type=str, - choices = ['all', 'vasp', 'deepmd', 'meam'], - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='the json param') - parser.add_argument('CONF', type=str, - help='the dir of conf') - parser.add_argument('-s','--stable', action = 'store_true', - help='the dir of conf') - args = parser.parse_args() - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - if args.TASK == 'all' : - ln, le, lv = comput_lmp_nev(args.CONF, 'deepmd', args.stable) - mn, me, mv = comput_lmp_nev(args.CONF, 'meam', args.stable) - vn, ve, vv = comput_vasp_nev(jdata, args.CONF, args.stable) - if le == None or ve == None or lv == None or vv == None: - print("%s" % args.CONF) - else : - print("%s\t %8.4f %8.4f %8.4f %7.3f %7.3f %7.3f %8.4f %7.3f" % (args.CONF, ve, le, (me), vv, lv, (mv), (le-ve), (lv-vv))) - elif args.TASK == 'vasp' : - vn, ve, vv = comput_vasp_nev(jdata, args.CONF, args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, ve, vv)) - elif args.TASK == 'deepmd' : - ln, le, lv = comput_lmp_nev(args.CONF, 'deepmd', args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, le, lv)) - elif args.TASK == 'meam' : - ln, le, lv = comput_lmp_nev(args.CONF, 'meam', args.stable) - print("%s\t %8.4f %7.3f " % (args.CONF, le, lv)) - - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_01_eos.py b/dpgen/auto_test/cmpt_01_eos.py deleted file mode 100755 index 385475059..000000000 --- a/dpgen/auto_test/cmpt_01_eos.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 - -import os, glob, argparse, json, re -import dpgen.auto_test.lib.util as util -import dpgen.auto_test.lib.lammps as lammps -import dpgen.auto_test.lib.vasp as vasp - -global_task_name = '01.eos' - -def comput_lmp_eos(jdata,conf_dir, task_name) : - conf_path = re.sub('confs', global_task_name, conf_dir) - conf_path = os.path.abspath(conf_path) - conf_path = os.path.join(conf_path, task_name) - vol_paths = glob.glob(os.path.join(conf_path, 'vol-*')) - vol_paths.sort(key=lambda k : float(k.split('-')[-1])) - result = os.path.join(conf_path,'result') - print('Vpa(A^3)\tEpA(eV)') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n VpA(A^3) EpA(eV)\n'% (conf_dir)) - for ii in vol_paths : - log_lammps = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(log_lammps) - print(vpa, epa) - fp.write('%7.3f %8.4f \n' % (vpa,epa)) - fp.close() - if 'upload_username' in jdata.keys() and task_name =='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('eos','deepmd',upload_username,result) - -def comput_vasp_eos(jdata, conf_dir) : - conf_path = re.sub('confs', global_task_name, conf_dir) - conf_path = os.path.abspath(conf_path) - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - task_path = os.path.join(conf_path, vasp_str) - vol_paths = glob.glob(os.path.join(task_path, 'vol-*')) - vol_paths.sort(key=lambda k : float(k.split('-')[-1])) - result = os.path.join(task_path,'result') - print('Vpa(A^3)\tEpA(eV)') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n VpA(A^3) EpA(eV)\n'% (conf_dir)) - for ii in vol_paths : - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - print(vpa, epa) - fp.write('%7.3f %8.4f \n' % (vpa,epa)) - fp.close() - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('eos','vasp',upload_username,result) - -def _main(): - parser = argparse.ArgumentParser( - description="cmpt 01.eos") - parser.add_argument('TASK', type=str, - choices = ['vasp', 'deepmd', 'meam'], - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - if args.TASK == 'vasp': - comput_vasp_eos(jdata, args.CONF) - elif args.TASK == 'deepmd' : - comput_lmp_eos(jdata,args.CONF, args.TASK) - elif args.TASK == 'meam' : - comput_lmp_eos(jdata,args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_02_elastic.py b/dpgen/auto_test/cmpt_02_elastic.py deleted file mode 100755 index b1a0c9229..000000000 --- a/dpgen/auto_test/cmpt_02_elastic.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -import dpgen.auto_test.lib.util as util -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '02.elastic' - -def result_et(et,conf_dir,result): - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - for ii in range(6) : - for jj in range(6) : - fp.write ("%7.2f " % (et.voigt[ii][jj] / 1e4)) - fp.write('\n') - BV = et.k_voigt / 1e4 - GV = et.g_voigt / 1e4 - EV = 9*BV*GV/(3*BV+GV) - uV = 0.5*(3*BV-2*GV)/(3*BV+GV) - fp.write("# Bulk Modulus BV = %.2f GPa\n" % (BV)) - fp.write("# Shear Modulus GV = %.2f GPa\n" % (GV)) - fp.write("# Youngs Modulus EV = %.2f GPa\n" % (EV)) - fp.write("# Poission Ratio uV = %.2f \n" % (uV)) - fp.close() - - -def print_et (et): - for ii in range(6) : - for jj in range(6) : - sys.stdout.write ("%7.2f " % (et.voigt[ii][jj] / 1e4)) - sys.stdout.write('\n') - BV = et.k_voigt / 1e4 - GV = et.g_voigt / 1e4 - EV = 9*BV*GV/(3*BV+GV) - uV = 0.5*(3*BV-2*GV)/(3*BV+GV) - print("# Bulk Modulus BV = %.2f GPa" % (BV)) - print("# Shear Modulus GV = %.2f GPa" % (GV)) - print("# Youngs Modulus EV = %.2f GPa" % (EV)) - print("# Poission Ratio uV = %.2f " % (uV)) - -def cmpt_vasp(jdata, conf_dir) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - task_path = os.path.join(task_path, vasp_str) - - equi_stress = Stress(np.loadtxt(os.path.join(task_path, 'equi.stress.out'))) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) - # convert from pressure in kB to stress - stress *= -1000 - lst_strain.append(Strain(strain)) - lst_stress.append(Stress(stress)) - et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = equi_stress, vasp = False) - # et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = None) - # bar to GPa - # et = -et / 1e4 - print_et(et) - result = os.path.join(task_path,'result') - result_et(et,conf_dir,result) - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('elastic','vasp',upload_username,result) - - -def cmpt_deepmd_lammps(jdata, conf_dir, task_name) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_name) - equi_stress = Stress(np.loadtxt(os.path.join(task_path, 'equi.stress.out'))) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) - # convert from pressure to stress - stress = -stress - lst_strain.append(Strain(strain)) - lst_stress.append(Stress(stress)) - et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = equi_stress, vasp = False) - # et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress = None) - # bar to GPa - # et = -et / 1e4 - print_et(et) - result = os.path.join(task_path,'result') - result_et(et,conf_dir,result) - if 'upload_username' in jdata.keys() and task_name=='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('elastic','deepmd',upload_username,result) - - - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 02.elastic") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_03_vacancy.py b/dpgen/auto_test/cmpt_03_vacancy.py deleted file mode 100755 index a53602d38..000000000 --- a/dpgen/auto_test/cmpt_03_vacancy.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '03.vacancy' - -def comput_e_shift(poscar, task_name) : - a_types = vasp.get_poscar_types(poscar) - a_natoms = vasp.get_poscar_natoms(poscar) - ener_shift = 0 - if not os.path.isdir('stables') : - raise RuntimeError('no dir "stable". Stable energy and volume of components should be computed before calculating formation energy of an alloy') - for ii in range(len(a_types)) : - ref_e_file = a_types[ii] + '.' + task_name + '.e' - ref_e_file = os.path.join('stables', ref_e_file) - ener = float(open(ref_e_file).read()) - ener_shift += a_natoms[ii] * ener - return ener_shift - -def cmpt_vasp(jdata, conf_dir, supercell) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - print("# ", task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-*' % (copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - struct_poscar = os.path.join(ii, 'POSCAR') - #energy_shift = comput_e_shift(struct_poscar, vasp_str) - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.write("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.close() - # evac = epa * natoms - energy_shift - # sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, energy_shift)) - # sys.stdout.write ("%s: %7.3f \n" % (structure_dir, evac)) - -def cmpt_deepmd_lammps(jdata, conf_dir, supercell, task_name) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - print("# ", task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-*' % (copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Structure: \tVac_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - struct_poscar = os.path.join(ii, 'POSCAR') - #energy_shift = comput_e_shift(struct_poscar, task_name) - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa*natoms)) - fp.close() - # evac = epa * natoms - energy_shift - # sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, energy_shift)) - # sys.stdout.write ("%s: %7.3f\n" % (structure_dir, evac)) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 03.vacancy") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF, args.COPY) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_04_interstitial.py b/dpgen/auto_test/cmpt_04_interstitial.py deleted file mode 100755 index 6b029909c..000000000 --- a/dpgen/auto_test/cmpt_04_interstitial.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from pymatgen.analysis.elasticity.strain import Strain -from pymatgen.analysis.elasticity.stress import Stress - -global_equi_name = '00.equi' -global_task_name = '04.interstitial' - -def cmpt_vasp(jdata, conf_dir, supercell, insert_ele) : - for ii in insert_ele: - _cmpt_vasp(jdata, conf_dir, supercell, ii) - -def _cmpt_vasp(jdata, conf_dir, supercell, insert_ele) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-%s-*' % (insert_ele, copy_str)) - print(struct_path_widecard) - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.close() - -def cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_name) : - for ii in insert_ele: - _cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, ii, task_name) - -def _cmpt_deepmd_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_name) : - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - vasp_path = os.path.join(task_path, vasp_str) - lmps_path = os.path.join(task_path, task_name + vasp_str.replace('vasp','')) - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_widecard = os.path.join(vasp_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - vasp_struct = glob.glob(struct_widecard) - vasp_struct.sort() - cwd=os.getcwd() - - for vs in vasp_struct : - # compute vasp - outcar = os.path.join(vs, 'OUTCAR') - vasp_ener = np.array(vasp.get_energies(outcar)) - vasp_ener_file = os.path.join(vs, 'ener.vasp.out') - # compute reprod - struct_basename = os.path.basename(vs) - ls = os.path.join(lmps_path, struct_basename) - frame_widecard = os.path.join(ls, 'frame.*') - frames = glob.glob(frame_widecard) - frames.sort() - lmp_ener = [] - for ii in frames : - log_lmp = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(log_lmp) - lmp_ener.append(epa) - lmp_ener = np.array(lmp_ener) - lmp_ener = np.reshape(lmp_ener, [-1,1]) - lmp_ener_file = os.path.join(ls, 'ener.lmp.out') - vasp_ener = np.reshape(vasp_ener, [-1,1]) / natoms - error_start = 1 - lmp_ener -= lmp_ener[-1] - vasp_ener[-1] - diff = lmp_ener - vasp_ener - diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) - np.savetxt(vasp_ener_file, vasp_ener[error_start:]) - np.savetxt(lmp_ener_file, lmp_ener[error_start:]) - print(os.path.basename(ls), 'EpA_std_err=',error) - -def cmpt_deepmd_lammps(jdata, conf_dir, supercell, insert_ele, task_name) : - for ii in insert_ele: - _cmpt_deepmd_lammps(jdata, conf_dir, supercell, ii, task_name) - -def _cmpt_deepmd_lammps(jdata, conf_dir, supercell, insert_ele, task_name) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name.split('-')[0]) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_path_widecard = os.path.join(task_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - struct_path_list = glob.glob(struct_path_widecard) - print(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s supercell %s" % (conf_dir, supercell)) - sys.stdout.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write ("Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - evac = epa * natoms - equi_epa * natoms - sys.stdout.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.write ("%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms)) - fp.close() - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 04.interstitial") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='define the supercell') - parser.add_argument('ELEMENT', type=str, nargs = '+', - help='the inserted element') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF, args.COPY, args.ELEMENT) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'deepmd-reprod' : - cmpt_deepmd_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'meam-reprod' : - cmpt_deepmd_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_05_surf.py b/dpgen/auto_test/cmpt_05_surf.py deleted file mode 100755 index fde28911d..000000000 --- a/dpgen/auto_test/cmpt_05_surf.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.util as util -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -global_equi_name = '00.equi' -global_task_name = '05.surf' - -def cmpt_vasp(jdata, conf_dir, static = False) : - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_outcar = os.path.join(equi_path, 'OUTCAR') - task_path = re.sub('confs', global_task_name, conf_dir) - if static : - if 'scf_incar' in jdata.keys(): - vasp_static_str='vasp-static-scf_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_static_str='vasp-static-k%.2f' % (kspacing) - task_path = os.path.join(task_path, vasp_static_str) - else : - task_path = os.path.join(task_path, vasp_str) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - struct_path_widecard = os.path.join(task_path, 'struct-*-m*m') - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s" % (conf_dir)) - sys.stdout.write ("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - if static : - e0 = np.array(vasp.get_energies(outcar)) / natoms - epa = e0[0] - boxes = vasp.get_boxes(outcar) - AA = np.linalg.norm(np.cross(boxes[0][0], boxes[0][1])) - Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 - evac = (epa * natoms - equi_epa * natoms) / AA * Cf - sys.stdout.write ("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.write("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.close() - if 'upload_username' in jdata.keys(): - upload_username=jdata['upload_username'] - util.insert_data('surf','vasp',upload_username,result) - -def cmpt_deepmd_lammps(jdata, conf_dir, task_name, static = False) : - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, task_name.split('-')[0]) - equi_path = os.path.abspath(equi_path) - equi_log = os.path.join(equi_path, 'log.lammps') - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.join(task_path, task_name) - task_path = os.path.abspath(task_path) - - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - struct_path_widecard = os.path.join(task_path, 'struct-*-m*m') - struct_path_list = glob.glob(struct_path_widecard) - struct_path_list.sort() - if len(struct_path_list) == 0: - print("# cannot find results for conf %s" % (conf_dir)) - sys.stdout.write ("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - result = os.path.join(task_path,'result') - with open(result,'w') as fp: - fp.write('conf_dir:%s\n'% (conf_dir)) - fp.write("Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n") - for ii in struct_path_list : - structure_dir = os.path.basename(ii) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - AA = lammps.get_base_area(lmp_log) - Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 - evac = (epa * natoms - equi_epa * natoms) / AA * Cf - sys.stdout.write ("%s: \t%7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.write("%s:\t %7.3f %8.3f %8.3f\n" % (structure_dir, evac, epa, equi_epa)) - fp.close() - if 'upload_username' in jdata.keys() and task_name=='deepmd': - upload_username=jdata['upload_username'] - util.insert_data('surf','deepmd',upload_username,result) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 05.surf") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'vasp-static': - cmpt_vasp(jdata, args.CONF, static = True) - elif args.TASK == 'deepmd' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'deepmd-static' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK, static = True) - elif args.TASK == 'meam' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam-static' : - cmpt_deepmd_lammps(jdata, args.CONF, args.TASK, static = True) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/cmpt_06_phonon.py b/dpgen/auto_test/cmpt_06_phonon.py deleted file mode 100644 index cefa615fe..000000000 --- a/dpgen/auto_test/cmpt_06_phonon.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from phonopy import Phonopy -from phonopy.structure.atoms import PhonopyAtoms - -import yaml -import phonopy - - - - -global_equi_name = '00.equi' -global_task_name = '06.phonon' - -''' -link poscar -link potcar -make incar -''' - -def get_force_from_dump(cell): - na=len(cell) - with open("dump.relax","r") as fp: - lines = fp.readlines() - flag=False - index=[] - forces=[] - for line in lines: - if flag: - data=line.split() - index.append(data[0]) - forces.append(data[5:9]) - if len(forces)==na: - break - if 'fx fy fz' in line: - flag=True - index = np.asarray(index, int) - indexing = np.argsort(index) - if len(forces)==na: - forces=np.asarray(np.reshape(forces,(na,3)),float)[indexing, :] - else: - raise RuntimeError('Incomplete result: dump.relax') - return forces - -def cmpt_vasp(jdata, conf_dir) : - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - supercell_matrix=jdata['supercell_matrix'] - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('vasprun.xml'): - os.system('phonopy --fc vasprun.xml') - if os.path.isfile('FORCE_CONSTANTS'): - os.system('phonopy --dim="%d %d %d" -c POSCAR-unitcell band.conf'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.system('phonopy-bandplot --gnuplot band.yaml > band.dat') - print('band.dat is created') - else: - print('FORCE_CONSTANTS No such file') - else: - print('vasprun.xml No such file') - - - -def cmpt_lammps(jdata, conf_dir, task_type) : - supercell_matrix=jdata['supercell_matrix'] - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - task_poscar = os.path.join(task_path, 'POSCAR') - - os.chdir(task_path) - if os.path.isfile('FORCE_CONSTANTS'): - os.system('phonopy --dim="%d %d %d" -c POSCAR band.conf'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.system('phonopy-bandplot --gnuplot band.yaml > band.dat') - else: - print('FORCE_CONSTANTS No such file') - - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 06.phonon") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - cmpt_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/cmpt_07_SScurve.py b/dpgen/auto_test/cmpt_07_SScurve.py deleted file mode 100644 index f8e23ddbe..000000000 --- a/dpgen/auto_test/cmpt_07_SScurve.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, sys -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - - -global_equi_name = '00.equi' -global_task_name = '07.SScurve' - -def cmpt_vasp(jdata, conf_dir) : - fp_params = jdata['vasp_params'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - strain_direct=jdata['strain_direct'] - a,b=strain_direct[0],strain_direct[1] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing) - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - print('conf_dir:',conf_dir) - print('strain\t stress(kB)') - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) - # convert from pressure in kB to stress - stress = -stress - lst_strain.append(strain[a,b]) - lst_stress.append(stress[a,b]) - index=np.argsort(lst_strain) - for ii in range(len(lst_strain)): - print('%7.4f %7.4f'%(lst_strain[index[ii]],lst_stress[index[ii]])) - - -def cmpt_lammps(jdata, conf_dir, task_name) : - strain_direct=jdata['strain_direct'] - a,b=strain_direct[0],strain_direct[1] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_name) - - - lst_dfm_path = glob.glob(os.path.join(task_path, 'dfm-*')) - lst_strain = [] - lst_stress = [] - print('conf_dir:',conf_dir) - print('strain\t stress(kB)') - for ii in lst_dfm_path : - strain = np.loadtxt(os.path.join(ii, 'strain.out')) - stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) - # convert from pressure to stress - stress = -stress/1000 - lst_strain.append(strain[a,b]) - lst_stress.append(stress[a,b]) - index=np.argsort(lst_strain) - for ii in range(len(lst_strain)): - print('%7.4f %7.4f'%(lst_strain[index[ii]],lst_stress[index[ii]])) - -def _main() : - parser = argparse.ArgumentParser( - description="cmpt 07.SScurve") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - cmpt_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' : - cmpt_lammps(jdata, args.CONF, args.TASK) - elif args.TASK == 'meam' : - cmpt_lammps(jdata, args.CONF, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index f21af7553..4f6d014d2 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -4,9 +4,10 @@ import dpgen.auto_test.lib.util as util from dpgen import dlog from dpgen.dispatcher.Dispatcher import make_dispatcher -from dpgen.auto_test.common_task import make_task +from dpgen.auto_test.calculator import make_calculator from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure +from monty.serialization import loadfn, dumpfn lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -87,7 +88,7 @@ def make_equi(confs, for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') dlog.debug('task_dir %s' % ii) - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) inter.make_potential_files(ii) inter.make_input_file(ii, 'relaxation', relax_param) @@ -121,10 +122,10 @@ def run_equi(confs, # dispatch the tasks # POSCAR here is useless - virtual_task = make_task(inter_param, "POSCAR") - forward_files = virtual_task.forward_files() - forward_common_files = virtual_task.forward_common_files() - backward_files = virtual_task.backward_files() + virutual_calculator = make_calculator(inter_param, "POSCAR") + forward_files = virutual_calculator.forward_files() + forward_common_files = virutual_calculator.forward_common_files() + backward_files = virutual_calculator.backward_files() # backward_files += logs # ... run_tasks = util.collect_task(all_task, inter_type) @@ -144,8 +145,8 @@ def run_equi(confs, forward_common_files, forward_files, backward_files, - outlog='lmp.out', - errlog='lmp.err') + outlog='outlog', + errlog='errlog') def post_equi(confs, inter_param): @@ -166,7 +167,7 @@ def post_equi(confs, inter_param): # dump the relaxation result. for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) res = inter.compute(ii, inter_param) - with open(os.path.join(ii, 'result.json'), 'w') as fp: - json.dump(res, fp, indent=4) + + dumpfn(res, os.path.join(ii, 'result.json'), indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index ce2569d32..5b7dc2dd1 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -1,17 +1,15 @@ -import os +import os,glob from dpgen.auto_test.EOS import EOS from dpgen.auto_test.Elastic import Elastic from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface -from dpgen.auto_test.common_task import make_task +from dpgen.auto_test.calculator import make_calculator from dpgen import dlog -import dpgen.auto_test.lib.crys as crys -import glob, warnings, json -from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine import dpgen.auto_test.lib.util as util from dpgen.dispatcher.Dispatcher import make_dispatcher +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] @@ -68,7 +66,7 @@ def make_property(confs, path_to_work = os.path.join(ii, property_type + '_' + suffix) if os.path.exists(path_to_work): - warnings.warn('%s already exists' % path_to_work) + dlog.warning('%s already exists' % path_to_work) else: os.makedirs(path_to_work) @@ -77,7 +75,7 @@ def make_property(confs, for kk in task_list: poscar = os.path.join(kk, 'POSCAR') - inter = make_task(inter_param, poscar) + inter = make_calculator(inter_param, poscar) inter.make_potential_files(kk) dlog.debug(prop.task_type()) ### debug inter.make_input_file(kk, prop.task_type(), prop.task_param()) @@ -118,10 +116,10 @@ def run_property(confs, # dispatch the tasks # POSCAR here is useless - virtual_task = make_task(inter_param, "POSCAR") - forward_files = virtual_task.forward_files() - forward_common_files = virtual_task.forward_common_files() - backward_files = virtual_task.backward_files() + virutual_calculator = make_calculator(inter_param, "POSCAR") + forward_files = virutual_calculator.forward_files() + forward_common_files = virutual_calculator.forward_common_files() + backward_files = virutual_calculator.backward_files() # backward_files += logs # ... inter_type = inter_param['type'] @@ -151,8 +149,8 @@ def run_property(confs, forward_common_files, forward_files, backward_files, - outlog='lmp.out', - errlog='lmp.err') + outlog='outlog', + errlog='errlog') def post_property(confs, diff --git a/dpgen/auto_test/gen_00_equi.py b/dpgen/auto_test/gen_00_equi.py deleted file mode 100755 index a2b5b00c9..000000000 --- a/dpgen/auto_test/gen_00_equi.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_task_name = '00.equi' - -''' -link poscar -link potcar -make incar -''' -def make_vasp(jdata, conf_dir) : - conf_path = os.path.abspath(conf_dir) - equi_path = re.sub('confs', global_task_name, conf_path) - os.makedirs(equi_path, exist_ok = True) - cwd = os.getcwd() - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(equi_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(equi_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - is_alloy = \ - os.path.exists( - os.path.join( - os.path.join(conf_path, '..'), - 'alloy' - ) - ) - # read potcar - with open(to_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - isif = 3 - if incar.get('ISIF') != isif: - dlog.info("%s:%s setting ISIF to %d" % (__file__, make_vasp.__name__, isif)) - incar['ISIF'] = isif - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - vasp_path = os.path.join(equi_path, 'vasp-relax_incar' ) - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, is_alloy, True, True, npar, kpar, kspacing, kgamma) - vasp_path = os.path.join(equi_path, 'vasp-k%.2f' % kspacing) - - os.makedirs(vasp_path, exist_ok = True) - os.chdir(vasp_path) - - # write incar - with open('INCAR', 'w') as fp : - fp.write(fc) - - # gen poscar - if os.path.exists('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(to_poscar), 'POSCAR') - - # gen kpoints - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, 'cvasp.py') - - # gen potcar - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - os.chdir(cwd) - -def make_lammps (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - conf_path = os.path.abspath(conf_dir) - equi_path = re.sub('confs', global_task_name, conf_path) - os.makedirs(equi_path, exist_ok = True) - cwd = os.getcwd() - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(equi_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(equi_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - # lmp path - lmp_path = os.path.join(equi_path, task_type) - os.makedirs(lmp_path, exist_ok = True) - print(lmp_path) - # lmp conf - conf_file = os.path.join(lmp_path, 'conf.lmp') - lammps.cvt_lammps_conf(to_poscar, os.path.relpath(conf_file)) - ptypes = vasp.get_poscar_types(to_poscar) - lammps.apply_type_map(conf_file, type_map, ptypes) - # lmp input - if task_type=='deepmd': - fc = lammps.make_lammps_equi(os.path.basename(conf_file), - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type=='meam': - fc = lammps.make_lammps_equi(os.path.basename(conf_file), - ntypes, - lammps.inter_meam, - model_param) - with open(os.path.join(lmp_path, 'lammps.in'), 'w') as fp : - fp.write(fc) - # link models - os.chdir(lmp_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 00.equi") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_01_eos.py b/dpgen/auto_test/gen_01_eos.py deleted file mode 100755 index ba9fae386..000000000 --- a/dpgen/auto_test/gen_01_eos.py +++ /dev/null @@ -1,358 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from pymatgen.core.structure import Structure -from pymatgen.io.vasp import Incar -from dpgen import ROOT_PATH - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_equi_name = '00.equi' -global_task_name = '01.eos' - -''' -link poscar -link potcar -make incar -''' -def make_vasp(jdata, conf_dir) : - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - eos_relax_cell_shape = jdata.get('eos_relax_cell_shape', True) - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok = True) - # link poscar - cwd = os.getcwd() - from_poscar = os.path.join(equi_contcar) - to_poscar = os.path.join(task_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(task_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - vol_to_poscar = vasp.poscar_vol(to_poscar) / vasp.poscar_natoms(to_poscar) - # print(to_poscar, vol_to_poscar) - is_alloy = \ - os.path.exists( - os.path.join( - os.path.join(conf_path, '..'), - 'alloy' - ) - ) - # read potcar - with open(to_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - if eos_relax_cell_shape: - isif = 4 - else: - isif = 2 - if incar.get('ISIF') != isif: - dlog.info("%s:%s setting ISIF to %d" % (__file__, make_vasp.__name__, isif)) - incar['ISIF'] = isif - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, is_alloy, True, False, npar, kpar, kspacing, kgamma) - - os.chdir(task_path) - - with open('INCAR', 'w') as fp : - fp.write(fc) - # gen potcar - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # loop over volumes - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(task_path, 'vol-%.2f' % vol) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - for ii in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR'] : - if os.path.exists(ii) : - os.remove(ii) - # link incar, potcar - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - # gen poscar - os.symlink(os.path.relpath(to_poscar), 'POSCAR.orig') - scale = (vol / vol_to_poscar) ** (1./3.) - # print(scale) - vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) - # print(vol_path, vasp.poscar_vol('POSCAR') / vasp.poscar_natoms('POSCAR')) - # gen kpoints - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(vol_path,'cvasp.py')) - os.chdir(cwd) - - -def make_lammps (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - - # # get equi props - # equi_path = re.sub('confs', global_equi_name, conf_path) - # equi_path = os.path.join(equi_path, 'lmp') - # equi_log = os.path.join(equi_path, 'log.lammps') - # if not os.path.isfile(equi_log) : - # raise RuntimeError("the system should be equilibriated first") - # natoms, epa, vpa = lammps.get_nev(equi_log) - # task path - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - os.makedirs(task_path, exist_ok = True) - cwd = os.getcwd() - conf_path = os.path.abspath(conf_dir) - from_poscar = os.path.join(conf_path, 'POSCAR') - to_poscar = os.path.join(task_path, 'POSCAR') - if os.path.exists(to_poscar) : - assert(filecmp.cmp(from_poscar, to_poscar)) - else : - os.chdir(task_path) - os.symlink(os.path.relpath(from_poscar), 'POSCAR') - os.chdir(cwd) - volume = vasp.poscar_vol(to_poscar) - natoms = vasp.poscar_natoms(to_poscar) - vpa = volume / natoms - # structrure - ss = Structure.from_file(to_poscar) - - # lmp path - lmp_path = os.path.join(task_path, task_type) - os.makedirs(lmp_path, exist_ok = True) - #Null lammps.in - f_lammps_in = os.path.join(lmp_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - None - # # lmp conf - # conf_file = os.path.join(lmp_path, 'conf.lmp') - # lammps.cvt_lammps_conf(to_poscar, conf_file) - # ptypes = vasp.get_poscar_types(to_poscar) - # lammps.apply_type_map(conf_file, deepmd_type_map, ptypes) - - os.chdir(lmp_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models =[os.path.join(lmp_path,ii) for ii in model_name] - - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(lmp_path, 'vol-%.2f' % vol) - print('# generate %s' % (vol_path)) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - #print(vol_path) - for ii in ['conf.lmp', 'conf.lmp'] + model_name : - if os.path.exists(ii) : - os.remove(ii) - # # link conf - # os.symlink(os.path.relpath(conf_file), 'conf.lmp') - # make conf - scale_ss = ss.copy() - scale_ss.scale_lattice(vol * natoms) - scale_ss.to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # make lammps input - scale = (vol / vpa) ** (1./3.) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale,lammps.inter_deepmd, model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale,lammps.inter_meam, model_param) - with open(os.path.join(vol_path, 'lammps.in'), 'w') as fp : - fp.write(fc) - os.chdir(cwd) - -def make_lammps_fixv (jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - - - vol_start = jdata['vol_start'] - vol_end = jdata['vol_end'] - vol_step = jdata['vol_step'] - - # get equi props - equi_path = re.sub('confs', global_equi_name, conf_dir) - task_path = re.sub('confs', global_task_name, conf_dir) - equi_path = os.path.join(equi_path, task_type) - task_path = os.path.join(task_path, task_type) - equi_path = os.path.abspath(equi_path) - task_path = os.path.abspath(task_path) - equi_dump = os.path.join(equi_path, 'dump.relax') - os.makedirs(task_path, exist_ok = True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - - cwd = os.getcwd() - volume = vasp.poscar_vol(task_poscar) - natoms = vasp.poscar_natoms(task_poscar) - vpa = volume / natoms - # structrure - ss = Structure.from_file(task_poscar) - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param, - change_box = False) - elif task_type=='meam': - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_meam, - model_param, - change_box = False) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - # make vols - for vol in np.arange(vol_start, vol_end, vol_step) : - vol_path = os.path.join(task_path, 'vol-%.2f' % vol) - print('# generate %s' % (vol_path)) - os.makedirs(vol_path, exist_ok = True) - os.chdir(vol_path) - for ii in ['conf.lmp', 'conf.lmp', 'lammps.in'] + model_name : - if os.path.exists(ii) : - os.remove(ii) - # make conf - scale_ss = ss.copy() - scale_ss.scale_lattice(vol * natoms) - scale_ss.to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models,model_name) : - os.symlink(os.path.relpath(ii), jj) - # make lammps input - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 01.eos") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('-f', '--fix-shape', action = 'store_true', - help='fix shape of box') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - # print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam': - if args.fix_shape : - make_lammps_fixv(jdata, args.CONF,args.TASK) - else : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_02_elastic.py b/dpgen/auto_test/gen_02_elastic.py deleted file mode 100755 index 13b20a715..000000000 --- a/dpgen/auto_test/gen_02_elastic.py +++ /dev/null @@ -1,258 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps - -from dpgen import dlog -from dpgen.generator.lib.vasp import incar_upper -from pymatgen.core.structure import Structure -from pymatgen.analysis.elasticity.strain import Deformation, DeformedStructureSet, Strain -from pymatgen.io.vasp import Incar -from dpgen import ROOT_PATH - -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - -global_equi_name = '00.equi' -global_task_name = '02.elastic' - -def make_vasp(jdata, conf_dir) : - default_norm_def = 2e-3 - default_shear_def = 5e-3 - norm_def = jdata.get('norm_deform', default_norm_def) - shear_def = jdata.get('shear_deform', default_shear_def) - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # stress - equi_outcar = os.path.join(equi_path, 'OUTCAR') - stress = vasp.get_stress(equi_outcar) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - if incar.get('ISIF') != 2: - dlog.info("%s:%s setting ISIF to 2" % (__file__, make_vasp.__name__)) - incar['ISIF'] = 2 - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, False, False, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints - fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) - with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: - fp.write(fc) - # gen tasks - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR', 'KPOINTS'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'KPOINTS')), 'KPOINTS') - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(dfm_path,'cvasp.py')) - os.chdir(cwd) - - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - norm_def = jdata['norm_deform'] - shear_def = jdata['shear_deform'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - # ss = Structure.from_file(conf_poscar) - # print(ss) - # ss = ss.from_file(task_poscar) - # print(ss) - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - print('gen with norm '+str(norm_strains)) - print('gen with shear '+str(shear_strains)) - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen tasks - cwd = os.getcwd() - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type=='meam': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 02.elastic") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK=='meam': - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - - diff --git a/dpgen/auto_test/gen_03_vacancy.py b/dpgen/auto_test/gen_03_vacancy.py deleted file mode 100755 index f50591b45..000000000 --- a/dpgen/auto_test/gen_03_vacancy.py +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.core import Vacancy -from pymatgen.analysis.defects.generators import VacancyGenerator - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '03.vacancy' - -def make_vasp(jdata, conf_dir, supercell = [1,1,1]) : - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defects - vds = VacancyGenerator(ss) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, True, True, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%03d' % (copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - os.chdir(cwd) - -def make_lammps(jdata, conf_dir, task_type, supercell) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type =='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % kspacing - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - # equi_path = re.sub('confs', global_equi_name, conf_path) - # equi_path = os.path.join(equi_path, 'lmp') - # equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - # gen task poscar - task_poscar = os.path.join(task_path, 'POSCAR') - # lammps.poscar_from_last_dump(equi_dump, task_poscar, deepmd_type_map) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - # gen structure from equi poscar - ss = Structure.from_file(task_poscar) - # gen defects - vds = VacancyGenerator(ss) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen tasks - cwd = os.getcwd() - # make lammps.in, relax at 0 bar (scale = 1) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%03d' % (copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - os.chdir(cwd) - -def _main() : - parser = argparse.ArgumentParser( - description="gen 03.vacancy") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.COPY) - elif args.TASK == 'deepmd' or args.TASK=='meam' : - make_lammps(jdata, args.CONF, args.TASK, args.COPY) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_04_interstitial.py b/dpgen/auto_test/gen_04_interstitial.py deleted file mode 100755 index f1c10c4c3..000000000 --- a/dpgen/auto_test/gen_04_interstitial.py +++ /dev/null @@ -1,391 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, warnings, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.core import Interstitial -from pymatgen.analysis.defects.generators import InterstitialGenerator - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '04.interstitial' - -def make_vasp(json, conf_dir, supercell, insert_ele) : - for ii in insert_ele : - _make_vasp(json, conf_dir, supercell, ii) - -def _make_vasp(jdata, conf_dir, supercell, insert_ele) : - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - print("task poscar: ", task_poscar) - ss = Structure.from_file(task_poscar) - # gen defects - vds = InterstitialGenerator(ss, insert_ele) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen incar - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, True, True, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%s-%03d' % (insert_ele,copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - # gen potcar - with open('POSCAR','r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - - os.chdir(cwd) - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - os.chdir(struct_path) - - with open('POTCAR', 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - - # link incar - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - os.chdir(cwd) - - -def make_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_type) : - for ii in insert_ele : - _make_reprod_traj(jdata, conf_dir, supercell, ii, task_type) - -def _make_reprod_traj(jdata, conf_dir, supercell, insert_ele, task_type) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - task_path = re.sub('confs', global_task_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - lmps_str= task_type + '-reprod-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str = 'vasp-k%.2f' % (kspacing) - lmps_str = task_type + '-reprod-k%.2f' % (kspacing) - - vasp_path = os.path.join(task_path, vasp_str) - lmps_path = os.path.join(task_path, lmps_str) - - os.makedirs(lmps_path, exist_ok = True) - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - struct_widecard = os.path.join(vasp_path, 'struct-%s-%s-*' % (insert_ele,copy_str)) - vasp_struct = glob.glob(struct_widecard) - assert len(vasp_struct)>0 ,"Please compute the interstitial defect using vasp first" - vasp_struct.sort() - cwd=os.getcwd() - - # make lammps.in - if task_type =='deepmd': - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(lmps_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - - for vs in vasp_struct : - # get vasp energy - outcar = os.path.join(vs, 'OUTCAR') - energies = vasp.get_energies(outcar) - # get xdat - xdatcar = os.path.join(vs, 'XDATCAR') - struct_basename = os.path.basename(vs) - ls = os.path.join(lmps_path, struct_basename) - print(ls) - os.makedirs(ls, exist_ok = True) - os.chdir(ls) - if os.path.exists('XDATCAR') : - os.remove('XDATCAR') - os.symlink(os.path.relpath(xdatcar), 'XDATCAR') - xdat_lines = open('XDATCAR', 'r').read().split('\n') - natoms = vasp.poscar_natoms('XDATCAR') - xdat_secsize = natoms + 8 - xdat_nframes = len(xdat_lines) // xdat_secsize - if xdat_nframes > len(energies) : - warnings.warn('nframes %d in xdat is larger than energy %d, use the last %d frames' % (xdat_nframes, len(energies), len(energies))) - xdat_nlines = len(energies) * xdat_secsize - xdat_lines = xdat_lines[xdat_nlines:] - xdat_nframes = len(xdat_lines) // xdat_secsize - print(xdat_nframes, len(energies)) - #link lammps.in and model - for jj in ['lammps.in'] + model_name : - if os.path.islink(jj): - os.unlink(jj) - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(ls,ii) for ii in model_name] - - # loop over frames - for ii in range(xdat_nframes) : - frame_path = 'frame.%06d' % ii - os.makedirs(frame_path, exist_ok=True) - os.chdir(frame_path) - # clear dir - for jj in ['conf.lmp'] : - if os.path.isfile(jj): - os.remove(jj) - for jj in ['lammps.in'] + model_name : - if os.path.islink(jj): - os.unlink(jj) - # link lammps in - os.symlink(os.path.relpath('../lammps.in'), 'lammps.in') - # make conf - with open('POSCAR', 'w') as fp : - fp.write('\n'.join(xdat_lines[ii*xdat_secsize:(ii+1)*xdat_secsize])) - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link models - for (kk,ll) in zip(share_models, model_name) : - os.symlink(os.path.relpath(kk), ll) - os.chdir(ls) - os.chdir(cwd) - - - -def make_lammps(jdata, conf_dir, supercell, insert_ele, task_type) : - for ii in insert_ele: - _make_lammps(jdata, conf_dir, supercell, ii, task_type) - -def _make_lammps(jdata, conf_dir, supercell, insert_ele, task_type) : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - #equi_path = os.path.join(equi_path, task_type) - #equi_dump = os.path.join(equi_path, 'dump.relax') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - #lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - os.chdir(cwd) - # gen structure from equi poscar - print("task poscar: ", task_poscar) - ss = Structure.from_file(task_poscar) - # gen defects - vds = InterstitialGenerator(ss, insert_ele) - dss = [] - for jj in vds : - dss.append(jj.generate_defect_structure(supercell)) - # gen tasks - cwd = os.getcwd() - # make lammps.in, relax at 0 bar (scale = 1) - if task_type=='deepmd': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_press_relax('conf.lmp', - ntypes, - 1, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - # gen tasks - copy_str = "%sx%sx%s" % (supercell[0], supercell[1], supercell[2]) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(dss)) : - struct_path = os.path.join(task_path, 'struct-%s-%s-%03d' % (insert_ele,copy_str,ii)) - print('# generate %s' % (struct_path)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dss[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # save supercell - np.savetxt('supercell.out', supercell, fmt='%d') - os.chdir(cwd) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 04.interstitial") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('COPY', type=int, nargs = 3, - help='define the supercell') - parser.add_argument('ELEMENT', type=str, nargs = '+', - help='the inserted element') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.COPY, args.ELEMENT) - elif args.TASK == 'deepmd' or args.TASK=='meam': - make_lammps(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - elif args.TASK == 'deepmd-reprod' or args.TASK == 'meam-reprod': - args.TASK=args.TASK.replace('-reprod','') - make_reprod_traj(jdata, args.CONF, args.COPY, args.ELEMENT, args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_05_surf.py b/dpgen/auto_test/gen_05_surf.py deleted file mode 100755 index ee6cd662d..000000000 --- a/dpgen/auto_test/gen_05_surf.py +++ /dev/null @@ -1,299 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.surface import generate_all_slabs, Structure - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '05.surf' - -def make_vasp(jdata, conf_dir, max_miller = 2, relax_box = False, static = False) : - - min_slab_size = jdata['min_slab_size'] - min_vacuum_size = jdata['min_vacuum_size'] - pert_xz = jdata['pert_xz'] - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - # get conf poscar - # conf_path = os.path.abspath(conf_dir) - # conf_poscar = os.path.join(conf_path, 'POSCAR') - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - if static: - if 'scf_incar' in jdata.keys(): - vasp_static_str='vasp-static-scf_incar' - else: - vasp_static_str='vasp-static-k%.2f' % (kspacing) - task_path = os.path.join(task_path, vasp_static_str) - else : - task_path = os.path.join(task_path, vasp_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - ptypes = vasp.get_poscar_types(task_poscar) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen slabs - all_slabs = generate_all_slabs(ss, max_miller, min_slab_size, min_vacuum_size) - # gen incar - if static : - if 'scf_incar' in jdata.keys(): - scf_incar_path = jdata['scf_incar'] - assert(os.path.exists(scf_incar_path)) - scf_incar_path = os.path.abspath(scf_incar_path) - incar = incar_upper(Incar.from_file(scf_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_static_incar(ecut, ediff, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - else : - if 'relax_incar' in jdata.keys(): - relax_incar_path = jdata['relax_incar'] - assert(os.path.exists(relax_incar_path)) - relax_incar_path = os.path.abspath(relax_incar_path) - incar = incar_upper(Incar.from_file(relax_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, relax_box, False, npar=npar,kpar=kpar, kspacing = kspacing, kgamma = kgamma) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert os.path.exists(os.path.abspath(potcar_map[ii])),"No POTCAR in the potcar_map of %s"%(ii) - potcar_list.append(os.path.abspath(potcar_map[ii])) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen tasks - cwd = os.getcwd() - for ii in range(len(all_slabs)) : - slab = all_slabs[ii] - miller_str = "m%d.%d.%dm" % (slab.miller_index[0], slab.miller_index[1], slab.miller_index[2]) - # make dir - struct_path = os.path.join(task_path, 'struct-%03d-%s' % (ii, miller_str)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR'] : - if os.path.isfile(jj): - os.remove(jj) - print("# %03d generate " % ii, struct_path, " \t %d atoms" % len(slab.sites)) - # make conf - slab.to('POSCAR', 'POSCAR.tmp') - vasp.regulate_poscar('POSCAR.tmp', 'POSCAR') - vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) - vasp.perturb_xz('POSCAR', 'POSCAR', pert_xz) - # record miller - np.savetxt('miller.out', slab.miller_index, fmt='%d') - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(struct_path,'cvasp.py')) - cwd = os.getcwd() - -def make_lammps(jdata, conf_dir, max_miller = 2, static = False, relax_box = False, task_type = 'wrong-task') : - - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name and task_type=='deepmd': - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - assert len(model_name)>0,"No deepmd model in the model_dir" - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - ntypes = len(type_map) - - min_slab_size = jdata['min_slab_size'] - min_vacuum_size = jdata['min_vacuum_size'] - - # get equi poscar - # conf_path = os.path.abspath(conf_dir) - # conf_poscar = os.path.join(conf_path, 'POSCAR') - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - kspacing = jdata['vasp_params']['kspacing'] - vasp_str='vasp-k%.2f' % (kspacing) - - equi_path = re.sub('confs', global_equi_name, conf_dir) - equi_path = os.path.join(equi_path, vasp_str) - equi_path = os.path.abspath(equi_path) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - assert os.path.exists(equi_contcar),"Please compute the equilibrium state using vasp first" - task_path = re.sub('confs', global_task_name, conf_dir) - task_path = os.path.abspath(task_path) - if static: - task_path = os.path.join(task_path, task_type+'-static') - else: - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # gen strcture - ss = Structure.from_file(task_poscar) - # gen slabs - all_slabs = generate_all_slabs(ss, max_miller, min_slab_size, min_vacuum_size) - # make lammps.in - if task_type =='deepmd': - if static : - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - else : - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param, - change_box = relax_box) - elif task_type =='meam': - if static : - fc = lammps.make_lammps_eval('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - else : - fc = lammps.make_lammps_equi('conf.lmp', - ntypes, - lammps.inter_meam, - model_param, - change_box = relax_box) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = [os.path.join(task_path,ii) for ii in model_name] - - for ii in range(len(all_slabs)) : - slab = all_slabs[ii] - miller_str = "m%d.%d.%dm" % (slab.miller_index[0], slab.miller_index[1], slab.miller_index[2]) - # make dir - struct_path = os.path.join(task_path, 'struct-%03d-%s' % (ii, miller_str)) - os.makedirs(struct_path, exist_ok=True) - os.chdir(struct_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - print("# %03d generate " % ii, struct_path, " \t %d atoms" % len(slab.sites)) - # make conf - slab.to('POSCAR', 'POSCAR') - vasp.regulate_poscar('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record miller - np.savetxt('miller.out', slab.miller_index, fmt='%d') - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - -def _main() : - parser = argparse.ArgumentParser( - description="gen 05.surf") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - parser.add_argument('MAX_MILLER', type=int, - help='the maximum miller index') - parser.add_argument('-r', '--relax-box', action = 'store_true', - help='set if the box is relaxed, otherwise only relax atom positions') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('# generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF, args.MAX_MILLER, static = False, relax_box = args.relax_box) - elif args.TASK == 'vasp-static': - make_vasp(jdata, args.CONF, args.MAX_MILLER, static = True, relax_box = args.relax_box) - elif args.TASK == 'deepmd' or args.TASK =='meam': - make_lammps(jdata, args.CONF, args.MAX_MILLER, static = False, relax_box = args.relax_box, task_type = args.TASK) - elif args.TASK == 'deepmd-static' or args.TASK == 'meam-static': - args.TASK=args.TASK.replace('-static','') - make_lammps(jdata, args.CONF, args.MAX_MILLER, static = True, relax_box = args.relax_box, task_type = args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() diff --git a/dpgen/auto_test/gen_06_phonon.py b/dpgen/auto_test/gen_06_phonon.py deleted file mode 100644 index 09e9ef9b3..000000000 --- a/dpgen/auto_test/gen_06_phonon.py +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob, shutil -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from phonopy.structure.atoms import PhonopyAtoms -import yaml - -from dpgen import ROOT_PATH -from pymatgen.io.vasp import Incar -from dpgen.generator.lib.vasp import incar_upper -cvasp_file=os.path.join(ROOT_PATH,'generator/lib/cvasp.py') - - -global_equi_name = '00.equi' -global_task_name = '06.phonon' - -''' -link poscar -link potcar -make incar -''' - -def get_structure_from_poscar(file_name, number_of_dimensions=3): - """ - Read crystal structure from a VASP POSCAR type file - :param file_name: POSCAR filename - :param number_of_dimensions: number of dimensions of the crystal structure - :return: Atoms (phonopy) type object containing the crystal structure - """ - # Check file exists - if not os.path.isfile(file_name): - print('Structure file does not exist!') - exit() - - # Read from VASP POSCAR file - poscar_file = open(file_name, 'r') - data_lines = poscar_file.read().split('\n') - poscar_file.close() - - multiply = float(data_lines[1]) - direct_cell = np.array([data_lines[i].split() - for i in range(2, 2+number_of_dimensions)], dtype=float) - direct_cell *= multiply - scaled_positions = None - positions = None - - try: - number_of_types = np.array(data_lines[3+number_of_dimensions].split(),dtype=int) - - coordinates_type = data_lines[4+number_of_dimensions][0] - if coordinates_type == 'D' or coordinates_type == 'd' : - - scaled_positions = np.array([data_lines[8+k].split()[0:3] - for k in range(np.sum(number_of_types))],dtype=float) - else: - positions = np.array([data_lines[8+k].split()[0:3] - for k in range(np.sum(number_of_types))],dtype=float) - - atomic_types = [] - for i,j in enumerate(data_lines[5].split()): - atomic_types.append([j]*number_of_types[i]) - atomic_types = [item for sublist in atomic_types for item in sublist] - - # Old style POSCAR format - except ValueError: - number_of_types = np.array(data_lines[5].split(), dtype=int) - coordinates_type = data_lines[6][0] - if coordinates_type == 'D' or coordinates_type == 'd': - scaled_positions = np.array([data_lines[7+k].split()[0:3] - for k in range(np.sum(number_of_types))], dtype=float) - else: - positions = np.array([data_lines[7+k].split()[0:3] - for k in range(np.sum(number_of_types))], dtype=float) - - atomic_types = [] - for i,j in enumerate(data_lines[0].split()): - atomic_types.append([j]*number_of_types[i]) - atomic_types = [item for sublist in atomic_types for item in sublist] - - return PhonopyAtoms(symbols=atomic_types, - scaled_positions=scaled_positions, - cell=direct_cell) - -def make_vasp(jdata, conf_dir) : - - supercell_matrix=jdata['supercell_matrix'] - band_path=jdata['band'] - - if 'relax_incar' in jdata.keys(): - vasp_str='vasp-relax_incar' - else: - vasp_str='vasp-k%.2f' % kspacing - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, vasp_str) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - if 'user_incar' in jdata.keys(): - vasp_user_str='vasp-user_incar' - else: - vasp_user_str='vasp-k%.2f' % kspacing - task_path = os.path.join(task_path, vasp_user_str) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - print(task_path) - if os.path.isfile('POSCAR-unitcell') : - os.remove('POSCAR-unitcell') - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR-unitcell') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR-unitcell') - # gen incar - if 'user_incar' in jdata.keys(): - user_incar_path = jdata['user_incar'] - assert(os.path.exists(user_incar_path)) - user_incar_path = os.path.abspath(user_incar_path) - incar = incar_upper(Incar.from_file(user_incar_path)) - fc = incar.get_string() - kspacing = incar['KSPACING'] - kgamma = incar['KGAMMA'] - else : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - fc = vasp.make_vasp_phonon_incar(ecut, ediff, npar, kpar, kspacing = None, kgamma = None) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert(os.path.exists(potcar_map[ii])) - potcar_list.append(potcar_map[ii]) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints -# fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) -# with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: -# fp.write(fc) - - # write kp - fc = vasp.make_kspacing_kpoints('POSCAR', kspacing, kgamma) - with open('KPOINTS', 'w') as fp: fp.write(fc) - #copy cvasp - if ('cvasp' in jdata) and (jdata['cvasp'] == True): - shutil.copyfile(cvasp_file, os.path.join(task_path,'cvasp.py')) - - # gen band.conf - os.chdir(task_path) - with open('band.conf','w') as fp: - fp.write('ATOM_NAME = ') - for ii in ele_list: - fp.write(ii) - fp.write(' ') - fp.write('\n') - fp.write('DIM = %d %d %d\n'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - fp.write('BAND = %s\n'%band_path) - fp.write('FORCE_CONSTANTS=READ') - # gen POSCAR - os.system('phonopy -d --dim="%d %d %d" -c POSCAR-unitcell'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - os.symlink('SPOSCAR', 'POSCAR') - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - - supercell_matrix=jdata['supercell_matrix'] - band_path=jdata['band'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - - task_poscar = os.path.join(task_path, 'POSCAR') - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(conf_poscar), 'POSCAR') - os.chdir(cwd) - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - - print(task_path) - # make conf.lmp - conf_file = os.path.join(task_path, 'conf.lmp') - lammps.cvt_lammps_conf(task_poscar, os.path.relpath(conf_file)) - ptypes = vasp.get_poscar_types(task_poscar) - lammps.apply_type_map(conf_file, type_map, ptypes) - # make lammps.in - ntypes=len(ele_list) - unitcell=get_structure_from_poscar(task_poscar) - if task_type=='deepmd': - fc = lammps.make_lammps_phonon('conf.lmp', - unitcell.masses, - lammps.inter_deepmd, - model_param) - if task_type=='meam': - fc = lammps.make_lammps_phonon('conf.lmp', - unitcell.masses, - lammps.inter_meam, - model_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - # link models - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - # gen band.conf - os.chdir(task_path) - with open('band.conf','w') as fp: - fp.write('ATOM_NAME = ') - for ii in ele_list: - fp.write(ii) - fp.write(' ') - fp.write('\n') - fp.write('DIM = %d %d %d\n'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - fp.write('BAND = %s\n'%band_path) - fp.write('FORCE_CONSTANTS=READ\n') - os.system('phonolammps lammps.in --dim %d %d %d -c POSCAR'%(supercell_matrix[0],supercell_matrix[1],supercell_matrix[2])) - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 06.phonon") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - -# print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK =='meam' : - make_lammps(jdata, args.CONF,args.TASK) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/gen_07_SScurve.py b/dpgen/auto_test/gen_07_SScurve.py deleted file mode 100644 index 557aaccf3..000000000 --- a/dpgen/auto_test/gen_07_SScurve.py +++ /dev/null @@ -1,309 +0,0 @@ -#!/usr/bin/env python3 - -import os, re, argparse, filecmp, json, glob -import subprocess as sp -import numpy as np -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps -from pymatgen.core.structure import Structure -from pymatgen.analysis.elasticity.strain import Deformation, DeformedStructureSet, Strain - -global_equi_name = '00.equi' -global_task_name = '07.SScurve' - -def make_vasp(jdata, conf_dir, norm_def = 2e-3, shear_def = 5e-3) : - fp_params = jdata['vasp_params'] - ecut = fp_params['ecut'] - ediff = fp_params['ediff'] - npar = fp_params['npar'] - kpar = fp_params['kpar'] - kspacing = fp_params['kspacing'] - kgamma = fp_params['kgamma'] - strain_start=jdata['strain_start'] - strain_end=jdata['strain_end'] - strain_step=jdata['strain_step'] - strain_direct=jdata['strain_direct'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, 'vasp-k%.2f' % kspacing) - equi_contcar = os.path.join(equi_path, 'CONTCAR') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'vasp-k%.2f' % kspacing) - os.makedirs(task_path, exist_ok=True) - cwd = os.getcwd() - os.chdir(task_path) - if os.path.isfile('POSCAR') : - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - os.chdir(cwd) - task_poscar = os.path.join(task_path, 'POSCAR') - # stress - equi_outcar = os.path.join(equi_path, 'OUTCAR') - stress = vasp.get_stress(equi_outcar) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains=np.arange(strain_start,strain_end,strain_step) - print('gen with norm '+str(norm_strains)) - deformations=[] - for ii in norm_strains: - strain = Strain.from_index_amount(strain_direct, ii) - deformations.append(strain.get_deformation_matrix()) - deformed_structures = [defo.apply_to_structure(ss) - for defo in deformations] - n_dfm = len(deformed_structures) - # gen incar - fc = vasp.make_vasp_relax_incar(ecut, ediff, True, False, False, npar=npar, kpar=kpar, kspacing = None, kgamma = None) - with open(os.path.join(task_path, 'INCAR'), 'w') as fp : - fp.write(fc) - # gen potcar - with open(task_poscar,'r') as fp : - lines = fp.read().split('\n') - ele_list = lines[5].split() - potcar_map = jdata['potcar_map'] - potcar_list = [] - for ii in ele_list : - assert(os.path.exists(potcar_map[ii])) - potcar_list.append(potcar_map[ii]) - with open(os.path.join(task_path,'POTCAR'), 'w') as outfile: - for fname in potcar_list: - with open(fname) as infile: - outfile.write(infile.read()) - # gen kpoints - fc = vasp.make_kspacing_kpoints(task_poscar, kspacing, kgamma) - with open(os.path.join(task_path,'KPOINTS'), 'w') as fp: - fp.write(fc) - # gen tasks - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['POSCAR', 'POTCAR', 'INCAR', 'KPOINTS'] : - if os.path.isfile(jj): - os.remove(jj) - # make conf - deformed_structures[ii].to('POSCAR', 'POSCAR') - # record strain - strain = Strain.from_deformation(deformations[ii]) - np.savetxt('strain.out', strain) - # link incar, potcar, kpoints - os.symlink(os.path.relpath(os.path.join(task_path, 'INCAR')), 'INCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'POTCAR')), 'POTCAR') - os.symlink(os.path.relpath(os.path.join(task_path, 'KPOINTS')), 'KPOINTS') - cwd = os.getcwd() - -def make_lammps(jdata, conf_dir,task_type) : - fp_params = jdata['lammps_params'] - model_dir = fp_params['model_dir'] - type_map = fp_params['type_map'] - model_dir = os.path.abspath(model_dir) - model_name =fp_params['model_name'] - deepmd_version = fp_params.get("deepmd_version", "0.12") - if not model_name : - models = glob.glob(os.path.join(model_dir, '*pb')) - model_name = [os.path.basename(ii) for ii in models] - else: - models = [os.path.join(model_dir,ii) for ii in model_name] - - model_param = {'model_name' : model_name, - 'param_type': fp_params['model_param_type'], - 'deepmd_version' : deepmd_version} - ntypes = len(type_map) - strain_start=jdata['strain_start'] - strain_end=jdata['strain_end'] - strain_step=jdata['strain_step'] - strain_direct=jdata['strain_direct'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, task_type) - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, task_type) - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains=np.arange(strain_start,strain_end,strain_step) - print('gen with norm '+str(norm_strains)) - deformations=[] - for ii in norm_strains: - strain = Strain.from_index_amount(strain_direct, ii) - deformations.append(strain.get_deformation_matrix()) - deformed_structures = [defo.apply_to_structure(ss) - for defo in deformations] - n_dfm = len(deformed_structures) - # gen tasks - cwd = os.getcwd() - # make lammps.in - if task_type=='deepmd': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_deepmd, - model_param) - elif task_type =='meam': - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - model_param) - - - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - if task_type =='deepmd': - os.chdir(task_path) - for ii in model_name : - if os.path.exists(ii) : - os.remove(ii) - for (ii,jj) in zip(models, model_name) : - os.symlink(os.path.relpath(ii), jj) - share_models = glob.glob(os.path.join(task_path, '*pb')) - else: - share_models = models - - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + model_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(share_models, model_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - -def make_meam_lammps(jdata, conf_dir) : - meam_potfile_dir = jdata['meam_potfile_dir'] - meam_potfile_dir = os.path.abspath(meam_potfile_dir) - meam_potfile = jdata['meam_potfile'] - meam_potfile = [os.path.join(meam_potfile_dir,ii) for ii in meam_potfile] - meam_potfile_name = jdata['meam_potfile'] - type_map = jdata['meam_type_map'] - ntypes = len(type_map) - meam_param = {'meam_potfile' : jdata['meam_potfile'], - 'meam_type': jdata['meam_param_type']} - - norm_def = jdata['norm_deform'] - shear_def = jdata['shear_deform'] - - conf_path = os.path.abspath(conf_dir) - conf_poscar = os.path.join(conf_path, 'POSCAR') - # get equi poscar - equi_path = re.sub('confs', global_equi_name, conf_path) - equi_path = os.path.join(equi_path, 'meam') - equi_dump = os.path.join(equi_path, 'dump.relax') - task_path = re.sub('confs', global_task_name, conf_path) - task_path = os.path.join(task_path, 'meam') - os.makedirs(task_path, exist_ok=True) - task_poscar = os.path.join(task_path, 'POSCAR') - lammps.poscar_from_last_dump(equi_dump, task_poscar, type_map) - # get equi stress - equi_log = os.path.join(equi_path, 'log.lammps') - stress = lammps.get_stress(equi_log) - np.savetxt(os.path.join(task_path, 'equi.stress.out'), stress) - # gen strcture - # ss = Structure.from_file(conf_poscar) - # print(ss) - # ss = ss.from_file(task_poscar) - # print(ss) - ss = Structure.from_file(task_poscar) - # gen defomations - norm_strains = [-norm_def, -0.5*norm_def, 0.5*norm_def, norm_def] - shear_strains = [-shear_def, -0.5*shear_def, 0.5*shear_def, shear_def] - print('gen with norm '+str(norm_strains)) - print('gen with shear '+str(shear_strains)) - dfm_ss = DeformedStructureSet(ss, - symmetry = False, - norm_strains = norm_strains, - shear_strains = shear_strains) - n_dfm = len(dfm_ss) - # gen tasks - cwd = os.getcwd() - # make lammps.in - fc = lammps.make_lammps_elastic('conf.lmp', - ntypes, - lammps.inter_meam, - meam_param) - f_lammps_in = os.path.join(task_path, 'lammps.in') - with open(f_lammps_in, 'w') as fp : - fp.write(fc) - cwd = os.getcwd() - for ii in range(n_dfm) : - # make dir - dfm_path = os.path.join(task_path, 'dfm-%03d' % ii) - os.makedirs(dfm_path, exist_ok=True) - os.chdir(dfm_path) - for jj in ['conf.lmp', 'lammps.in'] + meam_potfile_name : - if os.path.isfile(jj): - os.remove(jj) - # make conf - dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') - lammps.cvt_lammps_conf('POSCAR', 'conf.lmp') - ptypes = vasp.get_poscar_types('POSCAR') - lammps.apply_type_map('conf.lmp', type_map, ptypes) - # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) - # link lammps.in - os.symlink(os.path.relpath(f_lammps_in), 'lammps.in') - # link models - for (ii,jj) in zip(meam_potfile, meam_potfile_name) : - os.symlink(os.path.relpath(ii), jj) - cwd = os.getcwd() - - -def _main() : - parser = argparse.ArgumentParser( - description="gen 07.SScurve") - parser.add_argument('TASK', type=str, - help='the task of generation, vasp or lammps') - parser.add_argument('PARAM', type=str, - help='json parameter file') - parser.add_argument('CONF', type=str, - help='the path to conf') - args = parser.parse_args() - - with open (args.PARAM, 'r') as fp : - jdata = json.load (fp) - - print('generate %s task with conf %s' % (args.TASK, args.CONF)) - if args.TASK == 'vasp': - make_vasp(jdata, args.CONF) - elif args.TASK == 'deepmd' or args.TASK == 'meam' : - make_lammps(jdata, args.CONF,args.TASK) - #elif args.TASK == 'meam' : - # make_meam_lammps(jdata, args.CONF) - else : - raise RuntimeError("unknow task ", args.TASK) - -if __name__ == '__main__' : - _main() - diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index 616b14089..0da8bc2bc 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -1,4 +1,5 @@ -import os,re,glob +import os, re, glob + def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): init_from = re.sub(output_suffix, init_from_suffix, path_to_work) diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index b00cf808f..61f06e776 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,20 +1,22 @@ #!/usr/bin/env python3 -import argparse, json +import argparse import logging from dpgen import dlog -from dpgen.auto_test.common_prop import make_property +from monty.serialization import loadfn,dumpfn +from dpgen.auto_test.common_prop import make_property,run_property,post_property from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi #lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] -def run_task(step, json_file, machine_file=''): - with open(json_file, 'r') as fp: - jdata = json.load(fp) - +def run_task(step, param_file, machine_file=None): + jdata=loadfn(param_file) confs = jdata['structures'] inter_parameter = jdata['interaction'] + if machine_file: + mdata=loadfn(machine_file) + if step == 'make' and 'relaxation' in jdata: relax_param = jdata['relaxation'] make_equi(confs, inter_parameter, relax_param) @@ -24,13 +26,9 @@ def run_task(step, json_file, machine_file=''): make_property(confs, inter_parameter, property_list) elif step == 'run' and 'relaxation' in jdata: - with open(machine_file, 'r') as fp: - mdata = json.load(fp) run_equi(confs, inter_parameter, mdata) elif step == 'run' and 'properties' in jdata: - with open(machine_file, 'r') as fp: - mdata = json.load(fp) property_list = jdata['properties'] run_property(confs, inter_parameter, property_list, mdata) From 9837a1dd6983fac9eeefdeac90416adb1b880d1c Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+kevinwenminion@users.noreply.github.com> Date: Mon, 22 Jun 2020 16:53:42 +0800 Subject: [PATCH 037/154] Delete .DS_Store --- dpgen/auto_test/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dpgen/auto_test/.DS_Store diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Mon, 22 Jun 2020 17:21:49 +0800 Subject: [PATCH 038/154] add unittest vasp_equi --- dpgen/auto_test/common_equi.py | 2 +- .../si/mp-149/vasp-relax_incar/CONTCAR | 25 - .../00.equi/si/mp-149/vasp-relax_incar/OUTCAR | 204 - tests/auto_test/confs/hp-Li/POSCAR | 48 + tests/auto_test/confs/si/mp-149/POSCAR | 25 - tests/auto_test/equi/vasp/CONTCAR | 89 + tests/auto_test/equi/vasp/OUTCAR | 33383 ++++++++++++++++ tests/auto_test/test_vasp_equi.py | 91 + 8 files changed, 33612 insertions(+), 255 deletions(-) delete mode 100644 tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/CONTCAR delete mode 100644 tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/OUTCAR create mode 100644 tests/auto_test/confs/hp-Li/POSCAR delete mode 100644 tests/auto_test/confs/si/mp-149/POSCAR create mode 100644 tests/auto_test/equi/vasp/CONTCAR create mode 100644 tests/auto_test/equi/vasp/OUTCAR create mode 100644 tests/auto_test/test_vasp_equi.py diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index bbf2af6ed..8894cf256 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -166,4 +166,4 @@ def post_equi(confs, inter_param): inter = make_calculator(inter_param, poscar) res = inter.compute(ii,inter_param) - dumpfn(ret,os.path.join(ii, 'result.json'),indent=4) + dumpfn(res,os.path.join(ii, 'result.json'),indent=4) diff --git a/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/CONTCAR b/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/CONTCAR deleted file mode 100644 index 4fe904343..000000000 --- a/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/CONTCAR +++ /dev/null @@ -1,25 +0,0 @@ -Si8 - 1.00000000000000 - 5.4687279999999996 0.0000000000000000 0.0000000000000000 - 0.0000000000000000 5.4687279999999996 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 5.4687279999999996 - Si - 8 -Direct - 0.2500000000000000 0.2500000000000000 0.2500000000000000 - 0.5000000000000000 0.5000000000000000 0.0000000000000000 - 0.2500000000000000 0.7500000000000000 0.7500000000000000 - 0.5000000000000000 0.0000000000000000 0.5000000000000000 - 0.7500000000000000 0.2500000000000000 0.7500000000000000 - 0.0000000000000000 0.5000000000000000 0.5000000000000000 - 0.7500000000000000 0.7500000000000000 0.2500000000000000 - 0.0000000000000000 0.0000000000000000 0.0000000000000000 - - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 diff --git a/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/OUTCAR b/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/OUTCAR deleted file mode 100644 index 0bbd2d456..000000000 --- a/tests/auto_test/00.equi/si/mp-149/vasp-relax_incar/OUTCAR +++ /dev/null @@ -1,204 +0,0 @@ - - - INCAR: - POTCAR: PAW_PBE Si 05Jan2001 - - POTCAR: PAW_PBE Si 05Jan2001 - VRHFIN =Si: s2p2 - LEXCH = PE - EATOM = 103.0669 eV, 7.5752 Ry - - TITEL = PAW_PBE Si 05Jan2001 - LULTRA = F use ultrasoft PP ? - IUNSCR = 1 unscreen: 0-lin 1-nonlin 2-no - RPACOR = 1.500 partial core radius - POMASS = 28.085; ZVAL = 4.000 mass and valenz - RCORE = 1.900 outmost cutoff radius - RWIGS = 2.480; RWIGS = 1.312 wigner-seitz radius (au A) - ENMAX = 245.345; ENMIN = 184.009 eV - ICORE = 2 local potential - LCOR = T correct aug charges - LPAW = T paw PP - EAUG = 322.069 - DEXC = 0.000 - RMAX = 1.950 core radius for proj-oper - RAUG = 1.300 factor for augmentation sphere - RDEP = 1.993 radius for radial grids - RDEPT = 1.837 core radius for aug-charge - - Atomic configuration - 6 entries - n l j E occ. - 1 0 0.50 -1785.8828 2.0000 - 2 0 0.50 -139.4969 2.0000 - 2 1 1.50 -95.5546 6.0000 - 3 0 0.50 -10.8127 2.0000 - 3 1 0.50 -4.0811 2.0000 - 3 2 1.50 -4.0817 0.0000 - Description - l E TYP RCUT TYP RCUT - 0 -10.8127223 23 1.900 - 0 -7.6451159 23 1.900 - 1 -4.0811372 23 1.900 - 1 2.4879257 23 1.900 - 2 -4.0817478 7 1.900 - local pseudopotential read in - partial core-charges read in - partial kinetic energy density read in - atomic valenz-charges read in - non local Contribution for L= 0 read in - real space projection operators read in - non local Contribution for L= 0 read in - real space projection operators read in - non local Contribution for L= 1 read in - real space projection operators read in - non local Contribution for L= 1 read in - real space projection operators read in - PAW grid and wavefunctions read in - - number of l-projection operators is LMAX = 4 - number of lm-projection operators is LMMAX = 8 - - PAW_PBE Si 05Jan2001 : - energy of atom 1 EATOM= -103.0669 - kinetic energy error for atom= 0.0003 (will be added to EATOM!!) - - - POSCAR: Si8 - positions in direct lattice - velocities in cartesian coordinates - exchange correlation table for LEXCH = 8 - RHO(1)= 0.500 N(1) = 2000 - RHO(2)= 100.500 N(2) = 4000 - - - ------------------------- aborting loop because EDIFF is reached ---------------------------------------- - - - CHARGE: cpu time 0.2963: real time 0.2963 - FORLOC: cpu time 0.0049: real time 0.0049 - FORNL : cpu time 0.9680: real time 0.9681 - STRESS: cpu time 3.5438: real time 3.5442 - FORCOR: cpu time 0.0514: real time 0.0514 - FORHAR: cpu time 0.0141: real time 0.0141 - MIXING: cpu time 0.0020: real time 0.0020 - OFIELD: cpu time 0.0000: real time 0.0000 - - FORCE on cell =-STRESS in cart. coord. units (eV): - Direction XX YY ZZ XY YZ ZX - -------------------------------------------------------------------------------------- - Alpha Z 13.17272 13.17272 13.17272 - Ewald -302.59373 -302.59373 -302.59373 0.00000 0.00000 -0.00000 - Hartree 20.22818 20.22818 20.22818 -0.00000 0.00000 -0.00001 - E(xc) -100.98430 -100.98430 -100.98430 0.00000 -0.00000 0.00000 - Local -118.00021 -118.00021 -118.00020 0.00001 -0.00000 0.00002 - n-local 309.78388 309.78388 309.78388 -0.00000 0.00000 -0.00000 - augment -46.59684 -46.59684 -46.59684 -0.00000 -0.00000 -0.00000 - Kinetic 224.99250 224.99250 224.99250 0.00000 0.00000 0.00001 - Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 - ------------------------------------------------------------------------------------- - Total 0.00220 0.00220 0.00220 0.00001 0.00000 0.00002 - in kB 0.02151 0.02155 0.02156 0.00008 0.00001 0.00019 - external pressure = 0.02 kB Pullay stress = 0.00 kB - - - VOLUME and BASIS-vectors are now : - ----------------------------------------------------------------------------- - energy-cutoff : 650.00 - volume of cell : 163.55 - direct lattice vectors reciprocal lattice vectors - 5.468728000 0.000000000 0.000000000 0.182857878 0.000000000 0.000000000 - 0.000000000 5.468728000 0.000000000 0.000000000 0.182857878 0.000000000 - 0.000000000 0.000000000 5.468728000 0.000000000 0.000000000 0.182857878 - - length of vectors - 5.468728000 5.468728000 5.468728000 0.182857878 0.182857878 0.182857878 - - - FORCES acting on ions - electron-ion (+dipol) ewald-force non-local-force convergence-correction - ----------------------------------------------------------------------------------------------- - -.236E-04 -.111E-04 -.458E-04 0.249E-13 0.107E-13 -.355E-14 -.871E-05 -.478E-05 0.920E-05 0.337E-04 0.158E-04 0.387E-04 - -.255E-04 -.104E-04 -.182E-04 0.180E-13 0.384E-14 -.710E-14 0.241E-05 0.915E-05 -.846E-06 0.256E-04 0.474E-05 0.222E-04 - -.805E-04 0.107E-05 0.374E-04 0.107E-13 0.355E-14 0.000E+00 0.146E-04 0.648E-05 -.650E-05 0.733E-04 -.793E-05 -.346E-04 - -.760E-05 -.183E-04 -.565E-05 0.341E-14 -.357E-14 -.362E-14 -.135E-05 0.548E-05 0.133E-04 0.888E-05 0.154E-04 -.541E-05 - 0.555E-04 0.406E-05 0.204E-04 0.355E-14 0.355E-14 0.355E-14 -.750E-05 -.781E-05 0.356E-05 -.512E-04 0.202E-05 -.277E-04 - -.321E-05 0.309E-04 0.493E-04 -.178E-13 -.350E-14 -.718E-16 0.836E-05 -.964E-05 -.109E-04 -.534E-05 -.228E-04 -.407E-04 - 0.481E-04 0.281E-04 -.852E-05 -.107E-13 -.355E-14 0.711E-14 -.257E-05 -.775E-05 -.798E-05 -.479E-04 -.223E-04 0.139E-04 - 0.234E-04 -.320E-04 -.298E-04 -.320E-13 -.106E-13 0.356E-14 -.448E-05 0.995E-05 0.233E-05 -.207E-04 0.245E-04 0.287E-04 - ----------------------------------------------------------------------------------------------- - -.134E-04 -.763E-05 -.867E-06 0.124E-15 0.361E-15 -.131E-15 0.759E-06 0.107E-05 0.221E-05 0.165E-04 0.934E-05 -.503E-05 - - - POSITION TOTAL-FORCE (eV/Angst) - ----------------------------------------------------------------------------------- - 1.36718 1.36718 1.36718 0.000001 -0.000000 0.000003 - 2.73436 2.73436 0.00000 0.000002 0.000003 0.000004 - 1.36718 4.10155 4.10155 0.000007 -0.000001 -0.000003 - 2.73436 0.00000 2.73436 -0.000001 0.000002 0.000003 - 4.10155 1.36718 4.10155 -0.000004 -0.000002 -0.000003 - 0.00000 2.73436 2.73436 -0.000001 -0.000002 -0.000002 - 4.10155 4.10155 1.36718 -0.000003 -0.000002 -0.000002 - 0.00000 0.00000 0.00000 -0.000002 0.000002 0.000002 - ----------------------------------------------------------------------------------- - total drift: 0.000004 0.000003 -0.000004 - - --------------------------------------------------------------------------------------------------------- - - - - FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) - --------------------------------------------------- - free energy TOTEN = -43.40017315 eV - - energy without entropy= -43.40017315 energy(sigma->0) = -43.40017315 - - - --------------------------------------------------------------------------------------------------------- - - - POTLOK: cpu time 0.0496: real time 0.0496 - - --------------------------------------------------------------------------------------------------------- - - - - --------------------------------------------------------------------------------------------------------- - - - - reached required accuracy - stopping structural energy minimisation - LOOP+: cpu time 73.7767: real time 73.8176 - 4ORBIT: cpu time 0.0000: real time 0.0000 - - total amount of memory used by VASP MPI-rank0 119933. kBytes -======================================================================= - - base : 30000. kBytes - nonl-proj : 43479. kBytes - fftplans : 4240. kBytes - grid : 9842. kBytes - one-center: 24. kBytes - wavefun : 32348. kBytes - - - - General timing and accounting informations for this job: - ======================================================== - - Total CPU time used (sec): 75.718 - User time (sec): 75.184 - System time (sec): 0.534 - Elapsed time (sec): 75.841 - - Maximum memory used (kb): 186724. - Average memory used (kb): 0. - - Minor page faults: 71438 - Major page faults: 0 - Voluntary context switches: 409 diff --git a/tests/auto_test/confs/hp-Li/POSCAR b/tests/auto_test/confs/hp-Li/POSCAR new file mode 100644 index 000000000..bba6ab187 --- /dev/null +++ b/tests/auto_test/confs/hp-Li/POSCAR @@ -0,0 +1,48 @@ +Li40 +1.0 + 6.7885999680 0.0000000000 0.0000000000 + 0.0000000000 8.0621995926 0.0000000000 + 0.0000000000 0.0000000000 5.0141000748 + Li + 40 +Direct + 0.093139998 0.116310003 0.000000000 + 0.906859976 0.883689982 0.000000000 + 0.593140024 0.383690012 0.000000000 + 0.406860011 0.616310018 0.000000000 + 0.093139998 0.616310018 0.500000000 + 0.906859976 0.383690012 0.500000000 + 0.593140024 0.883689982 0.500000000 + 0.406860011 0.116310003 0.500000000 + 0.862999962 0.903139985 0.313789986 + 0.137000020 0.096860000 0.313789986 + 0.362999927 0.596860015 0.313789986 + 0.637000038 0.403140015 0.313789986 + 0.862999962 0.403140015 0.813789962 + 0.137000020 0.596860015 0.813789962 + 0.362999927 0.096860000 0.813789962 + 0.637000038 0.903139985 0.813789962 + 0.967830033 0.116910005 0.594070039 + 0.032169997 0.883090018 0.594070039 + 0.467829928 0.383089988 0.594070039 + 0.532170002 0.616909982 0.594070039 + 0.967830033 0.616909982 0.094069955 + 0.032169997 0.383089988 0.094069955 + 0.467829928 0.883090018 0.094069955 + 0.532170002 0.116910005 0.094069955 + 0.351290002 0.268080003 0.175870004 + 0.648710033 0.731919997 0.175870004 + 0.851289967 0.231919997 0.175870004 + 0.148710016 0.768080003 0.175870004 + 0.351290002 0.768080003 0.675869992 + 0.648710033 0.231919997 0.675869992 + 0.851289967 0.731919997 0.675869992 + 0.148710016 0.268080003 0.675869992 + 0.290069992 0.911850003 0.377050007 + 0.709930008 0.088150004 0.377050007 + 0.790069992 0.588149997 0.377050007 + 0.209930008 0.411850003 0.377050007 + 0.290069992 0.411850003 0.877050078 + 0.709930008 0.588149997 0.877050078 + 0.790069992 0.088150004 0.877050078 + 0.209930008 0.911850003 0.877050078 diff --git a/tests/auto_test/confs/si/mp-149/POSCAR b/tests/auto_test/confs/si/mp-149/POSCAR deleted file mode 100644 index 4fe904343..000000000 --- a/tests/auto_test/confs/si/mp-149/POSCAR +++ /dev/null @@ -1,25 +0,0 @@ -Si8 - 1.00000000000000 - 5.4687279999999996 0.0000000000000000 0.0000000000000000 - 0.0000000000000000 5.4687279999999996 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 5.4687279999999996 - Si - 8 -Direct - 0.2500000000000000 0.2500000000000000 0.2500000000000000 - 0.5000000000000000 0.5000000000000000 0.0000000000000000 - 0.2500000000000000 0.7500000000000000 0.7500000000000000 - 0.5000000000000000 0.0000000000000000 0.5000000000000000 - 0.7500000000000000 0.2500000000000000 0.7500000000000000 - 0.0000000000000000 0.5000000000000000 0.5000000000000000 - 0.7500000000000000 0.7500000000000000 0.2500000000000000 - 0.0000000000000000 0.0000000000000000 0.0000000000000000 - - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 - 0.00000000E+00 0.00000000E+00 0.00000000E+00 diff --git a/tests/auto_test/equi/vasp/CONTCAR b/tests/auto_test/equi/vasp/CONTCAR new file mode 100644 index 000000000..199479402 --- /dev/null +++ b/tests/auto_test/equi/vasp/CONTCAR @@ -0,0 +1,89 @@ +Li40 + 1.00000000000000 + 6.9018805596324686 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 8.1592726359368051 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 5.0741491137471364 + Li + 40 +Direct + 0.0929926939123510 0.1164121140843607 -0.0005830561014952 + 0.9070072800876469 0.8835878709156418 -0.0005830561014952 + 0.5929927199123531 0.3835879009156440 -0.0005830561014952 + 0.4070073150876461 0.6164121290843582 -0.0005830561014952 + 0.0929926939123510 0.6164121290843582 0.4994169438985048 + 0.9070072800876469 0.3835879009156440 0.4994169438985048 + 0.5929927199123531 0.8835878709156418 0.4994169438985048 + 0.4070073150876461 0.1164121140843607 0.4994169438985048 + 0.8635595703334581 0.9029063079629907 0.3136578702707695 + 0.1364404116665474 0.0970936770370115 0.3136578702707695 + 0.3635595353334517 0.5970936920370093 0.3136578702707695 + 0.6364404296665419 0.4029063379629862 0.3136578702707695 + 0.8635595703334581 0.4029063379629862 0.8136578462707674 + 0.1364404116665474 0.5970936920370093 0.8136578462707674 + 0.3635595353334517 0.0970936770370115 0.8136578462707674 + 0.6364404296665419 0.9029063079629907 0.8136578462707674 + 0.9672253144440631 0.1171872717871092 0.5934256056750636 + 0.0327747155559322 0.8828127512128892 0.5934256056750636 + 0.4672252094440651 0.3828127212128937 0.5934256056750636 + 0.5327747205559362 0.6171872487871108 0.5934256056750636 + 0.9672253144440631 0.6171872487871108 0.0934255216750637 + 0.0327747155559322 0.3828127212128937 0.0934255216750637 + 0.4672252094440651 0.8828127512128892 0.0934255216750637 + 0.5327747205559362 0.1171872717871092 0.0934255216750637 + 0.3506627955762062 0.2679050157863044 0.1768808633851625 + 0.6493372394237932 0.7320949842136956 0.1768808633851625 + 0.8506627605762068 0.2320949842136955 0.1768808633851625 + 0.1493372224237954 0.7679050157863044 0.1768808633851625 + 0.3506627955762062 0.7679050157863044 0.6768808513851686 + 0.6493372394237932 0.2320949842136955 0.6768808513851686 + 0.8506627605762068 0.7320949842136956 0.6768808513851686 + 0.1493372224237954 0.2679050157863044 0.6768808513851686 + 0.2910147903786175 0.9120332779572811 0.3773987527705024 + 0.7089852096213823 0.0879667290427159 0.3773987527705024 + 0.7910147903786177 0.5879667220427189 0.3773987527705024 + 0.2089852096213825 0.4120332779572811 0.3773987527705024 + 0.2910147903786175 0.4120332779572811 0.8773988237705046 + 0.7089852096213823 0.5879667220427189 0.8773988237705046 + 0.7910147903786177 0.0879667290427159 0.8773988237705046 + 0.2089852096213825 0.9120332779572811 0.8773988237705046 + + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 diff --git a/tests/auto_test/equi/vasp/OUTCAR b/tests/auto_test/equi/vasp/OUTCAR new file mode 100644 index 000000000..a1bb01858 --- /dev/null +++ b/tests/auto_test/equi/vasp/OUTCAR @@ -0,0 +1,33383 @@ + vasp.5.4.1 24Jun15 (build Dec 14 2019 20:21:40) complex + + executed on IFC91_ompi date 2020.01.05 15:53:38 + running on 40 total cores + distrk: each k-point on 40 cores, 1 groups + distr: one band on NCORES_PER_BAND= 10 cores, 4 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Li 17Jan2003 + POTCAR: PAW_PBE Li 17Jan2003 + local pseudopotential read in + partial core-charges read in + partial kinetic energy density read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 3 + number of lm-projection operators is LMMAX = 5 + + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have a (more or less) 'large supercell' and for larger cells | +| it might be more efficient to use real space projection opertators | +| So try LREAL= Auto in the INCAR file. | +| Mind: At the moment your POTCAR file does not contain real space | +| projectors, and has to be modified, BUT if you | +| want to do an extremely accurate calculation you might also keep the | +| reciprocal projection scheme (i.e. LREAL=.FALSE.) | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Li 17Jan2003 : + energy of atom 1 EATOM= -5.3001 + kinetic energy error for atom= 0.0000 (will be added to EATOM!!) + + + POSCAR: Li40 + positions in direct lattice + No initial velocities read in + exchange correlation table for LEXCH = 8 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.093 0.116 0.000- 10 1.61 40 1.93 15 2.06 32 2.07 27 2.08 39 2.16 17 2.21 22 2.24 + 2 2.26 25 2.31 37 2.80 18 2.80 9 2.81 33 2.84 13 2.94 28 2.97 + 2 0.907 0.884 0.000- 9 1.61 39 1.93 16 2.06 31 2.07 28 2.08 40 2.16 18 2.21 21 2.24 + 1 2.26 26 2.31 38 2.80 17 2.80 10 2.81 34 2.84 14 2.94 27 2.97 + 3 0.593 0.384 0.000- 12 1.61 38 1.93 13 2.06 30 2.07 25 2.08 37 2.16 19 2.21 24 2.24 + 4 2.26 27 2.31 39 2.80 20 2.80 11 2.81 35 2.84 15 2.94 26 2.97 + 4 0.407 0.616 0.000- 11 1.61 37 1.93 14 2.06 29 2.07 26 2.08 38 2.16 20 2.21 23 2.24 + 3 2.26 28 2.31 40 2.80 19 2.80 12 2.81 36 2.84 16 2.94 25 2.97 + 5 0.093 0.616 0.500- 14 1.61 36 1.93 11 2.06 28 2.07 31 2.08 35 2.16 21 2.21 18 2.24 + 6 2.26 29 2.31 33 2.80 22 2.80 13 2.81 37 2.84 9 2.94 32 2.97 + 6 0.907 0.384 0.500- 13 1.61 35 1.93 12 2.06 27 2.07 32 2.08 36 2.16 22 2.21 17 2.24 + 5 2.26 30 2.31 34 2.80 21 2.80 14 2.81 38 2.84 10 2.94 31 2.97 + 7 0.593 0.884 0.500- 16 1.61 34 1.93 9 2.06 26 2.07 29 2.08 33 2.16 23 2.21 20 2.24 + 8 2.26 31 2.31 35 2.80 24 2.80 15 2.81 39 2.84 11 2.94 30 2.97 + 8 0.407 0.116 0.500- 15 1.61 33 1.93 10 2.06 25 2.07 30 2.08 34 2.16 24 2.21 19 2.24 + 7 2.26 32 2.31 36 2.80 23 2.80 16 2.81 40 2.84 12 2.94 29 2.97 + 9 0.863 0.903 0.314- 2 1.61 18 1.82 34 1.85 7 2.06 26 2.12 31 2.28 28 2.33 17 2.33 + 10 2.43 35 2.61 21 2.65 39 2.70 27 2.74 1 2.81 23 2.90 33 2.92 + 10 0.137 0.097 0.314- 1 1.61 17 1.82 33 1.85 8 2.06 25 2.12 32 2.28 27 2.33 18 2.33 + 9 2.43 36 2.61 22 2.65 40 2.70 28 2.74 2 2.81 24 2.90 34 2.92 + 11 0.363 0.597 0.314- 4 1.61 20 1.82 36 1.85 5 2.06 28 2.12 29 2.28 26 2.33 19 2.33 + 12 2.43 33 2.61 23 2.65 37 2.70 25 2.74 3 2.81 21 2.90 35 2.92 + 12 0.637 0.403 0.314- 3 1.61 19 1.82 35 1.85 6 2.06 27 2.12 30 2.28 25 2.33 20 2.33 + 11 2.43 34 2.61 24 2.65 38 2.70 26 2.74 4 2.81 22 2.90 36 2.92 + 13 0.863 0.403 0.814- 6 1.61 22 1.82 38 1.85 3 2.06 30 2.12 27 2.28 32 2.33 21 2.33 + 14 2.43 39 2.61 17 2.65 35 2.70 31 2.74 5 2.81 19 2.90 37 2.92 + 14 0.137 0.597 0.814- 5 1.61 21 1.82 37 1.85 4 2.06 29 2.12 28 2.28 31 2.33 22 2.33 + 13 2.43 40 2.61 18 2.65 36 2.70 32 2.74 6 2.81 20 2.90 38 2.92 + 15 0.363 0.097 0.814- 8 1.61 24 1.82 40 1.85 1 2.06 32 2.12 25 2.28 30 2.33 23 2.33 + 16 2.43 37 2.61 19 2.65 33 2.70 29 2.74 7 2.81 17 2.90 39 2.92 + 16 0.637 0.903 0.814- 7 1.61 23 1.82 39 1.85 2 2.06 31 2.12 26 2.28 29 2.33 24 2.33 + 15 2.43 38 2.61 20 2.65 34 2.70 30 2.74 8 2.81 18 2.90 40 2.92 + 17 0.968 0.117 0.594- 32 1.78 10 1.82 39 1.88 18 1.94 34 2.07 1 2.21 6 2.24 9 2.33 + 30 2.39 27 2.43 13 2.65 40 2.73 2 2.80 15 2.90 33 2.95 8 3.02 + 18 0.032 0.883 0.594- 31 1.78 9 1.82 40 1.88 17 1.94 33 2.07 2 2.21 5 2.24 10 2.33 + 29 2.39 28 2.43 14 2.65 39 2.73 1 2.80 16 2.90 34 2.95 7 3.02 + 19 0.468 0.383 0.594- 30 1.78 12 1.82 37 1.88 20 1.94 36 2.07 3 2.21 8 2.24 11 2.33 + 32 2.39 25 2.43 15 2.65 38 2.73 4 2.80 13 2.90 35 2.95 6 3.02 + 20 0.532 0.617 0.594- 29 1.78 11 1.82 38 1.88 19 1.94 35 2.07 4 2.21 7 2.24 12 2.33 + 31 2.39 26 2.43 16 2.65 37 2.73 3 2.80 14 2.90 36 2.95 5 3.02 + 21 0.968 0.617 0.094- 28 1.78 14 1.82 35 1.88 22 1.94 38 2.07 5 2.21 2 2.24 13 2.33 + 26 2.39 31 2.43 9 2.65 36 2.73 6 2.80 11 2.90 37 2.95 4 3.02 + 22 0.032 0.383 0.094- 27 1.78 13 1.82 36 1.88 21 1.94 37 2.07 6 2.21 1 2.24 14 2.33 + 25 2.39 32 2.43 10 2.65 35 2.73 5 2.80 12 2.90 38 2.95 3 3.02 + 23 0.468 0.883 0.094- 26 1.78 16 1.82 33 1.88 24 1.94 40 2.07 7 2.21 4 2.24 15 2.33 + 28 2.39 29 2.43 11 2.65 34 2.73 8 2.80 9 2.90 39 2.95 2 3.02 + 24 0.532 0.117 0.094- 25 1.78 15 1.82 34 1.88 23 1.94 39 2.07 8 2.21 3 2.24 16 2.33 + 27 2.39 30 2.43 12 2.65 33 2.73 7 2.80 10 2.90 40 2.95 1 3.02 + 25 0.351 0.268 0.176- 24 1.78 36 1.81 37 1.94 8 2.07 3 2.08 10 2.12 15 2.28 1 2.31 + 12 2.33 22 2.39 19 2.43 11 2.74 32 2.86 32 2.86 4 2.97 34 3.01 + 26 0.649 0.732 0.176- 23 1.78 35 1.81 38 1.94 7 2.07 4 2.08 9 2.12 16 2.28 2 2.31 + 11 2.33 21 2.39 20 2.43 12 2.74 31 2.86 31 2.86 3 2.97 33 3.01 + 27 0.851 0.232 0.176- 22 1.78 34 1.81 39 1.94 6 2.07 1 2.08 12 2.12 13 2.28 3 2.31 + 10 2.33 24 2.39 17 2.43 9 2.74 30 2.86 30 2.86 2 2.97 36 3.01 + 28 0.149 0.768 0.176- 21 1.78 33 1.81 40 1.94 5 2.07 2 2.08 11 2.12 14 2.28 4 2.31 + 9 2.33 23 2.39 18 2.43 10 2.74 29 2.86 29 2.86 1 2.97 35 3.01 + 29 0.351 0.768 0.676- 20 1.78 40 1.81 33 1.94 4 2.07 7 2.08 14 2.12 11 2.28 5 2.31 + 16 2.33 18 2.39 23 2.43 15 2.74 28 2.86 28 2.86 8 2.97 38 3.01 + 30 0.649 0.232 0.676- 19 1.78 39 1.81 34 1.94 3 2.07 8 2.08 13 2.12 12 2.28 6 2.31 + 15 2.33 17 2.39 24 2.43 16 2.74 27 2.86 27 2.86 7 2.97 37 3.01 + 31 0.851 0.732 0.676- 18 1.78 38 1.81 35 1.94 2 2.07 5 2.08 16 2.12 9 2.28 7 2.31 + 14 2.33 20 2.39 21 2.43 13 2.74 26 2.86 26 2.86 6 2.97 40 3.01 + 32 0.149 0.268 0.676- 17 1.78 37 1.81 36 1.94 1 2.07 6 2.08 15 2.12 10 2.28 8 2.31 + 13 2.33 19 2.39 22 2.43 14 2.74 25 2.86 25 2.86 5 2.97 39 3.01 + 33 0.290 0.912 0.377- 28 1.81 10 1.85 23 1.88 8 1.93 29 1.94 18 2.07 7 2.16 40 2.57 + 40 2.57 11 2.61 15 2.70 24 2.73 5 2.80 1 2.84 9 2.92 17 2.95 + 34 0.710 0.088 0.377- 27 1.81 9 1.85 24 1.88 7 1.93 30 1.94 17 2.07 8 2.16 39 2.57 + 39 2.57 12 2.61 16 2.70 23 2.73 6 2.80 2 2.84 10 2.92 18 2.95 + 35 0.790 0.588 0.377- 26 1.81 12 1.85 21 1.88 6 1.93 31 1.94 20 2.07 5 2.16 38 2.57 + 38 2.57 9 2.61 13 2.70 22 2.73 7 2.80 3 2.84 11 2.92 19 2.95 + 36 0.210 0.412 0.377- 25 1.81 11 1.85 22 1.88 5 1.93 32 1.94 19 2.07 6 2.16 37 2.57 + 37 2.57 10 2.61 14 2.70 21 2.73 8 2.80 4 2.84 12 2.92 20 2.95 + 37 0.290 0.412 0.877- 32 1.81 14 1.85 19 1.88 4 1.93 25 1.94 22 2.07 3 2.16 36 2.57 + 36 2.57 15 2.61 11 2.70 20 2.73 1 2.80 5 2.84 13 2.92 21 2.95 + 38 0.710 0.588 0.877- 31 1.81 13 1.85 20 1.88 3 1.93 26 1.94 21 2.07 4 2.16 35 2.57 + 35 2.57 16 2.61 12 2.70 19 2.73 2 2.80 6 2.84 14 2.92 22 2.95 + 39 0.790 0.088 0.877- 30 1.81 16 1.85 17 1.88 2 1.93 27 1.94 24 2.07 1 2.16 34 2.57 + 34 2.57 13 2.61 9 2.70 18 2.73 3 2.80 7 2.84 15 2.92 23 2.95 + 40 0.210 0.912 0.877- 29 1.81 15 1.85 18 1.88 1 1.93 28 1.94 23 2.07 2 2.16 33 2.57 + 33 2.57 14 2.61 10 2.70 17 2.73 4 2.80 8 2.84 16 2.92 24 2.95 + + + ----------------------------------------------------------------------------- +| | +| W W AA RRRRR N N II N N GGGG !!! | +| W W A A R R NN N II NN N G G !!! | +| W W A A R R N N N II N N N G !!! | +| W WW W AAAAAA RRRRR N N N II N N N G GGG ! | +| WW WW A A R R N NN II N NN G G | +| W W A A R R N N II N N GGGG !!! | +| | +| The distance between some ions is very small | +| please check the nearest neigbor list in the OUTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + LATTYP: Found a simple orthorhombic cell. + ALAT = 5.0141000748 + B/A-ratio = 1.3539019698 + C/A-ratio = 1.6079056007 + + Lattice vectors: + + A1 = ( 0.0000000000, 0.0000000000, 5.0141000748) + A2 = ( -6.7885999680, 0.0000000000, 0.0000000000) + A3 = ( 0.0000000000, -8.0621995926, 0.0000000000) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns following result: + + LATTYP: Found a base centered orthorhombic cell. + ALAT = 5.0141000748 + B/A-ratio = 1.6079056746 + C/A-ratio = 1.3539019698 + + Lattice vectors: + + A1 = ( 0.0000000000, 4.0310999817, -2.5070504586) + A2 = ( 0.0000000000, -4.0310999817, -2.5070496162) + A3 = ( -6.7885999680, 0.0000000000, 0.0000000000) + + 2 primitive cells build up your supercell. + + + Routine SETGRP: Setting up the symmetry group for a + simple orthorhombic supercell. + + + Subroutine GETGRP returns: Found 4 space group operations + (whereof 2 operations were pure point group operations) + out of a pool of 8 trial point group operations. + + +The static configuration has the point symmetry C_2 . + The point group associated with its full space group is C_2v. + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns following result: + + LATTYP: Found a base centered orthorhombic cell. + ALAT = 5.0141000748 + B/A-ratio = 1.6079056746 + C/A-ratio = 1.3539019698 + + Lattice vectors: + + A1 = ( 0.0000000000, 4.0310999817, -2.5070504586) + A2 = ( 0.0000000000, -4.0310999817, -2.5070496162) + A3 = ( -6.7885999680, 0.0000000000, 0.0000000000) + + 2 primitive cells build up your supercell. + + + Routine SETGRP: Setting up the symmetry group for a + simple orthorhombic supercell. + + + Subroutine GETGRP returns: Found 4 space group operations + (whereof 2 operations were pure point group operations) + out of a pool of 8 trial point group operations. + + +The dynamic configuration has the point symmetry C_2 . + The point group associated with its full space group is C_2v. + + + Subroutine INISYM returns: Found 4 space group operations + (whereof 2 operations are pure point group operations), + and found 2 'primitive' translations + + + + KPOINTS: K-Mesh Generated with KP-Resolved Value + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 -0.000000 0.000000 -0.000000 + 2 1.000000 180.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 -0.000000 + 3 -1.000000 180.000000 0.000000 1.000000 0.000000 -0.500000 0.000000 -0.500000 + 4 -1.000000 180.000000 1.000000 0.000000 0.000000 -0.500000 0.000000 -0.500000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 60 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.083333 0.050000 4.000000 + 0.142857 0.083333 0.050000 8.000000 + 0.285714 0.083333 0.050000 8.000000 + 0.428571 0.083333 0.050000 8.000000 + 0.000000 0.250000 0.050000 4.000000 + 0.142857 0.250000 0.050000 8.000000 + 0.285714 0.250000 0.050000 8.000000 + 0.428571 0.250000 0.050000 8.000000 + 0.000000 0.416667 0.050000 4.000000 + 0.142857 0.416667 0.050000 8.000000 + 0.285714 0.416667 0.050000 8.000000 + 0.428571 0.416667 0.050000 8.000000 + 0.000000 0.083333 0.150000 4.000000 + 0.142857 0.083333 0.150000 8.000000 + 0.285714 0.083333 0.150000 8.000000 + 0.428571 0.083333 0.150000 8.000000 + 0.000000 0.250000 0.150000 4.000000 + 0.142857 0.250000 0.150000 8.000000 + 0.285714 0.250000 0.150000 8.000000 + 0.428571 0.250000 0.150000 8.000000 + 0.000000 0.416667 0.150000 4.000000 + 0.142857 0.416667 0.150000 8.000000 + 0.285714 0.416667 0.150000 8.000000 + 0.428571 0.416667 0.150000 8.000000 + 0.000000 0.083333 0.250000 4.000000 + 0.142857 0.083333 0.250000 8.000000 + 0.285714 0.083333 0.250000 8.000000 + 0.428571 0.083333 0.250000 8.000000 + 0.000000 0.250000 0.250000 4.000000 + 0.142857 0.250000 0.250000 8.000000 + 0.285714 0.250000 0.250000 8.000000 + 0.428571 0.250000 0.250000 8.000000 + 0.000000 0.416667 0.250000 4.000000 + 0.142857 0.416667 0.250000 8.000000 + 0.285714 0.416667 0.250000 8.000000 + 0.428571 0.416667 0.250000 8.000000 + 0.000000 0.083333 0.350000 4.000000 + 0.142857 0.083333 0.350000 8.000000 + 0.285714 0.083333 0.350000 8.000000 + 0.428571 0.083333 0.350000 8.000000 + 0.000000 0.250000 0.350000 4.000000 + 0.142857 0.250000 0.350000 8.000000 + 0.285714 0.250000 0.350000 8.000000 + 0.428571 0.250000 0.350000 8.000000 + 0.000000 0.416667 0.350000 4.000000 + 0.142857 0.416667 0.350000 8.000000 + 0.285714 0.416667 0.350000 8.000000 + 0.428571 0.416667 0.350000 8.000000 + 0.000000 0.083333 0.450000 4.000000 + 0.142857 0.083333 0.450000 8.000000 + 0.285714 0.083333 0.450000 8.000000 + 0.428571 0.083333 0.450000 8.000000 + 0.000000 0.250000 0.450000 4.000000 + 0.142857 0.250000 0.450000 8.000000 + 0.285714 0.250000 0.450000 8.000000 + 0.428571 0.250000 0.450000 8.000000 + 0.000000 0.416667 0.450000 4.000000 + 0.142857 0.416667 0.450000 8.000000 + 0.285714 0.416667 0.450000 8.000000 + 0.428571 0.416667 0.450000 8.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.010336 0.009972 4.000000 + 0.021044 0.010336 0.009972 8.000000 + 0.042087 0.010336 0.009972 8.000000 + 0.063131 0.010336 0.009972 8.000000 + 0.000000 0.031009 0.009972 4.000000 + 0.021044 0.031009 0.009972 8.000000 + 0.042087 0.031009 0.009972 8.000000 + 0.063131 0.031009 0.009972 8.000000 + 0.000000 0.051682 0.009972 4.000000 + 0.021044 0.051682 0.009972 8.000000 + 0.042087 0.051682 0.009972 8.000000 + 0.063131 0.051682 0.009972 8.000000 + 0.000000 0.010336 0.029916 4.000000 + 0.021044 0.010336 0.029916 8.000000 + 0.042087 0.010336 0.029916 8.000000 + 0.063131 0.010336 0.029916 8.000000 + 0.000000 0.031009 0.029916 4.000000 + 0.021044 0.031009 0.029916 8.000000 + 0.042087 0.031009 0.029916 8.000000 + 0.063131 0.031009 0.029916 8.000000 + 0.000000 0.051682 0.029916 4.000000 + 0.021044 0.051682 0.029916 8.000000 + 0.042087 0.051682 0.029916 8.000000 + 0.063131 0.051682 0.029916 8.000000 + 0.000000 0.010336 0.049859 4.000000 + 0.021044 0.010336 0.049859 8.000000 + 0.042087 0.010336 0.049859 8.000000 + 0.063131 0.010336 0.049859 8.000000 + 0.000000 0.031009 0.049859 4.000000 + 0.021044 0.031009 0.049859 8.000000 + 0.042087 0.031009 0.049859 8.000000 + 0.063131 0.031009 0.049859 8.000000 + 0.000000 0.051682 0.049859 4.000000 + 0.021044 0.051682 0.049859 8.000000 + 0.042087 0.051682 0.049859 8.000000 + 0.063131 0.051682 0.049859 8.000000 + 0.000000 0.010336 0.069803 4.000000 + 0.021044 0.010336 0.069803 8.000000 + 0.042087 0.010336 0.069803 8.000000 + 0.063131 0.010336 0.069803 8.000000 + 0.000000 0.031009 0.069803 4.000000 + 0.021044 0.031009 0.069803 8.000000 + 0.042087 0.031009 0.069803 8.000000 + 0.063131 0.031009 0.069803 8.000000 + 0.000000 0.051682 0.069803 4.000000 + 0.021044 0.051682 0.069803 8.000000 + 0.042087 0.051682 0.069803 8.000000 + 0.063131 0.051682 0.069803 8.000000 + 0.000000 0.010336 0.089747 4.000000 + 0.021044 0.010336 0.089747 8.000000 + 0.042087 0.010336 0.089747 8.000000 + 0.063131 0.010336 0.089747 8.000000 + 0.000000 0.031009 0.089747 4.000000 + 0.021044 0.031009 0.089747 8.000000 + 0.042087 0.031009 0.089747 8.000000 + 0.063131 0.031009 0.089747 8.000000 + 0.000000 0.051682 0.089747 4.000000 + 0.021044 0.051682 0.089747 8.000000 + 0.042087 0.051682 0.089747 8.000000 + 0.063131 0.051682 0.089747 8.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 60 k-points in BZ NKDIM = 60 number of bands NBANDS= 44 + number of dos NEDOS = 301 number of ions NIONS = 40 + non local maximal LDIM = 3 non local SUM 2l+1 LMDIM = 5 + total plane-waves NPLWV = 67200 + max r-space proj IRMAX = 1 max aug-charges IRDMAX= 8034 + dimension x,y,z NGX = 42 NGY = 50 NGZ = 32 + dimension x,y,z NGXF= 84 NGYF= 100 NGZF= 64 + support grid NGXF= 84 NGYF= 100 NGZF= 64 + ions per type = 40 + NGX,Y,Z is equivalent to a cutoff of 10.29, 10.31, 10.61 a.u. + NGXF,Y,Z is equivalent to a cutoff of 20.57, 20.62, 21.22 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 42 NGY = 50 NGZ = 31 + SYSTEM = unknown system + POSCAR = Li40 + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = normal normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 650.0 eV 47.77 Ry 6.91 a.u. 14.11 16.76 10.42*2*pi/ulx,y,z + ENINI = 650.0 initial cutoff + ENAUG = 331.6 eV augmentation charge cutoff + NELM = 200; NELMIN= 6; NELMDL= -5 # of ELM steps + EDIFF = 0.1E-05 stopping-criterion for ELM + LREAL = F real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 0 Vosko Wilk Nusair interpolation + ROPT = 0.00000 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 2 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 1 steps in history (QN), initial steepest desc. (CG) + ISIF = 3 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.6000 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.105E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 700.0 pullay stress + + Mass of Ions in am + POMASS = 7.01 + Ionic Valenz + ZVAL = 1.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 + virtual crystal weights + VCA = 1.00 + NELECT = 40.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.20 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 38 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.57E-08 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 6.86 46.30 + Fermi-wavevector in a.u.,A,eV,Ry = 0.861561 1.628114 10.099427 0.742287 + Thomas-Fermi vector in A = 1.979233 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = F correct potential (dipole corrections) + IDIPOL = 0 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = -- GGA type + LEXCH = 8 internal setting for exchange type + VOSKOWN= 0 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + conjugate gradient relaxation of ions + charge density and potential will be updated during run + non-spin polarized calculation + Variant of blocked Davidson + Davidson routine will perform the subspace rotation + perform sub-space diagonalisation + after iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 24 + reciprocal scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.20 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 650.00 + volume of cell : 274.43 + direct lattice vectors reciprocal lattice vectors + 6.788599968 0.000000000 0.000000000 0.147305778 0.000000000 0.000000000 + 0.000000000 8.062199593 0.000000000 0.000000000 0.124035629 0.000000000 + 0.000000000 0.000000000 5.014100075 0.000000000 0.000000000 0.199437583 + + length of vectors + 6.788599968 8.062199593 5.014100075 0.147305778 0.124035629 0.199437583 + + + + k-points in units of 2pi/SCALE and weight: K-Mesh Generated with KP-Resolved Value + 0.00000000 0.01033630 0.00997188 0.010 + 0.02104368 0.01033630 0.00997188 0.019 + 0.04208737 0.01033630 0.00997188 0.019 + 0.06313105 0.01033630 0.00997188 0.019 + 0.00000000 0.03100891 0.00997188 0.010 + 0.02104368 0.03100891 0.00997188 0.019 + 0.04208737 0.03100891 0.00997188 0.019 + 0.06313105 0.03100891 0.00997188 0.019 + 0.00000000 0.05168151 0.00997188 0.010 + 0.02104368 0.05168151 0.00997188 0.019 + 0.04208737 0.05168151 0.00997188 0.019 + 0.06313105 0.05168151 0.00997188 0.019 + 0.00000000 0.01033630 0.02991564 0.010 + 0.02104368 0.01033630 0.02991564 0.019 + 0.04208737 0.01033630 0.02991564 0.019 + 0.06313105 0.01033630 0.02991564 0.019 + 0.00000000 0.03100891 0.02991564 0.010 + 0.02104368 0.03100891 0.02991564 0.019 + 0.04208737 0.03100891 0.02991564 0.019 + 0.06313105 0.03100891 0.02991564 0.019 + 0.00000000 0.05168151 0.02991564 0.010 + 0.02104368 0.05168151 0.02991564 0.019 + 0.04208737 0.05168151 0.02991564 0.019 + 0.06313105 0.05168151 0.02991564 0.019 + 0.00000000 0.01033630 0.04985940 0.010 + 0.02104368 0.01033630 0.04985940 0.019 + 0.04208737 0.01033630 0.04985940 0.019 + 0.06313105 0.01033630 0.04985940 0.019 + 0.00000000 0.03100891 0.04985940 0.010 + 0.02104368 0.03100891 0.04985940 0.019 + 0.04208737 0.03100891 0.04985940 0.019 + 0.06313105 0.03100891 0.04985940 0.019 + 0.00000000 0.05168151 0.04985940 0.010 + 0.02104368 0.05168151 0.04985940 0.019 + 0.04208737 0.05168151 0.04985940 0.019 + 0.06313105 0.05168151 0.04985940 0.019 + 0.00000000 0.01033630 0.06980315 0.010 + 0.02104368 0.01033630 0.06980315 0.019 + 0.04208737 0.01033630 0.06980315 0.019 + 0.06313105 0.01033630 0.06980315 0.019 + 0.00000000 0.03100891 0.06980315 0.010 + 0.02104368 0.03100891 0.06980315 0.019 + 0.04208737 0.03100891 0.06980315 0.019 + 0.06313105 0.03100891 0.06980315 0.019 + 0.00000000 0.05168151 0.06980315 0.010 + 0.02104368 0.05168151 0.06980315 0.019 + 0.04208737 0.05168151 0.06980315 0.019 + 0.06313105 0.05168151 0.06980315 0.019 + 0.00000000 0.01033630 0.08974691 0.010 + 0.02104368 0.01033630 0.08974691 0.019 + 0.04208737 0.01033630 0.08974691 0.019 + 0.06313105 0.01033630 0.08974691 0.019 + 0.00000000 0.03100891 0.08974691 0.010 + 0.02104368 0.03100891 0.08974691 0.019 + 0.04208737 0.03100891 0.08974691 0.019 + 0.06313105 0.03100891 0.08974691 0.019 + 0.00000000 0.05168151 0.08974691 0.010 + 0.02104368 0.05168151 0.08974691 0.019 + 0.04208737 0.05168151 0.08974691 0.019 + 0.06313105 0.05168151 0.08974691 0.019 + + k-points in reciprocal lattice and weights: K-Mesh Generated with KP-Resolved Value + 0.00000000 0.08333333 0.05000000 0.010 + 0.14285714 0.08333333 0.05000000 0.019 + 0.28571429 0.08333333 0.05000000 0.019 + 0.42857143 0.08333333 0.05000000 0.019 + 0.00000000 0.25000000 0.05000000 0.010 + 0.14285714 0.25000000 0.05000000 0.019 + 0.28571429 0.25000000 0.05000000 0.019 + 0.42857143 0.25000000 0.05000000 0.019 + 0.00000000 0.41666667 0.05000000 0.010 + 0.14285714 0.41666667 0.05000000 0.019 + 0.28571429 0.41666667 0.05000000 0.019 + 0.42857143 0.41666667 0.05000000 0.019 + 0.00000000 0.08333333 0.15000000 0.010 + 0.14285714 0.08333333 0.15000000 0.019 + 0.28571429 0.08333333 0.15000000 0.019 + 0.42857143 0.08333333 0.15000000 0.019 + 0.00000000 0.25000000 0.15000000 0.010 + 0.14285714 0.25000000 0.15000000 0.019 + 0.28571429 0.25000000 0.15000000 0.019 + 0.42857143 0.25000000 0.15000000 0.019 + 0.00000000 0.41666667 0.15000000 0.010 + 0.14285714 0.41666667 0.15000000 0.019 + 0.28571429 0.41666667 0.15000000 0.019 + 0.42857143 0.41666667 0.15000000 0.019 + 0.00000000 0.08333333 0.25000000 0.010 + 0.14285714 0.08333333 0.25000000 0.019 + 0.28571429 0.08333333 0.25000000 0.019 + 0.42857143 0.08333333 0.25000000 0.019 + 0.00000000 0.25000000 0.25000000 0.010 + 0.14285714 0.25000000 0.25000000 0.019 + 0.28571429 0.25000000 0.25000000 0.019 + 0.42857143 0.25000000 0.25000000 0.019 + 0.00000000 0.41666667 0.25000000 0.010 + 0.14285714 0.41666667 0.25000000 0.019 + 0.28571429 0.41666667 0.25000000 0.019 + 0.42857143 0.41666667 0.25000000 0.019 + 0.00000000 0.08333333 0.35000000 0.010 + 0.14285714 0.08333333 0.35000000 0.019 + 0.28571429 0.08333333 0.35000000 0.019 + 0.42857143 0.08333333 0.35000000 0.019 + 0.00000000 0.25000000 0.35000000 0.010 + 0.14285714 0.25000000 0.35000000 0.019 + 0.28571429 0.25000000 0.35000000 0.019 + 0.42857143 0.25000000 0.35000000 0.019 + 0.00000000 0.41666667 0.35000000 0.010 + 0.14285714 0.41666667 0.35000000 0.019 + 0.28571429 0.41666667 0.35000000 0.019 + 0.42857143 0.41666667 0.35000000 0.019 + 0.00000000 0.08333333 0.45000000 0.010 + 0.14285714 0.08333333 0.45000000 0.019 + 0.28571429 0.08333333 0.45000000 0.019 + 0.42857143 0.08333333 0.45000000 0.019 + 0.00000000 0.25000000 0.45000000 0.010 + 0.14285714 0.25000000 0.45000000 0.019 + 0.28571429 0.25000000 0.45000000 0.019 + 0.42857143 0.25000000 0.45000000 0.019 + 0.00000000 0.41666667 0.45000000 0.010 + 0.14285714 0.41666667 0.45000000 0.019 + 0.28571429 0.41666667 0.45000000 0.019 + 0.42857143 0.41666667 0.45000000 0.019 + + position of ions in fractional coordinates (direct lattice) + 0.09314000 0.11631000 0.00000000 + 0.90685998 0.88368998 0.00000000 + 0.59314002 0.38369001 0.00000000 + 0.40686001 0.61631002 0.00000000 + 0.09314000 0.61631002 0.50000000 + 0.90685998 0.38369001 0.50000000 + 0.59314002 0.88368998 0.50000000 + 0.40686001 0.11631000 0.50000000 + 0.86299996 0.90313999 0.31378999 + 0.13700002 0.09686000 0.31378999 + 0.36299993 0.59686001 0.31378999 + 0.63700004 0.40314001 0.31378999 + 0.86299996 0.40314001 0.81378996 + 0.13700002 0.59686001 0.81378996 + 0.36299993 0.09686000 0.81378996 + 0.63700004 0.90313999 0.81378996 + 0.96783003 0.11691001 0.59407004 + 0.03217000 0.88309002 0.59407004 + 0.46782993 0.38308999 0.59407004 + 0.53217000 0.61690998 0.59407004 + 0.96783003 0.61690998 0.09406996 + 0.03217000 0.38308999 0.09406996 + 0.46782993 0.88309002 0.09406996 + 0.53217000 0.11691001 0.09406996 + 0.35129000 0.26808000 0.17587000 + 0.64871003 0.73192000 0.17587000 + 0.85128997 0.23192000 0.17587000 + 0.14871002 0.76808000 0.17587000 + 0.35129000 0.76808000 0.67586999 + 0.64871003 0.23192000 0.67586999 + 0.85128997 0.73192000 0.67586999 + 0.14871002 0.26808000 0.67586999 + 0.29006999 0.91185000 0.37705001 + 0.70993001 0.08815000 0.37705001 + 0.79006999 0.58815000 0.37705001 + 0.20993001 0.41185000 0.37705001 + 0.29006999 0.41185000 0.87705008 + 0.70993001 0.58815000 0.87705008 + 0.79006999 0.08815000 0.87705008 + 0.20993001 0.91185000 0.87705008 + + position of ions in cartesian coordinates (Angst): + 0.63229019 0.93771446 0.00000000 + 6.15630960 7.12448501 0.00000000 + 4.02659035 3.09338546 0.00000000 + 2.76200986 4.96881438 0.00000000 + 0.63229019 4.96881438 2.50705004 + 6.15630960 3.09338546 2.50705004 + 4.02659035 7.12448501 2.50705004 + 2.76200986 0.93771446 2.50705004 + 5.85856151 7.28129482 1.57337439 + 0.93003833 0.78090465 1.57337439 + 2.46426129 4.81200457 1.57337439 + 4.32433844 3.25019526 1.57337439 + 5.85856151 3.25019526 4.08042431 + 0.93003833 4.81200457 4.08042431 + 2.46426129 0.78090465 4.08042431 + 4.32433844 7.28129482 4.08042431 + 6.57021093 0.94255179 2.97872663 + 0.21838924 7.11964798 2.97872663 + 3.17591023 3.08854795 2.97872663 + 3.61268926 4.97365141 2.97872663 + 6.57021093 4.97365141 0.47167617 + 0.21838924 3.08854795 0.47167617 + 3.17591023 7.11964798 0.47167617 + 3.61268926 0.94255179 0.47167617 + 2.38476730 2.16131449 0.88182980 + 4.40383291 5.90088510 0.88182980 + 5.77906704 1.86978531 0.88182980 + 1.00953281 6.19241429 0.88182980 + 2.38476730 6.19241429 3.38887978 + 4.40383291 1.86978531 3.38887978 + 5.77906704 5.90088510 3.38887978 + 1.00953281 2.16131449 3.38887978 + 1.96916914 7.35151672 1.89056647 + 4.81943083 0.71068293 1.89056647 + 5.36346912 4.74178267 1.89056647 + 1.42513085 3.32041693 1.89056647 + 1.96916914 3.32041693 4.39761686 + 4.81943083 4.74178267 4.39761686 + 5.36346912 0.71068293 4.39761686 + 1.42513085 7.35151672 4.39761686 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0833 0.0500 plane waves: 10328 + k-point 2 : 0.1429 0.0833 0.0500 plane waves: 10329 + k-point 3 : 0.2857 0.0833 0.0500 plane waves: 10343 + k-point 4 : 0.4286 0.0833 0.0500 plane waves: 10347 + k-point 5 : 0.0000 0.2500 0.0500 plane waves: 10357 + k-point 6 : 0.1429 0.2500 0.0500 plane waves: 10339 + k-point 7 : 0.2857 0.2500 0.0500 plane waves: 10331 + k-point 8 : 0.4286 0.2500 0.0500 plane waves: 10326 + k-point 9 : 0.0000 0.4167 0.0500 plane waves: 10328 + k-point 10 : 0.1429 0.4167 0.0500 plane waves: 10344 + k-point 11 : 0.2857 0.4167 0.0500 plane waves: 10341 + k-point 12 : 0.4286 0.4167 0.0500 plane waves: 10333 + k-point 13 : 0.0000 0.0833 0.1500 plane waves: 10336 + k-point 14 : 0.1429 0.0833 0.1500 plane waves: 10331 + k-point 15 : 0.2857 0.0833 0.1500 plane waves: 10328 + k-point 16 : 0.4286 0.0833 0.1500 plane waves: 10334 + k-point 17 : 0.0000 0.2500 0.1500 plane waves: 10343 + k-point 18 : 0.1429 0.2500 0.1500 plane waves: 10327 + k-point 19 : 0.2857 0.2500 0.1500 plane waves: 10330 + k-point 20 : 0.4286 0.2500 0.1500 plane waves: 10341 + k-point 21 : 0.0000 0.4167 0.1500 plane waves: 10336 + k-point 22 : 0.1429 0.4167 0.1500 plane waves: 10337 + k-point 23 : 0.2857 0.4167 0.1500 plane waves: 10343 + k-point 24 : 0.4286 0.4167 0.1500 plane waves: 10333 + k-point 25 : 0.0000 0.0833 0.2500 plane waves: 10319 + k-point 26 : 0.1429 0.0833 0.2500 plane waves: 10325 + k-point 27 : 0.2857 0.0833 0.2500 plane waves: 10329 + k-point 28 : 0.4286 0.0833 0.2500 plane waves: 10334 + k-point 29 : 0.0000 0.2500 0.2500 plane waves: 10325 + k-point 30 : 0.1429 0.2500 0.2500 plane waves: 10322 + k-point 31 : 0.2857 0.2500 0.2500 plane waves: 10331 + k-point 32 : 0.4286 0.2500 0.2500 plane waves: 10331 + k-point 33 : 0.0000 0.4167 0.2500 plane waves: 10340 + k-point 34 : 0.1429 0.4167 0.2500 plane waves: 10329 + k-point 35 : 0.2857 0.4167 0.2500 plane waves: 10325 + k-point 36 : 0.4286 0.4167 0.2500 plane waves: 10327 + k-point 37 : 0.0000 0.0833 0.3500 plane waves: 10306 + k-point 38 : 0.1429 0.0833 0.3500 plane waves: 10306 + k-point 39 : 0.2857 0.0833 0.3500 plane waves: 10328 + k-point 40 : 0.4286 0.0833 0.3500 plane waves: 10328 + k-point 41 : 0.0000 0.2500 0.3500 plane waves: 10311 + k-point 42 : 0.1429 0.2500 0.3500 plane waves: 10316 + k-point 43 : 0.2857 0.2500 0.3500 plane waves: 10314 + k-point 44 : 0.4286 0.2500 0.3500 plane waves: 10330 + k-point 45 : 0.0000 0.4167 0.3500 plane waves: 10307 + k-point 46 : 0.1429 0.4167 0.3500 plane waves: 10316 + k-point 47 : 0.2857 0.4167 0.3500 plane waves: 10318 + k-point 48 : 0.4286 0.4167 0.3500 plane waves: 10334 + k-point 49 : 0.0000 0.0833 0.4500 plane waves: 10285 + k-point 50 : 0.1429 0.0833 0.4500 plane waves: 10305 + k-point 51 : 0.2857 0.0833 0.4500 plane waves: 10314 + k-point 52 : 0.4286 0.0833 0.4500 plane waves: 10328 + k-point 53 : 0.0000 0.2500 0.4500 plane waves: 10279 + k-point 54 : 0.1429 0.2500 0.4500 plane waves: 10282 + k-point 55 : 0.2857 0.2500 0.4500 plane waves: 10317 + k-point 56 : 0.4286 0.2500 0.4500 plane waves: 10316 + k-point 57 : 0.0000 0.4167 0.4500 plane waves: 10306 + k-point 58 : 0.1429 0.4167 0.4500 plane waves: 10314 + k-point 59 : 0.2857 0.4167 0.4500 plane waves: 10301 + k-point 60 : 0.4286 0.4167 0.4500 plane waves: 10336 + + maximum and minimum number of plane-waves per node : 1056 1007 + + maximum number of plane-waves: 10357 + maximum index in each direction: + IXMAX= 14 IYMAX= 16 IZMAX= 10 + IXMIN= -14 IYMIN= -17 IZMIN= -10 + + WARNING: aliasing errors must be expected set NGX to 58 to avoid them + WARNING: aliasing errors must be expected set NGY to 68 to avoid them + WARNING: aliasing errors must be expected set NGZ to 42 to avoid them + aliasing errors are usually negligible using standard VASP settings + and one can safely disregard these warnings + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 46714. kBytes +======================================================================== + + base : 30000. kBytes + nonl-proj : 3210. kBytes + fftplans : 874. kBytes + grid : 1264. kBytes + one-center: 4. kBytes + wavefun : 11362. kBytes + + INWAV: cpu time 0.0000: real time 0.0000 + Broyden mixing: mesh for mixing (old mesh) + NGX = 29 NGY = 33 NGZ = 21 + (NGX = 84 NGY =100 NGZ = 64) + gives a total of 20097 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 40.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for augmentation-charges 920 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.273 + Maximum number of real-space cells 3x 2x 3 + Maximum number of reciprocal cells 3x 3x 2 + + FEWALD executed in parallel + FEWALD: cpu time 0.0040: real time 0.0051 + + +----------------------------------------- Iteration 1( 1) --------------------------------------- + + + POTLOK: cpu time 0.0238: real time 0.0251 + SETDIJ: cpu time 0.0072: real time 0.0080 + EDDAV: cpu time 5.1757: real time 5.2048 + DOS: cpu time 0.0060: real time 0.0060 + -------------------------------------------- + LOOP: cpu time 5.2164: real time 5.2487 + + eigenvalue-minimisations : 5280 + total energy-change (2. order) : 0.9421387E+02 (-0.1528001E+04) + number of electron 40.0000000 magnetization + augmentation part 40.0000000 magnetization + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.11721019 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -155.09374907 + PAW double counting = 306.50462356 -84.16909176 + entropy T*S EENTRO = 0.00691706 + eigenvalues EBANDS = 228.36218860 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = 94.21386994 eV + + energy without entropy = 94.20695288 energy(sigma->0) = 94.21156425 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 2) --------------------------------------- + + + EDDAV: cpu time 5.2739: real time 5.2744 + DOS: cpu time 0.0070: real time 0.0070 + -------------------------------------------- + LOOP: cpu time 5.2828: real time 5.2834 + + eigenvalue-minimisations : 6068 + total energy-change (2. order) :-0.1046978E+03 (-0.9729384E+02) + number of electron 40.0000000 magnetization + augmentation part 40.0000000 magnetization + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.11721019 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -155.09374907 + PAW double counting = 306.50462356 -84.16909176 + entropy T*S EENTRO = 0.00517401 + eigenvalues EBANDS = 123.66612000 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -10.48394170 eV + + energy without entropy = -10.48911571 energy(sigma->0) = -10.48566637 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 3) --------------------------------------- + + + EDDAV: cpu time 5.6954: real time 5.6976 + DOS: cpu time 0.0068: real time 0.0068 + -------------------------------------------- + LOOP: cpu time 5.7043: real time 5.7065 + + eigenvalue-minimisations : 6764 + total energy-change (2. order) :-0.4539957E+01 (-0.4406030E+01) + number of electron 40.0000000 magnetization + augmentation part 40.0000000 magnetization + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.11721019 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -155.09374907 + PAW double counting = 306.50462356 -84.16909176 + entropy T*S EENTRO = 0.00929062 + eigenvalues EBANDS = 119.12204603 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -15.02389907 eV + + energy without entropy = -15.03318968 energy(sigma->0) = -15.02699594 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 4) --------------------------------------- + + + EDDAV: cpu time 5.3601: real time 5.3606 + DOS: cpu time 0.0069: real time 0.0069 + -------------------------------------------- + LOOP: cpu time 5.3689: real time 5.3701 + + eigenvalue-minimisations : 6368 + total energy-change (2. order) :-0.6621817E-01 (-0.6605004E-01) + number of electron 40.0000000 magnetization + augmentation part 40.0000000 magnetization + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.11721019 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -155.09374907 + PAW double counting = 306.50462356 -84.16909176 + entropy T*S EENTRO = 0.00939682 + eigenvalues EBANDS = 119.05572167 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -15.09011724 eV + + energy without entropy = -15.09951405 energy(sigma->0) = -15.09324951 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 5) --------------------------------------- + + + EDDAV: cpu time 5.2311: real time 5.2323 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.1900: real time 0.1917 + MIXING: cpu time 0.0040: real time 0.0040 + -------------------------------------------- + LOOP: cpu time 5.4349: real time 5.4386 + + eigenvalue-minimisations : 6288 + total energy-change (2. order) :-0.9307248E-03 (-0.9306247E-03) + number of electron 39.9999999 magnetization + augmentation part 0.9754056 magnetization + + Broyden mixing: + rms(total) = 0.49525E+00 rms(broyden)= 0.49525E+00 + rms(prec ) = 0.71737E+00 + weight for this iteration 100.00 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.11721019 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -155.09374907 + PAW double counting = 306.50462356 -84.16909176 + entropy T*S EENTRO = 0.00939720 + eigenvalues EBANDS = 119.05479055 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -15.09104796 eV + + energy without entropy = -15.10044516 energy(sigma->0) = -15.09418036 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 6) --------------------------------------- + + + POTLOK: cpu time 0.0237: real time 0.0248 + SETDIJ: cpu time 0.0070: real time 0.0079 + EDDAV: cpu time 5.3933: real time 5.3947 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1759: real time 0.1759 + MIXING: cpu time 0.0040: real time 0.0040 + -------------------------------------------- + LOOP: cpu time 5.6125: real time 5.6167 + + eigenvalue-minimisations : 6092 + total energy-change (2. order) : 0.2211266E+01 (-0.1259117E-01) + number of electron 39.9999999 magnetization + augmentation part 0.9870235 magnetization + + Broyden mixing: + rms(total) = 0.31558E+00 rms(broyden)= 0.31558E+00 + rms(prec ) = 0.45466E+00 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 2.7248 + 2.7248 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -0.71849548 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -153.71901439 + PAW double counting = 560.76212176 -339.60306216 + entropy T*S EENTRO = 0.00996571 + eigenvalues EBANDS = 121.66851084 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -12.87978199 eV + + energy without entropy = -12.88974770 energy(sigma->0) = -12.88310389 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 7) --------------------------------------- + + + POTLOK: cpu time 0.0214: real time 0.0224 + SETDIJ: cpu time 0.0056: real time 0.0067 + EDDAV: cpu time 5.1508: real time 5.1514 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1700: real time 0.1700 + MIXING: cpu time 0.0043: real time 0.0043 + -------------------------------------------- + LOOP: cpu time 5.3605: real time 5.3637 + + eigenvalue-minimisations : 5864 + total energy-change (2. order) : 0.1145011E+01 (-0.1998764E-01) + number of electron 39.9999999 magnetization + augmentation part 0.9929389 magnetization + + Broyden mixing: + rms(total) = 0.24844E-01 rms(broyden)= 0.24844E-01 + rms(prec ) = 0.44815E-01 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 2.1846 + 1.7077 2.6616 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -2.97592931 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.99991511 + PAW double counting = 1359.37480446 -1141.44254073 + entropy T*S EENTRO = 0.01049742 + eigenvalues EBANDS = 125.57812059 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.73477095 eV + + energy without entropy = -11.74526837 energy(sigma->0) = -11.73827009 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 8) --------------------------------------- + + + POTLOK: cpu time 0.0212: real time 0.0221 + SETDIJ: cpu time 0.0058: real time 0.0072 + EDDAV: cpu time 5.2313: real time 5.2318 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1746: real time 0.1746 + MIXING: cpu time 0.0043: real time 0.0043 + -------------------------------------------- + LOOP: cpu time 5.4460: real time 5.4492 + + eigenvalue-minimisations : 5976 + total energy-change (2. order) : 0.6408066E-02 (-0.1221800E-02) + number of electron 39.9999999 magnetization + augmentation part 0.9926545 magnetization + + Broyden mixing: + rms(total) = 0.60304E-02 rms(broyden)= 0.60304E-02 + rms(prec ) = 0.88461E-02 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9449 + 1.2511 2.8012 1.7824 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.03212432 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.92884545 + PAW double counting = 1321.97486650 -1103.87513230 + entropy T*S EENTRO = 0.01026520 + eigenvalues EBANDS = 125.40241576 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72836289 eV + + energy without entropy = -11.73862808 energy(sigma->0) = -11.73178462 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 9) --------------------------------------- + + + POTLOK: cpu time 0.0215: real time 0.0215 + SETDIJ: cpu time 0.0061: real time 0.0061 + EDDAV: cpu time 5.6647: real time 5.6653 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.2291: real time 0.2291 + MIXING: cpu time 0.0044: real time 0.0044 + -------------------------------------------- + LOOP: cpu time 5.9340: real time 5.9346 + + eigenvalue-minimisations : 6844 + total energy-change (2. order) : 0.1719636E-03 (-0.3365522E-04) + number of electron 39.9999999 magnetization + augmentation part 0.9926193 magnetization + + Broyden mixing: + rms(total) = 0.25885E-02 rms(broyden)= 0.25885E-02 + rms(prec ) = 0.34370E-02 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9349 + 0.9781 2.7500 2.2677 1.7440 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.08493622 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.87896537 + PAW double counting = 1320.17792434 -1102.06162855 + entropy T*S EENTRO = 0.01025545 + eigenvalues EBANDS = 125.38896768 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72819092 eV + + energy without entropy = -11.73844637 energy(sigma->0) = -11.73160940 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 10) --------------------------------------- + + + POTLOK: cpu time 0.0227: real time 0.0227 + SETDIJ: cpu time 0.0073: real time 0.0073 + EDDAV: cpu time 5.1710: real time 5.1719 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1803: real time 0.1803 + MIXING: cpu time 0.0039: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 5.3936: real time 5.3945 + + eigenvalue-minimisations : 6164 + total energy-change (2. order) : 0.3671894E-03 (-0.3123589E-05) + number of electron 39.9999999 magnetization + augmentation part 0.9926508 magnetization + + Broyden mixing: + rms(total) = 0.56143E-03 rms(broyden)= 0.56143E-03 + rms(prec ) = 0.81450E-03 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8835 + 2.7030 2.6021 0.9807 1.5658 1.5658 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.07431527 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.89092025 + PAW double counting = 1305.92349693 -1087.75451677 + entropy T*S EENTRO = 0.01025477 + eigenvalues EBANDS = 125.33798512 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72782373 eV + + energy without entropy = -11.73807850 energy(sigma->0) = -11.73124199 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 11) --------------------------------------- + + + POTLOK: cpu time 0.0202: real time 0.0202 + SETDIJ: cpu time 0.0062: real time 0.0062 + EDDAV: cpu time 5.1411: real time 5.1424 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1825: real time 0.1842 + MIXING: cpu time 0.0046: real time 0.0046 + -------------------------------------------- + LOOP: cpu time 5.3629: real time 5.3659 + + eigenvalue-minimisations : 5916 + total energy-change (2. order) : 0.2800814E-04 (-0.4020185E-06) + number of electron 39.9999999 magnetization + augmentation part 0.9926853 magnetization + + Broyden mixing: + rms(total) = 0.15990E-03 rms(broyden)= 0.15990E-03 + rms(prec ) = 0.28067E-03 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7990 + 2.7235 2.5585 1.9091 1.6152 0.9940 0.9940 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.07334372 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.89197701 + PAW double counting = 1302.61510879 -1084.43332099 + entropy T*S EENTRO = 0.01025366 + eigenvalues EBANDS = 125.32529182 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72779572 eV + + energy without entropy = -11.73804938 energy(sigma->0) = -11.73121361 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 12) --------------------------------------- + + + POTLOK: cpu time 0.0233: real time 0.0242 + SETDIJ: cpu time 0.0072: real time 0.0080 + EDDAV: cpu time 3.6909: real time 3.6914 + DOS: cpu time 0.0074: real time 0.0074 + CHARGE: cpu time 0.1703: real time 0.1703 + MIXING: cpu time 0.0051: real time 0.0051 + -------------------------------------------- + LOOP: cpu time 3.9054: real time 3.9081 + + eigenvalue-minimisations : 3276 + total energy-change (2. order) :-0.1412576E-05 (-0.3648141E-07) + number of electron 39.9999999 magnetization + augmentation part 0.9926911 magnetization + + Broyden mixing: + rms(total) = 0.44535E-04 rms(broyden)= 0.44535E-04 + rms(prec ) = 0.62880E-04 + weight for this iteration 100.00 + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8655 + 2.7315 2.7315 2.4223 0.9894 0.9703 1.6066 1.6066 + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.07361865 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.89174915 + PAW double counting = 1302.90434869 -1084.72351983 + entropy T*S EENTRO = 0.01025531 + eigenvalues EBANDS = 125.32629476 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72779714 eV + + energy without entropy = -11.73805245 energy(sigma->0) = -11.73121557 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 1( 13) --------------------------------------- + + + POTLOK: cpu time 0.0218: real time 0.0218 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 3.6313: real time 3.6317 + DOS: cpu time 0.0074: real time 0.0074 + -------------------------------------------- + LOOP: cpu time 3.6671: real time 3.6674 + + eigenvalue-minimisations : 3216 + total energy-change (2. order) :-0.6694220E-06 (-0.6703544E-08) + number of electron 39.9999999 magnetization + augmentation part 0.9926911 magnetization + + Free energy of the ion-electron system (eV) + --------------------------------------------------- + alpha Z PSCENC = 15.27370333 + Ewald energy TEWEN = -428.55742867 + -Hartree energ DENC = -3.07355998 + -exchange EXHF = 0.00000000 + -V(xc)+E(xc) XCENC = -150.89174389 + PAW double counting = 1303.05189857 -1084.87142987 + entropy T*S EENTRO = 0.01025529 + eigenvalues EBANDS = 125.32659035 + atomic energy EATOM = 212.00391708 + Solvation Ediel_sol = 0.00000000 + --------------------------------------------------- + free energy TOTEN = -11.72779781 eV + + energy without entropy = -11.73805310 energy(sigma->0) = -11.73121624 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.7442 2 -25.7442 3 -25.7442 4 -25.7442 5 -25.7442 + 6 -25.7442 7 -25.7442 8 -25.7442 9 -25.6706 10 -25.6706 + 11 -25.6706 12 -25.6706 13 -25.6706 14 -25.6706 15 -25.6706 + 16 -25.6706 17 -25.7079 18 -25.7079 19 -25.7079 20 -25.7079 + 21 -25.7079 22 -25.7079 23 -25.7079 24 -25.7079 25 -25.6277 + 26 -25.6277 27 -25.6277 28 -25.6277 29 -25.6277 30 -25.6277 + 31 -25.6277 32 -25.6277 33 -25.8104 34 -25.8104 35 -25.8104 + 36 -25.8104 37 -25.8104 38 -25.8104 39 -25.8104 40 -25.8104 + + + + E-fermi : 4.6817 XC(G=0): -9.6864 alpha+bet :-21.4074 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 1.2948 2.00000 + 2 1.7985 2.00000 + 3 2.0215 2.00000 + 4 2.2784 2.00000 + 5 2.3253 2.00000 + 6 2.7582 2.00000 + 7 2.8753 2.00000 + 8 3.0121 2.00000 + 9 3.1115 2.00000 + 10 3.1703 2.00000 + 11 3.4186 2.00000 + 12 3.4929 2.00000 + 13 3.6204 2.00000 + 14 3.6602 2.00000 + 15 3.7350 2.00000 + 16 3.8402 2.00000 + 17 4.0361 2.00005 + 18 4.3921 2.05978 + 19 4.4228 2.06956 + 20 4.6056 1.59526 + 21 5.8048 -0.00000 + 22 6.0147 -0.00000 + 23 6.2714 -0.00000 + 24 6.4352 -0.00000 + 25 6.4952 -0.00000 + 26 6.6271 -0.00000 + 27 6.8833 -0.00000 + 28 7.4342 -0.00000 + 29 7.4610 -0.00000 + 30 7.6234 -0.00000 + 31 7.6812 -0.00000 + 32 7.7765 -0.00000 + 33 8.3976 -0.00000 + 34 8.5416 -0.00000 + 35 9.2153 -0.00000 + 36 9.3705 -0.00000 + 37 9.6022 -0.00000 + 38 9.8419 -0.00000 + 39 10.1997 0.00000 + 40 10.3109 0.00000 + 41 10.5626 0.00000 + 42 10.7211 0.00000 + 43 10.9478 0.00000 + 44 11.2410 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 1.3118 2.00000 + 2 1.8176 2.00000 + 3 2.0039 2.00000 + 4 2.0413 2.00000 + 5 2.5328 2.00000 + 6 2.6643 2.00000 + 7 2.7752 2.00000 + 8 3.1105 2.00000 + 9 3.2087 2.00000 + 10 3.3808 2.00000 + 11 3.4462 2.00000 + 12 3.5048 2.00000 + 13 3.5874 2.00000 + 14 3.6771 2.00000 + 15 3.7623 2.00000 + 16 3.8441 2.00000 + 17 3.9773 2.00001 + 18 4.2672 2.01257 + 19 4.4426 2.07064 + 20 4.6580 1.19874 + 21 5.6930 -0.00000 + 22 5.8685 -0.00000 + 23 6.2226 -0.00000 + 24 6.3218 -0.00000 + 25 6.4678 -0.00000 + 26 6.8317 -0.00000 + 27 6.9514 -0.00000 + 28 7.1451 -0.00000 + 29 7.4475 -0.00000 + 30 7.6118 -0.00000 + 31 7.6180 -0.00000 + 32 7.7152 -0.00000 + 33 8.7207 -0.00000 + 34 8.7346 -0.00000 + 35 9.2293 -0.00000 + 36 9.2871 -0.00000 + 37 9.6262 -0.00000 + 38 9.8075 -0.00000 + 39 10.1707 0.00000 + 40 10.3942 0.00000 + 41 10.4718 0.00000 + 42 10.6338 0.00000 + 43 11.2667 0.00000 + 44 11.3526 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.3639 2.00000 + 2 1.7679 2.00000 + 3 1.8754 2.00000 + 4 2.1010 2.00000 + 5 2.3017 2.00000 + 6 2.5392 2.00000 + 7 3.0878 2.00000 + 8 3.2103 2.00000 + 9 3.4675 2.00000 + 10 3.4913 2.00000 + 11 3.5252 2.00000 + 12 3.5426 2.00000 + 13 3.6575 2.00000 + 14 3.7613 2.00000 + 15 3.7750 2.00000 + 16 3.8497 2.00000 + 17 3.9499 2.00000 + 18 4.0506 2.00008 + 19 4.3820 2.05546 + 20 4.5740 1.78117 + 21 5.6062 -0.00000 + 22 5.7017 -0.00000 + 23 6.0935 -0.00000 + 24 6.1527 -0.00000 + 25 6.2069 -0.00000 + 26 6.5496 -0.00000 + 27 7.0858 -0.00000 + 28 7.3466 -0.00000 + 29 7.4573 -0.00000 + 30 7.5599 -0.00000 + 31 7.5866 -0.00000 + 32 7.9022 -0.00000 + 33 8.8463 -0.00000 + 34 8.8788 -0.00000 + 35 9.1454 -0.00000 + 36 9.2894 -0.00000 + 37 9.5942 -0.00000 + 38 9.7189 -0.00000 + 39 10.2123 0.00000 + 40 10.2810 0.00000 + 41 10.6295 0.00000 + 42 10.8272 0.00000 + 43 11.4441 0.00000 + 44 11.5606 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.4539 2.00000 + 2 1.5867 2.00000 + 3 1.9734 2.00000 + 4 2.1133 2.00000 + 5 2.2048 2.00000 + 6 2.3487 2.00000 + 7 3.2922 2.00000 + 8 3.3899 2.00000 + 9 3.5514 2.00000 + 10 3.5983 2.00000 + 11 3.6487 2.00000 + 12 3.6543 2.00000 + 13 3.7074 2.00000 + 14 3.7328 2.00000 + 15 3.8427 2.00000 + 16 3.8833 2.00000 + 17 3.9413 2.00000 + 18 4.0050 2.00002 + 19 4.1544 2.00123 + 20 4.3470 2.03944 + 21 5.6346 -0.00000 + 22 5.7552 -0.00000 + 23 5.9463 -0.00000 + 24 5.9549 -0.00000 + 25 6.0684 -0.00000 + 26 6.0872 -0.00000 + 27 7.2676 -0.00000 + 28 7.4452 -0.00000 + 29 7.4774 -0.00000 + 30 7.5241 -0.00000 + 31 7.9514 -0.00000 + 32 8.2283 -0.00000 + 33 8.4897 -0.00000 + 34 8.5880 -0.00000 + 35 9.2683 -0.00000 + 36 9.3311 -0.00000 + 37 9.5064 -0.00000 + 38 9.5930 -0.00000 + 39 10.1991 0.00000 + 40 10.2732 0.00000 + 41 10.9287 0.00000 + 42 11.0249 0.00000 + 43 11.6789 0.00000 + 44 11.7683 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 1.3254 2.00000 + 2 1.6208 2.00000 + 3 2.2862 2.00000 + 4 2.3073 2.00000 + 5 2.3596 2.00000 + 6 2.5924 2.00000 + 7 2.6952 2.00000 + 8 3.1853 2.00000 + 9 3.2281 2.00000 + 10 3.2854 2.00000 + 11 3.3706 2.00000 + 12 3.4315 2.00000 + 13 3.6264 2.00000 + 14 3.7194 2.00000 + 15 3.7254 2.00000 + 16 3.9114 2.00000 + 17 3.9542 2.00000 + 18 4.2214 2.00537 + 19 4.2496 2.00921 + 20 4.4507 2.06927 + 21 5.9548 -0.00000 + 22 6.0983 -0.00000 + 23 6.3133 -0.00000 + 24 6.5418 -0.00000 + 25 6.6497 -0.00000 + 26 6.7514 -0.00000 + 27 6.8021 -0.00000 + 28 7.0885 -0.00000 + 29 7.5897 -0.00000 + 30 7.6601 -0.00000 + 31 7.7470 -0.00000 + 32 8.0008 -0.00000 + 33 8.3622 -0.00000 + 34 8.5632 -0.00000 + 35 9.2924 -0.00000 + 36 9.3985 -0.00000 + 37 9.4854 -0.00000 + 38 9.5983 -0.00000 + 39 9.9405 -0.00000 + 40 10.3163 0.00000 + 41 10.3255 0.00000 + 42 10.8550 0.00000 + 43 10.9043 0.00000 + 44 11.3587 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.3425 2.00000 + 2 1.6392 2.00000 + 3 2.0362 2.00000 + 4 2.2999 2.00000 + 5 2.3587 2.00000 + 6 2.6928 2.00000 + 7 2.9783 2.00000 + 8 3.0530 2.00000 + 9 3.2191 2.00000 + 10 3.2559 2.00000 + 11 3.4466 2.00000 + 12 3.5731 2.00000 + 13 3.6180 2.00000 + 14 3.7366 2.00000 + 15 3.7445 2.00000 + 16 3.9112 2.00000 + 17 3.9163 2.00000 + 18 4.0423 2.00006 + 19 4.3248 2.03007 + 20 4.4990 2.02731 + 21 5.8367 -0.00000 + 22 6.0259 -0.00000 + 23 6.2679 -0.00000 + 24 6.3800 -0.00000 + 25 6.5561 -0.00000 + 26 6.8069 -0.00000 + 27 6.9474 -0.00000 + 28 7.0245 -0.00000 + 29 7.4828 -0.00000 + 30 7.6541 -0.00000 + 31 7.6700 -0.00000 + 32 7.9759 -0.00000 + 33 8.6170 -0.00000 + 34 8.7373 -0.00000 + 35 9.2942 -0.00000 + 36 9.3635 -0.00000 + 37 9.4203 -0.00000 + 38 9.6151 -0.00000 + 39 10.0192 -0.00000 + 40 10.2214 0.00000 + 41 10.3854 0.00000 + 42 10.9190 0.00000 + 43 10.9296 0.00000 + 44 11.4835 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.3949 2.00000 + 2 1.6949 2.00000 + 3 1.8004 2.00000 + 4 2.1127 2.00000 + 5 2.3748 2.00000 + 6 2.8204 2.00000 + 7 3.1041 2.00000 + 8 3.2350 2.00000 + 9 3.3419 2.00000 + 10 3.3769 2.00000 + 11 3.4902 2.00000 + 12 3.5275 2.00000 + 13 3.7058 2.00000 + 14 3.7356 2.00000 + 15 3.8256 2.00000 + 16 3.8382 2.00000 + 17 3.8999 2.00000 + 18 3.9557 2.00000 + 19 4.2718 2.01358 + 20 4.4635 2.06436 + 21 5.6847 -0.00000 + 22 5.9432 -0.00000 + 23 6.0767 -0.00000 + 24 6.1406 -0.00000 + 25 6.4214 -0.00000 + 26 6.5015 -0.00000 + 27 6.9223 -0.00000 + 28 7.3687 -0.00000 + 29 7.4408 -0.00000 + 30 7.7044 -0.00000 + 31 7.8464 -0.00000 + 32 7.9143 -0.00000 + 33 8.7209 -0.00000 + 34 8.8919 -0.00000 + 35 9.1853 -0.00000 + 36 9.2586 -0.00000 + 37 9.4297 -0.00000 + 38 9.5620 -0.00000 + 39 10.0364 -0.00000 + 40 10.1941 0.00000 + 41 10.6055 0.00000 + 42 11.0470 0.00000 + 43 11.1352 0.00000 + 44 11.6737 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.4854 2.00000 + 2 1.6187 2.00000 + 3 1.7902 2.00000 + 4 1.9283 2.00000 + 5 2.4800 2.00000 + 6 2.6289 2.00000 + 7 3.3264 2.00000 + 8 3.4282 2.00000 + 9 3.4334 2.00000 + 10 3.5348 2.00000 + 11 3.6126 2.00000 + 12 3.6246 2.00000 + 13 3.6536 2.00000 + 14 3.6598 2.00000 + 15 3.7708 2.00000 + 16 3.8619 2.00000 + 17 3.9758 2.00001 + 18 3.9977 2.00001 + 19 4.0856 2.00021 + 20 4.2425 2.00807 + 21 5.7039 -0.00000 + 22 5.9075 -0.00000 + 23 5.9156 -0.00000 + 24 6.0739 -0.00000 + 25 6.0897 -0.00000 + 26 6.2686 -0.00000 + 27 7.0791 -0.00000 + 28 7.2451 -0.00000 + 29 7.6874 -0.00000 + 30 7.7996 -0.00000 + 31 8.0674 -0.00000 + 32 8.1677 -0.00000 + 33 8.5189 -0.00000 + 34 8.5463 -0.00000 + 35 9.2283 -0.00000 + 36 9.2786 -0.00000 + 37 9.3692 -0.00000 + 38 9.4410 -0.00000 + 39 10.0112 -0.00000 + 40 10.1804 0.00000 + 41 10.8992 0.00000 + 42 11.0806 0.00000 + 43 11.5826 0.00000 + 44 11.7917 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.3879 2.00000 + 2 1.4852 2.00000 + 3 2.3669 2.00000 + 4 2.4278 2.00000 + 5 2.4608 2.00000 + 6 2.5096 2.00000 + 7 2.6324 2.00000 + 8 2.9318 2.00000 + 9 3.2581 2.00000 + 10 3.3438 2.00000 + 11 3.5650 2.00000 + 12 3.6556 2.00000 + 13 3.6593 2.00000 + 14 3.6954 2.00000 + 15 3.8095 2.00000 + 16 3.8198 2.00000 + 17 3.9555 2.00000 + 18 3.9984 2.00002 + 19 4.0491 2.00007 + 20 4.2401 2.00771 + 21 6.2134 -0.00000 + 22 6.2424 -0.00000 + 23 6.4019 -0.00000 + 24 6.4750 -0.00000 + 25 6.5090 -0.00000 + 26 6.7414 -0.00000 + 27 6.9592 -0.00000 + 28 7.2361 -0.00000 + 29 7.3020 -0.00000 + 30 7.5943 -0.00000 + 31 7.9459 -0.00000 + 32 8.2062 -0.00000 + 33 8.5578 -0.00000 + 34 8.7464 -0.00000 + 35 8.8781 -0.00000 + 36 9.4155 -0.00000 + 37 9.4594 -0.00000 + 38 9.5401 -0.00000 + 39 9.7112 -0.00000 + 40 9.9996 -0.00000 + 41 10.3754 0.00000 + 42 10.4799 0.00000 + 43 11.2279 0.00000 + 44 11.4083 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.4053 2.00000 + 2 1.5029 2.00000 + 3 2.1022 2.00000 + 4 2.2043 2.00000 + 5 2.6131 2.00000 + 6 2.7454 2.00000 + 7 2.8625 2.00000 + 8 2.9638 2.00000 + 9 3.2764 2.00000 + 10 3.3614 2.00000 + 11 3.3723 2.00000 + 12 3.6525 2.00000 + 13 3.7013 2.00000 + 14 3.7100 2.00000 + 15 3.7247 2.00000 + 16 3.8294 2.00000 + 17 3.9080 2.00000 + 18 4.0606 2.00010 + 19 4.1284 2.00065 + 20 4.2712 2.01344 + 21 6.0486 -0.00000 + 22 6.2341 -0.00000 + 23 6.2517 -0.00000 + 24 6.4380 -0.00000 + 25 6.5423 -0.00000 + 26 6.6797 -0.00000 + 27 6.8808 -0.00000 + 28 7.2221 -0.00000 + 29 7.3228 -0.00000 + 30 7.5556 -0.00000 + 31 7.9739 -0.00000 + 32 8.3388 -0.00000 + 33 8.5473 -0.00000 + 34 8.8691 -0.00000 + 35 8.9325 -0.00000 + 36 9.3753 -0.00000 + 37 9.4257 -0.00000 + 38 9.6444 -0.00000 + 39 9.6625 -0.00000 + 40 9.9526 -0.00000 + 41 10.4412 0.00000 + 42 10.5521 0.00000 + 43 11.2485 0.00000 + 44 11.4576 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.4583 2.00000 + 2 1.5571 2.00000 + 3 1.8667 2.00000 + 4 1.9697 2.00000 + 5 2.6840 2.00000 + 6 3.0014 2.00000 + 7 3.1442 2.00000 + 8 3.1862 2.00000 + 9 3.2304 2.00000 + 10 3.3504 2.00000 + 11 3.4126 2.00000 + 12 3.4953 2.00000 + 13 3.5924 2.00000 + 14 3.6696 2.00000 + 15 3.7599 2.00000 + 16 3.8277 2.00000 + 17 3.9578 2.00000 + 18 4.1113 2.00042 + 19 4.1236 2.00058 + 20 4.3023 2.02199 + 21 5.8248 -0.00000 + 22 5.9603 -0.00000 + 23 6.1870 -0.00000 + 24 6.3443 -0.00000 + 25 6.3741 -0.00000 + 26 6.6476 -0.00000 + 27 6.7322 -0.00000 + 28 7.0724 -0.00000 + 29 7.6011 -0.00000 + 30 7.7430 -0.00000 + 31 8.0753 -0.00000 + 32 8.4245 -0.00000 + 33 8.4602 -0.00000 + 34 8.8584 -0.00000 + 35 8.9730 -0.00000 + 36 9.2585 -0.00000 + 37 9.3585 -0.00000 + 38 9.6686 -0.00000 + 39 9.6835 -0.00000 + 40 9.9543 -0.00000 + 41 10.6768 0.00000 + 42 10.8458 0.00000 + 43 11.2526 0.00000 + 44 11.4969 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.5499 2.00000 + 2 1.6503 2.00000 + 3 1.6843 2.00000 + 4 1.7863 2.00000 + 5 2.7964 2.00000 + 6 2.9509 2.00000 + 7 3.1324 2.00000 + 8 3.2953 2.00000 + 9 3.3886 2.00000 + 10 3.4671 2.00000 + 11 3.4965 2.00000 + 12 3.5775 2.00000 + 13 3.6289 2.00000 + 14 3.6512 2.00000 + 15 3.8292 2.00000 + 16 3.9039 2.00000 + 17 3.9071 2.00000 + 18 3.9995 2.00002 + 19 4.0566 2.00009 + 20 4.1305 2.00069 + 21 5.8002 -0.00000 + 22 5.8684 -0.00000 + 23 5.9858 -0.00000 + 24 6.0586 -0.00000 + 25 6.4123 -0.00000 + 26 6.5715 -0.00000 + 27 6.7689 -0.00000 + 28 6.9241 -0.00000 + 29 7.9193 -0.00000 + 30 8.0643 -0.00000 + 31 8.1605 -0.00000 + 32 8.3768 -0.00000 + 33 8.3931 -0.00000 + 34 8.6943 -0.00000 + 35 8.8117 -0.00000 + 36 9.0144 -0.00000 + 37 9.4238 -0.00000 + 38 9.6507 -0.00000 + 39 9.7158 -0.00000 + 40 9.9398 -0.00000 + 41 10.9839 0.00000 + 42 11.1778 0.00000 + 43 11.2215 0.00000 + 44 11.4276 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.3316 2.00000 + 2 1.8441 2.00000 + 3 2.0705 2.00000 + 4 2.3170 2.00000 + 5 2.3662 2.00000 + 6 2.7452 2.00000 + 7 2.8276 2.00000 + 8 2.9177 2.00000 + 9 3.0471 2.00000 + 10 3.1469 2.00000 + 11 3.3097 2.00000 + 12 3.4894 2.00000 + 13 3.5299 2.00000 + 14 3.5669 2.00000 + 15 3.6734 2.00000 + 16 3.9601 2.00000 + 17 4.0892 2.00023 + 18 4.2176 2.00497 + 19 4.2590 2.01090 + 20 4.3904 2.05907 + 21 6.0361 -0.00000 + 22 6.2435 -0.00000 + 23 6.5186 -0.00000 + 24 6.7796 -0.00000 + 25 6.7932 -0.00000 + 26 6.8967 -0.00000 + 27 6.9022 -0.00000 + 28 7.0810 -0.00000 + 29 7.4914 -0.00000 + 30 7.6326 -0.00000 + 31 7.6838 -0.00000 + 32 7.7452 -0.00000 + 33 8.5423 -0.00000 + 34 8.8114 -0.00000 + 35 9.3329 -0.00000 + 36 9.4330 -0.00000 + 37 9.4571 -0.00000 + 38 9.9451 -0.00000 + 39 10.2406 0.00000 + 40 10.2539 0.00000 + 41 10.4361 0.00000 + 42 10.4548 0.00000 + 43 10.7990 0.00000 + 44 10.8711 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.3487 2.00000 + 2 1.8631 2.00000 + 3 2.0434 2.00000 + 4 2.0901 2.00000 + 5 2.5743 2.00000 + 6 2.7031 2.00000 + 7 2.7804 2.00000 + 8 2.8189 2.00000 + 9 3.1895 2.00000 + 10 3.3244 2.00000 + 11 3.3768 2.00000 + 12 3.4221 2.00000 + 13 3.5099 2.00000 + 14 3.5987 2.00000 + 15 3.8059 2.00000 + 16 3.8628 2.00000 + 17 4.1010 2.00032 + 18 4.1713 2.00183 + 19 4.2982 2.02070 + 20 4.3789 2.05405 + 21 5.9834 -0.00000 + 22 6.0872 -0.00000 + 23 6.4391 -0.00000 + 24 6.6619 -0.00000 + 25 6.7104 -0.00000 + 26 6.7812 -0.00000 + 27 7.0172 -0.00000 + 28 7.0934 -0.00000 + 29 7.4930 -0.00000 + 30 7.5705 -0.00000 + 31 7.6354 -0.00000 + 32 7.7766 -0.00000 + 33 8.6978 -0.00000 + 34 8.9011 -0.00000 + 35 9.3188 -0.00000 + 36 9.4133 -0.00000 + 37 9.4488 -0.00000 + 38 9.9734 -0.00000 + 39 10.2414 0.00000 + 40 10.2965 0.00000 + 41 10.3454 0.00000 + 42 10.5552 0.00000 + 43 11.0592 0.00000 + 44 11.1227 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.4011 2.00000 + 2 1.8069 2.00000 + 3 1.9207 2.00000 + 4 2.1492 2.00000 + 5 2.3447 2.00000 + 6 2.5806 2.00000 + 7 2.8405 2.00000 + 8 3.1218 2.00000 + 9 3.2116 2.00000 + 10 3.3684 2.00000 + 11 3.5151 2.00000 + 12 3.5622 2.00000 + 13 3.6630 2.00000 + 14 3.6975 2.00000 + 15 3.7583 2.00000 + 16 3.9605 2.00000 + 17 4.0170 2.00003 + 18 4.1293 2.00066 + 19 4.2364 2.00720 + 20 4.3408 2.03669 + 21 5.7443 -0.00000 + 22 6.0403 -0.00000 + 23 6.2950 -0.00000 + 24 6.2963 -0.00000 + 25 6.4323 -0.00000 + 26 6.6112 -0.00000 + 27 7.0285 -0.00000 + 28 7.3499 -0.00000 + 29 7.3684 -0.00000 + 30 7.5082 -0.00000 + 31 7.6708 -0.00000 + 32 8.0353 -0.00000 + 33 8.7320 -0.00000 + 34 8.8069 -0.00000 + 35 9.3378 -0.00000 + 36 9.4438 -0.00000 + 37 9.4741 -0.00000 + 38 9.8828 -0.00000 + 39 10.3020 0.00000 + 40 10.4865 0.00000 + 41 10.5759 0.00000 + 42 10.7726 0.00000 + 43 11.3966 0.00000 + 44 11.5535 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.4916 2.00000 + 2 1.6250 2.00000 + 3 2.0183 2.00000 + 4 2.1580 2.00000 + 5 2.2509 2.00000 + 6 2.3932 2.00000 + 7 2.9314 2.00000 + 8 3.0567 2.00000 + 9 3.4310 2.00000 + 10 3.5244 2.00000 + 11 3.5905 2.00000 + 12 3.7126 2.00000 + 13 3.7743 2.00000 + 14 3.8514 2.00000 + 15 3.8517 2.00000 + 16 3.8616 2.00000 + 17 4.0381 2.00005 + 18 4.0835 2.00020 + 19 4.1107 2.00041 + 20 4.1440 2.00096 + 21 5.7141 -0.00000 + 22 5.9350 -0.00000 + 23 6.0400 -0.00000 + 24 6.1023 -0.00000 + 25 6.2801 -0.00000 + 26 6.4879 -0.00000 + 27 7.0516 -0.00000 + 28 7.1768 -0.00000 + 29 7.4965 -0.00000 + 30 7.5470 -0.00000 + 31 7.9623 -0.00000 + 32 8.3087 -0.00000 + 33 8.3959 -0.00000 + 34 8.5627 -0.00000 + 35 9.4626 -0.00000 + 36 9.5473 -0.00000 + 37 9.5668 -0.00000 + 38 9.7531 -0.00000 + 39 10.3015 0.00000 + 40 10.4867 0.00000 + 41 10.8334 0.00000 + 42 10.9345 0.00000 + 43 11.6529 0.00000 + 44 11.7545 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.3627 2.00000 + 2 1.6637 2.00000 + 3 2.3390 2.00000 + 4 2.3464 2.00000 + 5 2.4009 2.00000 + 6 2.6304 2.00000 + 7 2.7378 2.00000 + 8 2.8142 2.00000 + 9 3.1512 2.00000 + 10 3.2914 2.00000 + 11 3.2944 2.00000 + 12 3.3953 2.00000 + 13 3.5766 2.00000 + 14 3.7207 2.00000 + 15 3.7392 2.00000 + 16 3.8771 2.00000 + 17 4.0742 2.00015 + 18 4.0932 2.00026 + 19 4.1503 2.00112 + 20 4.2631 2.01170 + 21 6.1279 -0.00000 + 22 6.3460 -0.00000 + 23 6.3495 -0.00000 + 24 6.6375 -0.00000 + 25 6.8135 -0.00000 + 26 6.9206 -0.00000 + 27 6.9676 -0.00000 + 28 7.1208 -0.00000 + 29 7.7103 -0.00000 + 30 7.7294 -0.00000 + 31 7.7869 -0.00000 + 32 7.9969 -0.00000 + 33 8.5727 -0.00000 + 34 8.6573 -0.00000 + 35 9.1102 -0.00000 + 36 9.3362 -0.00000 + 37 9.6047 -0.00000 + 38 9.8068 -0.00000 + 39 10.0138 -0.00000 + 40 10.1262 -0.00000 + 41 10.2509 0.00000 + 42 10.7875 0.00000 + 43 10.7886 0.00000 + 44 11.3458 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.3800 2.00000 + 2 1.6820 2.00000 + 3 2.0762 2.00000 + 4 2.3512 2.00000 + 5 2.4015 2.00000 + 6 2.7323 2.00000 + 7 2.8235 2.00000 + 8 3.0313 2.00000 + 9 3.0847 2.00000 + 10 3.1689 2.00000 + 11 3.3215 2.00000 + 12 3.4339 2.00000 + 13 3.6217 2.00000 + 14 3.7083 2.00000 + 15 3.8101 2.00000 + 16 3.8647 2.00000 + 17 4.0069 2.00002 + 18 4.0897 2.00023 + 19 4.1881 2.00267 + 20 4.3198 2.02813 + 21 6.0260 -0.00000 + 22 6.2565 -0.00000 + 23 6.2893 -0.00000 + 24 6.5321 -0.00000 + 25 6.6220 -0.00000 + 26 6.9104 -0.00000 + 27 6.9538 -0.00000 + 28 7.2256 -0.00000 + 29 7.5740 -0.00000 + 30 7.7202 -0.00000 + 31 7.8259 -0.00000 + 32 7.9863 -0.00000 + 33 8.7212 -0.00000 + 34 8.7454 -0.00000 + 35 9.2045 -0.00000 + 36 9.3097 -0.00000 + 37 9.5805 -0.00000 + 38 9.7958 -0.00000 + 39 10.0103 -0.00000 + 40 10.1257 -0.00000 + 41 10.3326 0.00000 + 42 10.8631 0.00000 + 43 10.9633 0.00000 + 44 11.3737 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.4327 2.00000 + 2 1.7378 2.00000 + 3 1.8399 2.00000 + 4 2.1556 2.00000 + 5 2.4250 2.00000 + 6 2.8545 2.00000 + 7 2.8853 2.00000 + 8 3.1396 2.00000 + 9 3.2224 2.00000 + 10 3.2586 2.00000 + 11 3.3974 2.00000 + 12 3.4028 2.00000 + 13 3.5837 2.00000 + 14 3.8198 2.00000 + 15 3.8320 2.00000 + 16 3.8618 2.00000 + 17 4.0085 2.00002 + 18 4.1295 2.00067 + 19 4.1652 2.00159 + 20 4.3344 2.03397 + 21 5.7730 -0.00000 + 22 6.1447 -0.00000 + 23 6.2202 -0.00000 + 24 6.2453 -0.00000 + 25 6.3311 -0.00000 + 26 6.8306 -0.00000 + 27 6.8514 -0.00000 + 28 7.3261 -0.00000 + 29 7.4980 -0.00000 + 30 7.7558 -0.00000 + 31 7.9809 -0.00000 + 32 8.0236 -0.00000 + 33 8.7013 -0.00000 + 34 8.8247 -0.00000 + 35 9.2406 -0.00000 + 36 9.2985 -0.00000 + 37 9.6496 -0.00000 + 38 9.6888 -0.00000 + 39 10.0359 -0.00000 + 40 10.3864 0.00000 + 41 10.5348 0.00000 + 42 10.9937 0.00000 + 43 11.1970 0.00000 + 44 11.5524 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.5237 2.00000 + 2 1.6576 2.00000 + 3 1.8331 2.00000 + 4 1.9713 2.00000 + 5 2.5277 2.00000 + 6 2.6723 2.00000 + 7 2.9734 2.00000 + 8 3.1031 2.00000 + 9 3.3031 2.00000 + 10 3.4145 2.00000 + 11 3.5070 2.00000 + 12 3.6323 2.00000 + 13 3.6669 2.00000 + 14 3.7305 2.00000 + 15 3.8973 2.00000 + 16 3.9260 2.00000 + 17 4.0241 2.00003 + 18 4.0977 2.00029 + 19 4.1470 2.00103 + 20 4.1610 2.00144 + 21 5.6944 -0.00000 + 22 5.9809 -0.00000 + 23 5.9933 -0.00000 + 24 6.0701 -0.00000 + 25 6.3308 -0.00000 + 26 6.6750 -0.00000 + 27 6.9075 -0.00000 + 28 7.0836 -0.00000 + 29 7.6526 -0.00000 + 30 7.8112 -0.00000 + 31 8.1578 -0.00000 + 32 8.2614 -0.00000 + 33 8.5319 -0.00000 + 34 8.5413 -0.00000 + 35 9.3491 -0.00000 + 36 9.4100 -0.00000 + 37 9.5636 -0.00000 + 38 9.7152 -0.00000 + 39 10.0071 -0.00000 + 40 10.4644 0.00000 + 41 10.7922 0.00000 + 42 10.9887 0.00000 + 43 11.5503 0.00000 + 44 11.6539 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.4265 2.00000 + 2 1.5256 2.00000 + 3 2.4068 2.00000 + 4 2.4702 2.00000 + 5 2.5011 2.00000 + 6 2.5574 2.00000 + 7 2.6837 2.00000 + 8 2.8900 2.00000 + 9 2.9924 2.00000 + 10 3.0048 2.00000 + 11 3.5411 2.00000 + 12 3.6570 2.00000 + 13 3.6851 2.00000 + 14 3.7077 2.00000 + 15 3.8516 2.00000 + 16 3.8705 2.00000 + 17 3.8973 2.00000 + 18 3.9912 2.00001 + 19 4.0314 2.00004 + 20 4.0615 2.00010 + 21 6.2628 -0.00000 + 22 6.3854 -0.00000 + 23 6.3941 -0.00000 + 24 6.5062 -0.00000 + 25 6.6538 -0.00000 + 26 6.6702 -0.00000 + 27 7.2763 -0.00000 + 28 7.4560 -0.00000 + 29 7.5651 -0.00000 + 30 7.7156 -0.00000 + 31 8.0691 -0.00000 + 32 8.3952 -0.00000 + 33 8.4724 -0.00000 + 34 8.7412 -0.00000 + 35 8.8153 -0.00000 + 36 9.4212 -0.00000 + 37 9.5008 -0.00000 + 38 9.5965 -0.00000 + 39 9.7901 -0.00000 + 40 9.9504 -0.00000 + 41 10.3353 0.00000 + 42 10.4743 0.00000 + 43 11.1985 0.00000 + 44 11.3921 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.4440 2.00000 + 2 1.5435 2.00000 + 3 2.1431 2.00000 + 4 2.2462 2.00000 + 5 2.6684 2.00000 + 6 2.7867 2.00000 + 7 2.8815 2.00000 + 8 2.9324 2.00000 + 9 3.0106 2.00000 + 10 3.0364 2.00000 + 11 3.3774 2.00000 + 12 3.5314 2.00000 + 13 3.6056 2.00000 + 14 3.7314 2.00000 + 15 3.8286 2.00000 + 16 3.9145 2.00000 + 17 3.9677 2.00001 + 18 4.0362 2.00005 + 19 4.0717 2.00014 + 20 4.1828 2.00237 + 21 6.1877 -0.00000 + 22 6.2699 -0.00000 + 23 6.3336 -0.00000 + 24 6.4432 -0.00000 + 25 6.4469 -0.00000 + 26 6.6611 -0.00000 + 27 7.2372 -0.00000 + 28 7.4786 -0.00000 + 29 7.5203 -0.00000 + 30 7.7462 -0.00000 + 31 8.0517 -0.00000 + 32 8.4040 -0.00000 + 33 8.5068 -0.00000 + 34 8.8850 -0.00000 + 35 8.9519 -0.00000 + 36 9.3902 -0.00000 + 37 9.4783 -0.00000 + 38 9.5937 -0.00000 + 39 9.7925 -0.00000 + 40 9.9786 -0.00000 + 41 10.4186 0.00000 + 42 10.5929 0.00000 + 43 11.2072 0.00000 + 44 11.4168 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.4974 2.00000 + 2 1.5979 2.00000 + 3 1.9072 2.00000 + 4 2.0114 2.00000 + 5 2.7365 2.00000 + 6 2.9610 2.00000 + 7 3.0508 2.00000 + 8 3.0791 2.00000 + 9 3.1710 2.00000 + 10 3.2358 2.00000 + 11 3.2966 2.00000 + 12 3.3526 2.00000 + 13 3.4392 2.00000 + 14 3.5418 2.00000 + 15 3.9550 2.00000 + 16 3.9606 2.00000 + 17 4.0472 2.00007 + 18 4.0894 2.00023 + 19 4.1654 2.00160 + 20 4.2604 2.01116 + 21 5.9149 -0.00000 + 22 6.0942 -0.00000 + 23 6.1112 -0.00000 + 24 6.1816 -0.00000 + 25 6.4299 -0.00000 + 26 6.6309 -0.00000 + 27 7.0596 -0.00000 + 28 7.2363 -0.00000 + 29 7.7233 -0.00000 + 30 7.9215 -0.00000 + 31 8.1185 -0.00000 + 32 8.4569 -0.00000 + 33 8.4658 -0.00000 + 34 8.8980 -0.00000 + 35 9.0591 -0.00000 + 36 9.3546 -0.00000 + 37 9.4145 -0.00000 + 38 9.6106 -0.00000 + 39 9.8985 -0.00000 + 40 10.1652 0.00000 + 41 10.6213 0.00000 + 42 10.8512 0.00000 + 43 11.1954 0.00000 + 44 11.4595 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.5894 2.00000 + 2 1.6913 2.00000 + 3 1.7243 2.00000 + 4 1.8277 2.00000 + 5 2.8432 2.00000 + 6 2.9865 2.00000 + 7 3.0580 2.00000 + 8 3.1506 2.00000 + 9 3.1908 2.00000 + 10 3.1954 2.00000 + 11 3.2880 2.00000 + 12 3.3686 2.00000 + 13 3.6487 2.00000 + 14 3.6853 2.00000 + 15 3.9462 2.00000 + 16 3.9753 2.00001 + 17 4.0511 2.00008 + 18 4.0930 2.00026 + 19 4.1619 2.00147 + 20 4.1765 2.00206 + 21 5.7803 -0.00000 + 22 5.9112 -0.00000 + 23 5.9576 -0.00000 + 24 5.9924 -0.00000 + 25 6.5353 -0.00000 + 26 6.7273 -0.00000 + 27 6.8264 -0.00000 + 28 6.9537 -0.00000 + 29 7.8997 -0.00000 + 30 8.1239 -0.00000 + 31 8.1478 -0.00000 + 32 8.4062 -0.00000 + 33 8.5476 -0.00000 + 34 8.8334 -0.00000 + 35 8.9911 -0.00000 + 36 9.2253 -0.00000 + 37 9.4576 -0.00000 + 38 9.6666 -0.00000 + 39 9.9395 -0.00000 + 40 10.2315 0.00000 + 41 10.8939 0.00000 + 42 11.0980 0.00000 + 43 11.1764 0.00000 + 44 11.3880 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.4059 2.00000 + 2 1.9355 2.00000 + 3 2.1680 2.00000 + 4 2.3943 2.00000 + 5 2.4195 2.00000 + 6 2.4465 2.00000 + 7 2.8839 2.00000 + 8 3.0003 2.00000 + 9 3.0385 2.00000 + 10 3.0894 2.00000 + 11 3.2133 2.00000 + 12 3.3028 2.00000 + 13 3.3855 2.00000 + 14 3.4267 2.00000 + 15 3.6222 2.00000 + 16 3.8277 2.00000 + 17 3.9646 2.00000 + 18 4.0359 2.00005 + 19 4.1108 2.00041 + 20 4.4574 2.06715 + 21 6.3834 -0.00000 + 22 6.4876 -0.00000 + 23 6.5532 -0.00000 + 24 6.9408 -0.00000 + 25 7.1978 -0.00000 + 26 7.3235 -0.00000 + 27 7.3470 -0.00000 + 28 7.3895 -0.00000 + 29 7.5981 -0.00000 + 30 7.6721 -0.00000 + 31 7.6964 -0.00000 + 32 7.7070 -0.00000 + 33 8.5285 -0.00000 + 34 8.9484 -0.00000 + 35 8.9729 -0.00000 + 36 9.5251 -0.00000 + 37 9.6421 -0.00000 + 38 9.9796 -0.00000 + 39 10.0712 -0.00000 + 40 10.1332 -0.00000 + 41 10.2727 0.00000 + 42 10.4619 0.00000 + 43 10.6095 0.00000 + 44 10.7374 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.4233 2.00000 + 2 1.9543 2.00000 + 3 2.1225 2.00000 + 4 2.1870 2.00000 + 5 2.4387 2.00000 + 6 2.6597 2.00000 + 7 2.7774 2.00000 + 8 2.8815 2.00000 + 9 3.0576 2.00000 + 10 3.1375 2.00000 + 11 3.2659 2.00000 + 12 3.3225 2.00000 + 13 3.4504 2.00000 + 14 3.6255 2.00000 + 15 3.6913 2.00000 + 16 3.6937 2.00000 + 17 3.9442 2.00000 + 18 4.1172 2.00049 + 19 4.1350 2.00077 + 20 4.4597 2.06617 + 21 6.2595 -0.00000 + 22 6.4105 -0.00000 + 23 6.4271 -0.00000 + 24 6.8332 -0.00000 + 25 6.9702 -0.00000 + 26 7.2455 -0.00000 + 27 7.2893 -0.00000 + 28 7.4147 -0.00000 + 29 7.5181 -0.00000 + 30 7.6002 -0.00000 + 31 7.7143 -0.00000 + 32 7.8895 -0.00000 + 33 8.6750 -0.00000 + 34 8.9211 -0.00000 + 35 9.1157 -0.00000 + 36 9.4359 -0.00000 + 37 9.6263 -0.00000 + 38 9.8693 -0.00000 + 39 10.1645 0.00000 + 40 10.2122 0.00000 + 41 10.4137 0.00000 + 42 10.6302 0.00000 + 43 10.8180 0.00000 + 44 10.9753 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.4762 2.00000 + 2 1.8853 2.00000 + 3 2.0113 2.00000 + 4 2.2443 2.00000 + 5 2.4294 2.00000 + 6 2.4988 2.00000 + 7 2.6610 2.00000 + 8 2.9176 2.00000 + 9 3.0901 2.00000 + 10 3.2037 2.00000 + 11 3.3716 2.00000 + 12 3.4907 2.00000 + 13 3.5821 2.00000 + 14 3.7201 2.00000 + 15 3.7300 2.00000 + 16 3.8061 2.00000 + 17 3.9743 2.00001 + 18 4.0787 2.00017 + 19 4.2348 2.00698 + 20 4.4500 2.06943 + 21 5.9022 -0.00000 + 22 6.2696 -0.00000 + 23 6.2809 -0.00000 + 24 6.5185 -0.00000 + 25 6.7353 -0.00000 + 26 7.0129 -0.00000 + 27 7.1842 -0.00000 + 28 7.1924 -0.00000 + 29 7.5518 -0.00000 + 30 7.6134 -0.00000 + 31 7.8402 -0.00000 + 32 8.1175 -0.00000 + 33 8.6833 -0.00000 + 34 8.7000 -0.00000 + 35 9.4146 -0.00000 + 36 9.4910 -0.00000 + 37 9.7004 -0.00000 + 38 9.8926 -0.00000 + 39 10.2477 0.00000 + 40 10.4538 0.00000 + 41 10.6697 0.00000 + 42 10.9126 0.00000 + 43 11.1225 0.00000 + 44 11.3758 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.5678 2.00000 + 2 1.7023 2.00000 + 3 2.1081 2.00000 + 4 2.2467 2.00000 + 5 2.3416 2.00000 + 6 2.4785 2.00000 + 7 2.5981 2.00000 + 8 2.7370 2.00000 + 9 3.1812 2.00000 + 10 3.2982 2.00000 + 11 3.4965 2.00000 + 12 3.5950 2.00000 + 13 3.7010 2.00000 + 14 3.8306 2.00000 + 15 3.8487 2.00000 + 16 3.8850 2.00000 + 17 3.9731 2.00001 + 18 4.0824 2.00019 + 19 4.2169 2.00490 + 20 4.3817 2.05532 + 21 5.8056 -0.00000 + 22 6.0340 -0.00000 + 23 6.1264 -0.00000 + 24 6.1971 -0.00000 + 25 6.7939 -0.00000 + 26 6.8671 -0.00000 + 27 6.9331 -0.00000 + 28 7.0751 -0.00000 + 29 7.6001 -0.00000 + 30 7.6411 -0.00000 + 31 8.0708 -0.00000 + 32 8.2799 -0.00000 + 33 8.4202 -0.00000 + 34 8.4598 -0.00000 + 35 9.6771 -0.00000 + 36 9.7448 -0.00000 + 37 9.8000 -0.00000 + 38 9.9331 -0.00000 + 39 10.2970 0.00000 + 40 10.6619 0.00000 + 41 10.6833 0.00000 + 42 10.8015 0.00000 + 43 11.4984 0.00000 + 44 11.6734 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.4383 2.00000 + 2 1.7497 2.00000 + 3 2.4250 2.00000 + 4 2.4432 2.00000 + 5 2.4606 2.00000 + 6 2.4822 2.00000 + 7 2.7178 2.00000 + 8 2.8217 2.00000 + 9 2.8352 2.00000 + 10 3.2756 2.00000 + 11 3.4057 2.00000 + 12 3.4195 2.00000 + 13 3.4750 2.00000 + 14 3.5235 2.00000 + 15 3.5599 2.00000 + 16 3.7160 2.00000 + 17 3.8379 2.00000 + 18 4.0178 2.00003 + 19 4.0757 2.00016 + 20 4.3569 2.04391 + 21 6.3683 -0.00000 + 22 6.4086 -0.00000 + 23 6.6231 -0.00000 + 24 6.6351 -0.00000 + 25 7.1777 -0.00000 + 26 7.1878 -0.00000 + 27 7.3107 -0.00000 + 28 7.6410 -0.00000 + 29 7.6870 -0.00000 + 30 7.8672 -0.00000 + 31 7.9442 -0.00000 + 32 7.9932 -0.00000 + 33 8.5728 -0.00000 + 34 8.7556 -0.00000 + 35 8.9401 -0.00000 + 36 9.4722 -0.00000 + 37 9.7902 -0.00000 + 38 9.7947 -0.00000 + 39 10.0097 -0.00000 + 40 10.0621 -0.00000 + 41 10.2946 0.00000 + 42 10.5535 0.00000 + 43 10.6563 0.00000 + 44 11.0215 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.4558 2.00000 + 2 1.7681 2.00000 + 3 2.1563 2.00000 + 4 2.4465 2.00000 + 5 2.4834 2.00000 + 6 2.4916 2.00000 + 7 2.8061 2.00000 + 8 2.8578 2.00000 + 9 3.0915 2.00000 + 10 3.1083 2.00000 + 11 3.2369 2.00000 + 12 3.4303 2.00000 + 13 3.5213 2.00000 + 14 3.6078 2.00000 + 15 3.6130 2.00000 + 16 3.7719 2.00000 + 17 3.9238 2.00000 + 18 4.0306 2.00004 + 19 4.0899 2.00023 + 20 4.3634 2.04693 + 21 6.2354 -0.00000 + 22 6.3141 -0.00000 + 23 6.5011 -0.00000 + 24 6.6429 -0.00000 + 25 6.8494 -0.00000 + 26 7.1095 -0.00000 + 27 7.3234 -0.00000 + 28 7.5719 -0.00000 + 29 7.6607 -0.00000 + 30 7.8916 -0.00000 + 31 7.9799 -0.00000 + 32 8.0287 -0.00000 + 33 8.7629 -0.00000 + 34 8.8231 -0.00000 + 35 9.0060 -0.00000 + 36 9.4278 -0.00000 + 37 9.6882 -0.00000 + 38 9.7731 -0.00000 + 39 10.0655 -0.00000 + 40 10.1755 0.00000 + 41 10.3934 0.00000 + 42 10.7496 0.00000 + 43 10.8305 0.00000 + 44 11.0907 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.5091 2.00000 + 2 1.8239 2.00000 + 3 1.9193 2.00000 + 4 2.2415 2.00000 + 5 2.5093 2.00000 + 6 2.5544 2.00000 + 7 2.8922 2.00000 + 8 2.9093 2.00000 + 9 3.0060 2.00000 + 10 3.2076 2.00000 + 11 3.3098 2.00000 + 12 3.4660 2.00000 + 13 3.5236 2.00000 + 14 3.6578 2.00000 + 15 3.8276 2.00000 + 16 3.8497 2.00000 + 17 3.9729 2.00001 + 18 4.0235 2.00003 + 19 4.2032 2.00369 + 20 4.3684 2.04925 + 21 5.8794 -0.00000 + 22 6.1728 -0.00000 + 23 6.2952 -0.00000 + 24 6.3846 -0.00000 + 25 6.6676 -0.00000 + 26 6.9122 -0.00000 + 27 7.2733 -0.00000 + 28 7.2993 -0.00000 + 29 7.7224 -0.00000 + 30 7.8617 -0.00000 + 31 8.0958 -0.00000 + 32 8.1526 -0.00000 + 33 8.7017 -0.00000 + 34 8.8453 -0.00000 + 35 9.2344 -0.00000 + 36 9.4909 -0.00000 + 37 9.7469 -0.00000 + 38 9.8836 -0.00000 + 39 10.0994 -0.00000 + 40 10.3562 0.00000 + 41 10.6594 0.00000 + 42 10.8811 0.00000 + 43 11.1546 0.00000 + 44 11.3240 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.6010 2.00000 + 2 1.7360 2.00000 + 3 1.9193 2.00000 + 4 2.0575 2.00000 + 5 2.5955 2.00000 + 6 2.6600 2.00000 + 7 2.7267 2.00000 + 8 2.8206 2.00000 + 9 3.0020 2.00000 + 10 3.1398 2.00000 + 11 3.5636 2.00000 + 12 3.6474 2.00000 + 13 3.7202 2.00000 + 14 3.7802 2.00000 + 15 3.7819 2.00000 + 16 3.8844 2.00000 + 17 3.9231 2.00000 + 18 4.1048 2.00035 + 19 4.2107 2.00432 + 20 4.3287 2.03162 + 21 5.7402 -0.00000 + 22 6.0329 -0.00000 + 23 6.0432 -0.00000 + 24 6.0771 -0.00000 + 25 6.7325 -0.00000 + 26 6.8505 -0.00000 + 27 6.9848 -0.00000 + 28 7.2319 -0.00000 + 29 7.7544 -0.00000 + 30 7.8754 -0.00000 + 31 8.2210 -0.00000 + 32 8.2910 -0.00000 + 33 8.4882 -0.00000 + 34 8.6754 -0.00000 + 35 9.5528 -0.00000 + 36 9.6556 -0.00000 + 37 9.7952 -0.00000 + 38 9.9946 -0.00000 + 39 10.0626 -0.00000 + 40 10.5553 0.00000 + 41 10.7997 0.00000 + 42 10.8446 0.00000 + 43 11.2403 0.00000 + 44 11.4620 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.5045 2.00000 + 2 1.6072 2.00000 + 3 2.4874 2.00000 + 4 2.5416 2.00000 + 5 2.5535 2.00000 + 6 2.5870 2.00000 + 7 2.6488 2.00000 + 8 2.6691 2.00000 + 9 2.7868 2.00000 + 10 3.1094 2.00000 + 11 3.4143 2.00000 + 12 3.5376 2.00000 + 13 3.5437 2.00000 + 14 3.6651 2.00000 + 15 3.6812 2.00000 + 16 3.7346 2.00000 + 17 3.8225 2.00000 + 18 3.9415 2.00000 + 19 3.9437 2.00000 + 20 4.1601 2.00141 + 21 6.3198 -0.00000 + 22 6.4076 -0.00000 + 23 6.5726 -0.00000 + 24 6.7778 -0.00000 + 25 6.8526 -0.00000 + 26 6.9855 -0.00000 + 27 7.4668 -0.00000 + 28 7.6106 -0.00000 + 29 7.8785 -0.00000 + 30 7.9745 -0.00000 + 31 8.3552 -0.00000 + 32 8.3920 -0.00000 + 33 8.5393 -0.00000 + 34 8.7547 -0.00000 + 35 8.8834 -0.00000 + 36 9.5074 -0.00000 + 37 9.5461 -0.00000 + 38 9.6451 -0.00000 + 39 9.9174 -0.00000 + 40 10.0295 -0.00000 + 41 10.1623 0.00000 + 42 10.3164 0.00000 + 43 11.1243 0.00000 + 44 11.3454 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.5222 2.00000 + 2 1.6252 2.00000 + 3 2.2250 2.00000 + 4 2.3301 2.00000 + 5 2.5633 2.00000 + 6 2.6880 2.00000 + 7 2.7770 2.00000 + 8 2.8680 2.00000 + 9 2.9860 2.00000 + 10 3.1349 2.00000 + 11 3.2319 2.00000 + 12 3.3692 2.00000 + 13 3.4707 2.00000 + 14 3.7234 2.00000 + 15 3.7379 2.00000 + 16 3.8468 2.00000 + 17 3.9100 2.00000 + 18 3.9306 2.00000 + 19 4.0480 2.00007 + 20 4.1752 2.00200 + 21 6.2618 -0.00000 + 22 6.3117 -0.00000 + 23 6.3959 -0.00000 + 24 6.6049 -0.00000 + 25 6.7555 -0.00000 + 26 6.9235 -0.00000 + 27 7.4445 -0.00000 + 28 7.5486 -0.00000 + 29 7.8788 -0.00000 + 30 8.0055 -0.00000 + 31 8.2885 -0.00000 + 32 8.4740 -0.00000 + 33 8.5907 -0.00000 + 34 8.8218 -0.00000 + 35 9.0569 -0.00000 + 36 9.4677 -0.00000 + 37 9.5318 -0.00000 + 38 9.6527 -0.00000 + 39 9.9490 -0.00000 + 40 10.1219 -0.00000 + 41 10.2725 0.00000 + 42 10.4824 0.00000 + 43 11.1151 0.00000 + 44 11.3091 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.5761 2.00000 + 2 1.6799 2.00000 + 3 1.9886 2.00000 + 4 2.0952 2.00000 + 5 2.6191 2.00000 + 6 2.7453 2.00000 + 7 2.8422 2.00000 + 8 3.0264 2.00000 + 9 3.1213 2.00000 + 10 3.1970 2.00000 + 11 3.2689 2.00000 + 12 3.3071 2.00000 + 13 3.3679 2.00000 + 14 3.5789 2.00000 + 15 3.9220 2.00000 + 16 3.9273 2.00000 + 17 3.9935 2.00001 + 18 4.0734 2.00015 + 19 4.1578 2.00134 + 20 4.2129 2.00452 + 21 5.9617 -0.00000 + 22 6.0966 -0.00000 + 23 6.1869 -0.00000 + 24 6.1897 -0.00000 + 25 6.7468 -0.00000 + 26 6.8279 -0.00000 + 27 7.3219 -0.00000 + 28 7.3269 -0.00000 + 29 7.9452 -0.00000 + 30 8.1141 -0.00000 + 31 8.2711 -0.00000 + 32 8.5068 -0.00000 + 33 8.5802 -0.00000 + 34 8.9218 -0.00000 + 35 9.1676 -0.00000 + 36 9.5475 -0.00000 + 37 9.5529 -0.00000 + 38 9.7331 -0.00000 + 39 10.1304 -0.00000 + 40 10.3618 0.00000 + 41 10.4376 0.00000 + 42 10.7566 0.00000 + 43 11.0739 0.00000 + 44 11.3570 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.6689 2.00000 + 2 1.7739 2.00000 + 3 1.8048 2.00000 + 4 1.9110 2.00000 + 5 2.7124 2.00000 + 6 2.8398 2.00000 + 7 2.8409 2.00000 + 8 2.9598 2.00000 + 9 2.9770 2.00000 + 10 3.0994 2.00000 + 11 3.2901 2.00000 + 12 3.4265 2.00000 + 13 3.6875 2.00000 + 14 3.7315 2.00000 + 15 3.9442 2.00000 + 16 3.9528 2.00000 + 17 3.9931 2.00001 + 18 4.1496 2.00110 + 19 4.1559 2.00128 + 20 4.2317 2.00657 + 21 5.7602 -0.00000 + 22 5.8880 -0.00000 + 23 5.9705 -0.00000 + 24 5.9834 -0.00000 + 25 6.7829 -0.00000 + 26 6.8323 -0.00000 + 27 7.0742 -0.00000 + 28 7.1864 -0.00000 + 29 8.0136 -0.00000 + 30 8.2111 -0.00000 + 31 8.2202 -0.00000 + 32 8.4283 -0.00000 + 33 8.6470 -0.00000 + 34 9.0360 -0.00000 + 35 9.1840 -0.00000 + 36 9.4385 -0.00000 + 37 9.7142 -0.00000 + 38 9.8400 -0.00000 + 39 10.2242 0.00000 + 40 10.4901 0.00000 + 41 10.6745 0.00000 + 42 10.9491 0.00000 + 43 11.0458 0.00000 + 44 11.2694 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.5195 2.00000 + 2 2.0726 2.00000 + 3 2.1225 2.00000 + 4 2.3125 2.00000 + 5 2.5073 2.00000 + 6 2.5630 2.00000 + 7 2.7569 2.00000 + 8 2.9727 2.00000 + 9 3.0197 2.00000 + 10 3.0900 2.00000 + 11 3.1076 2.00000 + 12 3.1535 2.00000 + 13 3.3261 2.00000 + 14 3.3408 2.00000 + 15 3.6341 2.00000 + 16 3.6519 2.00000 + 17 3.8218 2.00000 + 18 3.8395 2.00000 + 19 3.8905 2.00000 + 20 4.5720 1.79114 + 21 6.4185 -0.00000 + 22 6.7665 -0.00000 + 23 6.8149 -0.00000 + 24 7.3827 -0.00000 + 25 7.4936 -0.00000 + 26 7.5516 -0.00000 + 27 7.5594 -0.00000 + 28 7.6367 -0.00000 + 29 7.7554 -0.00000 + 30 7.8651 -0.00000 + 31 7.9040 -0.00000 + 32 8.2172 -0.00000 + 33 8.4918 -0.00000 + 34 8.5532 -0.00000 + 35 8.9609 -0.00000 + 36 9.6019 -0.00000 + 37 9.7424 -0.00000 + 38 9.7757 -0.00000 + 39 9.8672 -0.00000 + 40 9.9174 -0.00000 + 41 10.0681 -0.00000 + 42 10.1263 -0.00000 + 43 10.4009 0.00000 + 44 11.0742 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.5372 2.00000 + 2 2.0899 2.00000 + 3 2.1422 2.00000 + 4 2.2411 2.00000 + 5 2.3319 2.00000 + 6 2.7593 2.00000 + 7 2.7655 2.00000 + 8 2.8548 2.00000 + 9 2.8938 2.00000 + 10 3.0428 2.00000 + 11 3.0472 2.00000 + 12 3.3551 2.00000 + 13 3.4192 2.00000 + 14 3.4447 2.00000 + 15 3.6236 2.00000 + 16 3.6584 2.00000 + 17 3.8155 2.00000 + 18 3.9463 2.00000 + 19 3.9984 2.00002 + 20 4.5722 1.78985 + 21 6.3556 -0.00000 + 22 6.4787 -0.00000 + 23 6.6997 -0.00000 + 24 7.1151 -0.00000 + 25 7.2140 -0.00000 + 26 7.4535 -0.00000 + 27 7.5822 -0.00000 + 28 7.5926 -0.00000 + 29 7.7304 -0.00000 + 30 7.9501 -0.00000 + 31 7.9535 -0.00000 + 32 8.1866 -0.00000 + 33 8.6748 -0.00000 + 34 8.8153 -0.00000 + 35 9.0158 -0.00000 + 36 9.4503 -0.00000 + 37 9.5809 -0.00000 + 38 9.8012 -0.00000 + 39 9.9418 -0.00000 + 40 10.0900 -0.00000 + 41 10.2930 0.00000 + 42 10.3067 0.00000 + 43 10.6686 0.00000 + 44 11.0236 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.5910 2.00000 + 2 2.0039 2.00000 + 3 2.1430 2.00000 + 4 2.2010 2.00000 + 5 2.3896 2.00000 + 6 2.5465 2.00000 + 7 2.6278 2.00000 + 8 2.8188 2.00000 + 9 2.8192 2.00000 + 10 3.0746 2.00000 + 11 3.2094 2.00000 + 12 3.3153 2.00000 + 13 3.5020 2.00000 + 14 3.6533 2.00000 + 15 3.7301 2.00000 + 16 3.8872 2.00000 + 17 3.9386 2.00000 + 18 4.0289 2.00004 + 19 4.1523 2.00117 + 20 4.5523 1.88013 + 21 6.0350 -0.00000 + 22 6.2018 -0.00000 + 23 6.3950 -0.00000 + 24 6.5956 -0.00000 + 25 7.1324 -0.00000 + 26 7.1419 -0.00000 + 27 7.2106 -0.00000 + 28 7.5476 -0.00000 + 29 7.8111 -0.00000 + 30 8.0298 -0.00000 + 31 8.0963 -0.00000 + 32 8.2352 -0.00000 + 33 8.5990 -0.00000 + 34 8.7958 -0.00000 + 35 9.4440 -0.00000 + 36 9.5429 -0.00000 + 37 9.7422 -0.00000 + 38 9.8130 -0.00000 + 39 10.0101 -0.00000 + 40 10.3865 0.00000 + 41 10.6422 0.00000 + 42 10.6677 0.00000 + 43 10.8283 0.00000 + 44 11.1817 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.6837 2.00000 + 2 1.8197 2.00000 + 3 2.2338 2.00000 + 4 2.2975 2.00000 + 5 2.3677 2.00000 + 6 2.4408 2.00000 + 7 2.4968 2.00000 + 8 2.6364 2.00000 + 9 2.9086 2.00000 + 10 3.0367 2.00000 + 11 3.1889 2.00000 + 12 3.3168 2.00000 + 13 3.7414 2.00000 + 14 3.8765 2.00000 + 15 3.9092 2.00000 + 16 3.9399 2.00000 + 17 4.0390 2.00005 + 18 4.1204 2.00053 + 19 4.2383 2.00746 + 20 4.4555 2.06784 + 21 5.8556 -0.00000 + 22 6.0574 -0.00000 + 23 6.0892 -0.00000 + 24 6.2123 -0.00000 + 25 6.9409 -0.00000 + 26 6.9700 -0.00000 + 27 7.1719 -0.00000 + 28 7.4406 -0.00000 + 29 7.8600 -0.00000 + 30 7.9670 -0.00000 + 31 8.2141 -0.00000 + 32 8.3700 -0.00000 + 33 8.3736 -0.00000 + 34 8.6956 -0.00000 + 35 9.6721 -0.00000 + 36 9.8106 -0.00000 + 37 9.8240 -0.00000 + 38 9.9784 -0.00000 + 39 10.1180 -0.00000 + 40 10.5685 0.00000 + 41 10.6082 0.00000 + 42 10.8160 0.00000 + 43 11.2432 0.00000 + 44 11.5486 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.5537 2.00000 + 2 1.8796 2.00000 + 3 2.1629 2.00000 + 4 2.5177 2.00000 + 5 2.5640 2.00000 + 6 2.5951 2.00000 + 7 2.6003 2.00000 + 8 2.8355 2.00000 + 9 2.9442 2.00000 + 10 3.1389 2.00000 + 11 3.1880 2.00000 + 12 3.3172 2.00000 + 13 3.4723 2.00000 + 14 3.5014 2.00000 + 15 3.5075 2.00000 + 16 3.5526 2.00000 + 17 3.6875 2.00000 + 18 3.8882 2.00000 + 19 3.9043 2.00000 + 20 4.3707 2.05029 + 21 6.4344 -0.00000 + 22 6.6817 -0.00000 + 23 6.8047 -0.00000 + 24 7.1120 -0.00000 + 25 7.2976 -0.00000 + 26 7.4230 -0.00000 + 27 7.7095 -0.00000 + 28 7.8568 -0.00000 + 29 7.8859 -0.00000 + 30 7.9265 -0.00000 + 31 7.9942 -0.00000 + 32 8.4553 -0.00000 + 33 8.5438 -0.00000 + 34 8.5529 -0.00000 + 35 9.1666 -0.00000 + 36 9.4465 -0.00000 + 37 9.6873 -0.00000 + 38 9.7980 -0.00000 + 39 9.8603 -0.00000 + 40 10.0009 -0.00000 + 41 10.2854 0.00000 + 42 10.4494 0.00000 + 43 10.4599 0.00000 + 44 11.1462 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.5714 2.00000 + 2 1.8980 2.00000 + 3 2.1815 2.00000 + 4 2.2766 2.00000 + 5 2.5551 2.00000 + 6 2.5926 2.00000 + 7 2.6248 2.00000 + 8 2.8895 2.00000 + 9 2.9206 2.00000 + 10 3.2149 2.00000 + 11 3.2398 2.00000 + 12 3.2838 2.00000 + 13 3.3566 2.00000 + 14 3.4927 2.00000 + 15 3.6088 2.00000 + 16 3.7609 2.00000 + 17 3.7840 2.00000 + 18 3.8587 2.00000 + 19 3.9484 2.00000 + 20 4.3775 2.05341 + 21 6.3556 -0.00000 + 22 6.4131 -0.00000 + 23 6.7123 -0.00000 + 24 6.9275 -0.00000 + 25 7.0830 -0.00000 + 26 7.3755 -0.00000 + 27 7.6081 -0.00000 + 28 7.7046 -0.00000 + 29 7.8761 -0.00000 + 30 8.0594 -0.00000 + 31 8.0960 -0.00000 + 32 8.5108 -0.00000 + 33 8.6706 -0.00000 + 34 8.7617 -0.00000 + 35 9.0904 -0.00000 + 36 9.4701 -0.00000 + 37 9.5370 -0.00000 + 38 9.9405 -0.00000 + 39 9.9452 -0.00000 + 40 10.0316 -0.00000 + 41 10.4390 0.00000 + 42 10.6115 0.00000 + 43 10.6147 0.00000 + 44 11.1199 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.6255 2.00000 + 2 1.9538 2.00000 + 3 2.0395 2.00000 + 4 2.2375 2.00000 + 5 2.3715 2.00000 + 6 2.6123 2.00000 + 7 2.6343 2.00000 + 8 2.7015 2.00000 + 9 3.0240 2.00000 + 10 3.0804 2.00000 + 11 3.2743 2.00000 + 12 3.4391 2.00000 + 13 3.5612 2.00000 + 14 3.6392 2.00000 + 15 3.7410 2.00000 + 16 3.7745 2.00000 + 17 3.9096 2.00000 + 18 3.9872 2.00001 + 19 4.0835 2.00020 + 20 4.3839 2.05627 + 21 5.9822 -0.00000 + 22 6.1542 -0.00000 + 23 6.3766 -0.00000 + 24 6.3988 -0.00000 + 25 7.0989 -0.00000 + 26 7.1899 -0.00000 + 27 7.3258 -0.00000 + 28 7.8002 -0.00000 + 29 7.8460 -0.00000 + 30 8.0558 -0.00000 + 31 8.1839 -0.00000 + 32 8.4548 -0.00000 + 33 8.6366 -0.00000 + 34 8.9711 -0.00000 + 35 9.3111 -0.00000 + 36 9.5579 -0.00000 + 37 9.6873 -0.00000 + 38 10.0027 -0.00000 + 39 10.0477 -0.00000 + 40 10.2058 0.00000 + 41 10.5999 0.00000 + 42 10.8050 0.00000 + 43 10.9161 0.00000 + 44 11.2260 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.7187 2.00000 + 2 1.8551 2.00000 + 3 2.0490 2.00000 + 4 2.1865 2.00000 + 5 2.3351 2.00000 + 6 2.4714 2.00000 + 7 2.7078 2.00000 + 8 2.7778 2.00000 + 9 2.8486 2.00000 + 10 2.9128 2.00000 + 11 3.4349 2.00000 + 12 3.5333 2.00000 + 13 3.7293 2.00000 + 14 3.8059 2.00000 + 15 3.8359 2.00000 + 16 3.8900 2.00000 + 17 3.9247 2.00000 + 18 4.0981 2.00029 + 19 4.2010 2.00353 + 20 4.3449 2.03850 + 21 5.7719 -0.00000 + 22 5.9699 -0.00000 + 23 6.0213 -0.00000 + 24 6.0283 -0.00000 + 25 7.0663 -0.00000 + 26 7.1385 -0.00000 + 27 7.1510 -0.00000 + 28 7.8181 -0.00000 + 29 7.8943 -0.00000 + 30 7.9906 -0.00000 + 31 8.2726 -0.00000 + 32 8.3995 -0.00000 + 33 8.4210 -0.00000 + 34 8.9875 -0.00000 + 35 9.6239 -0.00000 + 36 9.7527 -0.00000 + 37 9.8759 -0.00000 + 38 10.0303 -0.00000 + 39 10.0573 -0.00000 + 40 10.3887 0.00000 + 41 10.6519 0.00000 + 42 10.8425 0.00000 + 43 11.0662 0.00000 + 44 11.2497 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.6233 2.00000 + 2 1.7308 2.00000 + 3 2.2443 2.00000 + 4 2.3679 2.00000 + 5 2.6100 2.00000 + 6 2.6743 2.00000 + 7 2.7074 2.00000 + 8 2.7774 2.00000 + 9 2.9341 2.00000 + 10 3.2222 2.00000 + 11 3.2407 2.00000 + 12 3.2842 2.00000 + 13 3.3384 2.00000 + 14 3.4441 2.00000 + 15 3.6727 2.00000 + 16 3.6923 2.00000 + 17 3.7452 2.00000 + 18 3.8600 2.00000 + 19 3.8741 2.00000 + 20 4.0527 2.00008 + 21 6.5228 -0.00000 + 22 6.6357 -0.00000 + 23 6.8693 -0.00000 + 24 6.9397 -0.00000 + 25 7.0449 -0.00000 + 26 7.0889 -0.00000 + 27 7.8187 -0.00000 + 28 7.8746 -0.00000 + 29 8.1160 -0.00000 + 30 8.1376 -0.00000 + 31 8.2388 -0.00000 + 32 8.3405 -0.00000 + 33 8.8550 -0.00000 + 34 8.8812 -0.00000 + 35 9.0611 -0.00000 + 36 9.4995 -0.00000 + 37 9.5593 -0.00000 + 38 9.6647 -0.00000 + 39 9.9041 -0.00000 + 40 10.0424 -0.00000 + 41 10.1669 0.00000 + 42 10.4570 0.00000 + 43 10.9738 0.00000 + 44 11.1954 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.6412 2.00000 + 2 1.7490 2.00000 + 3 2.2631 2.00000 + 4 2.3472 2.00000 + 5 2.3886 2.00000 + 6 2.4569 2.00000 + 7 2.9044 2.00000 + 8 2.9771 2.00000 + 9 3.0003 2.00000 + 10 3.0929 2.00000 + 11 3.1086 2.00000 + 12 3.3126 2.00000 + 13 3.4927 2.00000 + 14 3.6095 2.00000 + 15 3.6164 2.00000 + 16 3.7170 2.00000 + 17 3.8214 2.00000 + 18 3.8709 2.00000 + 19 3.9044 2.00000 + 20 4.0672 2.00012 + 21 6.4148 -0.00000 + 22 6.4485 -0.00000 + 23 6.5966 -0.00000 + 24 6.6815 -0.00000 + 25 7.0851 -0.00000 + 26 7.1950 -0.00000 + 27 7.6919 -0.00000 + 28 7.7087 -0.00000 + 29 8.0939 -0.00000 + 30 8.1905 -0.00000 + 31 8.3408 -0.00000 + 32 8.5186 -0.00000 + 33 8.8070 -0.00000 + 34 8.9873 -0.00000 + 35 9.0827 -0.00000 + 36 9.5471 -0.00000 + 37 9.6227 -0.00000 + 38 9.6438 -0.00000 + 39 9.9819 -0.00000 + 40 10.1688 0.00000 + 41 10.2566 0.00000 + 42 10.5207 0.00000 + 43 10.9743 0.00000 + 44 11.1367 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.6959 2.00000 + 2 1.8044 2.00000 + 3 2.1117 2.00000 + 4 2.2213 2.00000 + 5 2.3211 2.00000 + 6 2.4450 2.00000 + 7 2.7351 2.00000 + 8 2.8625 2.00000 + 9 3.0084 2.00000 + 10 3.3070 2.00000 + 11 3.3601 2.00000 + 12 3.4122 2.00000 + 13 3.4709 2.00000 + 14 3.6243 2.00000 + 15 3.7861 2.00000 + 16 3.8352 2.00000 + 17 3.8570 2.00000 + 18 3.9930 2.00001 + 19 4.0089 2.00002 + 20 4.1097 2.00040 + 21 6.0153 -0.00000 + 22 6.1271 -0.00000 + 23 6.2149 -0.00000 + 24 6.2691 -0.00000 + 25 7.1368 -0.00000 + 26 7.1728 -0.00000 + 27 7.4978 -0.00000 + 28 7.6594 -0.00000 + 29 8.0996 -0.00000 + 30 8.2181 -0.00000 + 31 8.3260 -0.00000 + 32 8.5792 -0.00000 + 33 8.7960 -0.00000 + 34 9.0552 -0.00000 + 35 9.2670 -0.00000 + 36 9.6275 -0.00000 + 37 9.7186 -0.00000 + 38 9.8011 -0.00000 + 39 10.1075 -0.00000 + 40 10.3161 0.00000 + 41 10.4323 0.00000 + 42 10.7199 0.00000 + 43 10.9598 0.00000 + 44 11.2492 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.7897 2.00000 + 2 1.8991 2.00000 + 3 1.9270 2.00000 + 4 2.0371 2.00000 + 5 2.4169 2.00000 + 6 2.5416 2.00000 + 7 2.5559 2.00000 + 8 2.6827 2.00000 + 9 3.0975 2.00000 + 10 3.2221 2.00000 + 11 3.4220 2.00000 + 12 3.5210 2.00000 + 13 3.6926 2.00000 + 14 3.7771 2.00000 + 15 3.8007 2.00000 + 16 3.9176 2.00000 + 17 3.9196 2.00000 + 18 4.0923 2.00025 + 19 4.0979 2.00029 + 20 4.1668 2.00165 + 21 5.7514 -0.00000 + 22 5.8365 -0.00000 + 23 5.9152 -0.00000 + 24 5.9451 -0.00000 + 25 7.1350 -0.00000 + 26 7.1578 -0.00000 + 27 7.3961 -0.00000 + 28 7.6618 -0.00000 + 29 8.1420 -0.00000 + 30 8.2376 -0.00000 + 31 8.2767 -0.00000 + 32 8.4174 -0.00000 + 33 8.8014 -0.00000 + 34 9.2800 -0.00000 + 35 9.3248 -0.00000 + 36 9.5577 -0.00000 + 37 9.8808 -0.00000 + 38 9.9502 -0.00000 + 39 10.1549 0.00000 + 40 10.3153 0.00000 + 41 10.6121 0.00000 + 42 10.9289 0.00000 + 43 11.0154 0.00000 + 44 11.2749 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.6749 2.00000 + 2 1.8749 2.00000 + 3 2.2546 2.00000 + 4 2.4749 2.00000 + 5 2.4997 2.00000 + 6 2.6554 2.00000 + 7 2.7102 2.00000 + 8 2.7845 2.00000 + 9 2.8743 2.00000 + 10 2.9051 2.00000 + 11 3.1994 2.00000 + 12 3.2780 2.00000 + 13 3.4032 2.00000 + 14 3.4328 2.00000 + 15 3.4588 2.00000 + 16 3.4716 2.00000 + 17 3.6140 2.00000 + 18 3.6344 2.00000 + 19 4.1283 2.00065 + 20 4.3999 2.06289 + 21 6.6610 -0.00000 + 22 6.8749 -0.00000 + 23 7.1460 -0.00000 + 24 7.4367 -0.00000 + 25 7.5561 -0.00000 + 26 7.5602 -0.00000 + 27 7.5721 -0.00000 + 28 7.7082 -0.00000 + 29 8.0698 -0.00000 + 30 8.1195 -0.00000 + 31 8.1271 -0.00000 + 32 8.3883 -0.00000 + 33 8.5637 -0.00000 + 34 8.8023 -0.00000 + 35 9.0681 -0.00000 + 36 9.4672 -0.00000 + 37 9.5586 -0.00000 + 38 9.7416 -0.00000 + 39 9.8609 -0.00000 + 40 9.8611 -0.00000 + 41 9.8868 -0.00000 + 42 10.0284 -0.00000 + 43 10.0333 -0.00000 + 44 10.3099 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.6928 2.00000 + 2 1.8930 2.00000 + 3 2.2732 2.00000 + 4 2.3937 2.00000 + 5 2.5075 2.00000 + 6 2.5110 2.00000 + 7 2.6153 2.00000 + 8 2.7571 2.00000 + 9 2.9636 2.00000 + 10 3.0460 2.00000 + 11 3.1563 2.00000 + 12 3.1883 2.00000 + 13 3.2825 2.00000 + 14 3.4165 2.00000 + 15 3.5371 2.00000 + 16 3.6995 2.00000 + 17 3.7018 2.00000 + 18 3.8246 2.00000 + 19 4.1538 2.00122 + 20 4.4103 2.06645 + 21 6.5159 -0.00000 + 22 6.5896 -0.00000 + 23 6.9316 -0.00000 + 24 7.0811 -0.00000 + 25 7.4062 -0.00000 + 26 7.4250 -0.00000 + 27 7.6102 -0.00000 + 28 7.6762 -0.00000 + 29 8.0431 -0.00000 + 30 8.0668 -0.00000 + 31 8.3858 -0.00000 + 32 8.6380 -0.00000 + 33 8.6714 -0.00000 + 34 8.9597 -0.00000 + 35 9.0562 -0.00000 + 36 9.3711 -0.00000 + 37 9.4138 -0.00000 + 38 9.7077 -0.00000 + 39 9.7589 -0.00000 + 40 10.0237 -0.00000 + 41 10.1024 -0.00000 + 42 10.1520 0.00000 + 43 10.3476 0.00000 + 44 10.5241 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.7475 2.00000 + 2 1.9481 2.00000 + 3 2.1628 2.00000 + 4 2.3212 2.00000 + 5 2.3730 2.00000 + 6 2.5587 2.00000 + 7 2.5844 2.00000 + 8 2.7458 2.00000 + 9 2.8126 2.00000 + 10 2.9628 2.00000 + 11 2.9837 2.00000 + 12 3.1972 2.00000 + 13 3.4696 2.00000 + 14 3.5927 2.00000 + 15 3.8095 2.00000 + 16 3.9107 2.00000 + 17 3.9467 2.00000 + 18 3.9872 2.00001 + 19 4.2233 2.00558 + 20 4.4257 2.07004 + 21 6.1355 -0.00000 + 22 6.1925 -0.00000 + 23 6.4675 -0.00000 + 24 6.5411 -0.00000 + 25 7.2691 -0.00000 + 26 7.3384 -0.00000 + 27 7.4105 -0.00000 + 28 7.5019 -0.00000 + 29 8.0656 -0.00000 + 30 8.1087 -0.00000 + 31 8.4897 -0.00000 + 32 8.5509 -0.00000 + 33 8.8008 -0.00000 + 34 9.2052 -0.00000 + 35 9.3720 -0.00000 + 36 9.3863 -0.00000 + 37 9.5123 -0.00000 + 38 9.7470 -0.00000 + 39 9.7522 -0.00000 + 40 10.0807 -0.00000 + 41 10.4483 0.00000 + 42 10.4861 0.00000 + 43 10.7797 0.00000 + 44 10.9768 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.8414 2.00000 + 2 1.9785 2.00000 + 3 2.0424 2.00000 + 4 2.1786 2.00000 + 5 2.4293 2.00000 + 6 2.5667 2.00000 + 7 2.6513 2.00000 + 8 2.6779 2.00000 + 9 2.7853 2.00000 + 10 2.8133 2.00000 + 11 2.9114 2.00000 + 12 3.0426 2.00000 + 13 3.8155 2.00000 + 14 3.8682 2.00000 + 15 3.9509 2.00000 + 16 3.9742 2.00001 + 17 4.1174 2.00049 + 18 4.1898 2.00277 + 19 4.2351 2.00701 + 20 4.3786 2.05391 + 21 5.8991 -0.00000 + 22 5.9802 -0.00000 + 23 6.0653 -0.00000 + 24 6.1203 -0.00000 + 25 7.1714 -0.00000 + 26 7.2191 -0.00000 + 27 7.2899 -0.00000 + 28 7.4036 -0.00000 + 29 8.1309 -0.00000 + 30 8.1958 -0.00000 + 31 8.3016 -0.00000 + 32 8.3450 -0.00000 + 33 8.9628 -0.00000 + 34 9.2423 -0.00000 + 35 9.5569 -0.00000 + 36 9.5873 -0.00000 + 37 9.7302 -0.00000 + 38 9.7454 -0.00000 + 39 9.8260 -0.00000 + 40 10.0206 -0.00000 + 41 10.7607 0.00000 + 42 10.9712 0.00000 + 43 11.0509 0.00000 + 44 11.3666 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.7111 2.00000 + 2 1.9133 2.00000 + 3 2.0539 2.00000 + 4 2.2725 2.00000 + 5 2.7036 2.00000 + 6 2.7488 2.00000 + 7 2.7699 2.00000 + 8 2.9004 2.00000 + 9 2.9664 2.00000 + 10 3.0577 2.00000 + 11 3.0661 2.00000 + 12 3.1077 2.00000 + 13 3.2471 2.00000 + 14 3.2965 2.00000 + 15 3.6028 2.00000 + 16 3.6495 2.00000 + 17 3.7382 2.00000 + 18 3.7643 2.00000 + 19 3.9046 2.00000 + 20 4.1658 2.00161 + 21 6.7004 -0.00000 + 22 6.8547 -0.00000 + 23 6.9359 -0.00000 + 24 7.1551 -0.00000 + 25 7.5779 -0.00000 + 26 7.6263 -0.00000 + 27 7.8194 -0.00000 + 28 7.8704 -0.00000 + 29 7.9650 -0.00000 + 30 7.9769 -0.00000 + 31 8.1131 -0.00000 + 32 8.3209 -0.00000 + 33 8.7104 -0.00000 + 34 9.0747 -0.00000 + 35 9.1876 -0.00000 + 36 9.4283 -0.00000 + 37 9.5876 -0.00000 + 38 9.6189 -0.00000 + 39 9.8967 -0.00000 + 40 10.0793 -0.00000 + 41 10.2075 0.00000 + 42 10.2312 0.00000 + 43 10.2431 0.00000 + 44 10.5714 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.7292 2.00000 + 2 1.9315 2.00000 + 3 2.0727 2.00000 + 4 2.2905 2.00000 + 5 2.4401 2.00000 + 6 2.6299 2.00000 + 7 2.7773 2.00000 + 8 2.8331 2.00000 + 9 2.9741 2.00000 + 10 3.0230 2.00000 + 11 3.1561 2.00000 + 12 3.2542 2.00000 + 13 3.3771 2.00000 + 14 3.4667 2.00000 + 15 3.5329 2.00000 + 16 3.6326 2.00000 + 17 3.8094 2.00000 + 18 3.8669 2.00000 + 19 3.9393 2.00000 + 20 4.1811 2.00229 + 21 6.5194 -0.00000 + 22 6.5344 -0.00000 + 23 6.8390 -0.00000 + 24 6.9113 -0.00000 + 25 7.4027 -0.00000 + 26 7.4207 -0.00000 + 27 7.8058 -0.00000 + 28 7.8442 -0.00000 + 29 8.0735 -0.00000 + 30 8.1728 -0.00000 + 31 8.2648 -0.00000 + 32 8.4271 -0.00000 + 33 8.7644 -0.00000 + 34 9.0429 -0.00000 + 35 9.1907 -0.00000 + 36 9.4341 -0.00000 + 37 9.5207 -0.00000 + 38 9.6687 -0.00000 + 39 10.0170 -0.00000 + 40 10.1242 -0.00000 + 41 10.1484 0.00000 + 42 10.3544 0.00000 + 43 10.5718 0.00000 + 44 10.7215 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.7841 2.00000 + 2 1.9868 2.00000 + 3 2.1295 2.00000 + 4 2.2002 2.00000 + 5 2.3512 2.00000 + 6 2.4033 2.00000 + 7 2.5526 2.00000 + 8 2.7678 2.00000 + 9 2.8766 2.00000 + 10 3.1033 2.00000 + 11 3.2357 2.00000 + 12 3.4010 2.00000 + 13 3.5347 2.00000 + 14 3.6159 2.00000 + 15 3.7242 2.00000 + 16 3.7966 2.00000 + 17 3.9318 2.00000 + 18 3.9617 2.00000 + 19 4.0528 2.00008 + 20 4.2209 2.00531 + 21 6.0799 -0.00000 + 22 6.1502 -0.00000 + 23 6.3806 -0.00000 + 24 6.3813 -0.00000 + 25 7.3915 -0.00000 + 26 7.4124 -0.00000 + 27 7.5778 -0.00000 + 28 7.7372 -0.00000 + 29 8.1186 -0.00000 + 30 8.1831 -0.00000 + 31 8.4552 -0.00000 + 32 8.5682 -0.00000 + 33 8.7500 -0.00000 + 34 9.1277 -0.00000 + 35 9.3109 -0.00000 + 36 9.5068 -0.00000 + 37 9.5784 -0.00000 + 38 9.7597 -0.00000 + 39 10.0716 -0.00000 + 40 10.2661 0.00000 + 41 10.3013 0.00000 + 42 10.4947 0.00000 + 43 10.9322 0.00000 + 44 11.1458 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.8785 2.00000 + 2 2.0161 2.00000 + 3 2.0811 2.00000 + 4 2.2097 2.00000 + 5 2.2368 2.00000 + 6 2.3689 2.00000 + 7 2.4463 2.00000 + 8 2.5870 2.00000 + 9 2.9646 2.00000 + 10 3.0891 2.00000 + 11 3.1903 2.00000 + 12 3.3038 2.00000 + 13 3.8097 2.00000 + 14 3.8568 2.00000 + 15 3.8914 2.00000 + 16 3.9192 2.00000 + 17 4.0041 2.00002 + 18 4.1156 2.00047 + 19 4.1268 2.00062 + 20 4.2379 2.00740 + 21 5.8070 -0.00000 + 22 5.8767 -0.00000 + 23 5.9686 -0.00000 + 24 5.9725 -0.00000 + 25 7.3805 -0.00000 + 26 7.4299 -0.00000 + 27 7.4379 -0.00000 + 28 7.6838 -0.00000 + 29 8.1301 -0.00000 + 30 8.2138 -0.00000 + 31 8.3921 -0.00000 + 32 8.4185 -0.00000 + 33 8.7667 -0.00000 + 34 9.3476 -0.00000 + 35 9.4210 -0.00000 + 36 9.6888 -0.00000 + 37 9.7144 -0.00000 + 38 9.8727 -0.00000 + 39 9.9274 -0.00000 + 40 10.1511 0.00000 + 41 10.5362 0.00000 + 42 10.7461 0.00000 + 43 11.0818 0.00000 + 44 11.3248 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.7848 2.00000 + 2 1.8981 2.00000 + 3 1.9912 2.00000 + 4 2.1103 2.00000 + 5 2.7732 2.00000 + 6 2.8250 2.00000 + 7 2.8660 2.00000 + 8 2.9217 2.00000 + 9 2.9831 2.00000 + 10 3.0332 2.00000 + 11 3.0999 2.00000 + 12 3.1331 2.00000 + 13 3.2104 2.00000 + 14 3.4305 2.00000 + 15 3.5551 2.00000 + 16 3.7258 2.00000 + 17 3.7763 2.00000 + 18 3.8128 2.00000 + 19 3.8139 2.00000 + 20 3.8318 2.00000 + 21 6.7542 -0.00000 + 22 6.8062 -0.00000 + 23 6.8561 -0.00000 + 24 6.9464 -0.00000 + 25 7.4232 -0.00000 + 26 7.4395 -0.00000 + 27 7.7937 -0.00000 + 28 7.8513 -0.00000 + 29 8.2598 -0.00000 + 30 8.2812 -0.00000 + 31 8.3026 -0.00000 + 32 8.3337 -0.00000 + 33 8.8610 -0.00000 + 34 9.0509 -0.00000 + 35 9.1551 -0.00000 + 36 9.2938 -0.00000 + 37 9.6273 -0.00000 + 38 9.7592 -0.00000 + 39 9.7964 -0.00000 + 40 9.9068 -0.00000 + 41 10.6186 0.00000 + 42 10.7337 0.00000 + 43 10.7924 0.00000 + 44 10.9650 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.8030 2.00000 + 2 1.9165 2.00000 + 3 2.0098 2.00000 + 4 2.1290 2.00000 + 5 2.5139 2.00000 + 6 2.6252 2.00000 + 7 2.7194 2.00000 + 8 2.8358 2.00000 + 9 3.1306 2.00000 + 10 3.1338 2.00000 + 11 3.2452 2.00000 + 12 3.3636 2.00000 + 13 3.3792 2.00000 + 14 3.4758 2.00000 + 15 3.6062 2.00000 + 16 3.6509 2.00000 + 17 3.7810 2.00000 + 18 3.8237 2.00000 + 19 3.8396 2.00000 + 20 3.8491 2.00000 + 21 6.5486 -0.00000 + 22 6.5520 -0.00000 + 23 6.6771 -0.00000 + 24 6.7024 -0.00000 + 25 7.4455 -0.00000 + 26 7.4769 -0.00000 + 27 7.7678 -0.00000 + 28 7.8096 -0.00000 + 29 8.2809 -0.00000 + 30 8.2875 -0.00000 + 31 8.3559 -0.00000 + 32 8.4166 -0.00000 + 33 8.9741 -0.00000 + 34 9.0160 -0.00000 + 35 9.1740 -0.00000 + 36 9.4154 -0.00000 + 37 9.6584 -0.00000 + 38 9.7188 -0.00000 + 39 9.8925 -0.00000 + 40 9.9764 -0.00000 + 41 10.6238 0.00000 + 42 10.7323 0.00000 + 43 10.8983 0.00000 + 44 11.0776 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.8585 2.00000 + 2 1.9724 2.00000 + 3 2.0662 2.00000 + 4 2.1848 2.00000 + 5 2.2794 2.00000 + 6 2.3925 2.00000 + 7 2.4883 2.00000 + 8 2.6079 2.00000 + 9 3.1985 2.00000 + 10 3.3738 2.00000 + 11 3.4642 2.00000 + 12 3.4801 2.00000 + 13 3.5880 2.00000 + 14 3.6321 2.00000 + 15 3.7052 2.00000 + 16 3.7313 2.00000 + 17 3.7856 2.00000 + 18 3.8832 2.00000 + 19 3.8845 2.00000 + 20 3.9300 2.00000 + 21 6.0907 -0.00000 + 22 6.1492 -0.00000 + 23 6.2134 -0.00000 + 24 6.2513 -0.00000 + 25 7.5081 -0.00000 + 26 7.5207 -0.00000 + 27 7.7337 -0.00000 + 28 7.8080 -0.00000 + 29 8.2261 -0.00000 + 30 8.2655 -0.00000 + 31 8.3464 -0.00000 + 32 8.5271 -0.00000 + 33 9.0594 -0.00000 + 34 9.0913 -0.00000 + 35 9.3057 -0.00000 + 36 9.5261 -0.00000 + 37 9.7132 -0.00000 + 38 9.7388 -0.00000 + 39 9.9774 -0.00000 + 40 10.0311 -0.00000 + 41 10.7188 0.00000 + 42 10.8496 0.00000 + 43 11.0447 0.00000 + 44 11.2485 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.9535 2.00000 + 2 2.0676 2.00000 + 3 2.0918 2.00000 + 4 2.1595 2.00000 + 5 2.2109 2.00000 + 6 2.2836 2.00000 + 7 2.3036 2.00000 + 8 2.4241 2.00000 + 9 3.2787 2.00000 + 10 3.3805 2.00000 + 11 3.4695 2.00000 + 12 3.5162 2.00000 + 13 3.6838 2.00000 + 14 3.7156 2.00000 + 15 3.7640 2.00000 + 16 3.8328 2.00000 + 17 3.9494 2.00000 + 18 4.0225 2.00003 + 19 4.0495 2.00007 + 20 4.0580 2.00009 + 21 5.7685 -0.00000 + 22 5.8179 -0.00000 + 23 5.8361 -0.00000 + 24 5.8699 -0.00000 + 25 7.5291 -0.00000 + 26 7.5585 -0.00000 + 27 7.7178 -0.00000 + 28 7.8507 -0.00000 + 29 8.2061 -0.00000 + 30 8.2653 -0.00000 + 31 8.2976 -0.00000 + 32 8.4592 -0.00000 + 33 9.0034 -0.00000 + 34 9.2831 -0.00000 + 35 9.4659 -0.00000 + 36 9.5064 -0.00000 + 37 9.7728 -0.00000 + 38 9.8256 -0.00000 + 39 9.9215 -0.00000 + 40 9.9829 -0.00000 + 41 10.8257 0.00000 + 42 10.9940 0.00000 + 43 11.1556 0.00000 + 44 11.3372 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.206 5.379 -0.004 0.012 0.004 + 5.379 22.970 -0.015 0.046 0.015 + -0.004 -0.015 -0.229 -0.001 0.002 + 0.012 0.046 -0.001 -0.238 -0.000 + 0.004 0.015 0.002 -0.000 -0.230 + total augmentation occupancy for first ion, spin component: 1 + 2.468 -0.038 0.040 -0.119 -0.041 + -0.038 0.001 -0.002 0.004 0.002 + 0.040 -0.002 0.233 -0.008 0.012 + -0.119 0.004 -0.008 0.146 0.003 + -0.041 0.002 0.012 0.003 0.221 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1605: real time 0.1605 + FORLOC: cpu time 0.0092: real time 0.0092 + FORNL : cpu time 13.6643: real time 13.6654 + STRESS: cpu time 5.3787: real time 5.3792 + FORCOR: cpu time 0.0286: real time 0.0286 + FORHAR: cpu time 0.0224: real time 0.0224 + MIXING: cpu time 0.0050: real time 0.0050 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 15.27370 15.27370 15.27370 + Ewald -145.37407 -150.43668 -132.74850 0.00000 0.00000 -0.00000 + Hartree 1.25516 0.72951 1.08889 -0.00000 -0.00000 0.00000 + E(xc) -110.64131 -111.10024 -109.88142 0.00000 0.00000 -0.00000 + Local 7.62185 2.05370 11.40047 0.00000 0.00000 -0.00000 + n-local 135.23311 135.96648 132.65045 0.01751 0.06888 -0.21382 + augment 7.67391 7.82963 7.33764 -0.00000 -0.00000 0.00000 + Kinetic 222.12995 232.83578 206.75537 0.05895 -1.07434 -0.90944 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 133.17231 133.15187 131.87659 0.00000 0.00000 0.00000 + in kB 777.49529 777.37596 769.93053 0.00000 0.00000 0.00000 + external pressure = 74.93 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 274.43 + direct lattice vectors reciprocal lattice vectors + 6.788599968 0.000000000 0.000000000 0.147305778 0.000000000 0.000000000 + 0.000000000 8.062199593 0.000000000 0.000000000 0.124035629 0.000000000 + 0.000000000 0.000000000 5.014100075 0.000000000 0.000000000 0.199437583 + + length of vectors + 6.788599968 8.062199593 5.014100075 0.147305778 0.124035629 0.199437583 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.175E-01 0.850E-01 -.253E+00 -.464E+00 0.381E+00 -.120E+01 0.499E+00 -.482E+00 0.152E+01 0.149E-05 -.409E-05 0.186E-05 + 0.175E-01 -.850E-01 -.253E+00 0.464E+00 -.381E+00 -.120E+01 -.499E+00 0.482E+00 0.152E+01 -.148E-05 0.407E-05 0.186E-05 + -.175E-01 -.850E-01 -.253E+00 -.464E+00 -.381E+00 -.120E+01 0.499E+00 0.482E+00 0.152E+01 0.149E-05 0.411E-05 0.186E-05 + 0.175E-01 0.850E-01 -.253E+00 0.464E+00 0.381E+00 -.120E+01 -.499E+00 -.482E+00 0.152E+01 -.149E-05 -.409E-05 0.186E-05 + -.175E-01 0.850E-01 -.253E+00 -.464E+00 0.381E+00 -.120E+01 0.499E+00 -.482E+00 0.152E+01 0.149E-05 -.409E-05 0.186E-05 + 0.175E-01 -.850E-01 -.253E+00 0.464E+00 -.381E+00 -.120E+01 -.499E+00 0.482E+00 0.152E+01 -.148E-05 0.411E-05 0.186E-05 + -.175E-01 -.850E-01 -.253E+00 -.464E+00 -.381E+00 -.120E+01 0.499E+00 0.482E+00 0.152E+01 0.149E-05 0.407E-05 0.186E-05 + 0.175E-01 0.850E-01 -.253E+00 0.464E+00 0.381E+00 -.120E+01 -.499E+00 -.482E+00 0.152E+01 -.149E-05 -.409E-05 0.186E-05 + -.187E-01 -.227E-01 0.122E+00 -.282E-01 -.265E+00 0.724E+00 0.664E-01 0.289E+00 -.903E+00 0.266E-06 0.413E-05 -.634E-06 + 0.187E-01 0.227E-01 0.122E+00 0.282E-01 0.265E+00 0.724E+00 -.664E-01 -.289E+00 -.903E+00 -.260E-06 -.416E-05 -.634E-06 + -.187E-01 0.227E-01 0.122E+00 -.282E-01 0.265E+00 0.724E+00 0.664E-01 -.289E+00 -.903E+00 0.251E-06 -.414E-05 -.634E-06 + 0.187E-01 -.227E-01 0.122E+00 0.282E-01 -.265E+00 0.724E+00 -.664E-01 0.289E+00 -.903E+00 -.256E-06 0.417E-05 -.634E-06 + -.187E-01 -.227E-01 0.122E+00 -.282E-01 -.265E+00 0.724E+00 0.664E-01 0.289E+00 -.903E+00 0.265E-06 0.417E-05 -.633E-06 + 0.187E-01 0.227E-01 0.122E+00 0.283E-01 0.265E+00 0.724E+00 -.664E-01 -.289E+00 -.903E+00 -.261E-06 -.414E-05 -.633E-06 + -.187E-01 0.227E-01 0.122E+00 -.282E-01 0.265E+00 0.724E+00 0.664E-01 -.289E+00 -.903E+00 0.251E-06 -.416E-05 -.633E-06 + 0.187E-01 -.227E-01 0.122E+00 0.282E-01 -.265E+00 0.724E+00 -.664E-01 0.289E+00 -.903E+00 -.256E-06 0.413E-05 -.633E-06 + -.280E+00 -.189E+00 0.227E-01 -.681E+00 -.212E-01 0.830E-01 0.990E+00 0.226E+00 -.105E+00 0.959E-06 -.384E-05 -.202E-05 + 0.280E+00 0.189E+00 0.227E-01 0.681E+00 0.212E-01 0.830E-01 -.990E+00 -.226E+00 -.105E+00 -.951E-06 0.382E-05 -.202E-05 + -.280E+00 0.189E+00 0.227E-01 -.681E+00 0.212E-01 0.830E-01 0.990E+00 -.226E+00 -.105E+00 0.949E-06 0.386E-05 -.202E-05 + 0.280E+00 -.189E+00 0.227E-01 0.681E+00 -.212E-01 0.830E-01 -.990E+00 0.226E+00 -.105E+00 -.956E-06 -.384E-05 -.202E-05 + -.280E+00 -.189E+00 0.227E-01 -.681E+00 -.212E-01 0.830E-01 0.990E+00 0.226E+00 -.105E+00 0.958E-06 -.384E-05 -.202E-05 + 0.280E+00 0.189E+00 0.227E-01 0.681E+00 0.212E-01 0.830E-01 -.990E+00 -.226E+00 -.105E+00 -.952E-06 0.386E-05 -.202E-05 + -.280E+00 0.189E+00 0.227E-01 -.681E+00 0.212E-01 0.830E-01 0.990E+00 -.226E+00 -.105E+00 0.948E-06 0.382E-05 -.202E-05 + 0.280E+00 -.189E+00 0.227E-01 0.681E+00 -.212E-01 0.830E-01 -.990E+00 0.226E+00 -.105E+00 -.957E-06 -.384E-05 -.202E-05 + -.580E-01 -.703E-01 0.191E-01 -.223E+00 0.764E-01 0.595E-01 0.279E+00 -.425E-02 -.642E-01 -.898E-08 0.236E-06 0.205E-06 + 0.580E-01 0.703E-01 0.191E-01 0.223E+00 -.764E-01 0.595E-01 -.279E+00 0.425E-02 -.642E-01 0.446E-08 -.234E-06 0.205E-06 + -.580E-01 0.703E-01 0.191E-01 -.223E+00 -.764E-01 0.595E-01 0.279E+00 0.425E-02 -.642E-01 0.566E-08 -.217E-06 0.205E-06 + 0.580E-01 -.703E-01 0.191E-01 0.223E+00 0.764E-01 0.595E-01 -.279E+00 -.425E-02 -.642E-01 -.979E-09 0.215E-06 0.205E-06 + -.580E-01 -.703E-01 0.191E-01 -.223E+00 0.764E-01 0.595E-01 0.279E+00 -.425E-02 -.642E-01 -.889E-08 0.215E-06 0.206E-06 + 0.580E-01 0.703E-01 0.191E-01 0.223E+00 -.764E-01 0.595E-01 -.279E+00 0.425E-02 -.642E-01 0.420E-08 -.217E-06 0.206E-06 + -.580E-01 0.703E-01 0.191E-01 -.223E+00 -.764E-01 0.595E-01 0.279E+00 0.425E-02 -.642E-01 0.540E-08 -.234E-06 0.206E-06 + 0.580E-01 -.703E-01 0.191E-01 0.223E+00 0.764E-01 0.595E-01 -.279E+00 -.425E-02 -.642E-01 -.885E-09 0.236E-06 0.206E-06 + 0.363E-01 0.183E+00 0.977E-01 0.232E+00 -.183E+00 0.333E+00 -.265E+00 -.107E-01 -.456E+00 -.132E-05 0.482E-05 0.434E-06 + -.363E-01 -.183E+00 0.977E-01 -.232E+00 0.183E+00 0.333E+00 0.265E+00 0.107E-01 -.456E+00 0.132E-05 -.485E-05 0.434E-06 + 0.363E-01 -.183E+00 0.977E-01 0.232E+00 0.183E+00 0.333E+00 -.265E+00 0.107E-01 -.456E+00 -.130E-05 -.483E-05 0.434E-06 + -.363E-01 0.183E+00 0.977E-01 -.232E+00 -.183E+00 0.333E+00 0.265E+00 -.107E-01 -.456E+00 0.131E-05 0.485E-05 0.434E-06 + 0.363E-01 0.183E+00 0.977E-01 0.232E+00 -.183E+00 0.333E+00 -.265E+00 -.107E-01 -.456E+00 -.132E-05 0.485E-05 0.434E-06 + -.363E-01 -.183E+00 0.977E-01 -.232E+00 0.183E+00 0.333E+00 0.265E+00 0.107E-01 -.456E+00 0.132E-05 -.483E-05 0.434E-06 + 0.363E-01 -.183E+00 0.977E-01 0.232E+00 0.183E+00 0.333E+00 -.265E+00 0.107E-01 -.456E+00 -.130E-05 -.485E-05 0.434E-06 + -.363E-01 0.183E+00 0.977E-01 -.232E+00 -.183E+00 0.333E+00 0.265E+00 -.107E-01 -.456E+00 0.131E-05 0.482E-05 0.434E-06 + ----------------------------------------------------------------------------------------------- + -.293E-04 0.245E-04 0.632E-01 0.203E-14 -.180E-14 -.150E-14 0.555E-16 0.137E-15 -.643E-01 0.843E-12 0.113E-11 -.125E-05 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.63229 0.93771 0.00000 0.018125 -0.015652 0.067435 + 6.15631 7.12449 0.00000 -0.018125 0.015652 0.067435 + 4.02659 3.09339 0.00000 0.018125 0.015652 0.067435 + 2.76201 4.96881 0.00000 -0.018125 -0.015652 0.067435 + 0.63229 4.96881 2.50705 0.018125 -0.015652 0.067435 + 6.15631 3.09339 2.50705 -0.018125 0.015652 0.067435 + 4.02659 7.12449 2.50705 0.018125 0.015652 0.067435 + 2.76201 0.93771 2.50705 -0.018125 -0.015652 0.067435 + 5.85856 7.28129 1.57337 0.019454 0.001121 -0.057246 + 0.93004 0.78090 1.57337 -0.019454 -0.001121 -0.057246 + 2.46426 4.81200 1.57337 0.019454 -0.001121 -0.057246 + 4.32434 3.25020 1.57337 -0.019454 0.001121 -0.057246 + 5.85856 3.25020 4.08042 0.019454 0.001121 -0.057246 + 0.93004 4.81200 4.08042 -0.019454 -0.001121 -0.057246 + 2.46426 0.78090 4.08042 0.019454 -0.001121 -0.057246 + 4.32434 7.28129 4.08042 -0.019454 0.001121 -0.057246 + 6.57021 0.94255 2.97873 0.028951 0.016017 0.000384 + 0.21839 7.11965 2.97873 -0.028951 -0.016017 0.000384 + 3.17591 3.08855 2.97873 0.028951 -0.016017 0.000384 + 3.61269 4.97365 2.97873 -0.028951 0.016017 0.000384 + 6.57021 4.97365 0.47168 0.028951 0.016017 0.000384 + 0.21839 3.08855 0.47168 -0.028951 -0.016017 0.000384 + 3.17591 7.11965 0.47168 0.028951 -0.016017 0.000384 + 3.61269 0.94255 0.47168 -0.028951 0.016017 0.000384 + 2.38477 2.16131 0.88183 -0.002262 0.001907 0.014428 + 4.40383 5.90089 0.88183 0.002262 -0.001907 0.014428 + 5.77907 1.86979 0.88183 -0.002262 -0.001907 0.014428 + 1.00953 6.19241 0.88183 0.002262 0.001907 0.014428 + 2.38477 6.19241 3.38888 -0.002262 0.001907 0.014428 + 4.40383 1.86979 3.38888 0.002262 -0.001907 0.014428 + 5.77907 5.90089 3.38888 -0.002262 -0.001907 0.014428 + 1.00953 2.16131 3.38888 0.002262 0.001907 0.014428 + 1.96917 7.35152 1.89057 0.003580 -0.010594 -0.025001 + 4.81943 0.71068 1.89057 -0.003580 0.010594 -0.025001 + 5.36347 4.74178 1.89057 0.003580 0.010594 -0.025001 + 1.42513 3.32042 1.89057 -0.003580 -0.010594 -0.025001 + 1.96917 3.32042 4.39762 0.003580 -0.010594 -0.025001 + 4.81943 4.74178 4.39762 -0.003580 0.010594 -0.025001 + 5.36347 0.71068 4.39762 0.003580 0.010594 -0.025001 + 1.42513 7.35152 4.39762 -0.003580 -0.010594 -0.025001 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.001147 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -11.72779781 eV + + energy without entropy= -11.73805310 energy(sigma->0) = -11.73121624 + enthalpy is TOTEN = 108.17083161 eV P V= 119.89862941 + + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0293: real time 0.0300 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0067: real time 0.0067 + FEWALD executed in parallel + FEWALD: cpu time 0.0016: real time 0.0026 + GENKIN: cpu time 0.0278: real time 0.0278 + ORTHCH: cpu time 0.5291: real time 0.5292 + LOOP+: cpu time 87.6501: real time 87.7133 + + +----------------------------------------- Iteration 2( 1) --------------------------------------- + + + POTLOK: cpu time 0.0211: real time 0.0211 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 4.6849: real time 4.6854 + DOS: cpu time 0.0078: real time 0.0078 + CHARGE: cpu time 0.1692: real time 0.1692 + MIXING: cpu time 0.0029: real time 0.0029 + -------------------------------------------- + LOOP: cpu time 4.8941: real time 4.8958 + + eigenvalue-minimisations : 5328 + total energy-change (2. order) :-0.7032729E+01 (-0.4794740E-01) + number of electron 40.0000004 magnetization + augmentation part 0.9286977 magnetization + + free energy = -0.187605256986E+02 energy without entropy= -0.187706505576E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 2) --------------------------------------- + + + POTLOK: cpu time 0.0215: real time 0.0215 + SETDIJ: cpu time 0.0067: real time 0.0067 + EDDAV: cpu time 5.6060: real time 5.6065 + DOS: cpu time 0.0081: real time 0.0081 + CHARGE: cpu time 0.1655: real time 0.1655 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 5.8127: real time 5.8133 + + eigenvalue-minimisations : 6908 + total energy-change (2. order) : 0.6639474E-02 (-0.1048812E-02) + number of electron 40.0000004 magnetization + augmentation part 0.9341062 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 2.1454 + 2.1454 + + free energy = -0.187538862248E+02 energy without entropy= -0.187639854296E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 3) --------------------------------------- + + + POTLOK: cpu time 0.0217: real time 0.0217 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 5.2397: real time 5.2402 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1723: real time 0.1723 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 5.4515: real time 5.4521 + + eigenvalue-minimisations : 6212 + total energy-change (2. order) : 0.4273929E-02 (-0.9613042E-04) + number of electron 40.0000004 magnetization + augmentation part 0.9348211 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9773 + 1.1466 2.8079 + + free energy = -0.187496122956E+02 energy without entropy= -0.187596870951E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 4) --------------------------------------- + + + POTLOK: cpu time 0.0220: real time 0.0220 + SETDIJ: cpu time 0.0057: real time 0.0057 + EDDAV: cpu time 5.7440: real time 5.7446 + DOS: cpu time 0.0077: real time 0.0077 + CHARGE: cpu time 0.1734: real time 0.1734 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 5.9575: real time 5.9581 + + eigenvalue-minimisations : 7044 + total energy-change (2. order) : 0.3495328E-04 (-0.5177765E-05) + number of electron 40.0000004 magnetization + augmentation part 0.9351157 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9728 + 0.9755 2.7578 2.1852 + + free energy = -0.187495773423E+02 energy without entropy= -0.187596524682E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 5) --------------------------------------- + + + POTLOK: cpu time 0.0216: real time 0.0216 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 5.2252: real time 5.2258 + DOS: cpu time 0.0074: real time 0.0075 + CHARGE: cpu time 0.1742: real time 0.1742 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 5.4387: real time 5.4393 + + eigenvalue-minimisations : 6020 + total energy-change (2. order) : 0.5332001E-05 (-0.4096139E-06) + number of electron 40.0000004 magnetization + augmentation part 0.9351416 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9204 + 2.7677 2.4726 1.0008 1.4404 + + free energy = -0.187495720103E+02 energy without entropy= -0.187596507379E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 6) --------------------------------------- + + + POTLOK: cpu time 0.0221: real time 0.0221 + SETDIJ: cpu time 0.0056: real time 0.0066 + EDDAV: cpu time 3.5745: real time 3.5814 + DOS: cpu time 0.0069: real time 0.0069 + CHARGE: cpu time 0.2037: real time 0.2049 + MIXING: cpu time 0.0045: real time 0.0045 + -------------------------------------------- + LOOP: cpu time 3.8184: real time 3.8275 + + eigenvalue-minimisations : 3204 + total energy-change (2. order) :-0.5723267E-05 (-0.3542230E-07) + number of electron 40.0000004 magnetization + augmentation part 0.9351458 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7956 + 2.7341 2.5229 1.7420 0.9584 1.0208 + + free energy = -0.187495777336E+02 energy without entropy= -0.187596567039E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 2( 7) --------------------------------------- + + + POTLOK: cpu time 0.0218: real time 0.0238 + SETDIJ: cpu time 0.0062: real time 0.0073 + EDDAV: cpu time 3.5669: real time 3.5700 + DOS: cpu time 0.0071: real time 0.0071 + -------------------------------------------- + LOOP: cpu time 3.6037: real time 3.6102 + + eigenvalue-minimisations : 3108 + total energy-change (2. order) :-0.1218866E-06 (-0.4428984E-08) + number of electron 40.0000004 magnetization + augmentation part 0.9351458 magnetization + + free energy = -0.187495778555E+02 energy without entropy= -0.187596566694E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -26.0586 2 -26.0586 3 -26.0586 4 -26.0586 5 -26.0586 + 6 -26.0586 7 -26.0586 8 -26.0586 9 -25.9976 10 -25.9976 + 11 -25.9976 12 -25.9976 13 -25.9976 14 -25.9976 15 -25.9976 + 16 -25.9976 17 -26.0038 18 -26.0038 19 -26.0038 20 -26.0038 + 21 -26.0038 22 -26.0038 23 -26.0038 24 -26.0038 25 -25.9300 + 26 -25.9300 27 -25.9300 28 -25.9300 29 -25.9300 30 -25.9300 + 31 -25.9300 32 -25.9300 33 -26.0990 34 -26.0990 35 -26.0990 + 36 -26.0990 37 -26.0990 38 -26.0990 39 -26.0990 40 -26.0990 + + + + E-fermi : 4.3816 XC(G=0): -9.5063 alpha+bet :-20.2574 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.8395 2.00000 + 2 1.3964 2.00000 + 3 1.6374 2.00000 + 4 1.8943 2.00000 + 5 1.9360 2.00000 + 6 2.4202 2.00000 + 7 2.5254 2.00000 + 8 2.6798 2.00000 + 9 2.7734 2.00000 + 10 2.8273 2.00000 + 11 3.1293 2.00000 + 12 3.2013 2.00000 + 13 3.3084 2.00000 + 14 3.3498 2.00000 + 15 3.4228 2.00000 + 16 3.5360 2.00000 + 17 3.7636 2.00011 + 18 4.1006 2.06317 + 19 4.1304 2.07063 + 20 4.3061 1.59144 + 21 5.4429 -0.00000 + 22 5.6409 -0.00000 + 23 5.8057 -0.00000 + 24 5.9559 -0.00000 + 25 6.1004 -0.00000 + 26 6.1811 -0.00000 + 27 6.4354 -0.00000 + 28 7.0132 -0.00000 + 29 7.0145 -0.00000 + 30 7.0958 -0.00000 + 31 7.2573 -0.00000 + 32 7.3448 -0.00000 + 33 7.9581 -0.00000 + 34 8.0281 -0.00000 + 35 8.6665 -0.00000 + 36 8.8171 -0.00000 + 37 9.0837 -0.00000 + 38 9.3112 -0.00000 + 39 9.6854 -0.00000 + 40 9.6975 -0.00000 + 41 9.9444 0.00000 + 42 10.1526 0.00000 + 43 10.4031 0.00000 + 44 10.6698 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.8584 2.00000 + 2 1.4170 2.00000 + 3 1.6032 2.00000 + 4 1.6586 2.00000 + 5 2.1765 2.00000 + 6 2.2911 2.00000 + 7 2.4303 2.00000 + 8 2.7781 2.00000 + 9 2.8685 2.00000 + 10 3.0565 2.00000 + 11 3.1573 2.00000 + 12 3.2148 2.00000 + 13 3.2940 2.00000 + 14 3.3412 2.00000 + 15 3.4534 2.00000 + 16 3.5401 2.00000 + 17 3.6996 2.00002 + 18 3.9785 2.01519 + 19 4.1470 2.07004 + 20 4.3489 1.27264 + 21 5.3295 -0.00000 + 22 5.4924 -0.00000 + 23 5.7655 -0.00000 + 24 5.8697 -0.00000 + 25 6.0369 -0.00000 + 26 6.4140 -0.00000 + 27 6.5118 -0.00000 + 28 6.7295 -0.00000 + 29 6.9854 -0.00000 + 30 7.0860 -0.00000 + 31 7.1903 -0.00000 + 32 7.2759 -0.00000 + 33 8.2167 -0.00000 + 34 8.2826 -0.00000 + 35 8.6853 -0.00000 + 36 8.7468 -0.00000 + 37 9.1074 -0.00000 + 38 9.2875 -0.00000 + 39 9.6266 -0.00000 + 40 9.7794 -0.00000 + 41 9.9267 0.00000 + 42 10.0147 0.00000 + 43 10.6959 0.00000 + 44 10.7739 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 0.9159 2.00000 + 2 1.3531 2.00000 + 3 1.4791 2.00000 + 4 1.7223 2.00000 + 5 1.9322 2.00000 + 6 2.1837 2.00000 + 7 2.7278 2.00000 + 8 2.8758 2.00000 + 9 3.1492 2.00000 + 10 3.1860 2.00000 + 11 3.2377 2.00000 + 12 3.2566 2.00000 + 13 3.3426 2.00000 + 14 3.4337 2.00000 + 15 3.4943 2.00000 + 16 3.5373 2.00000 + 17 3.6393 2.00000 + 18 3.7644 2.00011 + 19 4.0701 2.05004 + 20 4.2511 1.88442 + 21 5.2305 -0.00000 + 22 5.3322 -0.00000 + 23 5.6563 -0.00000 + 24 5.7376 -0.00000 + 25 5.7713 -0.00000 + 26 6.1385 -0.00000 + 27 6.6642 -0.00000 + 28 6.9099 -0.00000 + 29 6.9797 -0.00000 + 30 7.0715 -0.00000 + 31 7.1549 -0.00000 + 32 7.4308 -0.00000 + 33 8.3719 -0.00000 + 34 8.3831 -0.00000 + 35 8.6301 -0.00000 + 36 8.7594 -0.00000 + 37 9.0687 -0.00000 + 38 9.1888 -0.00000 + 39 9.6592 -0.00000 + 40 9.7359 -0.00000 + 41 10.0123 0.00000 + 42 10.2066 0.00000 + 43 10.8431 0.00000 + 44 10.9689 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.0146 2.00000 + 2 1.1587 2.00000 + 3 1.5841 2.00000 + 4 1.7338 2.00000 + 5 1.8311 2.00000 + 6 1.9837 2.00000 + 7 2.9640 2.00000 + 8 3.0718 2.00000 + 9 3.2086 2.00000 + 10 3.3167 2.00000 + 11 3.3430 2.00000 + 12 3.3647 2.00000 + 13 3.4267 2.00000 + 14 3.4283 2.00000 + 15 3.5551 2.00000 + 16 3.5630 2.00000 + 17 3.6281 2.00000 + 18 3.6800 2.00001 + 19 3.8230 2.00057 + 20 4.0191 2.02788 + 21 5.2507 -0.00000 + 22 5.3735 -0.00000 + 23 5.5324 -0.00000 + 24 5.5423 -0.00000 + 25 5.6544 -0.00000 + 26 5.6750 -0.00000 + 27 6.8646 -0.00000 + 28 6.9804 -0.00000 + 29 7.0147 -0.00000 + 30 7.0501 -0.00000 + 31 7.5046 -0.00000 + 32 7.7470 -0.00000 + 33 8.0193 -0.00000 + 34 8.1044 -0.00000 + 35 8.7550 -0.00000 + 36 8.8140 -0.00000 + 37 8.9635 -0.00000 + 38 9.0489 -0.00000 + 39 9.6509 -0.00000 + 40 9.7243 -0.00000 + 41 10.3104 0.00000 + 42 10.4046 0.00000 + 43 11.0614 0.00000 + 44 11.1642 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.8740 2.00000 + 2 1.2024 2.00000 + 3 1.9219 2.00000 + 4 1.9269 2.00000 + 5 1.9735 2.00000 + 6 2.2406 2.00000 + 7 2.3318 2.00000 + 8 2.8485 2.00000 + 9 2.9232 2.00000 + 10 2.9635 2.00000 + 11 3.0465 2.00000 + 12 3.1251 2.00000 + 13 3.3149 2.00000 + 14 3.4133 2.00000 + 15 3.4178 2.00000 + 16 3.6066 2.00000 + 17 3.6766 2.00001 + 18 3.9272 2.00603 + 19 3.9525 2.00970 + 20 4.1474 2.06997 + 21 5.5861 -0.00000 + 22 5.7150 -0.00000 + 23 5.8514 -0.00000 + 24 6.1075 -0.00000 + 25 6.1804 -0.00000 + 26 6.3213 -0.00000 + 27 6.4038 -0.00000 + 28 6.6605 -0.00000 + 29 7.1590 -0.00000 + 30 7.2089 -0.00000 + 31 7.3108 -0.00000 + 32 7.4802 -0.00000 + 33 7.9125 -0.00000 + 34 8.0478 -0.00000 + 35 8.7430 -0.00000 + 36 8.9109 -0.00000 + 37 8.9374 -0.00000 + 38 9.0736 -0.00000 + 39 9.4066 -0.00000 + 40 9.7177 -0.00000 + 41 9.7684 -0.00000 + 42 10.2359 0.00000 + 43 10.3260 0.00000 + 44 10.7676 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 0.8930 2.00000 + 2 1.2224 2.00000 + 3 1.6390 2.00000 + 4 1.9374 2.00000 + 5 1.9878 2.00000 + 6 2.3234 2.00000 + 7 2.6350 2.00000 + 8 2.7212 2.00000 + 9 2.8802 2.00000 + 10 2.9512 2.00000 + 11 3.1421 2.00000 + 12 3.2662 2.00000 + 13 3.3139 2.00000 + 14 3.4132 2.00000 + 15 3.4405 2.00000 + 16 3.6107 2.00000 + 17 3.6277 2.00000 + 18 3.7452 2.00007 + 19 4.0273 2.03107 + 20 4.1908 2.03944 + 21 5.4630 -0.00000 + 22 5.6434 -0.00000 + 23 5.8191 -0.00000 + 24 5.9566 -0.00000 + 25 6.1102 -0.00000 + 26 6.3852 -0.00000 + 27 6.5278 -0.00000 + 28 6.6016 -0.00000 + 29 7.0546 -0.00000 + 30 7.1908 -0.00000 + 31 7.2173 -0.00000 + 32 7.4577 -0.00000 + 33 8.1591 -0.00000 + 34 8.2289 -0.00000 + 35 8.7493 -0.00000 + 36 8.8692 -0.00000 + 37 8.8830 -0.00000 + 38 9.0845 -0.00000 + 39 9.4813 -0.00000 + 40 9.6755 -0.00000 + 41 9.7856 -0.00000 + 42 10.2980 0.00000 + 43 10.3468 0.00000 + 44 10.8849 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 0.9508 2.00000 + 2 1.2828 2.00000 + 3 1.3891 2.00000 + 4 1.7303 2.00000 + 5 2.0135 2.00000 + 6 2.4797 2.00000 + 7 2.7502 2.00000 + 8 2.9042 2.00000 + 9 3.0365 2.00000 + 10 3.0447 2.00000 + 11 3.1908 2.00000 + 12 3.2263 2.00000 + 13 3.3836 2.00000 + 14 3.4546 2.00000 + 15 3.5271 2.00000 + 16 3.5298 2.00000 + 17 3.5870 2.00000 + 18 3.6423 2.00000 + 19 3.9631 2.01172 + 20 4.1447 2.07039 + 21 5.3014 -0.00000 + 22 5.5649 -0.00000 + 23 5.6635 -0.00000 + 24 5.7136 -0.00000 + 25 5.9947 -0.00000 + 26 6.0937 -0.00000 + 27 6.5139 -0.00000 + 28 6.9563 -0.00000 + 29 6.9969 -0.00000 + 30 7.2306 -0.00000 + 31 7.3751 -0.00000 + 32 7.4032 -0.00000 + 33 8.2429 -0.00000 + 34 8.3912 -0.00000 + 35 8.6563 -0.00000 + 36 8.7482 -0.00000 + 37 8.9016 -0.00000 + 38 9.0247 -0.00000 + 39 9.4865 -0.00000 + 40 9.6505 -0.00000 + 41 10.0023 0.00000 + 42 10.4231 0.00000 + 43 10.5542 0.00000 + 44 11.0599 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.0499 2.00000 + 2 1.1944 2.00000 + 3 1.3858 2.00000 + 4 1.5339 2.00000 + 5 2.1241 2.00000 + 6 2.2799 2.00000 + 7 3.0015 2.00000 + 8 3.1137 2.00000 + 9 3.1260 2.00000 + 10 3.2313 2.00000 + 11 3.2912 2.00000 + 12 3.3239 2.00000 + 13 3.3459 2.00000 + 14 3.3686 2.00000 + 15 3.4636 2.00000 + 16 3.5368 2.00000 + 17 3.6572 2.00000 + 18 3.6851 2.00001 + 19 3.7572 2.00009 + 20 3.9155 2.00477 + 21 5.3146 -0.00000 + 22 5.5035 -0.00000 + 23 5.5049 -0.00000 + 24 5.6836 -0.00000 + 25 5.6876 -0.00000 + 26 5.8632 -0.00000 + 27 6.6830 -0.00000 + 28 6.8487 -0.00000 + 29 7.2012 -0.00000 + 30 7.3004 -0.00000 + 31 7.6034 -0.00000 + 32 7.6876 -0.00000 + 33 8.0358 -0.00000 + 34 8.0665 -0.00000 + 35 8.6969 -0.00000 + 36 8.7537 -0.00000 + 37 8.8313 -0.00000 + 38 8.9148 -0.00000 + 39 9.4584 -0.00000 + 40 9.6230 -0.00000 + 41 10.2883 0.00000 + 42 10.4597 0.00000 + 43 10.9918 0.00000 + 44 11.1863 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 0.9443 2.00000 + 2 1.0527 2.00000 + 3 1.9937 2.00000 + 4 2.0485 2.00000 + 5 2.0973 2.00000 + 6 2.1478 2.00000 + 7 2.2758 2.00000 + 8 2.6053 2.00000 + 9 2.9259 2.00000 + 10 3.0225 2.00000 + 11 3.2579 2.00000 + 12 3.3464 2.00000 + 13 3.3479 2.00000 + 14 3.3877 2.00000 + 15 3.5185 2.00000 + 16 3.5210 2.00000 + 17 3.6545 2.00000 + 18 3.6970 2.00001 + 19 3.7436 2.00006 + 20 3.9345 2.00695 + 21 5.8316 -0.00000 + 22 5.8435 -0.00000 + 23 5.9849 -0.00000 + 24 6.0237 -0.00000 + 25 6.1067 -0.00000 + 26 6.3008 -0.00000 + 27 6.5007 -0.00000 + 28 6.8260 -0.00000 + 29 6.8568 -0.00000 + 30 7.1655 -0.00000 + 31 7.4896 -0.00000 + 32 7.7494 -0.00000 + 33 8.0560 -0.00000 + 34 8.2202 -0.00000 + 35 8.3886 -0.00000 + 36 8.8677 -0.00000 + 37 8.9327 -0.00000 + 38 9.0018 -0.00000 + 39 9.1688 -0.00000 + 40 9.4538 -0.00000 + 41 9.7947 -0.00000 + 42 9.9078 0.00000 + 43 10.6097 0.00000 + 44 10.7910 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 0.9635 2.00000 + 2 1.0722 2.00000 + 3 1.7118 2.00000 + 4 1.8236 2.00000 + 5 2.2692 2.00000 + 6 2.3851 2.00000 + 7 2.5063 2.00000 + 8 2.6357 2.00000 + 9 2.9457 2.00000 + 10 3.0416 2.00000 + 11 3.0531 2.00000 + 12 3.3528 2.00000 + 13 3.3990 2.00000 + 14 3.4042 2.00000 + 15 3.4186 2.00000 + 16 3.5346 2.00000 + 17 3.6002 2.00000 + 18 3.7526 2.00008 + 19 3.8280 2.00064 + 20 3.9625 2.01160 + 21 5.6560 -0.00000 + 22 5.8234 -0.00000 + 23 5.8587 -0.00000 + 24 6.0051 -0.00000 + 25 6.1420 -0.00000 + 26 6.2513 -0.00000 + 27 6.4401 -0.00000 + 28 6.7895 -0.00000 + 29 6.8873 -0.00000 + 30 7.1024 -0.00000 + 31 7.5093 -0.00000 + 32 7.8770 -0.00000 + 33 8.0422 -0.00000 + 34 8.3525 -0.00000 + 35 8.4414 -0.00000 + 36 8.8473 -0.00000 + 37 8.8786 -0.00000 + 38 9.1010 -0.00000 + 39 9.1291 -0.00000 + 40 9.4159 -0.00000 + 41 9.8579 0.00000 + 42 9.9770 0.00000 + 43 10.6276 0.00000 + 44 10.8387 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.0218 2.00000 + 2 1.1315 2.00000 + 3 1.4623 2.00000 + 4 1.5751 2.00000 + 5 2.3422 2.00000 + 6 2.6774 2.00000 + 7 2.8179 2.00000 + 8 2.8383 2.00000 + 9 2.8931 2.00000 + 10 3.0197 2.00000 + 11 3.0972 2.00000 + 12 3.1829 2.00000 + 13 3.2979 2.00000 + 14 3.3833 2.00000 + 15 3.4391 2.00000 + 16 3.5107 2.00000 + 17 3.6519 2.00000 + 18 3.8044 2.00035 + 19 3.8134 2.00044 + 20 3.9898 2.01821 + 21 5.4291 -0.00000 + 22 5.5534 -0.00000 + 23 5.7771 -0.00000 + 24 5.9536 -0.00000 + 25 5.9645 -0.00000 + 26 6.2547 -0.00000 + 27 6.3119 -0.00000 + 28 6.6562 -0.00000 + 29 7.1444 -0.00000 + 30 7.2740 -0.00000 + 31 7.5992 -0.00000 + 32 7.9207 -0.00000 + 33 7.9803 -0.00000 + 34 8.3587 -0.00000 + 35 8.4625 -0.00000 + 36 8.7324 -0.00000 + 37 8.8175 -0.00000 + 38 9.1361 -0.00000 + 39 9.1372 -0.00000 + 40 9.4135 -0.00000 + 41 10.0864 0.00000 + 42 10.2660 0.00000 + 43 10.6288 0.00000 + 44 10.8792 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.1218 2.00000 + 2 1.2327 2.00000 + 3 1.2671 2.00000 + 4 1.3793 2.00000 + 5 2.4584 2.00000 + 6 2.6181 2.00000 + 7 2.8128 2.00000 + 8 2.9792 2.00000 + 9 3.0706 2.00000 + 10 3.1583 2.00000 + 11 3.1897 2.00000 + 12 3.2823 2.00000 + 13 3.2961 2.00000 + 14 3.3273 2.00000 + 15 3.5159 2.00000 + 16 3.5883 2.00000 + 17 3.5884 2.00000 + 18 3.6805 2.00001 + 19 3.7384 2.00005 + 20 3.8052 2.00036 + 21 5.4044 -0.00000 + 22 5.4648 -0.00000 + 23 5.5816 -0.00000 + 24 5.6565 -0.00000 + 25 6.0297 -0.00000 + 26 6.1717 -0.00000 + 27 6.3808 -0.00000 + 28 6.5268 -0.00000 + 29 7.4453 -0.00000 + 30 7.5875 -0.00000 + 31 7.6777 -0.00000 + 32 7.8794 -0.00000 + 33 7.9125 -0.00000 + 34 8.1953 -0.00000 + 35 8.2964 -0.00000 + 36 8.4932 -0.00000 + 37 8.8845 -0.00000 + 38 9.1102 -0.00000 + 39 9.1661 -0.00000 + 40 9.3851 -0.00000 + 41 10.3795 0.00000 + 42 10.5598 0.00000 + 43 10.6243 0.00000 + 44 10.8170 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 0.8795 2.00000 + 2 1.4442 2.00000 + 3 1.6881 2.00000 + 4 1.9358 2.00000 + 5 1.9794 2.00000 + 6 2.3894 2.00000 + 7 2.4847 2.00000 + 8 2.5693 2.00000 + 9 2.7195 2.00000 + 10 2.8110 2.00000 + 11 2.9933 2.00000 + 12 3.1997 2.00000 + 13 3.2295 2.00000 + 14 3.2462 2.00000 + 15 3.3585 2.00000 + 16 3.6818 2.00001 + 17 3.7723 2.00014 + 18 3.9210 2.00533 + 19 3.9642 2.01193 + 20 4.0871 2.05771 + 21 5.6667 -0.00000 + 22 5.8678 -0.00000 + 23 6.0550 -0.00000 + 24 6.3328 -0.00000 + 25 6.3790 -0.00000 + 26 6.4633 -0.00000 + 27 6.4863 -0.00000 + 28 6.6437 -0.00000 + 29 7.0482 -0.00000 + 30 7.1095 -0.00000 + 31 7.2524 -0.00000 + 32 7.3169 -0.00000 + 33 8.0354 -0.00000 + 34 8.3468 -0.00000 + 35 8.7875 -0.00000 + 36 8.9147 -0.00000 + 37 8.9327 -0.00000 + 38 9.4235 -0.00000 + 39 9.6626 -0.00000 + 40 9.7017 -0.00000 + 41 9.8554 0.00000 + 42 9.8773 0.00000 + 43 10.2525 0.00000 + 44 10.3010 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 0.8985 2.00000 + 2 1.4646 2.00000 + 3 1.6455 2.00000 + 4 1.7091 2.00000 + 5 2.2199 2.00000 + 6 2.3326 2.00000 + 7 2.4216 2.00000 + 8 2.4752 2.00000 + 9 2.8589 2.00000 + 10 3.0100 2.00000 + 11 3.0593 2.00000 + 12 3.1028 2.00000 + 13 3.2188 2.00000 + 14 3.2805 2.00000 + 15 3.5038 2.00000 + 16 3.5774 2.00000 + 17 3.7852 2.00021 + 18 3.8795 2.00221 + 19 4.0008 2.02153 + 20 4.0697 2.04987 + 21 5.6099 -0.00000 + 22 5.7140 -0.00000 + 23 5.9919 -0.00000 + 24 6.2330 -0.00000 + 25 6.2702 -0.00000 + 26 6.3737 -0.00000 + 27 6.5882 -0.00000 + 28 6.6654 -0.00000 + 29 7.0382 -0.00000 + 30 7.1150 -0.00000 + 31 7.1457 -0.00000 + 32 7.3283 -0.00000 + 33 8.1980 -0.00000 + 34 8.4247 -0.00000 + 35 8.7797 -0.00000 + 36 8.8778 -0.00000 + 37 8.9405 -0.00000 + 38 9.4476 -0.00000 + 39 9.6883 -0.00000 + 40 9.7507 -0.00000 + 41 9.7572 -0.00000 + 42 9.9542 0.00000 + 43 10.4852 0.00000 + 44 10.5588 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 0.9563 2.00000 + 2 1.3949 2.00000 + 3 1.5265 2.00000 + 4 1.7722 2.00000 + 5 1.9775 2.00000 + 6 2.2276 2.00000 + 7 2.4839 2.00000 + 8 2.7651 2.00000 + 9 2.8820 2.00000 + 10 3.0593 2.00000 + 11 3.1998 2.00000 + 12 3.2708 2.00000 + 13 3.3632 2.00000 + 14 3.3910 2.00000 + 15 3.4477 2.00000 + 16 3.6616 2.00000 + 17 3.7269 2.00004 + 18 3.8169 2.00048 + 19 3.9176 2.00497 + 20 4.0320 2.03301 + 21 5.3627 -0.00000 + 22 5.6677 -0.00000 + 23 5.8766 -0.00000 + 24 5.8779 -0.00000 + 25 6.0250 -0.00000 + 26 6.1820 -0.00000 + 27 6.6060 -0.00000 + 28 6.9170 -0.00000 + 29 6.9402 -0.00000 + 30 7.0348 -0.00000 + 31 7.1675 -0.00000 + 32 7.5704 -0.00000 + 33 8.2335 -0.00000 + 34 8.3119 -0.00000 + 35 8.8199 -0.00000 + 36 8.9135 -0.00000 + 37 8.9492 -0.00000 + 38 9.3492 -0.00000 + 39 9.7472 -0.00000 + 40 9.9474 0.00000 + 41 9.9748 0.00000 + 42 10.1677 0.00000 + 43 10.8044 0.00000 + 44 10.9594 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.0554 2.00000 + 2 1.2000 2.00000 + 3 1.6312 2.00000 + 4 1.7805 2.00000 + 5 1.8794 2.00000 + 6 2.0304 2.00000 + 7 2.5813 2.00000 + 8 2.7157 2.00000 + 9 3.1281 2.00000 + 10 3.2227 2.00000 + 11 3.2603 2.00000 + 12 3.4196 2.00000 + 13 3.4736 2.00000 + 14 3.5360 2.00000 + 15 3.5561 2.00000 + 16 3.5631 2.00000 + 17 3.7084 2.00002 + 18 3.7806 2.00018 + 19 3.7837 2.00020 + 20 3.8370 2.00081 + 21 5.3345 -0.00000 + 22 5.5492 -0.00000 + 23 5.6244 -0.00000 + 24 5.6897 -0.00000 + 25 5.8828 -0.00000 + 26 6.0769 -0.00000 + 27 6.6396 -0.00000 + 28 6.7729 -0.00000 + 29 7.0116 -0.00000 + 30 7.0572 -0.00000 + 31 7.4887 -0.00000 + 32 7.8288 -0.00000 + 33 7.9096 -0.00000 + 34 8.0674 -0.00000 + 35 8.9513 -0.00000 + 36 9.0050 -0.00000 + 37 9.0513 -0.00000 + 38 9.2143 -0.00000 + 39 9.7532 -0.00000 + 40 9.9325 0.00000 + 41 10.2272 0.00000 + 42 10.3244 0.00000 + 43 11.0440 0.00000 + 44 11.1548 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 0.9145 2.00000 + 2 1.2477 2.00000 + 3 1.9688 2.00000 + 4 1.9760 2.00000 + 5 2.0173 2.00000 + 6 2.2806 2.00000 + 7 2.3762 2.00000 + 8 2.4548 2.00000 + 9 2.8174 2.00000 + 10 2.9776 2.00000 + 11 2.9894 2.00000 + 12 3.0737 2.00000 + 13 3.2773 2.00000 + 14 3.4205 2.00000 + 15 3.4237 2.00000 + 16 3.5901 2.00000 + 17 3.7611 2.00010 + 18 3.7934 2.00026 + 19 3.8528 2.00119 + 20 3.9582 2.01075 + 21 5.7460 -0.00000 + 22 5.8894 -0.00000 + 23 5.9684 -0.00000 + 24 6.2119 -0.00000 + 25 6.3868 -0.00000 + 26 6.4979 -0.00000 + 27 6.5588 -0.00000 + 28 6.6657 -0.00000 + 29 7.2763 -0.00000 + 30 7.2814 -0.00000 + 31 7.3592 -0.00000 + 32 7.4818 -0.00000 + 33 8.0601 -0.00000 + 34 8.1858 -0.00000 + 35 8.6170 -0.00000 + 36 8.7835 -0.00000 + 37 9.0710 -0.00000 + 38 9.2734 -0.00000 + 39 9.4899 -0.00000 + 40 9.5782 -0.00000 + 41 9.6801 -0.00000 + 42 10.1826 0.00000 + 43 10.2193 0.00000 + 44 10.7647 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 0.9336 2.00000 + 2 1.2677 2.00000 + 3 1.6817 2.00000 + 4 1.9902 2.00000 + 5 2.0327 2.00000 + 6 2.3654 2.00000 + 7 2.4658 2.00000 + 8 2.6885 2.00000 + 9 2.7562 2.00000 + 10 2.8369 2.00000 + 11 3.0166 2.00000 + 12 3.1199 2.00000 + 13 3.3140 2.00000 + 14 3.4149 2.00000 + 15 3.5061 2.00000 + 16 3.5619 2.00000 + 17 3.7121 2.00002 + 18 3.7774 2.00017 + 19 3.8892 2.00274 + 20 4.0141 2.02604 + 21 5.6430 -0.00000 + 22 5.8391 -0.00000 + 23 5.8778 -0.00000 + 24 6.1092 -0.00000 + 25 6.2055 -0.00000 + 26 6.4913 -0.00000 + 27 6.5308 -0.00000 + 28 6.7829 -0.00000 + 29 7.1438 -0.00000 + 30 7.2612 -0.00000 + 31 7.3849 -0.00000 + 32 7.4729 -0.00000 + 33 8.2389 -0.00000 + 34 8.2407 -0.00000 + 35 8.7095 -0.00000 + 36 8.7647 -0.00000 + 37 9.0482 -0.00000 + 38 9.2531 -0.00000 + 39 9.4764 -0.00000 + 40 9.5945 -0.00000 + 41 9.7581 -0.00000 + 42 10.2554 0.00000 + 43 10.3831 0.00000 + 44 10.7926 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 0.9917 2.00000 + 2 1.3282 2.00000 + 3 1.4314 2.00000 + 4 1.7755 2.00000 + 5 2.0654 2.00000 + 6 2.5131 2.00000 + 7 2.5347 2.00000 + 8 2.7884 2.00000 + 9 2.8952 2.00000 + 10 2.9311 2.00000 + 11 3.0689 2.00000 + 12 3.0974 2.00000 + 13 3.2826 2.00000 + 14 3.5204 2.00000 + 15 3.5363 2.00000 + 16 3.5568 2.00000 + 17 3.7100 2.00002 + 18 3.8198 2.00052 + 19 3.8613 2.00145 + 20 4.0247 2.03006 + 21 5.3846 -0.00000 + 22 5.7153 -0.00000 + 23 5.8064 -0.00000 + 24 5.8686 -0.00000 + 25 5.9209 -0.00000 + 26 6.4123 -0.00000 + 27 6.4332 -0.00000 + 28 6.9140 -0.00000 + 29 7.0443 -0.00000 + 30 7.2826 -0.00000 + 31 7.4800 -0.00000 + 32 7.5612 -0.00000 + 33 8.2057 -0.00000 + 34 8.3218 -0.00000 + 35 8.7264 -0.00000 + 36 8.7708 -0.00000 + 37 9.1208 -0.00000 + 38 9.1513 -0.00000 + 39 9.5002 -0.00000 + 40 9.8460 0.00000 + 41 9.9502 0.00000 + 42 10.3825 0.00000 + 43 10.6077 0.00000 + 44 10.9587 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.0912 2.00000 + 2 1.2362 2.00000 + 3 1.4311 2.00000 + 4 1.5792 2.00000 + 5 2.1736 2.00000 + 6 2.3256 2.00000 + 7 2.6258 2.00000 + 8 2.7641 2.00000 + 9 2.9835 2.00000 + 10 3.1065 2.00000 + 11 3.1950 2.00000 + 12 3.3028 2.00000 + 13 3.3660 2.00000 + 14 3.4192 2.00000 + 15 3.6021 2.00000 + 16 3.6183 2.00000 + 17 3.7055 2.00002 + 18 3.7986 2.00030 + 19 3.8420 2.00091 + 20 3.8440 2.00096 + 21 5.3059 -0.00000 + 22 5.5706 -0.00000 + 23 5.5810 -0.00000 + 24 5.6609 -0.00000 + 25 5.9527 -0.00000 + 26 6.2678 -0.00000 + 27 6.4961 -0.00000 + 28 6.6781 -0.00000 + 29 7.1737 -0.00000 + 30 7.3238 -0.00000 + 31 7.6798 -0.00000 + 32 7.7791 -0.00000 + 33 8.0397 -0.00000 + 34 8.0492 -0.00000 + 35 8.8232 -0.00000 + 36 8.8915 -0.00000 + 37 9.0368 -0.00000 + 38 9.1856 -0.00000 + 39 9.4664 -0.00000 + 40 9.9045 0.00000 + 41 10.1943 0.00000 + 42 10.3768 0.00000 + 43 10.9555 0.00000 + 44 11.0664 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 0.9859 2.00000 + 2 1.0960 2.00000 + 3 2.0362 2.00000 + 4 2.0930 2.00000 + 5 2.1400 2.00000 + 6 2.1959 2.00000 + 7 2.3297 2.00000 + 8 2.5359 2.00000 + 9 2.6592 2.00000 + 10 2.6664 2.00000 + 11 3.2429 2.00000 + 12 3.3483 2.00000 + 13 3.3859 2.00000 + 14 3.4214 2.00000 + 15 3.5546 2.00000 + 16 3.5587 2.00000 + 17 3.5954 2.00000 + 18 3.6801 2.00001 + 19 3.7226 2.00003 + 20 3.7499 2.00007 + 21 5.8183 -0.00000 + 22 5.9529 -0.00000 + 23 5.9875 -0.00000 + 24 6.1129 -0.00000 + 25 6.2499 -0.00000 + 26 6.2604 -0.00000 + 27 6.8561 -0.00000 + 28 7.0100 -0.00000 + 29 7.1336 -0.00000 + 30 7.2811 -0.00000 + 31 7.6098 -0.00000 + 32 7.9243 -0.00000 + 33 7.9732 -0.00000 + 34 8.2462 -0.00000 + 35 8.2894 -0.00000 + 36 8.8656 -0.00000 + 37 8.9772 -0.00000 + 38 9.0457 -0.00000 + 39 9.2626 -0.00000 + 40 9.4203 -0.00000 + 41 9.7828 -0.00000 + 42 9.9229 0.00000 + 43 10.5901 0.00000 + 44 10.7850 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.0052 2.00000 + 2 1.1155 2.00000 + 3 1.7552 2.00000 + 4 1.8679 2.00000 + 5 2.3256 2.00000 + 6 2.4283 2.00000 + 7 2.5286 2.00000 + 8 2.5781 2.00000 + 9 2.6740 2.00000 + 10 2.7015 2.00000 + 11 3.0640 2.00000 + 12 3.2212 2.00000 + 13 3.3058 2.00000 + 14 3.4290 2.00000 + 15 3.5316 2.00000 + 16 3.6146 2.00000 + 17 3.6653 2.00001 + 18 3.7363 2.00005 + 19 3.7620 2.00011 + 20 3.8771 2.00209 + 21 5.7649 -0.00000 + 22 5.8561 -0.00000 + 23 5.8986 -0.00000 + 24 6.0427 -0.00000 + 25 6.0488 -0.00000 + 26 6.2535 -0.00000 + 27 6.8177 -0.00000 + 28 7.0542 -0.00000 + 29 7.0734 -0.00000 + 30 7.3009 -0.00000 + 31 7.5823 -0.00000 + 32 7.9244 -0.00000 + 33 8.0064 -0.00000 + 34 8.3942 -0.00000 + 35 8.4365 -0.00000 + 36 8.8397 -0.00000 + 37 8.9469 -0.00000 + 38 9.0494 -0.00000 + 39 9.2637 -0.00000 + 40 9.4508 -0.00000 + 41 9.8602 0.00000 + 42 10.0326 0.00000 + 43 10.5968 0.00000 + 44 10.8097 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.0638 2.00000 + 2 1.1750 2.00000 + 3 1.5054 2.00000 + 4 1.6193 2.00000 + 5 2.3960 2.00000 + 6 2.6125 2.00000 + 7 2.7244 2.00000 + 8 2.7423 2.00000 + 9 2.8481 2.00000 + 10 2.8893 2.00000 + 11 2.9569 2.00000 + 12 3.0289 2.00000 + 13 3.1267 2.00000 + 14 3.2304 2.00000 + 15 3.6630 2.00000 + 16 3.6647 2.00000 + 17 3.7487 2.00007 + 18 3.7948 2.00027 + 19 3.8595 2.00139 + 20 3.9541 2.00999 + 21 5.5181 -0.00000 + 22 5.6817 -0.00000 + 23 5.6883 -0.00000 + 24 5.7616 -0.00000 + 25 6.0382 -0.00000 + 26 6.2228 -0.00000 + 27 6.6483 -0.00000 + 28 6.8257 -0.00000 + 29 7.2642 -0.00000 + 30 7.4595 -0.00000 + 31 7.6428 -0.00000 + 32 7.9579 -0.00000 + 33 7.9785 -0.00000 + 34 8.3984 -0.00000 + 35 8.5511 -0.00000 + 36 8.8138 -0.00000 + 37 8.8867 -0.00000 + 38 9.0745 -0.00000 + 39 9.3640 -0.00000 + 40 9.6253 -0.00000 + 41 10.0474 0.00000 + 42 10.2766 0.00000 + 43 10.5822 0.00000 + 44 10.8514 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.1641 2.00000 + 2 1.2764 2.00000 + 3 1.3098 2.00000 + 4 1.4232 2.00000 + 5 2.5070 2.00000 + 6 2.6562 2.00000 + 7 2.7159 2.00000 + 8 2.8230 2.00000 + 9 2.8605 2.00000 + 10 2.8683 2.00000 + 11 2.9668 2.00000 + 12 3.0482 2.00000 + 13 3.3157 2.00000 + 14 3.3622 2.00000 + 15 3.6463 2.00000 + 16 3.6707 2.00001 + 17 3.7494 2.00007 + 18 3.7963 2.00028 + 19 3.8600 2.00141 + 20 3.8721 2.00187 + 21 5.3820 -0.00000 + 22 5.5054 -0.00000 + 23 5.5436 -0.00000 + 24 5.5823 -0.00000 + 25 6.1487 -0.00000 + 26 6.3240 -0.00000 + 27 6.4213 -0.00000 + 28 6.5487 -0.00000 + 29 7.4197 -0.00000 + 30 7.6407 -0.00000 + 31 7.6640 -0.00000 + 32 7.9203 -0.00000 + 33 8.0616 -0.00000 + 34 8.3354 -0.00000 + 35 8.4887 -0.00000 + 36 8.7170 -0.00000 + 37 8.9246 -0.00000 + 38 9.1240 -0.00000 + 39 9.3937 -0.00000 + 40 9.6749 -0.00000 + 41 10.2992 0.00000 + 42 10.4914 0.00000 + 43 10.5816 0.00000 + 44 10.7891 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 0.9602 2.00000 + 2 1.5397 2.00000 + 3 1.7891 2.00000 + 4 2.0189 2.00000 + 5 2.0399 2.00000 + 6 2.0649 2.00000 + 7 2.5521 2.00000 + 8 2.6553 2.00000 + 9 2.6977 2.00000 + 10 2.7716 2.00000 + 11 2.8818 2.00000 + 12 2.9687 2.00000 + 13 3.0589 2.00000 + 14 3.0981 2.00000 + 15 3.3320 2.00000 + 16 3.5355 2.00000 + 17 3.6601 2.00000 + 18 3.7378 2.00005 + 19 3.8056 2.00036 + 20 4.1608 2.06568 + 21 5.9975 -0.00000 + 22 6.0808 -0.00000 + 23 6.1705 -0.00000 + 24 6.4926 -0.00000 + 25 6.7800 -0.00000 + 26 6.8935 -0.00000 + 27 6.9027 -0.00000 + 28 6.9639 -0.00000 + 29 7.1511 -0.00000 + 30 7.1619 -0.00000 + 31 7.2632 -0.00000 + 32 7.2718 -0.00000 + 33 8.0346 -0.00000 + 34 8.4642 -0.00000 + 35 8.4833 -0.00000 + 36 8.9885 -0.00000 + 37 9.1128 -0.00000 + 38 9.4363 -0.00000 + 39 9.5169 -0.00000 + 40 9.5960 -0.00000 + 41 9.7008 -0.00000 + 42 9.9070 0.00000 + 43 10.0674 0.00000 + 44 10.1926 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 0.9793 2.00000 + 2 1.5600 2.00000 + 3 1.7301 2.00000 + 4 1.8095 2.00000 + 5 2.0604 2.00000 + 6 2.3099 2.00000 + 7 2.4131 2.00000 + 8 2.5462 2.00000 + 9 2.7181 2.00000 + 10 2.8000 2.00000 + 11 2.9382 2.00000 + 12 2.9896 2.00000 + 13 3.1358 2.00000 + 14 3.3308 2.00000 + 15 3.3752 2.00000 + 16 3.3954 2.00000 + 17 3.6356 2.00000 + 18 3.8195 2.00052 + 19 3.8380 2.00083 + 20 4.1642 2.06396 + 21 5.8713 -0.00000 + 22 6.0226 -0.00000 + 23 6.0277 -0.00000 + 24 6.3988 -0.00000 + 25 6.5509 -0.00000 + 26 6.8113 -0.00000 + 27 6.8614 -0.00000 + 28 6.9733 -0.00000 + 29 7.0978 -0.00000 + 30 7.1493 -0.00000 + 31 7.2104 -0.00000 + 32 7.4371 -0.00000 + 33 8.1829 -0.00000 + 34 8.4232 -0.00000 + 35 8.6172 -0.00000 + 36 8.9071 -0.00000 + 37 9.0970 -0.00000 + 38 9.3277 -0.00000 + 39 9.6202 -0.00000 + 40 9.6511 -0.00000 + 41 9.8376 -0.00000 + 42 10.0779 0.00000 + 43 10.2700 0.00000 + 44 10.4207 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.0377 2.00000 + 2 1.4791 2.00000 + 3 1.6215 2.00000 + 4 1.8710 2.00000 + 5 2.0664 2.00000 + 6 2.1248 2.00000 + 7 2.3133 2.00000 + 8 2.5679 2.00000 + 9 2.7558 2.00000 + 10 2.8538 2.00000 + 11 3.0459 2.00000 + 12 3.1752 2.00000 + 13 3.2695 2.00000 + 14 3.4185 2.00000 + 15 3.4359 2.00000 + 16 3.4889 2.00000 + 17 3.6687 2.00001 + 18 3.7857 2.00021 + 19 3.9340 2.00688 + 20 4.1571 2.06724 + 21 5.5116 -0.00000 + 22 5.8670 -0.00000 + 23 5.8982 -0.00000 + 24 6.1070 -0.00000 + 25 6.3210 -0.00000 + 26 6.5875 -0.00000 + 27 6.7621 -0.00000 + 28 6.7683 -0.00000 + 29 7.0923 -0.00000 + 30 7.1591 -0.00000 + 31 7.3472 -0.00000 + 32 7.6489 -0.00000 + 33 8.1836 -0.00000 + 34 8.1923 -0.00000 + 35 8.8920 -0.00000 + 36 8.9749 -0.00000 + 37 9.1762 -0.00000 + 38 9.3518 -0.00000 + 39 9.6938 -0.00000 + 40 9.8772 0.00000 + 41 10.0849 0.00000 + 42 10.3641 0.00000 + 43 10.5611 0.00000 + 44 10.7977 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.1376 2.00000 + 2 1.2832 2.00000 + 3 1.7252 2.00000 + 4 1.8733 2.00000 + 5 1.9747 2.00000 + 6 2.1206 2.00000 + 7 2.2297 2.00000 + 8 2.3769 2.00000 + 9 2.8557 2.00000 + 10 2.9820 2.00000 + 11 3.1646 2.00000 + 12 3.2706 2.00000 + 13 3.3657 2.00000 + 14 3.5314 2.00000 + 15 3.5555 2.00000 + 16 3.5907 2.00000 + 17 3.6770 2.00001 + 18 3.7657 2.00012 + 19 3.9204 2.00527 + 20 4.0900 2.05895 + 21 5.4230 -0.00000 + 22 5.6516 -0.00000 + 23 5.7196 -0.00000 + 24 5.7872 -0.00000 + 25 6.3889 -0.00000 + 26 6.4469 -0.00000 + 27 6.5177 -0.00000 + 28 6.6578 -0.00000 + 29 7.1309 -0.00000 + 30 7.1808 -0.00000 + 31 7.5781 -0.00000 + 32 7.7900 -0.00000 + 33 7.9223 -0.00000 + 34 7.9554 -0.00000 + 35 9.1631 -0.00000 + 36 9.2078 -0.00000 + 37 9.2796 -0.00000 + 38 9.3886 -0.00000 + 39 9.7510 -0.00000 + 40 10.0745 0.00000 + 41 10.1329 0.00000 + 42 10.2053 0.00000 + 43 10.9203 0.00000 + 44 11.0757 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 0.9963 2.00000 + 2 1.3386 2.00000 + 3 2.0530 2.00000 + 4 2.0830 2.00000 + 5 2.0836 2.00000 + 6 2.1036 2.00000 + 7 2.3731 2.00000 + 8 2.4640 2.00000 + 9 2.4812 2.00000 + 10 2.9690 2.00000 + 11 3.0852 2.00000 + 12 3.1149 2.00000 + 13 3.1523 2.00000 + 14 3.1980 2.00000 + 15 3.2450 2.00000 + 16 3.4126 2.00000 + 17 3.5240 2.00000 + 18 3.7228 2.00003 + 19 3.7768 2.00016 + 20 4.0604 2.04555 + 21 5.9465 -0.00000 + 22 6.0132 -0.00000 + 23 6.1932 -0.00000 + 24 6.2349 -0.00000 + 25 6.7611 -0.00000 + 26 6.7724 -0.00000 + 27 6.8896 -0.00000 + 28 7.1988 -0.00000 + 29 7.2503 -0.00000 + 30 7.4310 -0.00000 + 31 7.4874 -0.00000 + 32 7.4906 -0.00000 + 33 8.0697 -0.00000 + 34 8.2683 -0.00000 + 35 8.4456 -0.00000 + 36 8.9278 -0.00000 + 37 9.2536 -0.00000 + 38 9.2663 -0.00000 + 39 9.4930 -0.00000 + 40 9.5300 -0.00000 + 41 9.7613 -0.00000 + 42 10.0053 0.00000 + 43 10.0749 0.00000 + 44 10.4508 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.0156 2.00000 + 2 1.3586 2.00000 + 3 1.7673 2.00000 + 4 2.0845 2.00000 + 5 2.1134 2.00000 + 6 2.1256 2.00000 + 7 2.4459 2.00000 + 8 2.5039 2.00000 + 9 2.7643 2.00000 + 10 2.7742 2.00000 + 11 2.9014 2.00000 + 12 3.1255 2.00000 + 13 3.2096 2.00000 + 14 3.2930 2.00000 + 15 3.3033 2.00000 + 16 3.4589 2.00000 + 17 3.6302 2.00000 + 18 3.7319 2.00004 + 19 3.7832 2.00020 + 20 4.0679 2.04902 + 21 5.8410 -0.00000 + 22 5.8963 -0.00000 + 23 6.0895 -0.00000 + 24 6.2331 -0.00000 + 25 6.4412 -0.00000 + 26 6.6841 -0.00000 + 27 6.8949 -0.00000 + 28 7.1459 -0.00000 + 29 7.2183 -0.00000 + 30 7.4264 -0.00000 + 31 7.5299 -0.00000 + 32 7.5325 -0.00000 + 33 8.2667 -0.00000 + 34 8.3286 -0.00000 + 35 8.5103 -0.00000 + 36 8.8943 -0.00000 + 37 9.1440 -0.00000 + 38 9.2411 -0.00000 + 39 9.5461 -0.00000 + 40 9.6372 -0.00000 + 41 9.8595 0.00000 + 42 10.1649 0.00000 + 43 10.2676 0.00000 + 44 10.5220 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.0741 2.00000 + 2 1.4191 2.00000 + 3 1.5164 2.00000 + 4 1.8659 2.00000 + 5 2.1479 2.00000 + 6 2.1879 2.00000 + 7 2.5565 2.00000 + 8 2.5611 2.00000 + 9 2.6612 2.00000 + 10 2.8634 2.00000 + 11 2.9849 2.00000 + 12 3.1414 2.00000 + 13 3.2190 2.00000 + 14 3.3418 2.00000 + 15 3.5325 2.00000 + 16 3.5544 2.00000 + 17 3.6646 2.00000 + 18 3.7221 2.00003 + 19 3.8999 2.00345 + 20 4.0755 2.05251 + 21 5.4833 -0.00000 + 22 5.7628 -0.00000 + 23 5.8925 -0.00000 + 24 5.9771 -0.00000 + 25 6.2695 -0.00000 + 26 6.4853 -0.00000 + 27 6.8551 -0.00000 + 28 6.8690 -0.00000 + 29 7.2678 -0.00000 + 30 7.3972 -0.00000 + 31 7.6022 -0.00000 + 32 7.6844 -0.00000 + 33 8.2020 -0.00000 + 34 8.3463 -0.00000 + 35 8.7260 -0.00000 + 36 8.9708 -0.00000 + 37 9.2084 -0.00000 + 38 9.3471 -0.00000 + 39 9.5740 -0.00000 + 40 9.8007 -0.00000 + 41 10.1154 0.00000 + 42 10.2884 0.00000 + 43 10.5687 0.00000 + 44 10.7577 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.1745 2.00000 + 2 1.3203 2.00000 + 3 1.5220 2.00000 + 4 1.6701 2.00000 + 5 2.2410 2.00000 + 6 2.3002 2.00000 + 7 2.3797 2.00000 + 8 2.4656 2.00000 + 9 2.6606 2.00000 + 10 2.8068 2.00000 + 11 3.2511 2.00000 + 12 3.3370 2.00000 + 13 3.4146 2.00000 + 14 3.4693 2.00000 + 15 3.4736 2.00000 + 16 3.5640 2.00000 + 17 3.6280 2.00000 + 18 3.7889 2.00023 + 19 3.9183 2.00505 + 20 4.0378 2.03545 + 21 5.3521 -0.00000 + 22 5.6254 -0.00000 + 23 5.6476 -0.00000 + 24 5.6686 -0.00000 + 25 6.3367 -0.00000 + 26 6.4272 -0.00000 + 27 6.5654 -0.00000 + 28 6.8090 -0.00000 + 29 7.2834 -0.00000 + 30 7.4154 -0.00000 + 31 7.7299 -0.00000 + 32 7.8003 -0.00000 + 33 7.9914 -0.00000 + 34 8.1797 -0.00000 + 35 9.0383 -0.00000 + 36 9.1388 -0.00000 + 37 9.2721 -0.00000 + 38 9.4581 -0.00000 + 39 9.5288 -0.00000 + 40 9.9822 0.00000 + 41 10.2367 0.00000 + 42 10.2419 0.00000 + 43 10.6787 0.00000 + 44 10.8720 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.0698 2.00000 + 2 1.1829 2.00000 + 3 2.1219 2.00000 + 4 2.1700 2.00000 + 5 2.1809 2.00000 + 6 2.2308 2.00000 + 7 2.2892 2.00000 + 8 2.3051 2.00000 + 9 2.4372 2.00000 + 10 2.7848 2.00000 + 11 3.1082 2.00000 + 12 3.2163 2.00000 + 13 3.2404 2.00000 + 14 3.3581 2.00000 + 15 3.3619 2.00000 + 16 3.4236 2.00000 + 17 3.5273 2.00000 + 18 3.6317 2.00000 + 19 3.6403 2.00000 + 20 3.8584 2.00136 + 21 5.8866 -0.00000 + 22 5.9689 -0.00000 + 23 6.1713 -0.00000 + 24 6.3829 -0.00000 + 25 6.4452 -0.00000 + 26 6.5825 -0.00000 + 27 7.0338 -0.00000 + 28 7.1701 -0.00000 + 29 7.4396 -0.00000 + 30 7.5390 -0.00000 + 31 7.8652 -0.00000 + 32 7.9267 -0.00000 + 33 8.0498 -0.00000 + 34 8.2708 -0.00000 + 35 8.3627 -0.00000 + 36 8.9581 -0.00000 + 37 9.0266 -0.00000 + 38 9.1021 -0.00000 + 39 9.3947 -0.00000 + 40 9.4995 -0.00000 + 41 9.6462 -0.00000 + 42 9.7937 -0.00000 + 43 10.5372 0.00000 + 44 10.7538 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.0892 2.00000 + 2 1.2026 2.00000 + 3 1.8423 2.00000 + 4 1.9565 2.00000 + 5 2.1931 2.00000 + 6 2.3254 2.00000 + 7 2.4367 2.00000 + 8 2.5141 2.00000 + 9 2.6360 2.00000 + 10 2.8098 2.00000 + 11 2.9063 2.00000 + 12 3.0473 2.00000 + 13 3.1556 2.00000 + 14 3.4253 2.00000 + 15 3.4347 2.00000 + 16 3.5444 2.00000 + 17 3.6073 2.00000 + 18 3.6233 2.00000 + 19 3.7435 2.00006 + 20 3.8739 2.00194 + 21 5.8345 -0.00000 + 22 5.8907 -0.00000 + 23 5.9872 -0.00000 + 24 6.2019 -0.00000 + 25 6.3551 -0.00000 + 26 6.5104 -0.00000 + 27 7.0111 -0.00000 + 28 7.1149 -0.00000 + 29 7.4353 -0.00000 + 30 7.5614 -0.00000 + 31 7.8131 -0.00000 + 32 7.9856 -0.00000 + 33 8.1052 -0.00000 + 34 8.3333 -0.00000 + 35 8.5483 -0.00000 + 36 8.9267 -0.00000 + 37 8.9894 -0.00000 + 38 9.1375 -0.00000 + 39 9.4195 -0.00000 + 40 9.5913 -0.00000 + 41 9.7469 -0.00000 + 42 9.9450 0.00000 + 43 10.5256 0.00000 + 44 10.7227 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.1483 2.00000 + 2 1.2623 2.00000 + 3 1.5921 2.00000 + 4 1.7080 2.00000 + 5 2.2533 2.00000 + 6 2.3867 2.00000 + 7 2.5043 2.00000 + 8 2.6873 2.00000 + 9 2.7967 2.00000 + 10 2.8651 2.00000 + 11 2.9462 2.00000 + 12 2.9671 2.00000 + 13 3.0321 2.00000 + 14 3.2730 2.00000 + 15 3.6243 2.00000 + 16 3.6292 2.00000 + 17 3.6983 2.00002 + 18 3.7775 2.00017 + 19 3.8523 2.00117 + 20 3.9130 2.00454 + 21 5.5597 -0.00000 + 22 5.6842 -0.00000 + 23 5.7725 -0.00000 + 24 5.7815 -0.00000 + 25 6.3452 -0.00000 + 26 6.4106 -0.00000 + 27 6.8965 -0.00000 + 28 6.8968 -0.00000 + 29 7.4853 -0.00000 + 30 7.6486 -0.00000 + 31 7.8014 -0.00000 + 32 8.0154 -0.00000 + 33 8.0974 -0.00000 + 34 8.4267 -0.00000 + 35 8.6643 -0.00000 + 36 9.0167 -0.00000 + 37 9.0246 -0.00000 + 38 9.2134 -0.00000 + 39 9.5881 -0.00000 + 40 9.8216 -0.00000 + 41 9.8935 0.00000 + 42 10.1998 0.00000 + 43 10.4786 0.00000 + 44 10.7690 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.2493 2.00000 + 2 1.3642 2.00000 + 3 1.3958 2.00000 + 4 1.5116 2.00000 + 5 2.3539 2.00000 + 6 2.4880 2.00000 + 7 2.4937 2.00000 + 8 2.6228 2.00000 + 9 2.6344 2.00000 + 10 2.7686 2.00000 + 11 2.9727 2.00000 + 12 3.1140 2.00000 + 13 3.3609 2.00000 + 14 3.4130 2.00000 + 15 3.6400 2.00000 + 16 3.6532 2.00000 + 17 3.6924 2.00001 + 18 3.8442 2.00096 + 19 3.8658 2.00162 + 20 3.9365 2.00722 + 21 5.3617 -0.00000 + 22 5.4823 -0.00000 + 23 5.5611 -0.00000 + 24 5.5777 -0.00000 + 25 6.3828 -0.00000 + 26 6.4189 -0.00000 + 27 6.6478 -0.00000 + 28 6.7581 -0.00000 + 29 7.5364 -0.00000 + 30 7.7335 -0.00000 + 31 7.7416 -0.00000 + 32 7.9450 -0.00000 + 33 8.1633 -0.00000 + 34 8.5398 -0.00000 + 35 8.6933 -0.00000 + 36 8.9353 -0.00000 + 37 9.1879 -0.00000 + 38 9.3054 -0.00000 + 39 9.6730 -0.00000 + 40 9.9382 0.00000 + 41 10.1086 0.00000 + 42 10.3506 0.00000 + 43 10.4712 0.00000 + 44 10.6839 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.0830 2.00000 + 2 1.6831 2.00000 + 3 1.7265 2.00000 + 4 1.9391 2.00000 + 5 2.1413 2.00000 + 6 2.1901 2.00000 + 7 2.3968 2.00000 + 8 2.6504 2.00000 + 9 2.6718 2.00000 + 10 2.7650 2.00000 + 11 2.7675 2.00000 + 12 2.8144 2.00000 + 13 2.9885 2.00000 + 14 3.0132 2.00000 + 15 3.3288 2.00000 + 16 3.3433 2.00000 + 17 3.5188 2.00000 + 18 3.5312 2.00000 + 19 3.5926 2.00000 + 20 4.2849 1.72201 + 21 6.0196 -0.00000 + 22 6.3603 -0.00000 + 23 6.4276 -0.00000 + 24 6.9608 -0.00000 + 25 7.0272 -0.00000 + 26 7.1172 -0.00000 + 27 7.1354 -0.00000 + 28 7.1979 -0.00000 + 29 7.3274 -0.00000 + 30 7.3978 -0.00000 + 31 7.4641 -0.00000 + 32 7.7530 -0.00000 + 33 8.0126 -0.00000 + 34 8.0827 -0.00000 + 35 8.4601 -0.00000 + 36 9.0715 -0.00000 + 37 9.2181 -0.00000 + 38 9.2379 -0.00000 + 39 9.3449 -0.00000 + 40 9.3935 -0.00000 + 41 9.5341 -0.00000 + 42 9.5815 -0.00000 + 43 9.8674 0.00000 + 44 10.5453 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.1024 2.00000 + 2 1.7020 2.00000 + 3 1.7478 2.00000 + 4 1.8571 2.00000 + 5 1.9597 2.00000 + 6 2.4041 2.00000 + 7 2.4237 2.00000 + 8 2.5075 2.00000 + 9 2.5369 2.00000 + 10 2.6992 2.00000 + 11 2.7050 2.00000 + 12 3.0338 2.00000 + 13 3.1014 2.00000 + 14 3.1231 2.00000 + 15 3.3023 2.00000 + 16 3.3426 2.00000 + 17 3.5207 2.00000 + 18 3.6474 2.00000 + 19 3.6999 2.00002 + 20 4.2859 1.71630 + 21 5.9587 -0.00000 + 22 6.0831 -0.00000 + 23 6.3004 -0.00000 + 24 6.6996 -0.00000 + 25 6.7754 -0.00000 + 26 7.0325 -0.00000 + 27 7.1473 -0.00000 + 28 7.1574 -0.00000 + 29 7.2744 -0.00000 + 30 7.4938 -0.00000 + 31 7.4950 -0.00000 + 32 7.7254 -0.00000 + 33 8.1913 -0.00000 + 34 8.3188 -0.00000 + 35 8.5277 -0.00000 + 36 8.9260 -0.00000 + 37 9.0505 -0.00000 + 38 9.2835 -0.00000 + 39 9.4089 -0.00000 + 40 9.5482 -0.00000 + 41 9.7457 -0.00000 + 42 9.7542 -0.00000 + 43 10.1263 0.00000 + 44 10.4938 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.1614 2.00000 + 2 1.6060 2.00000 + 3 1.7598 2.00000 + 4 1.8112 2.00000 + 5 2.0213 2.00000 + 6 2.1911 2.00000 + 7 2.2663 2.00000 + 8 2.4672 2.00000 + 9 2.4711 2.00000 + 10 2.7325 2.00000 + 11 2.8815 2.00000 + 12 2.9756 2.00000 + 13 3.1704 2.00000 + 14 3.3458 2.00000 + 15 3.4250 2.00000 + 16 3.5969 2.00000 + 17 3.6270 2.00000 + 18 3.7391 2.00005 + 19 3.8519 2.00116 + 20 4.2671 1.81495 + 21 5.6370 -0.00000 + 22 5.8067 -0.00000 + 23 6.0039 -0.00000 + 24 6.1908 -0.00000 + 25 6.6946 -0.00000 + 26 6.7196 -0.00000 + 27 6.7805 -0.00000 + 28 7.1153 -0.00000 + 29 7.3557 -0.00000 + 30 7.5841 -0.00000 + 31 7.6234 -0.00000 + 32 7.7634 -0.00000 + 33 8.0911 -0.00000 + 34 8.3005 -0.00000 + 35 8.9240 -0.00000 + 36 9.0354 -0.00000 + 37 9.2081 -0.00000 + 38 9.2940 -0.00000 + 39 9.4661 -0.00000 + 40 9.8202 -0.00000 + 41 10.0707 0.00000 + 42 10.1156 0.00000 + 43 10.2969 0.00000 + 44 10.6170 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.2624 2.00000 + 2 1.4091 2.00000 + 3 1.8581 2.00000 + 4 1.9161 2.00000 + 5 2.0011 2.00000 + 6 2.0684 2.00000 + 7 2.1318 2.00000 + 8 2.2792 2.00000 + 9 2.5639 2.00000 + 10 2.7008 2.00000 + 11 2.8496 2.00000 + 12 2.9848 2.00000 + 13 3.4124 2.00000 + 14 3.5799 2.00000 + 15 3.6144 2.00000 + 16 3.6483 2.00000 + 17 3.7480 2.00007 + 18 3.8128 2.00043 + 19 3.9391 2.00758 + 20 4.1673 2.06210 + 21 5.4634 -0.00000 + 22 5.6697 -0.00000 + 23 5.6909 -0.00000 + 24 5.8108 -0.00000 + 25 6.5158 -0.00000 + 26 6.5441 -0.00000 + 27 6.7418 -0.00000 + 28 7.0019 -0.00000 + 29 7.4086 -0.00000 + 30 7.5285 -0.00000 + 31 7.7247 -0.00000 + 32 7.8680 -0.00000 + 33 7.8878 -0.00000 + 34 8.2031 -0.00000 + 35 9.1474 -0.00000 + 36 9.2677 -0.00000 + 37 9.2979 -0.00000 + 38 9.4228 -0.00000 + 39 9.5991 -0.00000 + 40 10.0299 0.00000 + 41 10.0421 0.00000 + 42 10.2281 0.00000 + 43 10.6776 0.00000 + 44 10.9725 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.1207 2.00000 + 2 1.4756 2.00000 + 3 1.7697 2.00000 + 4 2.1536 2.00000 + 5 2.1936 2.00000 + 6 2.2299 2.00000 + 7 2.2397 2.00000 + 8 2.4987 2.00000 + 9 2.5927 2.00000 + 10 2.8103 2.00000 + 11 2.8493 2.00000 + 12 2.9854 2.00000 + 13 3.1592 2.00000 + 14 3.1847 2.00000 + 15 3.1879 2.00000 + 16 3.2381 2.00000 + 17 3.3726 2.00000 + 18 3.5923 2.00000 + 19 3.6056 2.00000 + 20 4.0736 2.05165 + 21 6.0298 -0.00000 + 22 6.2669 -0.00000 + 23 6.4093 -0.00000 + 24 6.6906 -0.00000 + 25 6.8852 -0.00000 + 26 6.9972 -0.00000 + 27 7.2708 -0.00000 + 28 7.4179 -0.00000 + 29 7.4444 -0.00000 + 30 7.4761 -0.00000 + 31 7.5023 -0.00000 + 32 7.9862 -0.00000 + 33 8.0683 -0.00000 + 34 8.0824 -0.00000 + 35 8.6629 -0.00000 + 36 8.9240 -0.00000 + 37 9.1615 -0.00000 + 38 9.2845 -0.00000 + 39 9.3527 -0.00000 + 40 9.4749 -0.00000 + 41 9.7587 -0.00000 + 42 9.9094 0.00000 + 43 9.9129 0.00000 + 44 10.5880 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.1402 2.00000 + 2 1.4956 2.00000 + 3 1.7898 2.00000 + 4 1.8956 2.00000 + 5 2.1865 2.00000 + 6 2.2393 2.00000 + 7 2.2677 2.00000 + 8 2.5425 2.00000 + 9 2.5679 2.00000 + 10 2.8847 2.00000 + 11 2.9113 2.00000 + 12 2.9602 2.00000 + 13 3.0224 2.00000 + 14 3.1691 2.00000 + 15 3.3061 2.00000 + 16 3.4544 2.00000 + 17 3.4790 2.00000 + 18 3.5475 2.00000 + 19 3.6522 2.00000 + 20 4.0813 2.05517 + 21 5.9541 -0.00000 + 22 6.0106 -0.00000 + 23 6.3109 -0.00000 + 24 6.5187 -0.00000 + 25 6.6631 -0.00000 + 26 6.9468 -0.00000 + 27 7.1720 -0.00000 + 28 7.2522 -0.00000 + 29 7.4306 -0.00000 + 30 7.5808 -0.00000 + 31 7.6404 -0.00000 + 32 8.0490 -0.00000 + 33 8.1943 -0.00000 + 34 8.2778 -0.00000 + 35 8.5877 -0.00000 + 36 8.9455 -0.00000 + 37 9.0240 -0.00000 + 38 9.4038 -0.00000 + 39 9.4287 -0.00000 + 40 9.5139 -0.00000 + 41 9.9003 0.00000 + 42 10.0548 0.00000 + 43 10.0748 0.00000 + 44 10.5601 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.1994 2.00000 + 2 1.5562 2.00000 + 3 1.6447 2.00000 + 4 1.8505 2.00000 + 5 2.0024 2.00000 + 6 2.2478 2.00000 + 7 2.2809 2.00000 + 8 2.3432 2.00000 + 9 2.6852 2.00000 + 10 2.7493 2.00000 + 11 2.9400 2.00000 + 12 3.1070 2.00000 + 13 3.2429 2.00000 + 14 3.3360 2.00000 + 15 3.4287 2.00000 + 16 3.4691 2.00000 + 17 3.6128 2.00000 + 18 3.6852 2.00001 + 19 3.7780 2.00017 + 20 4.0904 2.05910 + 21 5.5800 -0.00000 + 22 5.7555 -0.00000 + 23 5.9835 -0.00000 + 24 5.9923 -0.00000 + 25 6.6801 -0.00000 + 26 6.7618 -0.00000 + 27 6.8970 -0.00000 + 28 7.3481 -0.00000 + 29 7.3997 -0.00000 + 30 7.5870 -0.00000 + 31 7.7115 -0.00000 + 32 7.9898 -0.00000 + 33 8.1410 -0.00000 + 34 8.4788 -0.00000 + 35 8.8128 -0.00000 + 36 9.0463 -0.00000 + 37 9.1628 -0.00000 + 38 9.4797 -0.00000 + 39 9.5095 -0.00000 + 40 9.6597 -0.00000 + 41 10.0503 0.00000 + 42 10.2261 0.00000 + 43 10.3771 0.00000 + 44 10.6502 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.3007 2.00000 + 2 1.4478 2.00000 + 3 1.6588 2.00000 + 4 1.8061 2.00000 + 5 1.9551 2.00000 + 6 2.1016 2.00000 + 7 2.3499 2.00000 + 8 2.4301 2.00000 + 9 2.4990 2.00000 + 10 2.5722 2.00000 + 11 3.1135 2.00000 + 12 3.2222 2.00000 + 13 3.4138 2.00000 + 14 3.5010 2.00000 + 15 3.5327 2.00000 + 16 3.5784 2.00000 + 17 3.6290 2.00000 + 18 3.7873 2.00022 + 19 3.9042 2.00378 + 20 4.0530 2.04218 + 21 5.3757 -0.00000 + 22 5.5665 -0.00000 + 23 5.6203 -0.00000 + 24 5.6266 -0.00000 + 25 6.6432 -0.00000 + 26 6.7107 -0.00000 + 27 6.7380 -0.00000 + 28 7.3708 -0.00000 + 29 7.4460 -0.00000 + 30 7.5322 -0.00000 + 31 7.7866 -0.00000 + 32 7.9244 -0.00000 + 33 7.9260 -0.00000 + 34 8.4952 -0.00000 + 35 9.1108 -0.00000 + 36 9.2310 -0.00000 + 37 9.3680 -0.00000 + 38 9.4894 -0.00000 + 39 9.5250 -0.00000 + 40 9.8193 -0.00000 + 41 10.1146 0.00000 + 42 10.2458 0.00000 + 43 10.5006 0.00000 + 44 10.6733 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.1972 2.00000 + 2 1.3145 2.00000 + 3 1.8566 2.00000 + 4 1.9882 2.00000 + 5 2.2517 2.00000 + 6 2.3092 2.00000 + 7 2.3586 2.00000 + 8 2.4229 2.00000 + 9 2.5913 2.00000 + 10 2.8959 2.00000 + 11 2.9205 2.00000 + 12 2.9469 2.00000 + 13 3.0173 2.00000 + 14 3.1104 2.00000 + 15 3.3533 2.00000 + 16 3.3908 2.00000 + 17 3.4422 2.00000 + 18 3.5599 2.00000 + 19 3.5774 2.00000 + 20 3.7408 2.00006 + 21 6.1139 -0.00000 + 22 6.2210 -0.00000 + 23 6.4645 -0.00000 + 24 6.5162 -0.00000 + 25 6.6348 -0.00000 + 26 6.6623 -0.00000 + 27 7.3706 -0.00000 + 28 7.4269 -0.00000 + 29 7.6692 -0.00000 + 30 7.6901 -0.00000 + 31 7.7719 -0.00000 + 32 7.8749 -0.00000 + 33 8.3766 -0.00000 + 34 8.3879 -0.00000 + 35 8.5743 -0.00000 + 36 8.9933 -0.00000 + 37 9.0378 -0.00000 + 38 9.1426 -0.00000 + 39 9.4020 -0.00000 + 40 9.5345 -0.00000 + 41 9.6293 -0.00000 + 42 9.9177 0.00000 + 43 10.4132 0.00000 + 44 10.6221 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.2168 2.00000 + 2 1.3344 2.00000 + 3 1.8768 2.00000 + 4 1.9724 2.00000 + 5 2.0096 2.00000 + 6 2.0902 2.00000 + 7 2.5705 2.00000 + 8 2.6333 2.00000 + 9 2.6558 2.00000 + 10 2.7540 2.00000 + 11 2.7637 2.00000 + 12 2.9894 2.00000 + 13 3.1835 2.00000 + 14 3.2915 2.00000 + 15 3.3074 2.00000 + 16 3.3987 2.00000 + 17 3.5136 2.00000 + 18 3.5731 2.00000 + 19 3.6041 2.00000 + 20 3.7561 2.00009 + 21 6.0102 -0.00000 + 22 6.0408 -0.00000 + 23 6.1930 -0.00000 + 24 6.2739 -0.00000 + 25 6.6636 -0.00000 + 26 6.7684 -0.00000 + 27 7.2464 -0.00000 + 28 7.2561 -0.00000 + 29 7.6529 -0.00000 + 30 7.7396 -0.00000 + 31 7.8547 -0.00000 + 32 8.0411 -0.00000 + 33 8.3389 -0.00000 + 34 8.5034 -0.00000 + 35 8.5907 -0.00000 + 36 9.0290 -0.00000 + 37 9.1083 -0.00000 + 38 9.1404 -0.00000 + 39 9.4630 -0.00000 + 40 9.6496 -0.00000 + 41 9.7199 -0.00000 + 42 9.9799 0.00000 + 43 10.4089 0.00000 + 44 10.5650 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.2764 2.00000 + 2 1.3945 2.00000 + 3 1.7229 2.00000 + 4 1.8413 2.00000 + 5 1.9390 2.00000 + 6 2.0706 2.00000 + 7 2.3818 2.00000 + 8 2.5150 2.00000 + 9 2.6719 2.00000 + 10 2.9843 2.00000 + 11 3.0459 2.00000 + 12 3.0848 2.00000 + 13 3.1417 2.00000 + 14 3.3228 2.00000 + 15 3.4660 2.00000 + 16 3.5324 2.00000 + 17 3.5553 2.00000 + 18 3.6931 2.00001 + 19 3.6977 2.00001 + 20 3.8013 2.00032 + 21 5.6099 -0.00000 + 22 5.7244 -0.00000 + 23 5.8113 -0.00000 + 24 5.8724 -0.00000 + 25 6.7195 -0.00000 + 26 6.7497 -0.00000 + 27 7.0571 -0.00000 + 28 7.2096 -0.00000 + 29 7.6482 -0.00000 + 30 7.7516 -0.00000 + 31 7.8446 -0.00000 + 32 8.0972 -0.00000 + 33 8.3257 -0.00000 + 34 8.5688 -0.00000 + 35 8.7725 -0.00000 + 36 9.1212 -0.00000 + 37 9.2060 -0.00000 + 38 9.2851 -0.00000 + 39 9.5763 -0.00000 + 40 9.7910 -0.00000 + 41 9.8818 0.00000 + 42 10.1631 0.00000 + 43 10.3807 0.00000 + 44 10.6715 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.3783 2.00000 + 2 1.4970 2.00000 + 3 1.5259 2.00000 + 4 1.6450 2.00000 + 5 2.0420 2.00000 + 6 2.1740 2.00000 + 7 2.1905 2.00000 + 8 2.3239 2.00000 + 9 2.7671 2.00000 + 10 2.8984 2.00000 + 11 3.1110 2.00000 + 12 3.2169 2.00000 + 13 3.3740 2.00000 + 14 3.4660 2.00000 + 15 3.4926 2.00000 + 16 3.6015 2.00000 + 17 3.6194 2.00000 + 18 3.7838 2.00020 + 19 3.7981 2.00029 + 20 3.8640 2.00155 + 21 5.3482 -0.00000 + 22 5.4284 -0.00000 + 23 5.5102 -0.00000 + 24 5.5445 -0.00000 + 25 6.7171 -0.00000 + 26 6.7453 -0.00000 + 27 6.9598 -0.00000 + 28 7.2184 -0.00000 + 29 7.6825 -0.00000 + 30 7.7680 -0.00000 + 31 7.8020 -0.00000 + 32 7.9338 -0.00000 + 33 8.3247 -0.00000 + 34 8.7853 -0.00000 + 35 8.8344 -0.00000 + 36 9.0601 -0.00000 + 37 9.3581 -0.00000 + 38 9.4219 -0.00000 + 39 9.6259 -0.00000 + 40 9.7877 -0.00000 + 41 10.0408 0.00000 + 42 10.3340 0.00000 + 43 10.4381 0.00000 + 44 10.6934 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.2500 2.00000 + 2 1.4637 2.00000 + 3 1.8736 2.00000 + 4 2.1062 2.00000 + 5 2.1344 2.00000 + 6 2.2984 2.00000 + 7 2.3498 2.00000 + 8 2.4202 2.00000 + 9 2.5324 2.00000 + 10 2.5520 2.00000 + 11 2.8750 2.00000 + 12 2.9462 2.00000 + 13 3.0871 2.00000 + 14 3.1093 2.00000 + 15 3.1371 2.00000 + 16 3.1522 2.00000 + 17 3.2998 2.00000 + 18 3.3235 2.00000 + 19 3.8339 2.00075 + 20 4.1086 2.06593 + 21 6.2765 -0.00000 + 22 6.4920 -0.00000 + 23 6.7251 -0.00000 + 24 7.0169 -0.00000 + 25 7.0867 -0.00000 + 26 7.1106 -0.00000 + 27 7.1410 -0.00000 + 28 7.2838 -0.00000 + 29 7.6316 -0.00000 + 30 7.6585 -0.00000 + 31 7.6762 -0.00000 + 32 7.9427 -0.00000 + 33 8.0863 -0.00000 + 34 8.3121 -0.00000 + 35 8.5905 -0.00000 + 36 8.9419 -0.00000 + 37 9.0271 -0.00000 + 38 9.2303 -0.00000 + 39 9.3346 -0.00000 + 40 9.3473 -0.00000 + 41 9.3698 -0.00000 + 42 9.5054 -0.00000 + 43 9.5228 -0.00000 + 44 9.7862 -0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.2697 2.00000 + 2 1.4835 2.00000 + 3 1.8937 2.00000 + 4 2.0223 2.00000 + 5 2.1361 2.00000 + 6 2.1486 2.00000 + 7 2.2508 2.00000 + 8 2.4007 2.00000 + 9 2.6261 2.00000 + 10 2.7015 2.00000 + 11 2.8316 2.00000 + 12 2.8563 2.00000 + 13 2.9413 2.00000 + 14 3.0916 2.00000 + 15 3.2190 2.00000 + 16 3.3904 2.00000 + 17 3.3925 2.00000 + 18 3.5238 2.00000 + 19 3.8592 2.00138 + 20 4.1196 2.06891 + 21 6.1296 -0.00000 + 22 6.1983 -0.00000 + 23 6.5201 -0.00000 + 24 6.6648 -0.00000 + 25 6.9653 -0.00000 + 26 7.0024 -0.00000 + 27 7.1660 -0.00000 + 28 7.2140 -0.00000 + 29 7.6019 -0.00000 + 30 7.6304 -0.00000 + 31 7.9265 -0.00000 + 32 8.1569 -0.00000 + 33 8.1955 -0.00000 + 34 8.4800 -0.00000 + 35 8.5707 -0.00000 + 36 8.8515 -0.00000 + 37 8.8923 -0.00000 + 38 9.1929 -0.00000 + 39 9.2493 -0.00000 + 40 9.4977 -0.00000 + 41 9.5665 -0.00000 + 42 9.6298 -0.00000 + 43 9.8060 -0.00000 + 44 9.9860 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.3294 2.00000 + 2 1.5437 2.00000 + 3 1.7760 2.00000 + 4 1.9485 2.00000 + 5 1.9963 2.00000 + 6 2.1928 2.00000 + 7 2.2215 2.00000 + 8 2.3959 2.00000 + 9 2.4596 2.00000 + 10 2.6230 2.00000 + 11 2.6457 2.00000 + 12 2.8684 2.00000 + 13 3.1309 2.00000 + 14 3.2717 2.00000 + 15 3.5048 2.00000 + 16 3.6135 2.00000 + 17 3.6446 2.00000 + 18 3.6937 2.00001 + 19 3.9280 2.00612 + 20 4.1361 2.07091 + 21 5.7377 -0.00000 + 22 5.7995 -0.00000 + 23 6.0690 -0.00000 + 24 6.1390 -0.00000 + 25 6.8484 -0.00000 + 26 6.8876 -0.00000 + 27 6.9607 -0.00000 + 28 7.0708 -0.00000 + 29 7.6261 -0.00000 + 30 7.6575 -0.00000 + 31 8.0252 -0.00000 + 32 8.0568 -0.00000 + 33 8.3258 -0.00000 + 34 8.7112 -0.00000 + 35 8.8625 -0.00000 + 36 8.8635 -0.00000 + 37 9.0053 -0.00000 + 38 9.2237 -0.00000 + 39 9.2294 -0.00000 + 40 9.5689 -0.00000 + 41 9.8861 0.00000 + 42 9.9295 0.00000 + 43 10.2142 0.00000 + 44 10.4144 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.4314 2.00000 + 2 1.5790 2.00000 + 3 1.6459 2.00000 + 4 1.7929 2.00000 + 5 2.0595 2.00000 + 6 2.2054 2.00000 + 7 2.2925 2.00000 + 8 2.3223 2.00000 + 9 2.4349 2.00000 + 10 2.4652 2.00000 + 11 2.5641 2.00000 + 12 2.7025 2.00000 + 13 3.5003 2.00000 + 14 3.5666 2.00000 + 15 3.6560 2.00000 + 16 3.6799 2.00001 + 17 3.8235 2.00057 + 18 3.8906 2.00282 + 19 3.9376 2.00737 + 20 4.0870 2.05766 + 21 5.5003 -0.00000 + 22 5.5808 -0.00000 + 23 5.6705 -0.00000 + 24 5.7213 -0.00000 + 25 6.7438 -0.00000 + 26 6.7838 -0.00000 + 27 6.8469 -0.00000 + 28 6.9649 -0.00000 + 29 7.6870 -0.00000 + 30 7.7286 -0.00000 + 31 7.8448 -0.00000 + 32 7.8607 -0.00000 + 33 8.4834 -0.00000 + 34 8.7515 -0.00000 + 35 9.0315 -0.00000 + 36 9.0512 -0.00000 + 37 9.1931 -0.00000 + 38 9.2050 -0.00000 + 39 9.3179 -0.00000 + 40 9.5062 -0.00000 + 41 10.1860 0.00000 + 42 10.4047 0.00000 + 43 10.4613 0.00000 + 44 10.7744 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.2895 2.00000 + 2 1.5052 2.00000 + 3 1.6593 2.00000 + 4 1.8895 2.00000 + 5 2.3491 2.00000 + 6 2.3908 2.00000 + 7 2.4244 2.00000 + 8 2.5639 2.00000 + 9 2.6132 2.00000 + 10 2.7157 2.00000 + 11 2.7199 2.00000 + 12 2.7637 2.00000 + 13 2.9195 2.00000 + 14 2.9636 2.00000 + 15 3.2950 2.00000 + 16 3.3421 2.00000 + 17 3.4370 2.00000 + 18 3.4634 2.00000 + 19 3.5949 2.00000 + 20 3.8608 2.00144 + 21 6.3126 -0.00000 + 22 6.4637 -0.00000 + 23 6.5136 -0.00000 + 24 6.7355 -0.00000 + 25 7.1599 -0.00000 + 26 7.1817 -0.00000 + 27 7.3682 -0.00000 + 28 7.4355 -0.00000 + 29 7.4967 -0.00000 + 30 7.4977 -0.00000 + 31 7.6674 -0.00000 + 32 7.8763 -0.00000 + 33 8.2312 -0.00000 + 34 8.5736 -0.00000 + 35 8.7133 -0.00000 + 36 8.9299 -0.00000 + 37 9.0907 -0.00000 + 38 9.1135 -0.00000 + 39 9.3866 -0.00000 + 40 9.5682 -0.00000 + 41 9.6740 -0.00000 + 42 9.6965 -0.00000 + 43 9.7090 -0.00000 + 44 10.0350 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.3093 2.00000 + 2 1.5250 2.00000 + 3 1.6796 2.00000 + 4 1.9093 2.00000 + 5 2.0684 2.00000 + 6 2.2734 2.00000 + 7 2.4298 2.00000 + 8 2.4794 2.00000 + 9 2.6397 2.00000 + 10 2.6783 2.00000 + 11 2.8070 2.00000 + 12 2.9250 2.00000 + 13 3.0530 2.00000 + 14 3.1412 2.00000 + 15 3.2214 2.00000 + 16 3.3173 2.00000 + 17 3.5099 2.00000 + 18 3.5708 2.00000 + 19 3.6303 2.00000 + 20 3.8768 2.00208 + 21 6.1288 -0.00000 + 22 6.1352 -0.00000 + 23 6.4324 -0.00000 + 24 6.5018 -0.00000 + 25 6.9769 -0.00000 + 26 6.9867 -0.00000 + 27 7.3488 -0.00000 + 28 7.3825 -0.00000 + 29 7.6160 -0.00000 + 30 7.7247 -0.00000 + 31 7.8132 -0.00000 + 32 7.9657 -0.00000 + 33 8.2833 -0.00000 + 34 8.5406 -0.00000 + 35 8.7141 -0.00000 + 36 8.9383 -0.00000 + 37 9.0169 -0.00000 + 38 9.1683 -0.00000 + 39 9.4957 -0.00000 + 40 9.5928 -0.00000 + 41 9.6204 -0.00000 + 42 9.8291 -0.00000 + 43 10.0209 0.00000 + 44 10.1685 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.3692 2.00000 + 2 1.5853 2.00000 + 3 1.7409 2.00000 + 4 1.8163 2.00000 + 5 1.9729 2.00000 + 6 2.0318 2.00000 + 7 2.1902 2.00000 + 8 2.4162 2.00000 + 9 2.5298 2.00000 + 10 2.7660 2.00000 + 11 2.9133 2.00000 + 12 3.0852 2.00000 + 13 3.2020 2.00000 + 14 3.2986 2.00000 + 15 3.4070 2.00000 + 16 3.4913 2.00000 + 17 3.6363 2.00000 + 18 3.6651 2.00000 + 19 3.7443 2.00006 + 20 3.9186 2.00508 + 21 5.6786 -0.00000 + 22 5.7542 -0.00000 + 23 5.9767 -0.00000 + 24 5.9827 -0.00000 + 25 6.9647 -0.00000 + 26 6.9804 -0.00000 + 27 7.1347 -0.00000 + 28 7.2933 -0.00000 + 29 7.6667 -0.00000 + 30 7.7279 -0.00000 + 31 7.9897 -0.00000 + 32 8.0836 -0.00000 + 33 8.2770 -0.00000 + 34 8.6317 -0.00000 + 35 8.8202 -0.00000 + 36 8.9990 -0.00000 + 37 9.0798 -0.00000 + 38 9.2472 -0.00000 + 39 9.5333 -0.00000 + 40 9.7249 -0.00000 + 41 9.7546 -0.00000 + 42 9.9557 0.00000 + 43 10.3557 0.00000 + 44 10.5662 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.4715 2.00000 + 2 1.6195 2.00000 + 3 1.6875 2.00000 + 4 1.8288 2.00000 + 5 1.8522 2.00000 + 6 1.9953 2.00000 + 7 2.0753 2.00000 + 8 2.2245 2.00000 + 9 2.6242 2.00000 + 10 2.7563 2.00000 + 11 2.8586 2.00000 + 12 2.9800 2.00000 + 13 3.5015 2.00000 + 14 3.5568 2.00000 + 15 3.5940 2.00000 + 16 3.6209 2.00000 + 17 3.6980 2.00001 + 18 3.8128 2.00044 + 19 3.8192 2.00051 + 20 3.9381 2.00744 + 21 5.4037 -0.00000 + 22 5.4722 -0.00000 + 23 5.5619 -0.00000 + 24 5.5711 -0.00000 + 25 6.9555 -0.00000 + 26 6.9995 -0.00000 + 27 7.0091 -0.00000 + 28 7.2476 -0.00000 + 29 7.6809 -0.00000 + 30 7.7516 -0.00000 + 31 7.9181 -0.00000 + 32 7.9306 -0.00000 + 33 8.3054 -0.00000 + 34 8.8530 -0.00000 + 35 8.9251 -0.00000 + 36 9.1622 -0.00000 + 37 9.2038 -0.00000 + 38 9.3488 -0.00000 + 39 9.3894 -0.00000 + 40 9.6197 -0.00000 + 41 9.9675 0.00000 + 42 10.1800 0.00000 + 43 10.4838 0.00000 + 44 10.7306 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.3695 2.00000 + 2 1.4920 2.00000 + 3 1.5889 2.00000 + 4 1.7165 2.00000 + 5 2.4246 2.00000 + 6 2.4720 2.00000 + 7 2.5279 2.00000 + 8 2.5830 2.00000 + 9 2.6368 2.00000 + 10 2.6869 2.00000 + 11 2.7645 2.00000 + 12 2.7963 2.00000 + 13 2.8642 2.00000 + 14 3.0956 2.00000 + 15 3.2293 2.00000 + 16 3.4268 2.00000 + 17 3.4780 2.00000 + 18 3.5121 2.00000 + 19 3.5157 2.00000 + 20 3.5174 2.00000 + 21 6.3550 -0.00000 + 22 6.3896 -0.00000 + 23 6.4503 -0.00000 + 24 6.5297 -0.00000 + 25 6.9807 -0.00000 + 26 7.0112 -0.00000 + 27 7.3394 -0.00000 + 28 7.4050 -0.00000 + 29 7.7997 -0.00000 + 30 7.8269 -0.00000 + 31 7.8472 -0.00000 + 32 7.8870 -0.00000 + 33 8.3734 -0.00000 + 34 8.5657 -0.00000 + 35 8.6814 -0.00000 + 36 8.8049 -0.00000 + 37 9.1212 -0.00000 + 38 9.2566 -0.00000 + 39 9.2881 -0.00000 + 40 9.4003 -0.00000 + 41 10.0741 0.00000 + 42 10.1954 0.00000 + 43 10.2477 0.00000 + 44 10.4089 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.3894 2.00000 + 2 1.5120 2.00000 + 3 1.6090 2.00000 + 4 1.7367 2.00000 + 5 2.1480 2.00000 + 6 2.2674 2.00000 + 7 2.3653 2.00000 + 8 2.4889 2.00000 + 9 2.7927 2.00000 + 10 2.8028 2.00000 + 11 2.9129 2.00000 + 12 3.0443 2.00000 + 13 3.0463 2.00000 + 14 3.1417 2.00000 + 15 3.2800 2.00000 + 16 3.3455 2.00000 + 17 3.4778 2.00000 + 18 3.5216 2.00000 + 19 3.5249 2.00000 + 20 3.5489 2.00000 + 21 6.1431 -0.00000 + 22 6.1530 -0.00000 + 23 6.2742 -0.00000 + 24 6.2961 -0.00000 + 25 7.0049 -0.00000 + 26 7.0441 -0.00000 + 27 7.3132 -0.00000 + 28 7.3588 -0.00000 + 29 7.8226 -0.00000 + 30 7.8390 -0.00000 + 31 7.8934 -0.00000 + 32 7.9463 -0.00000 + 33 8.4915 -0.00000 + 34 8.5352 -0.00000 + 35 8.7012 -0.00000 + 36 8.9280 -0.00000 + 37 9.1533 -0.00000 + 38 9.2161 -0.00000 + 39 9.3810 -0.00000 + 40 9.4652 -0.00000 + 41 10.0739 0.00000 + 42 10.1848 0.00000 + 43 10.3441 0.00000 + 44 10.5138 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.4498 2.00000 + 2 1.5726 2.00000 + 3 1.6701 2.00000 + 4 1.7974 2.00000 + 5 1.8997 2.00000 + 6 2.0214 2.00000 + 7 2.1205 2.00000 + 8 2.2474 2.00000 + 9 2.8696 2.00000 + 10 3.0549 2.00000 + 11 3.1597 2.00000 + 12 3.1724 2.00000 + 13 3.2680 2.00000 + 14 3.3058 2.00000 + 15 3.3956 2.00000 + 16 3.4123 2.00000 + 17 3.4729 2.00000 + 18 3.5667 2.00000 + 19 3.5737 2.00000 + 20 3.6166 2.00000 + 21 5.6873 -0.00000 + 22 5.7498 -0.00000 + 23 5.8110 -0.00000 + 24 5.8533 -0.00000 + 25 7.0772 -0.00000 + 26 7.0898 -0.00000 + 27 7.2885 -0.00000 + 28 7.3638 -0.00000 + 29 7.7724 -0.00000 + 30 7.8045 -0.00000 + 31 7.8797 -0.00000 + 32 8.0471 -0.00000 + 33 8.5854 -0.00000 + 34 8.6104 -0.00000 + 35 8.8172 -0.00000 + 36 9.0364 -0.00000 + 37 9.2067 -0.00000 + 38 9.2265 -0.00000 + 39 9.4556 -0.00000 + 40 9.5138 -0.00000 + 41 10.1553 0.00000 + 42 10.2835 0.00000 + 43 10.4689 0.00000 + 44 10.6674 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.5525 2.00000 + 2 1.6754 2.00000 + 3 1.7009 2.00000 + 4 1.7718 2.00000 + 5 1.8270 2.00000 + 6 1.9024 2.00000 + 7 1.9241 2.00000 + 8 2.0522 2.00000 + 9 2.9557 2.00000 + 10 3.0654 2.00000 + 11 3.1587 2.00000 + 12 3.2151 2.00000 + 13 3.3645 2.00000 + 14 3.4051 2.00000 + 15 3.4571 2.00000 + 16 3.5318 2.00000 + 17 3.6309 2.00000 + 18 3.7110 2.00002 + 19 3.7396 2.00005 + 20 3.7465 2.00007 + 21 5.3614 -0.00000 + 22 5.4102 -0.00000 + 23 5.4290 -0.00000 + 24 5.4654 -0.00000 + 25 7.1067 -0.00000 + 26 7.1357 -0.00000 + 27 7.2835 -0.00000 + 28 7.4181 -0.00000 + 29 7.7497 -0.00000 + 30 7.8022 -0.00000 + 31 7.8318 -0.00000 + 32 7.9772 -0.00000 + 33 8.5293 -0.00000 + 34 8.7973 -0.00000 + 35 8.9678 -0.00000 + 36 9.0124 -0.00000 + 37 9.2563 -0.00000 + 38 9.3043 -0.00000 + 39 9.3944 -0.00000 + 40 9.4596 -0.00000 + 41 10.2453 0.00000 + 42 10.4104 0.00000 + 43 10.5599 0.00000 + 44 10.7451 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.203 5.373 -0.004 0.012 0.004 + 5.373 22.975 -0.014 0.046 0.015 + -0.004 -0.014 -0.244 -0.001 0.002 + 0.012 0.046 -0.001 -0.253 -0.000 + 0.004 0.015 0.002 -0.000 -0.245 + total augmentation occupancy for first ion, spin component: 1 + 2.355 -0.037 0.036 -0.110 -0.037 + -0.037 0.001 -0.002 0.003 0.002 + 0.036 -0.002 0.218 -0.007 0.011 + -0.110 0.003 -0.007 0.136 0.002 + -0.037 0.002 0.011 0.002 0.206 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1859: real time 0.1859 + FORLOC: cpu time 0.0117: real time 0.0117 + FORNL : cpu time 13.9861: real time 13.9873 + STRESS: cpu time 4.6932: real time 4.6936 + FORCOR: cpu time 0.0316: real time 0.0316 + FORHAR: cpu time 0.0220: real time 0.0220 + MIXING: cpu time 0.0052: real time 0.0052 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.45323 14.45323 14.45323 + Ewald -142.93110 -147.87974 -129.83856 0.00000 0.00000 -0.00000 + Hartree 1.16017 0.68341 1.05379 -0.00000 -0.00000 0.00000 + E(xc) -107.78932 -108.20025 -107.03176 0.00000 0.00000 -0.00000 + Local 7.57374 2.40444 11.66856 0.00000 0.00000 -0.00000 + n-local 128.59175 129.16521 126.19139 0.01969 0.07611 -0.21285 + augment 7.30274 7.44326 6.97697 -0.00000 -0.00000 0.00000 + Kinetic 213.48053 223.17804 198.55704 0.07459 -1.14596 -0.90161 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 121.84175 121.24759 122.03066 0.00000 0.00000 0.00000 + in kB 673.13222 669.84970 674.17588 0.00000 0.00000 0.00000 + external pressure = -27.61 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 290.01 + direct lattice vectors reciprocal lattice vectors + 6.919013948 0.000000000 0.000000000 0.144529265 0.000000000 0.000000000 + 0.000000000 8.216841856 0.000000000 0.000000000 0.121701259 0.000000000 + 0.000000000 0.000000000 5.101021816 0.000000000 0.000000000 0.196039154 + + length of vectors + 6.919013948 8.216841856 5.101021816 0.144529265 0.121701259 0.196039154 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.205E-01 0.764E-01 -.239E+00 -.451E+00 0.369E+00 -.123E+01 0.448E+00 -.428E+00 0.139E+01 0.225E-06 -.479E-06 -.524E-06 + 0.205E-01 -.764E-01 -.239E+00 0.451E+00 -.369E+00 -.123E+01 -.448E+00 0.428E+00 0.139E+01 -.224E-06 0.476E-06 -.524E-06 + -.205E-01 -.764E-01 -.239E+00 -.451E+00 -.369E+00 -.123E+01 0.448E+00 0.428E+00 0.139E+01 0.224E-06 0.481E-06 -.524E-06 + 0.205E-01 0.764E-01 -.239E+00 0.451E+00 0.369E+00 -.123E+01 -.448E+00 -.428E+00 0.139E+01 -.225E-06 -.478E-06 -.524E-06 + -.205E-01 0.764E-01 -.239E+00 -.451E+00 0.369E+00 -.123E+01 0.448E+00 -.428E+00 0.139E+01 0.225E-06 -.478E-06 -.524E-06 + 0.205E-01 -.764E-01 -.239E+00 0.451E+00 -.369E+00 -.123E+01 -.448E+00 0.428E+00 0.139E+01 -.224E-06 0.481E-06 -.524E-06 + -.205E-01 -.764E-01 -.239E+00 -.451E+00 -.369E+00 -.123E+01 0.448E+00 0.428E+00 0.139E+01 0.224E-06 0.476E-06 -.524E-06 + 0.205E-01 0.764E-01 -.239E+00 0.451E+00 0.369E+00 -.123E+01 -.448E+00 -.428E+00 0.139E+01 -.225E-06 -.479E-06 -.524E-06 + -.194E-01 -.106E-01 0.130E+00 -.556E-01 -.243E+00 0.771E+00 0.695E-01 0.242E+00 -.852E+00 -.113E-05 -.426E-06 -.588E-06 + 0.194E-01 0.106E-01 0.130E+00 0.556E-01 0.243E+00 0.771E+00 -.695E-01 -.242E+00 -.852E+00 0.113E-05 0.423E-06 -.588E-06 + -.194E-01 0.106E-01 0.130E+00 -.556E-01 0.243E+00 0.771E+00 0.695E-01 -.242E+00 -.852E+00 -.113E-05 0.424E-06 -.588E-06 + 0.194E-01 -.106E-01 0.130E+00 0.556E-01 -.243E+00 0.771E+00 -.695E-01 0.242E+00 -.852E+00 0.113E-05 -.421E-06 -.588E-06 + -.194E-01 -.106E-01 0.130E+00 -.556E-01 -.243E+00 0.771E+00 0.695E-01 0.242E+00 -.852E+00 -.113E-05 -.421E-06 -.588E-06 + 0.194E-01 0.106E-01 0.130E+00 0.556E-01 0.243E+00 0.771E+00 -.695E-01 -.242E+00 -.852E+00 0.113E-05 0.424E-06 -.588E-06 + -.194E-01 0.106E-01 0.130E+00 -.556E-01 0.243E+00 0.771E+00 0.695E-01 -.242E+00 -.852E+00 -.113E-05 0.423E-06 -.588E-06 + 0.194E-01 -.106E-01 0.130E+00 0.556E-01 -.243E+00 0.771E+00 -.695E-01 0.242E+00 -.852E+00 0.113E-05 -.426E-06 -.588E-06 + -.266E+00 -.167E+00 0.460E-02 -.653E+00 -.353E-01 0.823E-01 0.883E+00 0.196E+00 -.819E-01 0.101E-06 0.280E-06 0.114E-05 + 0.266E+00 0.167E+00 0.460E-02 0.653E+00 0.353E-01 0.823E-01 -.883E+00 -.196E+00 -.819E-01 -.999E-07 -.283E-06 0.114E-05 + -.266E+00 0.167E+00 0.460E-02 -.653E+00 0.353E-01 0.823E-01 0.883E+00 -.196E+00 -.819E-01 0.997E-07 -.278E-06 0.114E-05 + 0.266E+00 -.167E+00 0.460E-02 0.653E+00 -.353E-01 0.823E-01 -.883E+00 0.196E+00 -.819E-01 -.100E-06 0.281E-06 0.114E-05 + -.266E+00 -.167E+00 0.460E-02 -.653E+00 -.353E-01 0.823E-01 0.883E+00 0.196E+00 -.819E-01 0.101E-06 0.281E-06 0.114E-05 + 0.266E+00 0.167E+00 0.460E-02 0.653E+00 0.353E-01 0.823E-01 -.883E+00 -.196E+00 -.819E-01 -.999E-07 -.278E-06 0.114E-05 + -.266E+00 0.167E+00 0.460E-02 -.653E+00 0.353E-01 0.823E-01 0.883E+00 -.196E+00 -.819E-01 0.997E-07 -.283E-06 0.114E-05 + 0.266E+00 -.167E+00 0.460E-02 0.653E+00 -.353E-01 0.823E-01 -.883E+00 0.196E+00 -.819E-01 -.100E-06 0.280E-06 0.114E-05 + -.492E-01 -.572E-01 0.132E-01 -.215E+00 0.632E-01 0.549E-01 0.240E+00 -.102E-01 -.511E-01 -.324E-06 -.510E-06 -.251E-07 + 0.492E-01 0.573E-01 0.132E-01 0.215E+00 -.632E-01 0.549E-01 -.240E+00 0.102E-01 -.511E-01 0.324E-06 0.511E-06 -.251E-07 + -.492E-01 0.573E-01 0.132E-01 -.215E+00 -.632E-01 0.549E-01 0.240E+00 0.102E-01 -.511E-01 -.323E-06 0.513E-06 -.251E-07 + 0.492E-01 -.572E-01 0.132E-01 0.215E+00 0.632E-01 0.549E-01 -.240E+00 -.102E-01 -.511E-01 0.324E-06 -.513E-06 -.251E-07 + -.492E-01 -.572E-01 0.132E-01 -.215E+00 0.632E-01 0.549E-01 0.240E+00 -.102E-01 -.511E-01 -.324E-06 -.513E-06 -.250E-07 + 0.492E-01 0.573E-01 0.132E-01 0.215E+00 -.632E-01 0.549E-01 -.240E+00 0.102E-01 -.511E-01 0.324E-06 0.513E-06 -.250E-07 + -.492E-01 0.573E-01 0.132E-01 -.215E+00 -.632E-01 0.549E-01 0.240E+00 0.102E-01 -.511E-01 -.323E-06 0.511E-06 -.250E-07 + 0.492E-01 -.572E-01 0.132E-01 0.215E+00 0.632E-01 0.549E-01 -.240E+00 -.102E-01 -.511E-01 0.324E-06 -.510E-06 -.250E-07 + 0.287E-01 0.183E+00 0.102E+00 0.227E+00 -.161E+00 0.325E+00 -.231E+00 -.338E-01 -.414E+00 0.856E-06 0.389E-06 -.209E-07 + -.287E-01 -.183E+00 0.102E+00 -.227E+00 0.161E+00 0.325E+00 0.231E+00 0.338E-01 -.414E+00 -.857E-06 -.392E-06 -.209E-07 + 0.287E-01 -.183E+00 0.102E+00 0.227E+00 0.161E+00 0.325E+00 -.231E+00 0.338E-01 -.414E+00 0.857E-06 -.390E-06 -.209E-07 + -.287E-01 0.183E+00 0.102E+00 -.227E+00 -.161E+00 0.325E+00 0.231E+00 -.338E-01 -.414E+00 -.857E-06 0.394E-06 -.209E-07 + 0.287E-01 0.183E+00 0.102E+00 0.227E+00 -.161E+00 0.325E+00 -.231E+00 -.338E-01 -.414E+00 0.856E-06 0.394E-06 -.209E-07 + -.287E-01 -.183E+00 0.102E+00 -.227E+00 0.161E+00 0.325E+00 0.231E+00 0.338E-01 -.414E+00 -.857E-06 -.390E-06 -.209E-07 + 0.287E-01 -.183E+00 0.102E+00 0.227E+00 0.161E+00 0.325E+00 -.231E+00 0.338E-01 -.414E+00 0.858E-06 -.392E-06 -.209E-07 + -.287E-01 0.183E+00 0.102E+00 -.227E+00 -.161E+00 0.325E+00 0.231E+00 -.338E-01 -.414E+00 -.857E-06 0.389E-06 -.209E-07 + ----------------------------------------------------------------------------------------------- + -.286E-04 0.239E-04 0.923E-01 -.105E-14 0.261E-14 -.211E-14 0.250E-15 0.347E-16 -.935E-01 0.260E-13 -.934E-12 -.140E-06 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64551 0.95478 0.00397 -0.023002 0.017697 -0.083409 + 6.27351 7.26206 0.00397 0.023002 -0.017697 -0.083409 + 4.10501 3.15364 0.00397 -0.023002 -0.017697 -0.083409 + 2.81400 5.06320 0.00397 0.023002 0.017697 -0.083409 + 0.64551 5.06320 2.55448 -0.023002 0.017697 -0.083409 + 6.27351 3.15364 2.55448 0.023002 -0.017697 -0.083409 + 4.10501 7.26206 2.55448 -0.023002 -0.017697 -0.083409 + 2.81400 0.95478 2.55448 0.023002 0.017697 -0.083409 + 5.97226 7.42102 1.59728 -0.005499 -0.011367 0.048982 + 0.94676 0.79582 1.59728 0.005499 0.011367 0.048982 + 2.51275 4.90424 1.59728 -0.005499 0.011367 0.048982 + 4.40626 3.31260 1.59728 0.005499 -0.011367 0.048982 + 5.97226 3.31260 4.14779 -0.005499 -0.011367 0.048982 + 0.94676 4.90424 4.14779 0.005499 0.011367 0.048982 + 2.51275 0.79582 4.14779 -0.005499 0.011367 0.048982 + 4.40626 7.42102 4.14779 0.005499 -0.011367 0.048982 + 6.69814 0.96158 3.03039 -0.036614 -0.006836 0.005045 + 0.22088 7.25527 3.03039 0.036614 0.006836 0.005045 + 3.23863 3.14684 3.03039 -0.036614 0.006836 0.005045 + 3.68038 5.07000 3.03039 0.036614 -0.006836 0.005045 + 6.69814 5.07000 0.47988 -0.036614 -0.006836 0.005045 + 0.22088 3.14684 0.47988 0.036614 0.006836 0.005045 + 3.23863 7.25527 0.47988 -0.036614 0.006836 0.005045 + 3.68038 0.96158 0.47988 0.036614 -0.006836 0.005045 + 2.43045 2.20288 0.89797 -0.024331 -0.004231 0.017007 + 4.48857 6.01396 0.89797 0.024331 0.004231 0.017007 + 5.88995 1.90554 0.89797 -0.024331 0.004231 0.017007 + 1.02906 6.31130 0.89797 0.024331 -0.004231 0.017007 + 2.43045 6.31130 3.44848 -0.024331 -0.004231 0.017007 + 4.48857 1.90554 3.44848 0.024331 0.004231 0.017007 + 5.88995 6.01396 3.44848 -0.024331 0.004231 0.017007 + 1.02906 2.20288 3.44848 0.024331 -0.004231 0.017007 + 2.00721 7.49190 1.92187 0.024759 -0.011876 0.012375 + 4.91180 0.72494 1.92187 -0.024759 0.011876 0.012375 + 5.46672 4.83336 1.92187 0.024759 0.011876 0.012375 + 1.45230 3.38348 1.92187 -0.024759 -0.011876 0.012375 + 2.00721 3.38348 4.47238 0.024759 -0.011876 0.012375 + 4.91180 4.83336 4.47238 -0.024759 0.011876 0.012375 + 5.46672 0.72494 4.47238 0.024759 0.011876 0.012375 + 1.45230 7.49190 4.47238 -0.024759 -0.011876 0.012375 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.001144 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -18.74957786 eV + + energy without entropy= -18.75965667 energy(sigma->0) = -18.75293746 + enthalpy is TOTEN = 107.95542794 eV P V= 126.70500580 + + d Force = 0.1479289E-03[-0.481E-02, 0.511E-02] d Energy = 0.2154037E+00-0.215E+00 + d Force =-0.7724247E-01[-0.783E-01,-0.762E-01] d Ewald =-0.7909816E+01 0.783E+01 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0293: real time 0.0301 + + +-------------------------------------------------------------------------------------------------------- + + + Steepest descent step on ions: + trial-energy change: -0.215404 1 .order -0.219003 -0.721873 0.283868 + (g-gl).g = 0.722E+00 g.g = 0.722E+00 gl.gl = 0.000E+00 + g(Force) = 0.502E-02 g(Stress)= 0.717E+00 ortho = 0.000E+00 + gamma = 0.00000 + trial = 1.00000 + opt step = 0.71336 (harmonic = 0.71775) maximal distance =0.00278488 + next E = 107.914660 (d E = -0.25617) + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0062: real time 0.0062 + FEWALD executed in parallel + FEWALD: cpu time 0.0016: real time 0.0027 + GENKIN: cpu time 0.0265: real time 0.0265 + ORTHCH: cpu time 0.5364: real time 0.5364 + LOOP+: cpu time 54.6253: real time 54.6505 + + +----------------------------------------- Iteration 3( 1) --------------------------------------- + + + POTLOK: cpu time 0.0209: real time 0.0212 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 4.7758: real time 4.7779 + DOS: cpu time 0.0076: real time 0.0076 + CHARGE: cpu time 0.1792: real time 0.1796 + MIXING: cpu time 0.0033: real time 0.0033 + -------------------------------------------- + LOOP: cpu time 4.9950: real time 4.9995 + + eigenvalue-minimisations : 5312 + total energy-change (2. order) : 0.1935868E+01 (-0.3964528E-02) + number of electron 40.0000003 magnetization + augmentation part 0.9530284 magnetization + + free energy = -0.168137101558E+02 energy without entropy= -0.168238286549E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 2) --------------------------------------- + + + POTLOK: cpu time 0.0218: real time 0.0218 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 5.7247: real time 5.7268 + DOS: cpu time 0.0085: real time 0.0085 + CHARGE: cpu time 0.1733: real time 0.1733 + MIXING: cpu time 0.0033: real time 0.0033 + -------------------------------------------- + LOOP: cpu time 5.9382: real time 5.9404 + + eigenvalue-minimisations : 6884 + total energy-change (2. order) : 0.4470153E-03 (-0.8544532E-04) + number of electron 40.0000003 magnetization + augmentation part 0.9515037 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 2.1466 + 2.1466 + + free energy = -0.168132631406E+02 energy without entropy= -0.168233887893E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 3) --------------------------------------- + + + POTLOK: cpu time 0.0218: real time 0.0218 + SETDIJ: cpu time 0.0058: real time 0.0058 + EDDAV: cpu time 5.3019: real time 5.3025 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1875: real time 0.1875 + MIXING: cpu time 0.0035: real time 0.0036 + -------------------------------------------- + LOOP: cpu time 5.5292: real time 5.5298 + + eigenvalue-minimisations : 6204 + total energy-change (2. order) : 0.2162790E-03 (-0.7740749E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9512978 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9793 + 1.1437 2.8149 + + free energy = -0.168130468616E+02 energy without entropy= -0.168231795296E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 4) --------------------------------------- + + + POTLOK: cpu time 0.0205: real time 0.0205 + SETDIJ: cpu time 0.0061: real time 0.0061 + EDDAV: cpu time 5.3888: real time 5.3893 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.1891: real time 0.1891 + MIXING: cpu time 0.0036: real time 0.0036 + -------------------------------------------- + LOOP: cpu time 5.6159: real time 5.6165 + + eigenvalue-minimisations : 6508 + total energy-change (2. order) :-0.1732006E-04 (-0.4195445E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9512136 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9711 + 0.9756 2.7578 2.1800 + + free energy = -0.168130641816E+02 energy without entropy= -0.168231967671E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 5) --------------------------------------- + + + POTLOK: cpu time 0.0201: real time 0.0201 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.6177: real time 3.6181 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1727: real time 0.1728 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 3.8284: real time 3.8289 + + eigenvalue-minimisations : 3168 + total energy-change (2. order) : 0.9803027E-05 (-0.3190877E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9512041 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9206 + 2.7900 2.5046 1.0015 1.3865 + + free energy = -0.168130543786E+02 energy without entropy= -0.168231859036E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 6) --------------------------------------- + + + POTLOK: cpu time 0.0214: real time 0.0214 + SETDIJ: cpu time 0.0057: real time 0.0057 + EDDAV: cpu time 3.4444: real time 3.4448 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1693: real time 0.1694 + MIXING: cpu time 0.0038: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 3.6528: real time 3.6532 + + eigenvalue-minimisations : 3068 + total energy-change (2. order) : 0.2304233E-05 (-0.5305339E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9512054 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8006 + 2.7112 2.4766 1.8591 0.9479 1.0082 + + free energy = -0.168130520744E+02 energy without entropy= -0.168231834754E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 3( 7) --------------------------------------- + + + POTLOK: cpu time 0.0215: real time 0.0215 + SETDIJ: cpu time 0.0058: real time 0.0058 + EDDAV: cpu time 3.3916: real time 3.3920 + DOS: cpu time 0.0072: real time 0.0072 + -------------------------------------------- + LOOP: cpu time 3.4271: real time 3.4274 + + eigenvalue-minimisations : 2948 + total energy-change (2. order) :-0.1029381E-06 (-0.4812018E-09) + number of electron 40.0000003 magnetization + augmentation part 0.9512054 magnetization + + free energy = -0.168130521773E+02 energy without entropy= -0.168231836677E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9694 2 -25.9694 3 -25.9694 4 -25.9694 5 -25.9694 + 6 -25.9694 7 -25.9694 8 -25.9694 9 -25.9049 10 -25.9049 + 11 -25.9049 12 -25.9049 13 -25.9049 14 -25.9049 15 -25.9049 + 16 -25.9049 17 -25.9197 18 -25.9197 19 -25.9197 20 -25.9197 + 21 -25.9197 22 -25.9197 23 -25.9197 24 -25.9197 25 -25.8442 + 26 -25.8442 27 -25.8442 28 -25.8442 29 -25.8442 30 -25.8442 + 31 -25.8442 32 -25.8442 33 -26.0170 34 -26.0170 35 -26.0170 + 36 -26.0170 37 -26.0170 38 -26.0170 39 -26.0170 40 -26.0170 + + + + E-fermi : 4.4656 XC(G=0): -9.5572 alpha+bet :-20.5784 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9653 2.00000 + 2 1.5080 2.00000 + 3 1.7441 2.00000 + 4 2.0011 2.00000 + 5 2.0442 2.00000 + 6 2.5145 2.00000 + 7 2.6230 2.00000 + 8 2.7726 2.00000 + 9 2.8678 2.00000 + 10 2.9233 2.00000 + 11 3.2103 2.00000 + 12 3.2832 2.00000 + 13 3.3997 2.00000 + 14 3.4326 2.00000 + 15 3.5103 2.00000 + 16 3.6211 2.00000 + 17 3.8399 2.00009 + 18 4.1824 2.06236 + 19 4.2124 2.07043 + 20 4.3902 1.59069 + 21 5.5445 -0.00000 + 22 5.7457 -0.00000 + 23 5.9360 -0.00000 + 24 6.0897 -0.00000 + 25 6.2111 -0.00000 + 26 6.3061 -0.00000 + 27 6.5611 -0.00000 + 28 7.1322 -0.00000 + 29 7.1387 -0.00000 + 30 7.2435 -0.00000 + 31 7.3762 -0.00000 + 32 7.4660 -0.00000 + 33 8.0815 -0.00000 + 34 8.1722 -0.00000 + 35 8.8204 -0.00000 + 36 8.9722 -0.00000 + 37 9.2291 -0.00000 + 38 9.4606 -0.00000 + 39 9.8295 -0.00000 + 40 9.8696 -0.00000 + 41 10.1179 0.00000 + 42 10.3119 0.00000 + 43 10.5561 0.00000 + 44 10.8300 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9837 2.00000 + 2 1.5281 2.00000 + 3 1.7144 2.00000 + 4 1.7649 2.00000 + 5 2.2758 2.00000 + 6 2.3950 2.00000 + 7 2.5265 2.00000 + 8 2.8711 2.00000 + 9 2.9636 2.00000 + 10 3.1472 2.00000 + 11 3.2382 2.00000 + 12 3.2962 2.00000 + 13 3.3766 2.00000 + 14 3.4349 2.00000 + 15 3.5402 2.00000 + 16 3.6251 2.00000 + 17 3.7771 2.00001 + 18 4.0595 2.01448 + 19 4.2299 2.07021 + 20 4.4357 1.24998 + 21 5.4315 -0.00000 + 22 5.5979 -0.00000 + 23 5.8935 -0.00000 + 24 5.9965 -0.00000 + 25 6.1576 -0.00000 + 26 6.5305 -0.00000 + 27 6.6352 -0.00000 + 28 6.8461 -0.00000 + 29 7.1150 -0.00000 + 30 7.2331 -0.00000 + 31 7.3108 -0.00000 + 32 7.3986 -0.00000 + 33 8.3581 -0.00000 + 34 8.4095 -0.00000 + 35 8.8378 -0.00000 + 36 8.8982 -0.00000 + 37 9.2529 -0.00000 + 38 9.4335 -0.00000 + 39 9.7792 -0.00000 + 40 9.9519 0.00000 + 41 10.0795 0.00000 + 42 10.1884 0.00000 + 43 10.8562 0.00000 + 44 10.9363 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0397 2.00000 + 2 1.4681 2.00000 + 3 1.5891 2.00000 + 4 1.8276 2.00000 + 5 2.0350 2.00000 + 6 2.2827 2.00000 + 7 2.8282 2.00000 + 8 2.9695 2.00000 + 9 3.2382 2.00000 + 10 3.2717 2.00000 + 11 3.3183 2.00000 + 12 3.3369 2.00000 + 13 3.4310 2.00000 + 14 3.5252 2.00000 + 15 3.5736 2.00000 + 16 3.6245 2.00000 + 17 3.7256 2.00000 + 18 3.8447 2.00010 + 19 4.1575 2.05166 + 20 4.3416 1.85732 + 21 5.3358 -0.00000 + 22 5.4358 -0.00000 + 23 5.7788 -0.00000 + 24 5.8538 -0.00000 + 25 5.8933 -0.00000 + 26 6.2537 -0.00000 + 27 6.7827 -0.00000 + 28 7.0333 -0.00000 + 29 7.1134 -0.00000 + 30 7.2146 -0.00000 + 31 7.2687 -0.00000 + 32 7.5630 -0.00000 + 33 8.5051 -0.00000 + 34 8.5221 -0.00000 + 35 8.7746 -0.00000 + 36 8.9079 -0.00000 + 37 9.2160 -0.00000 + 38 9.3372 -0.00000 + 39 9.8145 -0.00000 + 40 9.8887 -0.00000 + 41 10.1854 0.00000 + 42 10.3807 0.00000 + 43 11.0121 0.00000 + 44 11.1339 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1362 2.00000 + 2 1.2772 2.00000 + 3 1.6922 2.00000 + 4 1.8393 2.00000 + 5 1.9350 2.00000 + 6 2.0853 2.00000 + 7 3.0559 2.00000 + 8 3.1610 2.00000 + 9 3.3049 2.00000 + 10 3.3956 2.00000 + 11 3.4302 2.00000 + 12 3.4443 2.00000 + 13 3.5065 2.00000 + 14 3.5124 2.00000 + 15 3.6358 2.00000 + 16 3.6526 2.00000 + 17 3.7157 2.00000 + 18 3.7710 2.00001 + 19 3.9157 2.00071 + 20 4.1109 2.03094 + 21 5.3583 -0.00000 + 22 5.4806 -0.00000 + 23 5.6483 -0.00000 + 24 5.6579 -0.00000 + 25 5.7704 -0.00000 + 26 5.7905 -0.00000 + 27 6.9779 -0.00000 + 28 7.1198 -0.00000 + 29 7.1575 -0.00000 + 30 7.1611 -0.00000 + 31 7.6294 -0.00000 + 32 7.8820 -0.00000 + 33 8.1510 -0.00000 + 34 8.2401 -0.00000 + 35 8.8990 -0.00000 + 36 8.9589 -0.00000 + 37 9.1155 -0.00000 + 38 9.2012 -0.00000 + 39 9.8048 -0.00000 + 40 9.8784 -0.00000 + 41 10.4838 0.00000 + 42 10.5786 0.00000 + 43 11.2347 0.00000 + 44 11.3333 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9988 2.00000 + 2 1.3184 2.00000 + 3 2.0233 2.00000 + 4 2.0327 2.00000 + 5 2.0808 2.00000 + 6 2.3387 2.00000 + 7 2.4331 2.00000 + 8 2.9429 2.00000 + 9 3.0085 2.00000 + 10 3.0535 2.00000 + 11 3.1372 2.00000 + 12 3.2111 2.00000 + 13 3.4035 2.00000 + 14 3.4975 2.00000 + 15 3.5040 2.00000 + 16 3.6919 2.00000 + 17 3.7543 2.00001 + 18 4.0097 2.00586 + 19 4.0358 2.00960 + 20 4.2325 2.06974 + 21 5.6897 -0.00000 + 22 5.8225 -0.00000 + 23 5.9805 -0.00000 + 24 6.2293 -0.00000 + 25 6.3115 -0.00000 + 26 6.4421 -0.00000 + 27 6.5155 -0.00000 + 28 6.7804 -0.00000 + 29 7.2797 -0.00000 + 30 7.3354 -0.00000 + 31 7.4333 -0.00000 + 32 7.6260 -0.00000 + 33 8.0388 -0.00000 + 34 8.1924 -0.00000 + 35 8.8971 -0.00000 + 36 9.0479 -0.00000 + 37 9.0909 -0.00000 + 38 9.2208 -0.00000 + 39 9.5563 -0.00000 + 40 9.8857 -0.00000 + 41 9.9244 -0.00000 + 42 10.4096 0.00000 + 43 10.4882 0.00000 + 44 10.9336 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0172 2.00000 + 2 1.3379 2.00000 + 3 1.7493 2.00000 + 4 2.0383 2.00000 + 5 2.0910 2.00000 + 6 2.4263 2.00000 + 7 2.7308 2.00000 + 8 2.8138 2.00000 + 9 2.9751 2.00000 + 10 3.0365 2.00000 + 11 3.2276 2.00000 + 12 3.3526 2.00000 + 13 3.3993 2.00000 + 14 3.5031 2.00000 + 15 3.5259 2.00000 + 16 3.6961 2.00000 + 17 3.7068 2.00000 + 18 3.8285 2.00006 + 19 4.1107 2.03087 + 20 4.2772 2.03601 + 21 5.5678 -0.00000 + 22 5.7511 -0.00000 + 23 5.9443 -0.00000 + 24 6.0753 -0.00000 + 25 6.2353 -0.00000 + 26 6.5037 -0.00000 + 27 6.6453 -0.00000 + 28 6.7198 -0.00000 + 29 7.1749 -0.00000 + 30 7.3207 -0.00000 + 31 7.3441 -0.00000 + 32 7.6027 -0.00000 + 33 8.2877 -0.00000 + 34 8.3715 -0.00000 + 35 8.9019 -0.00000 + 36 9.0080 -0.00000 + 37 9.0336 -0.00000 + 38 9.2333 -0.00000 + 39 9.6323 -0.00000 + 40 9.8283 -0.00000 + 41 9.9539 0.00000 + 42 10.4722 0.00000 + 43 10.5102 0.00000 + 44 11.0527 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0736 2.00000 + 2 1.3971 2.00000 + 3 1.5031 2.00000 + 4 1.8366 2.00000 + 5 2.1141 2.00000 + 6 2.5748 2.00000 + 7 2.8491 2.00000 + 8 2.9968 2.00000 + 9 3.1219 2.00000 + 10 3.1377 2.00000 + 11 3.2749 2.00000 + 12 3.3108 2.00000 + 13 3.4740 2.00000 + 14 3.5337 2.00000 + 15 3.6108 2.00000 + 16 3.6159 2.00000 + 17 3.6742 2.00000 + 18 3.7299 2.00000 + 19 4.0496 2.01224 + 20 4.2341 2.06939 + 21 5.4088 -0.00000 + 22 5.6715 -0.00000 + 23 5.7791 -0.00000 + 24 5.8326 -0.00000 + 25 6.1143 -0.00000 + 26 6.2079 -0.00000 + 27 6.6286 -0.00000 + 28 7.0721 -0.00000 + 29 7.1215 -0.00000 + 30 7.3633 -0.00000 + 31 7.5072 -0.00000 + 32 7.5460 -0.00000 + 33 8.3771 -0.00000 + 34 8.5317 -0.00000 + 35 8.8046 -0.00000 + 36 8.8914 -0.00000 + 37 9.0495 -0.00000 + 38 9.1751 -0.00000 + 39 9.6409 -0.00000 + 40 9.8030 -0.00000 + 41 10.1715 0.00000 + 42 10.5982 0.00000 + 43 10.7172 0.00000 + 44 11.2299 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1704 2.00000 + 2 1.3119 2.00000 + 3 1.4979 2.00000 + 4 1.6434 2.00000 + 5 2.2233 2.00000 + 6 2.3772 2.00000 + 7 3.0926 2.00000 + 8 3.2020 2.00000 + 9 3.2124 2.00000 + 10 3.3175 2.00000 + 11 3.3806 2.00000 + 12 3.4078 2.00000 + 13 3.4337 2.00000 + 14 3.4485 2.00000 + 15 3.5496 2.00000 + 16 3.6277 2.00000 + 17 3.7463 2.00000 + 18 3.7725 2.00001 + 19 3.8491 2.00012 + 20 4.0069 2.00555 + 21 5.4237 -0.00000 + 22 5.6170 -0.00000 + 23 5.6199 -0.00000 + 24 5.7956 -0.00000 + 25 5.7973 -0.00000 + 26 5.9768 -0.00000 + 27 6.7943 -0.00000 + 28 6.9600 -0.00000 + 29 7.3376 -0.00000 + 30 7.4406 -0.00000 + 31 7.7328 -0.00000 + 32 7.8222 -0.00000 + 33 8.1714 -0.00000 + 34 8.2008 -0.00000 + 35 8.8458 -0.00000 + 36 8.9009 -0.00000 + 37 8.9818 -0.00000 + 38 9.0623 -0.00000 + 39 9.6136 -0.00000 + 40 9.7795 -0.00000 + 41 10.4598 0.00000 + 42 10.6340 0.00000 + 43 11.1576 0.00000 + 44 11.3556 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0670 2.00000 + 2 1.1724 2.00000 + 3 2.0975 2.00000 + 4 2.1540 2.00000 + 5 2.1985 2.00000 + 6 2.2489 2.00000 + 7 2.3749 2.00000 + 8 2.6965 2.00000 + 9 3.0190 2.00000 + 10 3.1127 2.00000 + 11 3.3440 2.00000 + 12 3.4335 2.00000 + 13 3.4351 2.00000 + 14 3.4742 2.00000 + 15 3.6017 2.00000 + 16 3.6022 2.00000 + 17 3.7389 2.00000 + 18 3.7812 2.00001 + 19 3.8291 2.00007 + 20 4.0202 2.00718 + 21 5.9389 -0.00000 + 22 5.9554 -0.00000 + 23 6.1018 -0.00000 + 24 6.1499 -0.00000 + 25 6.2197 -0.00000 + 26 6.4242 -0.00000 + 27 6.6289 -0.00000 + 28 6.9411 -0.00000 + 29 6.9814 -0.00000 + 30 7.2860 -0.00000 + 31 7.6176 -0.00000 + 32 7.8776 -0.00000 + 33 8.1968 -0.00000 + 34 8.3676 -0.00000 + 35 8.5260 -0.00000 + 36 9.0213 -0.00000 + 37 9.0803 -0.00000 + 38 9.1528 -0.00000 + 39 9.3207 -0.00000 + 40 9.6066 -0.00000 + 41 9.9577 0.00000 + 42 10.0683 0.00000 + 43 10.7832 0.00000 + 44 10.9643 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0857 2.00000 + 2 1.1914 2.00000 + 3 1.8202 2.00000 + 4 1.9295 2.00000 + 5 2.3651 2.00000 + 6 2.4856 2.00000 + 7 2.6057 2.00000 + 8 2.7273 2.00000 + 9 3.0384 2.00000 + 10 3.1314 2.00000 + 11 3.1424 2.00000 + 12 3.4378 2.00000 + 13 3.4843 2.00000 + 14 3.4899 2.00000 + 15 3.5034 2.00000 + 16 3.6166 2.00000 + 17 3.6863 2.00000 + 18 3.8388 2.00009 + 19 3.9121 2.00065 + 20 4.0490 2.01212 + 21 5.7661 -0.00000 + 22 5.9385 -0.00000 + 23 5.9695 -0.00000 + 24 6.1256 -0.00000 + 25 6.2545 -0.00000 + 26 6.3712 -0.00000 + 27 6.5636 -0.00000 + 28 6.9107 -0.00000 + 29 7.0093 -0.00000 + 30 7.2295 -0.00000 + 31 7.6396 -0.00000 + 32 8.0066 -0.00000 + 33 8.1839 -0.00000 + 34 8.4973 -0.00000 + 35 8.5792 -0.00000 + 36 8.9953 -0.00000 + 37 9.0318 -0.00000 + 38 9.2533 -0.00000 + 39 9.2786 -0.00000 + 40 9.5662 -0.00000 + 41 10.0216 0.00000 + 42 10.1383 0.00000 + 43 10.8018 0.00000 + 44 11.0124 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1426 2.00000 + 2 1.2494 2.00000 + 3 1.5745 2.00000 + 4 1.6847 2.00000 + 5 2.4376 2.00000 + 6 2.7680 2.00000 + 7 2.9091 2.00000 + 8 2.9355 2.00000 + 9 2.9875 2.00000 + 10 3.1123 2.00000 + 11 3.1857 2.00000 + 12 3.2704 2.00000 + 13 3.3806 2.00000 + 14 3.4637 2.00000 + 15 3.5289 2.00000 + 16 3.5993 2.00000 + 17 3.7374 2.00000 + 18 3.8903 2.00037 + 19 3.9002 2.00048 + 20 4.0773 2.01924 + 21 5.5399 -0.00000 + 22 5.6673 -0.00000 + 23 5.8925 -0.00000 + 24 6.0626 -0.00000 + 25 6.0792 -0.00000 + 26 6.3650 -0.00000 + 27 6.4298 -0.00000 + 28 6.7730 -0.00000 + 29 7.2725 -0.00000 + 30 7.4056 -0.00000 + 31 7.7327 -0.00000 + 32 8.0618 -0.00000 + 33 8.1150 -0.00000 + 34 8.4988 -0.00000 + 35 8.6056 -0.00000 + 36 8.8797 -0.00000 + 37 8.9690 -0.00000 + 38 9.2861 -0.00000 + 39 9.2895 -0.00000 + 40 9.5652 -0.00000 + 41 10.2521 0.00000 + 42 10.4287 0.00000 + 43 10.8039 0.00000 + 44 11.0526 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2404 2.00000 + 2 1.3484 2.00000 + 3 1.3827 2.00000 + 4 1.4921 2.00000 + 5 2.5528 2.00000 + 6 2.7111 2.00000 + 7 2.9022 2.00000 + 8 3.0677 2.00000 + 9 3.1598 2.00000 + 10 3.2451 2.00000 + 11 3.2759 2.00000 + 12 3.3653 2.00000 + 13 3.3892 2.00000 + 14 3.4180 2.00000 + 15 3.6037 2.00000 + 16 3.6767 2.00000 + 17 3.6772 2.00000 + 18 3.7696 2.00001 + 19 3.8274 2.00006 + 20 3.8962 2.00043 + 21 5.5152 -0.00000 + 22 5.5777 -0.00000 + 23 5.6948 -0.00000 + 24 5.7690 -0.00000 + 25 6.1371 -0.00000 + 26 6.2839 -0.00000 + 27 6.4898 -0.00000 + 28 6.6383 -0.00000 + 29 7.5784 -0.00000 + 30 7.7212 -0.00000 + 31 7.8134 -0.00000 + 32 8.0184 -0.00000 + 33 8.0474 -0.00000 + 34 8.3349 -0.00000 + 35 8.4408 -0.00000 + 36 8.6391 -0.00000 + 37 9.0357 -0.00000 + 38 9.2618 -0.00000 + 39 9.3203 -0.00000 + 40 9.5408 -0.00000 + 41 10.5492 0.00000 + 42 10.7333 0.00000 + 43 10.7920 0.00000 + 44 10.9885 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0045 2.00000 + 2 1.5552 2.00000 + 3 1.7944 2.00000 + 4 2.0418 2.00000 + 5 2.0869 2.00000 + 6 2.4889 2.00000 + 7 2.5802 2.00000 + 8 2.6665 2.00000 + 9 2.8111 2.00000 + 10 2.9048 2.00000 + 11 3.0821 2.00000 + 12 3.2809 2.00000 + 13 3.3136 2.00000 + 14 3.3359 2.00000 + 15 3.4466 2.00000 + 16 3.7599 2.00001 + 17 3.8611 2.00016 + 18 4.0042 2.00525 + 19 4.0468 2.01168 + 20 4.1722 2.05819 + 21 5.7703 -0.00000 + 22 5.9732 -0.00000 + 23 6.1846 -0.00000 + 24 6.4615 -0.00000 + 25 6.4914 -0.00000 + 26 6.5863 -0.00000 + 27 6.6013 -0.00000 + 28 6.7663 -0.00000 + 29 7.1724 -0.00000 + 30 7.2559 -0.00000 + 31 7.3734 -0.00000 + 32 7.4371 -0.00000 + 33 8.1776 -0.00000 + 34 8.4773 -0.00000 + 35 8.9404 -0.00000 + 36 9.0668 -0.00000 + 37 9.0732 -0.00000 + 38 9.5698 -0.00000 + 39 9.8286 -0.00000 + 40 9.8530 -0.00000 + 41 10.0237 0.00000 + 42 10.0340 0.00000 + 43 10.4060 0.00000 + 44 10.4608 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0229 2.00000 + 2 1.5752 2.00000 + 3 1.7559 2.00000 + 4 1.8150 2.00000 + 5 2.3187 2.00000 + 6 2.4358 2.00000 + 7 2.5219 2.00000 + 8 2.5710 2.00000 + 9 2.9513 2.00000 + 10 3.0983 2.00000 + 11 3.1482 2.00000 + 12 3.1921 2.00000 + 13 3.3005 2.00000 + 14 3.3694 2.00000 + 15 3.5883 2.00000 + 16 3.6574 2.00000 + 17 3.8737 2.00023 + 18 3.9614 2.00211 + 19 4.0843 2.02137 + 20 4.1563 2.05108 + 21 5.7147 -0.00000 + 22 5.8186 -0.00000 + 23 6.1172 -0.00000 + 24 6.3533 -0.00000 + 25 6.3936 -0.00000 + 26 6.4879 -0.00000 + 27 6.7080 -0.00000 + 28 6.7854 -0.00000 + 29 7.1658 -0.00000 + 30 7.2604 -0.00000 + 31 7.2651 -0.00000 + 32 7.4539 -0.00000 + 33 8.3382 -0.00000 + 34 8.5585 -0.00000 + 35 8.9308 -0.00000 + 36 9.0280 -0.00000 + 37 9.0832 -0.00000 + 38 9.5951 -0.00000 + 39 9.8435 -0.00000 + 40 9.9084 -0.00000 + 41 9.9176 -0.00000 + 42 10.1229 0.00000 + 43 10.6462 0.00000 + 44 10.7171 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0793 2.00000 + 2 1.5092 2.00000 + 3 1.6360 2.00000 + 4 1.8770 2.00000 + 5 2.0797 2.00000 + 6 2.3260 2.00000 + 7 2.5834 2.00000 + 8 2.8646 2.00000 + 9 2.9743 2.00000 + 10 3.1461 2.00000 + 11 3.2880 2.00000 + 12 3.3527 2.00000 + 13 3.4477 2.00000 + 14 3.4769 2.00000 + 15 3.5340 2.00000 + 16 3.7452 2.00000 + 17 3.8084 2.00003 + 18 3.9045 2.00053 + 19 4.0068 2.00553 + 20 4.1185 2.03406 + 21 5.4696 -0.00000 + 22 5.7725 -0.00000 + 23 5.9939 -0.00000 + 24 5.9947 -0.00000 + 25 6.1391 -0.00000 + 26 6.3023 -0.00000 + 27 6.7247 -0.00000 + 28 7.0440 -0.00000 + 29 7.0552 -0.00000 + 30 7.1679 -0.00000 + 31 7.3074 -0.00000 + 32 7.7007 -0.00000 + 33 8.3731 -0.00000 + 34 8.4509 -0.00000 + 35 8.9653 -0.00000 + 36 9.0621 -0.00000 + 37 9.0964 -0.00000 + 38 9.4988 -0.00000 + 39 9.9031 -0.00000 + 40 10.0986 0.00000 + 41 10.1435 0.00000 + 42 10.3374 0.00000 + 43 10.9706 0.00000 + 44 11.1231 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1761 2.00000 + 2 1.3177 2.00000 + 3 1.7388 2.00000 + 4 1.8854 2.00000 + 5 1.9827 2.00000 + 6 2.1314 2.00000 + 7 2.6791 2.00000 + 8 2.8110 2.00000 + 9 3.2133 2.00000 + 10 3.3091 2.00000 + 11 3.3511 2.00000 + 12 3.5019 2.00000 + 13 3.5578 2.00000 + 14 3.6259 2.00000 + 15 3.6389 2.00000 + 16 3.6451 2.00000 + 17 3.8006 2.00003 + 18 3.8654 2.00019 + 19 3.8751 2.00024 + 20 3.9231 2.00085 + 21 5.4408 -0.00000 + 22 5.6574 -0.00000 + 23 5.7408 -0.00000 + 24 5.8052 -0.00000 + 25 5.9940 -0.00000 + 26 6.1921 -0.00000 + 27 6.7554 -0.00000 + 28 6.8863 -0.00000 + 29 7.1478 -0.00000 + 30 7.1947 -0.00000 + 31 7.6209 -0.00000 + 32 7.9634 -0.00000 + 33 8.0457 -0.00000 + 34 8.2064 -0.00000 + 35 9.0948 -0.00000 + 36 9.1569 -0.00000 + 37 9.1959 -0.00000 + 38 9.3652 -0.00000 + 39 9.9073 -0.00000 + 40 10.0882 0.00000 + 41 10.3974 0.00000 + 42 10.4955 0.00000 + 43 11.2151 0.00000 + 44 11.3228 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0385 2.00000 + 2 1.3630 2.00000 + 3 2.0738 2.00000 + 4 2.0770 2.00000 + 5 2.1240 2.00000 + 6 2.3781 2.00000 + 7 2.4770 2.00000 + 8 2.5551 2.00000 + 9 2.9109 2.00000 + 10 3.0654 2.00000 + 11 3.0748 2.00000 + 12 3.1637 2.00000 + 13 3.3612 2.00000 + 14 3.5047 2.00000 + 15 3.5120 2.00000 + 16 3.6705 2.00000 + 17 3.8488 2.00012 + 18 3.8775 2.00026 + 19 3.9362 2.00117 + 20 4.0436 2.01104 + 21 5.8537 -0.00000 + 22 6.0165 -0.00000 + 23 6.0753 -0.00000 + 24 6.3311 -0.00000 + 25 6.5065 -0.00000 + 26 6.6165 -0.00000 + 27 6.6735 -0.00000 + 28 6.7931 -0.00000 + 29 7.3981 -0.00000 + 30 7.4070 -0.00000 + 31 7.4792 -0.00000 + 32 7.6260 -0.00000 + 33 8.2039 -0.00000 + 34 8.3181 -0.00000 + 35 8.7555 -0.00000 + 36 8.9384 -0.00000 + 37 9.2206 -0.00000 + 38 9.4231 -0.00000 + 39 9.6370 -0.00000 + 40 9.7316 -0.00000 + 41 9.8404 -0.00000 + 42 10.3527 0.00000 + 43 10.3787 0.00000 + 44 10.9274 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0570 2.00000 + 2 1.3825 2.00000 + 3 1.7912 2.00000 + 4 2.0908 2.00000 + 5 2.1354 2.00000 + 6 2.4676 2.00000 + 7 2.5656 2.00000 + 8 2.7842 2.00000 + 9 2.8480 2.00000 + 10 2.9299 2.00000 + 11 3.1020 2.00000 + 12 3.2079 2.00000 + 13 3.4002 2.00000 + 14 3.4973 2.00000 + 15 3.5913 2.00000 + 16 3.6466 2.00000 + 17 3.7947 2.00002 + 18 3.8649 2.00018 + 19 3.9730 2.00273 + 20 4.0997 2.02666 + 21 5.7506 -0.00000 + 22 5.9644 -0.00000 + 23 5.9845 -0.00000 + 24 6.2277 -0.00000 + 25 6.3223 -0.00000 + 26 6.6089 -0.00000 + 27 6.6496 -0.00000 + 28 6.9067 -0.00000 + 29 7.2648 -0.00000 + 30 7.3900 -0.00000 + 31 7.5084 -0.00000 + 32 7.6166 -0.00000 + 33 8.3743 -0.00000 + 34 8.3823 -0.00000 + 35 8.8485 -0.00000 + 36 8.9175 -0.00000 + 37 9.1974 -0.00000 + 38 9.4053 -0.00000 + 39 9.6261 -0.00000 + 40 9.7435 -0.00000 + 41 9.9194 -0.00000 + 42 10.4260 0.00000 + 43 10.5459 0.00000 + 44 10.9557 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1137 2.00000 + 2 1.4417 2.00000 + 3 1.5447 2.00000 + 4 1.8812 2.00000 + 5 2.1655 2.00000 + 6 2.6088 2.00000 + 7 2.6322 2.00000 + 8 2.8865 2.00000 + 9 2.9869 2.00000 + 10 3.0227 2.00000 + 11 3.1607 2.00000 + 12 3.1828 2.00000 + 13 3.3672 2.00000 + 14 3.6045 2.00000 + 15 3.6192 2.00000 + 16 3.6420 2.00000 + 17 3.7935 2.00002 + 18 3.9066 2.00056 + 19 3.9463 2.00149 + 20 4.1114 2.03116 + 21 5.4934 -0.00000 + 22 5.8357 -0.00000 + 23 5.9223 -0.00000 + 24 5.9741 -0.00000 + 25 6.0358 -0.00000 + 26 6.5295 -0.00000 + 27 6.5507 -0.00000 + 28 7.0297 -0.00000 + 29 7.1716 -0.00000 + 30 7.4154 -0.00000 + 31 7.6198 -0.00000 + 32 7.6908 -0.00000 + 33 8.3448 -0.00000 + 34 8.4627 -0.00000 + 35 8.8708 -0.00000 + 36 8.9188 -0.00000 + 37 9.2691 -0.00000 + 38 9.3017 -0.00000 + 39 9.6505 -0.00000 + 40 9.9977 0.00000 + 41 10.1143 0.00000 + 42 10.5540 0.00000 + 43 10.7730 0.00000 + 44 11.1252 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2109 2.00000 + 2 1.3529 2.00000 + 3 1.5426 2.00000 + 4 1.6881 2.00000 + 5 2.2723 2.00000 + 6 2.4223 2.00000 + 7 2.7229 2.00000 + 8 2.8589 2.00000 + 9 3.0731 2.00000 + 10 3.1930 2.00000 + 11 3.2828 2.00000 + 12 3.3948 2.00000 + 13 3.4502 2.00000 + 14 3.5064 2.00000 + 15 3.6848 2.00000 + 16 3.7043 2.00000 + 17 3.7947 2.00002 + 18 3.8824 2.00030 + 19 3.9274 2.00095 + 20 3.9326 2.00107 + 21 5.4147 -0.00000 + 22 5.6856 -0.00000 + 23 5.6965 -0.00000 + 24 5.7755 -0.00000 + 25 6.0587 -0.00000 + 26 6.3820 -0.00000 + 27 6.6117 -0.00000 + 28 6.7919 -0.00000 + 29 7.3080 -0.00000 + 30 7.4607 -0.00000 + 31 7.8133 -0.00000 + 32 7.9144 -0.00000 + 33 8.1779 -0.00000 + 34 8.1870 -0.00000 + 35 8.9707 -0.00000 + 36 9.0369 -0.00000 + 37 9.1843 -0.00000 + 38 9.3342 -0.00000 + 39 9.6180 -0.00000 + 40 10.0617 0.00000 + 41 10.3622 0.00000 + 42 10.5485 0.00000 + 43 11.1225 0.00000 + 44 11.2312 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1078 2.00000 + 2 1.2149 2.00000 + 3 2.1393 2.00000 + 4 2.1980 2.00000 + 5 2.2406 2.00000 + 6 2.2969 2.00000 + 7 2.4281 2.00000 + 8 2.6348 2.00000 + 9 2.7558 2.00000 + 10 2.7575 2.00000 + 11 3.3265 2.00000 + 12 3.4347 2.00000 + 13 3.4698 2.00000 + 14 3.5017 2.00000 + 15 3.6408 2.00000 + 16 3.6431 2.00000 + 17 3.6801 2.00000 + 18 3.7672 2.00001 + 19 3.8091 2.00004 + 20 3.8372 2.00008 + 21 5.9437 -0.00000 + 22 6.0765 -0.00000 + 23 6.0981 -0.00000 + 24 6.2232 -0.00000 + 25 6.3631 -0.00000 + 26 6.3754 -0.00000 + 27 6.9741 -0.00000 + 28 7.1350 -0.00000 + 29 7.2547 -0.00000 + 30 7.4029 -0.00000 + 31 7.7386 -0.00000 + 32 8.0564 -0.00000 + 33 8.1133 -0.00000 + 34 8.3852 -0.00000 + 35 8.4368 -0.00000 + 36 9.0213 -0.00000 + 37 9.1240 -0.00000 + 38 9.2001 -0.00000 + 39 9.4105 -0.00000 + 40 9.5688 -0.00000 + 41 9.9380 0.00000 + 42 10.0776 0.00000 + 43 10.7608 0.00000 + 44 10.9554 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1266 2.00000 + 2 1.2340 2.00000 + 3 1.8630 2.00000 + 4 1.9731 2.00000 + 5 2.4212 2.00000 + 6 2.5283 2.00000 + 7 2.6271 2.00000 + 8 2.6770 2.00000 + 9 2.7686 2.00000 + 10 2.7945 2.00000 + 11 3.1518 2.00000 + 12 3.3082 2.00000 + 13 3.3900 2.00000 + 14 3.5138 2.00000 + 15 3.6148 2.00000 + 16 3.6986 2.00000 + 17 3.7499 2.00001 + 18 3.8202 2.00005 + 19 3.8488 2.00012 + 20 3.9627 2.00217 + 21 5.8853 -0.00000 + 22 5.9701 -0.00000 + 23 6.0204 -0.00000 + 24 6.1560 -0.00000 + 25 6.1594 -0.00000 + 26 6.3678 -0.00000 + 27 6.9354 -0.00000 + 28 7.1734 -0.00000 + 29 7.1987 -0.00000 + 30 7.4257 -0.00000 + 31 7.7140 -0.00000 + 32 8.0590 -0.00000 + 33 8.1467 -0.00000 + 34 8.5319 -0.00000 + 35 8.5810 -0.00000 + 36 8.9939 -0.00000 + 37 9.0963 -0.00000 + 38 9.2014 -0.00000 + 39 9.4120 -0.00000 + 40 9.5988 -0.00000 + 41 10.0169 0.00000 + 42 10.1899 0.00000 + 43 10.7682 0.00000 + 44 10.9801 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1838 2.00000 + 2 1.2921 2.00000 + 3 1.6169 2.00000 + 4 1.7282 2.00000 + 5 2.4911 2.00000 + 6 2.7099 2.00000 + 7 2.8162 2.00000 + 8 2.8360 2.00000 + 9 2.9384 2.00000 + 10 2.9861 2.00000 + 11 3.0519 2.00000 + 12 3.1195 2.00000 + 13 3.2144 2.00000 + 14 3.3177 2.00000 + 15 3.7460 2.00000 + 16 3.7463 2.00000 + 17 3.8323 2.00007 + 18 3.8773 2.00026 + 19 3.9451 2.00145 + 20 4.0398 2.01032 + 21 5.6294 -0.00000 + 22 5.8019 -0.00000 + 23 5.8021 -0.00000 + 24 5.8792 -0.00000 + 25 6.1482 -0.00000 + 26 6.3374 -0.00000 + 27 6.7636 -0.00000 + 28 6.9409 -0.00000 + 29 7.3930 -0.00000 + 30 7.5891 -0.00000 + 31 7.7761 -0.00000 + 32 8.0976 -0.00000 + 33 8.1152 -0.00000 + 34 8.5385 -0.00000 + 35 8.6935 -0.00000 + 36 8.9654 -0.00000 + 37 9.0348 -0.00000 + 38 9.2245 -0.00000 + 39 9.5139 -0.00000 + 40 9.7768 -0.00000 + 41 10.2086 0.00000 + 42 10.4380 0.00000 + 43 10.7544 0.00000 + 44 11.0221 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2819 2.00000 + 2 1.3914 2.00000 + 3 1.4247 2.00000 + 4 1.5354 2.00000 + 5 2.6009 2.00000 + 6 2.7485 2.00000 + 7 2.8115 2.00000 + 8 2.9150 2.00000 + 9 2.9542 2.00000 + 10 2.9583 2.00000 + 11 3.0569 2.00000 + 12 3.1378 2.00000 + 13 3.4089 2.00000 + 14 3.4526 2.00000 + 15 3.7304 2.00000 + 16 3.7562 2.00001 + 17 3.8337 2.00007 + 18 3.8794 2.00027 + 19 3.9444 2.00143 + 20 3.9571 2.00191 + 21 5.4935 -0.00000 + 22 5.6190 -0.00000 + 23 5.6595 -0.00000 + 24 5.6971 -0.00000 + 25 6.2572 -0.00000 + 26 6.4373 -0.00000 + 27 6.5349 -0.00000 + 28 6.6623 -0.00000 + 29 7.5544 -0.00000 + 30 7.7763 -0.00000 + 31 7.7999 -0.00000 + 32 8.0567 -0.00000 + 33 8.1975 -0.00000 + 34 8.4749 -0.00000 + 35 8.6295 -0.00000 + 36 8.8594 -0.00000 + 37 9.0740 -0.00000 + 38 9.2761 -0.00000 + 39 9.5468 -0.00000 + 40 9.8311 -0.00000 + 41 10.4664 0.00000 + 42 10.6616 0.00000 + 43 10.7488 0.00000 + 44 10.9572 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0835 2.00000 + 2 1.6496 2.00000 + 3 1.8944 2.00000 + 4 2.1234 2.00000 + 5 2.1455 2.00000 + 6 2.1711 2.00000 + 7 2.6448 2.00000 + 8 2.7516 2.00000 + 9 2.7931 2.00000 + 10 2.8606 2.00000 + 11 2.9744 2.00000 + 12 3.0621 2.00000 + 13 3.1502 2.00000 + 14 3.1900 2.00000 + 15 3.4133 2.00000 + 16 3.6175 2.00000 + 17 3.7455 2.00000 + 18 3.8213 2.00005 + 19 3.8911 2.00037 + 20 4.2441 2.06598 + 21 6.1058 -0.00000 + 22 6.1948 -0.00000 + 23 6.2779 -0.00000 + 24 6.6180 -0.00000 + 25 6.8975 -0.00000 + 26 7.0141 -0.00000 + 27 7.0273 -0.00000 + 28 7.0832 -0.00000 + 29 7.2762 -0.00000 + 30 7.3046 -0.00000 + 31 7.3876 -0.00000 + 32 7.3910 -0.00000 + 33 8.1732 -0.00000 + 34 8.6001 -0.00000 + 35 8.6208 -0.00000 + 36 9.1389 -0.00000 + 37 9.2612 -0.00000 + 38 9.5887 -0.00000 + 39 9.6724 -0.00000 + 40 9.7469 -0.00000 + 41 9.8613 -0.00000 + 42 10.0627 0.00000 + 43 10.2196 0.00000 + 44 10.3453 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.1021 2.00000 + 2 1.6695 2.00000 + 3 1.8391 2.00000 + 4 1.9145 2.00000 + 5 2.1657 2.00000 + 6 2.4075 2.00000 + 7 2.5146 2.00000 + 8 2.6399 2.00000 + 9 2.8131 2.00000 + 10 2.8943 2.00000 + 11 3.0298 2.00000 + 12 3.0827 2.00000 + 13 3.2239 2.00000 + 14 3.4135 2.00000 + 15 3.4636 2.00000 + 16 3.4789 2.00000 + 17 3.7221 2.00000 + 18 3.9029 2.00051 + 19 3.9211 2.00081 + 20 4.2471 2.06447 + 21 5.9803 -0.00000 + 22 6.1351 -0.00000 + 23 6.1359 -0.00000 + 24 6.5205 -0.00000 + 25 6.6685 -0.00000 + 26 6.9333 -0.00000 + 27 6.9814 -0.00000 + 28 7.0971 -0.00000 + 29 7.2157 -0.00000 + 30 7.2760 -0.00000 + 31 7.3508 -0.00000 + 32 7.5639 -0.00000 + 33 8.3210 -0.00000 + 34 8.5630 -0.00000 + 35 8.7571 -0.00000 + 36 9.0554 -0.00000 + 37 9.2454 -0.00000 + 38 9.4796 -0.00000 + 39 9.7732 -0.00000 + 40 9.8086 -0.00000 + 41 9.9993 0.00000 + 42 10.2331 0.00000 + 43 10.4237 0.00000 + 44 10.5763 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1590 2.00000 + 2 1.5918 2.00000 + 3 1.7298 2.00000 + 4 1.9749 2.00000 + 5 2.1675 2.00000 + 6 2.2289 2.00000 + 7 2.4103 2.00000 + 8 2.6655 2.00000 + 9 2.8494 2.00000 + 10 2.9515 2.00000 + 11 3.1373 2.00000 + 12 3.2635 2.00000 + 13 3.3570 2.00000 + 14 3.5030 2.00000 + 15 3.5185 2.00000 + 16 3.5776 2.00000 + 17 3.7543 2.00001 + 18 3.8676 2.00020 + 19 4.0183 2.00693 + 20 4.2393 2.06786 + 21 5.6211 -0.00000 + 22 5.9798 -0.00000 + 23 6.0056 -0.00000 + 24 6.2224 -0.00000 + 25 6.4371 -0.00000 + 26 6.7068 -0.00000 + 27 6.8829 -0.00000 + 28 6.8850 -0.00000 + 29 7.2216 -0.00000 + 30 7.2863 -0.00000 + 31 7.4847 -0.00000 + 32 7.7804 -0.00000 + 33 8.3237 -0.00000 + 34 8.3348 -0.00000 + 35 9.0386 -0.00000 + 36 9.1198 -0.00000 + 37 9.3233 -0.00000 + 38 9.5035 -0.00000 + 39 9.8495 -0.00000 + 40 10.0390 0.00000 + 41 10.2489 0.00000 + 42 10.5184 0.00000 + 43 10.7185 0.00000 + 44 10.9600 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2567 2.00000 + 2 1.3993 2.00000 + 3 1.8317 2.00000 + 4 1.9772 2.00000 + 5 2.0768 2.00000 + 6 2.2203 2.00000 + 7 2.3323 2.00000 + 8 2.4773 2.00000 + 9 2.9469 2.00000 + 10 3.0707 2.00000 + 11 3.2574 2.00000 + 12 3.3615 2.00000 + 13 3.4596 2.00000 + 14 3.6152 2.00000 + 15 3.6376 2.00000 + 16 3.6731 2.00000 + 17 3.7599 2.00001 + 18 3.8543 2.00014 + 19 4.0035 2.00518 + 20 4.1719 2.05806 + 21 5.5301 -0.00000 + 22 5.7588 -0.00000 + 23 5.8336 -0.00000 + 24 5.9021 -0.00000 + 25 6.5024 -0.00000 + 26 6.5648 -0.00000 + 27 6.6342 -0.00000 + 28 6.7749 -0.00000 + 29 7.2625 -0.00000 + 30 7.3099 -0.00000 + 31 7.7159 -0.00000 + 32 7.9275 -0.00000 + 33 8.0617 -0.00000 + 34 8.0969 -0.00000 + 35 9.3075 -0.00000 + 36 9.3584 -0.00000 + 37 9.4258 -0.00000 + 38 9.5413 -0.00000 + 39 9.9045 -0.00000 + 40 10.2393 0.00000 + 41 10.2875 0.00000 + 42 10.3725 0.00000 + 43 11.0827 0.00000 + 44 11.2434 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1186 2.00000 + 2 1.4526 2.00000 + 3 2.1565 2.00000 + 4 2.1834 2.00000 + 5 2.1886 2.00000 + 6 2.2090 2.00000 + 7 2.4693 2.00000 + 8 2.5637 2.00000 + 9 2.5800 2.00000 + 10 3.0548 2.00000 + 11 3.1749 2.00000 + 12 3.2002 2.00000 + 13 3.2426 2.00000 + 14 3.2890 2.00000 + 15 3.3333 2.00000 + 16 3.4976 2.00000 + 17 3.6120 2.00000 + 18 3.8054 2.00003 + 19 3.8605 2.00016 + 20 4.1435 2.04520 + 21 6.0648 -0.00000 + 22 6.1242 -0.00000 + 23 6.3168 -0.00000 + 24 6.3439 -0.00000 + 25 6.8779 -0.00000 + 26 6.8890 -0.00000 + 27 7.0078 -0.00000 + 28 7.3228 -0.00000 + 29 7.3728 -0.00000 + 30 7.5533 -0.00000 + 31 7.6177 -0.00000 + 32 7.6291 -0.00000 + 33 8.2108 -0.00000 + 34 8.4051 -0.00000 + 35 8.5845 -0.00000 + 36 9.0804 -0.00000 + 37 9.4053 -0.00000 + 38 9.4132 -0.00000 + 39 9.6382 -0.00000 + 40 9.6794 -0.00000 + 41 9.9110 -0.00000 + 42 10.1591 0.00000 + 43 10.2381 0.00000 + 44 10.6109 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1374 2.00000 + 2 1.4721 2.00000 + 3 1.8754 2.00000 + 4 2.1857 2.00000 + 5 2.2163 2.00000 + 6 2.2274 2.00000 + 7 2.5464 2.00000 + 8 2.6026 2.00000 + 9 2.8567 2.00000 + 10 2.8667 2.00000 + 11 2.9952 2.00000 + 12 3.2109 2.00000 + 13 3.2970 2.00000 + 14 3.3826 2.00000 + 15 3.3885 2.00000 + 16 3.5466 2.00000 + 17 3.7124 2.00000 + 18 3.8156 2.00004 + 19 3.8691 2.00021 + 20 4.1508 2.04855 + 21 5.9517 -0.00000 + 22 6.0134 -0.00000 + 23 6.2056 -0.00000 + 24 6.3472 -0.00000 + 25 6.5557 -0.00000 + 26 6.8034 -0.00000 + 27 7.0151 -0.00000 + 28 7.2655 -0.00000 + 29 7.3424 -0.00000 + 30 7.5572 -0.00000 + 31 7.6580 -0.00000 + 32 7.6691 -0.00000 + 33 8.4058 -0.00000 + 34 8.4674 -0.00000 + 35 8.6494 -0.00000 + 36 9.0439 -0.00000 + 37 9.2965 -0.00000 + 38 9.3903 -0.00000 + 39 9.6921 -0.00000 + 40 9.7882 -0.00000 + 41 10.0093 0.00000 + 42 10.3291 0.00000 + 43 10.4256 0.00000 + 44 10.6815 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1945 2.00000 + 2 1.5314 2.00000 + 3 1.6282 2.00000 + 4 1.9704 2.00000 + 5 2.2489 2.00000 + 6 2.2898 2.00000 + 7 2.6503 2.00000 + 8 2.6584 2.00000 + 9 2.7575 2.00000 + 10 2.9597 2.00000 + 11 3.0759 2.00000 + 12 3.2322 2.00000 + 13 3.3043 2.00000 + 14 3.4303 2.00000 + 15 3.6152 2.00000 + 16 3.6371 2.00000 + 17 3.7509 2.00001 + 18 3.8065 2.00003 + 19 3.9849 2.00353 + 20 4.1576 2.05171 + 21 5.5943 -0.00000 + 22 5.8777 -0.00000 + 23 6.0055 -0.00000 + 24 6.0913 -0.00000 + 25 6.3810 -0.00000 + 26 6.6051 -0.00000 + 27 6.9725 -0.00000 + 28 6.9898 -0.00000 + 29 7.3955 -0.00000 + 30 7.5273 -0.00000 + 31 7.7402 -0.00000 + 32 7.8158 -0.00000 + 33 8.3423 -0.00000 + 34 8.4862 -0.00000 + 35 8.8687 -0.00000 + 36 9.1168 -0.00000 + 37 9.3593 -0.00000 + 38 9.4977 -0.00000 + 39 9.7216 -0.00000 + 40 9.9565 0.00000 + 41 10.2682 0.00000 + 42 10.4547 0.00000 + 43 10.7332 0.00000 + 44 10.9167 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2926 2.00000 + 2 1.4355 2.00000 + 3 1.6323 2.00000 + 4 1.7777 2.00000 + 5 2.3400 2.00000 + 6 2.4004 2.00000 + 7 2.4766 2.00000 + 8 2.5646 2.00000 + 9 2.7561 2.00000 + 10 2.9001 2.00000 + 11 3.3392 2.00000 + 12 3.4237 2.00000 + 13 3.5001 2.00000 + 14 3.5562 2.00000 + 15 3.5600 2.00000 + 16 3.6537 2.00000 + 17 3.7107 2.00000 + 18 3.8774 2.00026 + 19 4.0003 2.00485 + 20 4.1194 2.03444 + 21 5.4607 -0.00000 + 22 5.7395 -0.00000 + 23 5.7584 -0.00000 + 24 5.7830 -0.00000 + 25 6.4477 -0.00000 + 26 6.5460 -0.00000 + 27 6.6831 -0.00000 + 28 6.9278 -0.00000 + 29 7.4155 -0.00000 + 30 7.5445 -0.00000 + 31 7.8673 -0.00000 + 32 7.9381 -0.00000 + 33 8.1309 -0.00000 + 34 8.3186 -0.00000 + 35 9.1826 -0.00000 + 36 9.2838 -0.00000 + 37 9.4188 -0.00000 + 38 9.6088 -0.00000 + 39 9.6785 -0.00000 + 40 10.1431 0.00000 + 41 10.3949 0.00000 + 42 10.4110 0.00000 + 43 10.8366 0.00000 + 44 11.0375 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1901 2.00000 + 2 1.3005 2.00000 + 3 2.2237 2.00000 + 4 2.2735 2.00000 + 5 2.2846 2.00000 + 6 2.3301 2.00000 + 7 2.3896 2.00000 + 8 2.4066 2.00000 + 9 2.5346 2.00000 + 10 2.8756 2.00000 + 11 3.1940 2.00000 + 12 3.3063 2.00000 + 13 3.3255 2.00000 + 14 3.4441 2.00000 + 15 3.4513 2.00000 + 16 3.5106 2.00000 + 17 3.6101 2.00000 + 18 3.7190 2.00000 + 19 3.7246 2.00000 + 20 3.9429 2.00138 + 21 6.0079 -0.00000 + 22 6.0917 -0.00000 + 23 6.2838 -0.00000 + 24 6.4938 -0.00000 + 25 6.5594 -0.00000 + 26 6.6956 -0.00000 + 27 7.1554 -0.00000 + 28 7.2937 -0.00000 + 29 7.5626 -0.00000 + 30 7.6611 -0.00000 + 31 8.0026 -0.00000 + 32 8.0573 -0.00000 + 33 8.1872 -0.00000 + 34 8.4067 -0.00000 + 35 8.5086 -0.00000 + 36 9.1120 -0.00000 + 37 9.1724 -0.00000 + 38 9.2542 -0.00000 + 39 9.5413 -0.00000 + 40 9.6482 -0.00000 + 41 9.7911 -0.00000 + 42 9.9405 0.00000 + 43 10.7021 0.00000 + 44 10.9194 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2091 2.00000 + 2 1.3197 2.00000 + 3 1.9487 2.00000 + 4 2.0604 2.00000 + 5 2.2962 2.00000 + 6 2.4265 2.00000 + 7 2.5317 2.00000 + 8 2.6129 2.00000 + 9 2.7337 2.00000 + 10 2.9007 2.00000 + 11 2.9975 2.00000 + 12 3.1375 2.00000 + 13 3.2437 2.00000 + 14 3.5088 2.00000 + 15 3.5196 2.00000 + 16 3.6292 2.00000 + 17 3.6920 2.00000 + 18 3.7095 2.00000 + 19 3.8286 2.00006 + 20 3.9583 2.00197 + 21 5.9542 -0.00000 + 22 6.0091 -0.00000 + 23 6.1013 -0.00000 + 24 6.3149 -0.00000 + 25 6.4674 -0.00000 + 26 6.6263 -0.00000 + 27 7.1328 -0.00000 + 28 7.2366 -0.00000 + 29 7.5597 -0.00000 + 30 7.6860 -0.00000 + 31 7.9465 -0.00000 + 32 8.1224 -0.00000 + 33 8.2414 -0.00000 + 34 8.4704 -0.00000 + 35 8.6909 -0.00000 + 36 9.0784 -0.00000 + 37 9.1415 -0.00000 + 38 9.2820 -0.00000 + 39 9.5680 -0.00000 + 40 9.7401 -0.00000 + 41 9.8944 -0.00000 + 42 10.0959 0.00000 + 43 10.6912 0.00000 + 44 10.8874 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2667 2.00000 + 2 1.3781 2.00000 + 3 1.7022 2.00000 + 4 1.8155 2.00000 + 5 2.3553 2.00000 + 6 2.4868 2.00000 + 7 2.5987 2.00000 + 8 2.7821 2.00000 + 9 2.8876 2.00000 + 10 2.9580 2.00000 + 11 3.0364 2.00000 + 12 3.0621 2.00000 + 13 3.1259 2.00000 + 14 3.3587 2.00000 + 15 3.7093 2.00000 + 16 3.7112 2.00000 + 17 3.7810 2.00001 + 18 3.8604 2.00016 + 19 3.9379 2.00122 + 20 3.9970 2.00454 + 21 5.6724 -0.00000 + 22 5.7997 -0.00000 + 23 5.8886 -0.00000 + 24 5.8958 -0.00000 + 25 6.4579 -0.00000 + 26 6.5277 -0.00000 + 27 7.0161 -0.00000 + 28 7.0173 -0.00000 + 29 7.6145 -0.00000 + 30 7.7794 -0.00000 + 31 7.9331 -0.00000 + 32 8.1530 -0.00000 + 33 8.2328 -0.00000 + 34 8.5655 -0.00000 + 35 8.8055 -0.00000 + 36 9.1656 -0.00000 + 37 9.1730 -0.00000 + 38 9.3589 -0.00000 + 39 9.7402 -0.00000 + 40 9.9732 0.00000 + 41 10.0463 0.00000 + 42 10.3562 0.00000 + 43 10.6458 0.00000 + 44 10.9342 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3655 2.00000 + 2 1.4778 2.00000 + 3 1.5092 2.00000 + 4 1.6224 2.00000 + 5 2.4539 2.00000 + 6 2.5863 2.00000 + 7 2.5908 2.00000 + 8 2.7169 2.00000 + 9 2.7302 2.00000 + 10 2.8610 2.00000 + 11 3.0615 2.00000 + 12 3.2015 2.00000 + 13 3.4523 2.00000 + 14 3.5022 2.00000 + 15 3.7253 2.00000 + 16 3.7372 2.00000 + 17 3.7767 2.00001 + 18 3.9297 2.00100 + 19 3.9471 2.00152 + 20 4.0192 2.00705 + 21 5.4732 -0.00000 + 22 5.5959 -0.00000 + 23 5.6757 -0.00000 + 24 5.6912 -0.00000 + 25 6.4951 -0.00000 + 26 6.5350 -0.00000 + 27 6.7675 -0.00000 + 28 6.8783 -0.00000 + 29 7.6703 -0.00000 + 30 7.8701 -0.00000 + 31 7.8734 -0.00000 + 32 8.0807 -0.00000 + 33 8.2988 -0.00000 + 34 8.6789 -0.00000 + 35 8.8309 -0.00000 + 36 9.0765 -0.00000 + 37 9.3355 -0.00000 + 38 9.4551 -0.00000 + 39 9.8277 -0.00000 + 40 10.0932 0.00000 + 41 10.2677 0.00000 + 42 10.5185 0.00000 + 43 10.6328 0.00000 + 44 10.8481 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.2038 2.00000 + 2 1.7913 2.00000 + 3 1.8365 2.00000 + 4 2.0431 2.00000 + 5 2.2433 2.00000 + 6 2.2939 2.00000 + 7 2.4972 2.00000 + 8 2.7405 2.00000 + 9 2.7689 2.00000 + 10 2.8560 2.00000 + 11 2.8625 2.00000 + 12 2.9091 2.00000 + 13 3.0827 2.00000 + 14 3.1048 2.00000 + 15 3.4144 2.00000 + 16 3.4298 2.00000 + 17 3.6037 2.00000 + 18 3.6175 2.00000 + 19 3.6760 2.00000 + 20 4.3655 1.74052 + 21 6.1314 -0.00000 + 22 6.4742 -0.00000 + 23 6.5364 -0.00000 + 24 7.0791 -0.00000 + 25 7.1587 -0.00000 + 26 7.2414 -0.00000 + 27 7.2523 -0.00000 + 28 7.3208 -0.00000 + 29 7.4476 -0.00000 + 30 7.5282 -0.00000 + 31 7.5874 -0.00000 + 32 7.8831 -0.00000 + 33 8.1470 -0.00000 + 34 8.2147 -0.00000 + 35 8.6006 -0.00000 + 36 9.2203 -0.00000 + 37 9.3651 -0.00000 + 38 9.3888 -0.00000 + 39 9.4913 -0.00000 + 40 9.5405 -0.00000 + 41 9.6839 -0.00000 + 42 9.7344 -0.00000 + 43 10.0172 0.00000 + 44 10.6939 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2228 2.00000 + 2 1.8098 2.00000 + 3 1.8573 2.00000 + 4 1.9639 2.00000 + 5 2.0633 2.00000 + 6 2.5032 2.00000 + 7 2.5191 2.00000 + 8 2.6046 2.00000 + 9 2.6364 2.00000 + 10 2.7964 2.00000 + 11 2.7992 2.00000 + 12 3.1236 2.00000 + 13 3.1904 2.00000 + 14 3.2132 2.00000 + 15 3.3921 2.00000 + 16 3.4310 2.00000 + 17 3.6033 2.00000 + 18 3.7312 2.00000 + 19 3.7835 2.00002 + 20 4.3663 1.73614 + 21 6.0700 -0.00000 + 22 6.1942 -0.00000 + 23 6.4125 -0.00000 + 24 6.8162 -0.00000 + 25 6.8987 -0.00000 + 26 7.1507 -0.00000 + 27 7.2698 -0.00000 + 28 7.2794 -0.00000 + 29 7.4021 -0.00000 + 30 7.6221 -0.00000 + 31 7.6227 -0.00000 + 32 7.8547 -0.00000 + 33 8.3270 -0.00000 + 34 8.4583 -0.00000 + 35 8.6644 -0.00000 + 36 9.0730 -0.00000 + 37 9.1994 -0.00000 + 38 9.4288 -0.00000 + 39 9.5585 -0.00000 + 40 9.7001 -0.00000 + 41 9.8993 -0.00000 + 42 9.9092 -0.00000 + 43 10.2786 0.00000 + 44 10.6427 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2804 2.00000 + 2 1.7165 2.00000 + 3 1.8663 2.00000 + 4 1.9196 2.00000 + 5 2.1238 2.00000 + 6 2.2901 2.00000 + 7 2.3671 2.00000 + 8 2.5654 2.00000 + 9 2.5682 2.00000 + 10 2.8281 2.00000 + 11 2.9732 2.00000 + 12 3.0708 2.00000 + 13 3.2630 2.00000 + 14 3.4319 2.00000 + 15 3.5104 2.00000 + 16 3.6782 2.00000 + 17 3.7143 2.00000 + 18 3.8203 2.00005 + 19 3.9361 2.00117 + 20 4.3471 1.83295 + 21 5.7486 -0.00000 + 22 5.9174 -0.00000 + 23 6.1136 -0.00000 + 24 6.3043 -0.00000 + 25 6.8175 -0.00000 + 26 6.8380 -0.00000 + 27 6.9010 -0.00000 + 28 7.2367 -0.00000 + 29 7.4834 -0.00000 + 30 7.7090 -0.00000 + 31 7.7561 -0.00000 + 32 7.8954 -0.00000 + 33 8.2336 -0.00000 + 34 8.4394 -0.00000 + 35 9.0699 -0.00000 + 36 9.1780 -0.00000 + 37 9.3580 -0.00000 + 38 9.4397 -0.00000 + 39 9.6189 -0.00000 + 40 9.9791 0.00000 + 41 10.2310 0.00000 + 42 10.2708 0.00000 + 43 10.4460 0.00000 + 44 10.7755 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3792 2.00000 + 2 1.5230 2.00000 + 3 1.9627 2.00000 + 4 2.0223 2.00000 + 5 2.1032 2.00000 + 6 2.1721 2.00000 + 7 2.2334 2.00000 + 8 2.3787 2.00000 + 9 2.6603 2.00000 + 10 2.7948 2.00000 + 11 2.9443 2.00000 + 12 3.0776 2.00000 + 13 3.5046 2.00000 + 14 3.6630 2.00000 + 15 3.6970 2.00000 + 16 3.7301 2.00000 + 17 3.8295 2.00007 + 18 3.8989 2.00046 + 19 4.0230 2.00758 + 20 4.2482 2.06389 + 21 5.5733 -0.00000 + 22 5.7783 -0.00000 + 23 5.8025 -0.00000 + 24 5.9234 -0.00000 + 25 6.6350 -0.00000 + 26 6.6634 -0.00000 + 27 6.8625 -0.00000 + 28 7.1250 -0.00000 + 29 7.5352 -0.00000 + 30 7.6516 -0.00000 + 31 7.8620 -0.00000 + 32 8.0089 -0.00000 + 33 8.0238 -0.00000 + 34 8.3411 -0.00000 + 35 9.2948 -0.00000 + 36 9.4202 -0.00000 + 37 9.4457 -0.00000 + 38 9.5790 -0.00000 + 39 9.7446 -0.00000 + 40 10.1899 0.00000 + 41 10.1921 0.00000 + 42 10.3930 0.00000 + 43 10.8366 0.00000 + 44 11.1338 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2405 2.00000 + 2 1.5877 2.00000 + 3 1.8789 2.00000 + 4 2.2551 2.00000 + 5 2.2967 2.00000 + 6 2.3330 2.00000 + 7 2.3388 2.00000 + 8 2.5928 2.00000 + 9 2.6908 2.00000 + 10 2.9022 2.00000 + 11 2.9439 2.00000 + 12 3.0783 2.00000 + 13 3.2469 2.00000 + 14 3.2732 2.00000 + 15 3.2773 2.00000 + 16 3.3261 2.00000 + 17 3.4608 2.00000 + 18 3.6752 2.00000 + 19 3.6892 2.00000 + 20 4.1570 2.05141 + 21 6.1432 -0.00000 + 22 6.3833 -0.00000 + 23 6.5204 -0.00000 + 24 6.8087 -0.00000 + 25 7.0010 -0.00000 + 26 7.1166 -0.00000 + 27 7.3941 -0.00000 + 28 7.5410 -0.00000 + 29 7.5682 -0.00000 + 30 7.6024 -0.00000 + 31 7.6402 -0.00000 + 32 8.1178 -0.00000 + 33 8.2040 -0.00000 + 34 8.2119 -0.00000 + 35 8.8043 -0.00000 + 36 9.0706 -0.00000 + 37 9.3090 -0.00000 + 38 9.4287 -0.00000 + 39 9.4953 -0.00000 + 40 9.6224 -0.00000 + 41 9.9065 -0.00000 + 42 10.0635 0.00000 + 43 10.0639 0.00000 + 44 10.7431 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2596 2.00000 + 2 1.6073 2.00000 + 3 1.8987 2.00000 + 4 2.0016 2.00000 + 5 2.2892 2.00000 + 6 2.3378 2.00000 + 7 2.3672 2.00000 + 8 2.6394 2.00000 + 9 2.6663 2.00000 + 10 2.9771 2.00000 + 11 3.0032 2.00000 + 12 3.0506 2.00000 + 13 3.1160 2.00000 + 14 3.2597 2.00000 + 15 3.3909 2.00000 + 16 3.5401 2.00000 + 17 3.5644 2.00000 + 18 3.6347 2.00000 + 19 3.7351 2.00000 + 20 4.1645 2.05482 + 21 6.0666 -0.00000 + 22 6.1235 -0.00000 + 23 6.4235 -0.00000 + 24 6.6333 -0.00000 + 25 6.7809 -0.00000 + 26 7.0671 -0.00000 + 27 7.2944 -0.00000 + 28 7.3792 -0.00000 + 29 7.5565 -0.00000 + 30 7.7140 -0.00000 + 31 7.7683 -0.00000 + 32 8.1785 -0.00000 + 33 8.3280 -0.00000 + 34 8.4135 -0.00000 + 35 8.7288 -0.00000 + 36 9.0927 -0.00000 + 37 9.1679 -0.00000 + 38 9.5555 -0.00000 + 39 9.5725 -0.00000 + 40 9.6593 -0.00000 + 41 10.0516 0.00000 + 42 10.2119 0.00000 + 43 10.2255 0.00000 + 44 10.7173 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3174 2.00000 + 2 1.6666 2.00000 + 3 1.7544 2.00000 + 4 1.9581 2.00000 + 5 2.1051 2.00000 + 6 2.3494 2.00000 + 7 2.3795 2.00000 + 8 2.4430 2.00000 + 9 2.7799 2.00000 + 10 2.8418 2.00000 + 11 3.0335 2.00000 + 12 3.2001 2.00000 + 13 3.3320 2.00000 + 14 3.4209 2.00000 + 15 3.5162 2.00000 + 16 3.5548 2.00000 + 17 3.6959 2.00000 + 18 3.7698 2.00001 + 19 3.8636 2.00018 + 20 4.1728 2.05845 + 21 5.6927 -0.00000 + 22 5.8672 -0.00000 + 23 6.0936 -0.00000 + 24 6.1063 -0.00000 + 25 6.7976 -0.00000 + 26 6.8820 -0.00000 + 27 7.0172 -0.00000 + 28 7.4751 -0.00000 + 29 7.5253 -0.00000 + 30 7.7182 -0.00000 + 31 7.8441 -0.00000 + 32 8.1200 -0.00000 + 33 8.2801 -0.00000 + 34 8.6169 -0.00000 + 35 8.9526 -0.00000 + 36 9.1899 -0.00000 + 37 9.3100 -0.00000 + 38 9.6266 -0.00000 + 39 9.6609 -0.00000 + 40 9.8127 -0.00000 + 41 10.2047 0.00000 + 42 10.3885 0.00000 + 43 10.5285 0.00000 + 44 10.8118 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4165 2.00000 + 2 1.5607 2.00000 + 3 1.7672 2.00000 + 4 1.9119 2.00000 + 5 2.0608 2.00000 + 6 2.2046 2.00000 + 7 2.4497 2.00000 + 8 2.5271 2.00000 + 9 2.5966 2.00000 + 10 2.6673 2.00000 + 11 3.2035 2.00000 + 12 3.3095 2.00000 + 13 3.5024 2.00000 + 14 3.5865 2.00000 + 15 3.6176 2.00000 + 16 3.6653 2.00000 + 17 3.7119 2.00000 + 18 3.8744 2.00024 + 19 3.9874 2.00372 + 20 4.1349 2.04126 + 21 5.4866 -0.00000 + 22 5.6795 -0.00000 + 23 5.7346 -0.00000 + 24 5.7371 -0.00000 + 25 6.7619 -0.00000 + 26 6.8307 -0.00000 + 27 6.8539 -0.00000 + 28 7.4964 -0.00000 + 29 7.5721 -0.00000 + 30 7.6607 -0.00000 + 31 7.9231 -0.00000 + 32 8.0573 -0.00000 + 33 8.0649 -0.00000 + 34 8.6333 -0.00000 + 35 9.2549 -0.00000 + 36 9.3775 -0.00000 + 37 9.5107 -0.00000 + 38 9.6411 -0.00000 + 39 9.6746 -0.00000 + 40 9.9789 0.00000 + 41 10.2656 0.00000 + 42 10.4132 0.00000 + 43 10.6594 0.00000 + 44 10.8351 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3152 2.00000 + 2 1.4299 2.00000 + 3 1.9644 2.00000 + 4 2.0939 2.00000 + 5 2.3516 2.00000 + 6 2.4109 2.00000 + 7 2.4559 2.00000 + 8 2.5219 2.00000 + 9 2.6869 2.00000 + 10 2.9872 2.00000 + 11 3.0101 2.00000 + 12 3.0412 2.00000 + 13 3.1072 2.00000 + 14 3.2038 2.00000 + 15 3.4429 2.00000 + 16 3.4752 2.00000 + 17 3.5270 2.00000 + 18 3.6438 2.00000 + 19 3.6604 2.00000 + 20 3.8283 2.00006 + 21 6.2285 -0.00000 + 22 6.3372 -0.00000 + 23 6.5783 -0.00000 + 24 6.6350 -0.00000 + 25 6.7500 -0.00000 + 26 6.7819 -0.00000 + 27 7.4965 -0.00000 + 28 7.5525 -0.00000 + 29 7.7946 -0.00000 + 30 7.8156 -0.00000 + 31 7.9026 -0.00000 + 32 8.0054 -0.00000 + 33 8.5180 -0.00000 + 34 8.5190 -0.00000 + 35 8.7110 -0.00000 + 36 9.1354 -0.00000 + 37 9.1840 -0.00000 + 38 9.2890 -0.00000 + 39 9.5430 -0.00000 + 40 9.6770 -0.00000 + 41 9.7801 -0.00000 + 42 10.0690 0.00000 + 43 10.5707 0.00000 + 44 10.7824 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3344 2.00000 + 2 1.4493 2.00000 + 3 1.9842 2.00000 + 4 2.0767 2.00000 + 5 2.1150 2.00000 + 6 2.1923 2.00000 + 7 2.6638 2.00000 + 8 2.7294 2.00000 + 9 2.7521 2.00000 + 10 2.8486 2.00000 + 11 2.8600 2.00000 + 12 3.0798 2.00000 + 13 3.2701 2.00000 + 14 3.3805 2.00000 + 15 3.3941 2.00000 + 16 3.4880 2.00000 + 17 3.5996 2.00000 + 18 3.6564 2.00000 + 19 3.6881 2.00000 + 20 3.8433 2.00010 + 21 6.1235 -0.00000 + 22 6.1551 -0.00000 + 23 6.3061 -0.00000 + 24 6.3882 -0.00000 + 25 6.7820 -0.00000 + 26 6.8882 -0.00000 + 27 7.3714 -0.00000 + 28 7.3831 -0.00000 + 29 7.7767 -0.00000 + 30 7.8662 -0.00000 + 31 7.9910 -0.00000 + 32 8.1750 -0.00000 + 33 8.4703 -0.00000 + 34 8.6392 -0.00000 + 35 8.7286 -0.00000 + 36 9.1745 -0.00000 + 37 9.2526 -0.00000 + 38 9.2816 -0.00000 + 39 9.6086 -0.00000 + 40 9.7953 -0.00000 + 41 9.8703 -0.00000 + 42 10.1316 0.00000 + 43 10.5677 0.00000 + 44 10.7255 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3927 2.00000 + 2 1.5082 2.00000 + 3 1.8309 2.00000 + 4 1.9469 2.00000 + 5 2.0453 2.00000 + 6 2.1749 2.00000 + 7 2.4804 2.00000 + 8 2.6121 2.00000 + 9 2.7659 2.00000 + 10 3.0747 2.00000 + 11 3.1339 2.00000 + 12 3.1764 2.00000 + 13 3.2338 2.00000 + 14 3.4072 2.00000 + 15 3.5558 2.00000 + 16 3.6173 2.00000 + 17 3.6397 2.00000 + 18 3.7771 2.00001 + 19 3.7849 2.00002 + 20 3.8878 2.00034 + 21 5.7235 -0.00000 + 22 5.8372 -0.00000 + 23 5.9243 -0.00000 + 24 5.9835 -0.00000 + 25 6.8366 -0.00000 + 26 6.8685 -0.00000 + 27 7.1807 -0.00000 + 28 7.3359 -0.00000 + 29 7.7751 -0.00000 + 30 7.8827 -0.00000 + 31 7.9796 -0.00000 + 32 8.2324 -0.00000 + 33 8.4575 -0.00000 + 34 8.7052 -0.00000 + 35 8.9113 -0.00000 + 36 9.2636 -0.00000 + 37 9.3499 -0.00000 + 38 9.4297 -0.00000 + 39 9.7254 -0.00000 + 40 9.9384 0.00000 + 41 10.0361 0.00000 + 42 10.3194 0.00000 + 43 10.5433 0.00000 + 44 10.8337 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4924 2.00000 + 2 1.6086 2.00000 + 3 1.6372 2.00000 + 4 1.7539 2.00000 + 5 2.1464 2.00000 + 6 2.2764 2.00000 + 7 2.2923 2.00000 + 8 2.4240 2.00000 + 9 2.8595 2.00000 + 10 2.9889 2.00000 + 11 3.1982 2.00000 + 12 3.3021 2.00000 + 13 3.4631 2.00000 + 14 3.5531 2.00000 + 15 3.5789 2.00000 + 16 3.6907 2.00000 + 17 3.7029 2.00000 + 18 3.8703 2.00021 + 19 3.8822 2.00030 + 20 3.9489 2.00158 + 21 5.4611 -0.00000 + 22 5.5427 -0.00000 + 23 5.6236 -0.00000 + 24 5.6565 -0.00000 + 25 6.8344 -0.00000 + 26 6.8611 -0.00000 + 27 7.0822 -0.00000 + 28 7.3429 -0.00000 + 29 7.8117 -0.00000 + 30 7.8996 -0.00000 + 31 7.9355 -0.00000 + 32 8.0693 -0.00000 + 33 8.4583 -0.00000 + 34 8.9241 -0.00000 + 35 8.9720 -0.00000 + 36 9.1998 -0.00000 + 37 9.5047 -0.00000 + 38 9.5700 -0.00000 + 39 9.7745 -0.00000 + 40 9.9358 0.00000 + 41 10.2011 0.00000 + 42 10.5010 0.00000 + 43 10.6001 0.00000 + 44 10.8566 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3677 2.00000 + 2 1.5778 2.00000 + 3 1.9796 2.00000 + 4 2.2090 2.00000 + 5 2.2362 2.00000 + 6 2.3978 2.00000 + 7 2.4504 2.00000 + 8 2.5218 2.00000 + 9 2.6280 2.00000 + 10 2.6505 2.00000 + 11 2.9658 2.00000 + 12 3.0390 2.00000 + 13 3.1756 2.00000 + 14 3.1996 2.00000 + 15 3.2271 2.00000 + 16 3.2416 2.00000 + 17 3.3876 2.00000 + 18 3.4106 2.00000 + 19 3.9165 2.00072 + 20 4.1904 2.06523 + 21 6.3844 -0.00000 + 22 6.5996 -0.00000 + 23 6.8432 -0.00000 + 24 7.1348 -0.00000 + 25 7.2196 -0.00000 + 26 7.2401 -0.00000 + 27 7.2575 -0.00000 + 28 7.4029 -0.00000 + 29 7.7544 -0.00000 + 30 7.7879 -0.00000 + 31 7.8028 -0.00000 + 32 8.0677 -0.00000 + 33 8.2202 -0.00000 + 34 8.4495 -0.00000 + 35 8.7245 -0.00000 + 36 9.0893 -0.00000 + 37 9.1764 -0.00000 + 38 9.3738 -0.00000 + 39 9.4822 -0.00000 + 40 9.4913 -0.00000 + 41 9.5148 -0.00000 + 42 9.6522 -0.00000 + 43 9.6661 -0.00000 + 44 9.9332 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3869 2.00000 + 2 1.5971 2.00000 + 3 1.9993 2.00000 + 4 2.1257 2.00000 + 5 2.2395 2.00000 + 6 2.2496 2.00000 + 7 2.3524 2.00000 + 8 2.5001 2.00000 + 9 2.7204 2.00000 + 10 2.7979 2.00000 + 11 2.9224 2.00000 + 12 2.9491 2.00000 + 13 3.0367 2.00000 + 14 3.1824 2.00000 + 15 3.3080 2.00000 + 16 3.4770 2.00000 + 17 3.4790 2.00000 + 18 3.6080 2.00000 + 19 3.9419 2.00134 + 20 4.2012 2.06838 + 21 6.2379 -0.00000 + 22 6.3081 -0.00000 + 23 6.6356 -0.00000 + 24 6.7817 -0.00000 + 25 7.0898 -0.00000 + 26 7.1211 -0.00000 + 27 7.2899 -0.00000 + 28 7.3434 -0.00000 + 29 7.7256 -0.00000 + 30 7.7528 -0.00000 + 31 8.0554 -0.00000 + 32 8.2921 -0.00000 + 33 8.3290 -0.00000 + 34 8.6145 -0.00000 + 35 8.7070 -0.00000 + 36 8.9973 -0.00000 + 37 9.0385 -0.00000 + 38 9.3374 -0.00000 + 39 9.3923 -0.00000 + 40 9.6456 -0.00000 + 41 9.7168 -0.00000 + 42 9.7760 -0.00000 + 43 9.9580 0.00000 + 44 10.1370 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4453 2.00000 + 2 1.6559 2.00000 + 3 1.8835 2.00000 + 4 2.0523 2.00000 + 5 2.1011 2.00000 + 6 2.2948 2.00000 + 7 2.3227 2.00000 + 8 2.4935 2.00000 + 9 2.5581 2.00000 + 10 2.7179 2.00000 + 11 2.7401 2.00000 + 12 2.9603 2.00000 + 13 3.2257 2.00000 + 14 3.3617 2.00000 + 15 3.5902 2.00000 + 16 3.6968 2.00000 + 17 3.7292 2.00000 + 18 3.7759 2.00001 + 19 4.0108 2.00599 + 20 4.2174 2.07084 + 21 5.8493 -0.00000 + 22 5.9097 -0.00000 + 23 6.1808 -0.00000 + 24 6.2517 -0.00000 + 25 6.9665 -0.00000 + 26 7.0145 -0.00000 + 27 7.0868 -0.00000 + 28 7.1914 -0.00000 + 29 7.7494 -0.00000 + 30 7.7839 -0.00000 + 31 8.1556 -0.00000 + 32 8.1955 -0.00000 + 33 8.4591 -0.00000 + 34 8.8501 -0.00000 + 35 9.0062 -0.00000 + 36 9.0099 -0.00000 + 37 9.1472 -0.00000 + 38 9.3707 -0.00000 + 39 9.3762 -0.00000 + 40 9.7125 -0.00000 + 41 10.0438 0.00000 + 42 10.0855 0.00000 + 43 10.3729 0.00000 + 44 10.5723 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5451 2.00000 + 2 1.6899 2.00000 + 3 1.7560 2.00000 + 4 1.9001 2.00000 + 5 2.1625 2.00000 + 6 2.3061 2.00000 + 7 2.3925 2.00000 + 8 2.4214 2.00000 + 9 2.5327 2.00000 + 10 2.5623 2.00000 + 11 2.6610 2.00000 + 12 2.7975 2.00000 + 13 3.5887 2.00000 + 14 3.6512 2.00000 + 15 3.7386 2.00000 + 16 3.7624 2.00001 + 17 3.9057 2.00055 + 18 3.9744 2.00282 + 19 4.0210 2.00729 + 20 4.1688 2.05675 + 21 5.6121 -0.00000 + 22 5.6927 -0.00000 + 23 5.7811 -0.00000 + 24 5.8331 -0.00000 + 25 6.8638 -0.00000 + 26 6.9058 -0.00000 + 27 6.9713 -0.00000 + 28 7.0879 -0.00000 + 29 7.8115 -0.00000 + 30 7.8596 -0.00000 + 31 7.9730 -0.00000 + 32 7.9965 -0.00000 + 33 8.6179 -0.00000 + 34 8.8892 -0.00000 + 35 9.1794 -0.00000 + 36 9.2016 -0.00000 + 37 9.3439 -0.00000 + 38 9.3573 -0.00000 + 39 9.4601 -0.00000 + 40 9.6503 -0.00000 + 41 10.3472 0.00000 + 42 10.5637 0.00000 + 43 10.6267 0.00000 + 44 10.9406 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4064 2.00000 + 2 1.6184 2.00000 + 3 1.7689 2.00000 + 4 1.9960 2.00000 + 5 2.4480 2.00000 + 6 2.4907 2.00000 + 7 2.5209 2.00000 + 8 2.6580 2.00000 + 9 2.7118 2.00000 + 10 2.8112 2.00000 + 11 2.8167 2.00000 + 12 2.8597 2.00000 + 13 3.0111 2.00000 + 14 3.0566 2.00000 + 15 3.3811 2.00000 + 16 3.4282 2.00000 + 17 3.5213 2.00000 + 18 3.5477 2.00000 + 19 3.6817 2.00000 + 20 3.9464 2.00149 + 21 6.4214 -0.00000 + 22 6.5736 -0.00000 + 23 6.6321 -0.00000 + 24 6.8534 -0.00000 + 25 7.2771 -0.00000 + 26 7.3065 -0.00000 + 27 7.4949 -0.00000 + 28 7.5575 -0.00000 + 29 7.6288 -0.00000 + 30 7.6314 -0.00000 + 31 7.7924 -0.00000 + 32 8.0011 -0.00000 + 33 8.3656 -0.00000 + 34 8.7143 -0.00000 + 35 8.8464 -0.00000 + 36 9.0697 -0.00000 + 37 9.2301 -0.00000 + 38 9.2554 -0.00000 + 39 9.5297 -0.00000 + 40 9.7117 -0.00000 + 41 9.8237 -0.00000 + 42 9.8465 -0.00000 + 43 9.8588 -0.00000 + 44 10.1855 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4256 2.00000 + 2 1.6378 2.00000 + 3 1.7888 2.00000 + 4 2.0154 2.00000 + 5 2.1719 2.00000 + 6 2.3728 2.00000 + 7 2.5268 2.00000 + 8 2.5780 2.00000 + 9 2.7332 2.00000 + 10 2.7746 2.00000 + 11 2.9046 2.00000 + 12 3.0172 2.00000 + 13 3.1437 2.00000 + 14 3.2321 2.00000 + 15 3.3086 2.00000 + 16 3.4055 2.00000 + 17 3.5938 2.00000 + 18 3.6538 2.00000 + 19 3.7169 2.00000 + 20 3.9622 2.00215 + 21 6.2383 -0.00000 + 22 6.2473 -0.00000 + 23 6.5465 -0.00000 + 24 6.6167 -0.00000 + 25 7.0964 -0.00000 + 26 7.1085 -0.00000 + 27 7.4771 -0.00000 + 28 7.5122 -0.00000 + 29 7.7443 -0.00000 + 30 7.8504 -0.00000 + 31 7.9399 -0.00000 + 32 8.0952 -0.00000 + 33 8.4182 -0.00000 + 34 8.6816 -0.00000 + 35 8.8479 -0.00000 + 36 9.0774 -0.00000 + 37 9.1583 -0.00000 + 38 9.3088 -0.00000 + 39 9.6421 -0.00000 + 40 9.7417 -0.00000 + 41 9.7687 -0.00000 + 42 9.9765 0.00000 + 43 10.1755 0.00000 + 44 10.3237 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4843 2.00000 + 2 1.6968 2.00000 + 3 1.8489 2.00000 + 4 1.9230 2.00000 + 5 2.0782 2.00000 + 6 2.1353 2.00000 + 7 2.2912 2.00000 + 8 2.5143 2.00000 + 9 2.6266 2.00000 + 10 2.8603 2.00000 + 11 3.0035 2.00000 + 12 3.1737 2.00000 + 13 3.2951 2.00000 + 14 3.3875 2.00000 + 15 3.4958 2.00000 + 16 3.5768 2.00000 + 17 3.7190 2.00000 + 18 3.7481 2.00000 + 19 3.8308 2.00007 + 20 4.0035 2.00518 + 21 5.7911 -0.00000 + 22 5.8652 -0.00000 + 23 6.0899 -0.00000 + 24 6.0944 -0.00000 + 25 7.0846 -0.00000 + 26 7.1018 -0.00000 + 27 7.2590 -0.00000 + 28 7.4178 -0.00000 + 29 7.7934 -0.00000 + 30 7.8556 -0.00000 + 31 8.1203 -0.00000 + 32 8.2196 -0.00000 + 33 8.4097 -0.00000 + 34 8.7710 -0.00000 + 35 8.9579 -0.00000 + 36 9.1414 -0.00000 + 37 9.2197 -0.00000 + 38 9.3912 -0.00000 + 39 9.6846 -0.00000 + 40 9.8770 -0.00000 + 41 9.9079 -0.00000 + 42 10.1068 0.00000 + 43 10.5175 0.00000 + 44 10.7289 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5844 2.00000 + 2 1.7296 2.00000 + 3 1.7969 2.00000 + 4 1.9348 2.00000 + 5 1.9591 2.00000 + 6 2.0993 2.00000 + 7 2.1786 2.00000 + 8 2.3255 2.00000 + 9 2.7193 2.00000 + 10 2.8493 2.00000 + 11 2.9514 2.00000 + 12 3.0706 2.00000 + 13 3.5880 2.00000 + 14 3.6409 2.00000 + 15 3.6773 2.00000 + 16 3.7045 2.00000 + 17 3.7836 2.00002 + 18 3.8976 2.00045 + 19 3.9054 2.00054 + 20 4.0222 2.00747 + 21 5.5167 -0.00000 + 22 5.5856 -0.00000 + 23 5.6759 -0.00000 + 24 5.6835 -0.00000 + 25 7.0748 -0.00000 + 26 7.1202 -0.00000 + 27 7.1295 -0.00000 + 28 7.3700 -0.00000 + 29 7.8069 -0.00000 + 30 7.8813 -0.00000 + 31 8.0510 -0.00000 + 32 8.0674 -0.00000 + 33 8.4349 -0.00000 + 34 8.9920 -0.00000 + 35 9.0643 -0.00000 + 36 9.3100 -0.00000 + 37 9.3473 -0.00000 + 38 9.4959 -0.00000 + 39 9.5405 -0.00000 + 40 9.7689 -0.00000 + 41 10.1270 0.00000 + 42 10.3387 0.00000 + 43 10.6516 0.00000 + 44 10.8975 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4847 2.00000 + 2 1.6047 2.00000 + 3 1.7006 2.00000 + 4 1.8259 2.00000 + 5 2.5219 2.00000 + 6 2.5706 2.00000 + 7 2.6224 2.00000 + 8 2.6779 2.00000 + 9 2.7332 2.00000 + 10 2.7836 2.00000 + 11 2.8582 2.00000 + 12 2.8905 2.00000 + 13 2.9609 2.00000 + 14 3.1893 2.00000 + 15 3.3205 2.00000 + 16 3.5106 2.00000 + 17 3.5615 2.00000 + 18 3.5988 2.00000 + 19 3.6004 2.00000 + 20 3.6015 2.00000 + 21 6.4670 -0.00000 + 22 6.5066 -0.00000 + 23 6.5643 -0.00000 + 24 6.6468 -0.00000 + 25 7.1048 -0.00000 + 26 7.1312 -0.00000 + 27 7.4668 -0.00000 + 28 7.5301 -0.00000 + 29 7.9288 -0.00000 + 30 7.9544 -0.00000 + 31 7.9750 -0.00000 + 32 8.0124 -0.00000 + 33 8.5101 -0.00000 + 34 8.7019 -0.00000 + 35 8.8144 -0.00000 + 36 8.9421 -0.00000 + 37 9.2632 -0.00000 + 38 9.3977 -0.00000 + 39 9.4308 -0.00000 + 40 9.5425 -0.00000 + 41 10.2269 0.00000 + 42 10.3465 0.00000 + 43 10.4006 0.00000 + 44 10.5651 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5041 2.00000 + 2 1.6243 2.00000 + 3 1.7203 2.00000 + 4 1.8457 2.00000 + 5 2.2500 2.00000 + 6 2.3672 2.00000 + 7 2.4641 2.00000 + 8 2.5858 2.00000 + 9 2.8871 2.00000 + 10 2.8953 2.00000 + 11 3.0058 2.00000 + 12 3.1352 2.00000 + 13 3.1380 2.00000 + 14 3.2352 2.00000 + 15 3.3714 2.00000 + 16 3.4309 2.00000 + 17 3.5626 2.00000 + 18 3.6085 2.00000 + 19 3.6115 2.00000 + 20 3.6321 2.00000 + 21 6.2568 -0.00000 + 22 6.2649 -0.00000 + 23 6.3872 -0.00000 + 24 6.4100 -0.00000 + 25 7.1285 -0.00000 + 26 7.1655 -0.00000 + 27 7.4408 -0.00000 + 28 7.4853 -0.00000 + 29 7.9515 -0.00000 + 30 7.9649 -0.00000 + 31 8.0228 -0.00000 + 32 8.0782 -0.00000 + 33 8.6269 -0.00000 + 34 8.6701 -0.00000 + 35 8.8339 -0.00000 + 36 9.0648 -0.00000 + 37 9.2951 -0.00000 + 38 9.3572 -0.00000 + 39 9.5246 -0.00000 + 40 9.6088 -0.00000 + 41 10.2282 0.00000 + 42 10.3385 0.00000 + 43 10.4997 0.00000 + 44 10.6721 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5632 2.00000 + 2 1.6836 2.00000 + 3 1.7801 2.00000 + 4 1.9051 2.00000 + 5 2.0053 2.00000 + 6 2.1247 2.00000 + 7 2.2229 2.00000 + 8 2.3479 2.00000 + 9 2.9617 2.00000 + 10 3.1442 2.00000 + 11 3.2450 2.00000 + 12 3.2587 2.00000 + 13 3.3575 2.00000 + 14 3.3973 2.00000 + 15 3.4822 2.00000 + 16 3.5018 2.00000 + 17 3.5603 2.00000 + 18 3.6556 2.00000 + 19 3.6607 2.00000 + 20 3.7040 2.00000 + 21 5.8004 -0.00000 + 22 5.8617 -0.00000 + 23 5.9237 -0.00000 + 24 5.9648 -0.00000 + 25 7.1982 -0.00000 + 26 7.2108 -0.00000 + 27 7.4135 -0.00000 + 28 7.4886 -0.00000 + 29 7.8997 -0.00000 + 30 7.9340 -0.00000 + 31 8.0105 -0.00000 + 32 8.1818 -0.00000 + 33 8.7185 -0.00000 + 34 8.7454 -0.00000 + 35 8.9543 -0.00000 + 36 9.1739 -0.00000 + 37 9.3488 -0.00000 + 38 9.3702 -0.00000 + 39 9.6021 -0.00000 + 40 9.6590 -0.00000 + 41 10.3134 0.00000 + 42 10.4424 0.00000 + 43 10.6305 0.00000 + 44 10.8306 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6638 2.00000 + 2 1.7844 2.00000 + 3 1.8095 2.00000 + 4 1.8796 2.00000 + 5 1.9337 2.00000 + 6 2.0084 2.00000 + 7 2.0296 2.00000 + 8 2.1557 2.00000 + 9 3.0461 2.00000 + 10 3.1537 2.00000 + 11 3.2458 2.00000 + 12 3.2995 2.00000 + 13 3.4539 2.00000 + 14 3.4920 2.00000 + 15 3.5430 2.00000 + 16 3.6161 2.00000 + 17 3.7202 2.00000 + 18 3.7983 2.00003 + 19 3.8264 2.00006 + 20 3.8339 2.00007 + 21 5.4754 -0.00000 + 22 5.5244 -0.00000 + 23 5.5429 -0.00000 + 24 5.5786 -0.00000 + 25 7.2253 -0.00000 + 26 7.2544 -0.00000 + 27 7.4054 -0.00000 + 28 7.5396 -0.00000 + 29 7.8778 -0.00000 + 30 7.9322 -0.00000 + 31 7.9623 -0.00000 + 32 8.1124 -0.00000 + 33 8.6623 -0.00000 + 34 8.9338 -0.00000 + 35 9.1077 -0.00000 + 36 9.1512 -0.00000 + 37 9.4012 -0.00000 + 38 9.4506 -0.00000 + 39 9.5423 -0.00000 + 40 9.6065 -0.00000 + 41 10.4082 0.00000 + 42 10.5741 0.00000 + 43 10.7272 0.00000 + 44 10.9114 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.014 0.046 0.015 + -0.004 -0.014 -0.240 -0.001 0.002 + 0.012 0.046 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.387 -0.037 0.037 -0.112 -0.038 + -0.037 0.001 -0.002 0.003 0.002 + 0.037 -0.002 0.222 -0.007 0.011 + -0.112 0.003 -0.007 0.139 0.002 + -0.038 0.002 0.011 0.002 0.210 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1651: real time 0.1651 + FORLOC: cpu time 0.0090: real time 0.0090 + FORNL : cpu time 12.5297: real time 12.5309 + STRESS: cpu time 4.6846: real time 4.6850 + FORCOR: cpu time 0.0300: real time 0.0300 + FORHAR: cpu time 0.0238: real time 0.0238 + MIXING: cpu time 0.0042: real time 0.0042 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.68227 14.68227 14.68227 + Ewald -143.62330 -148.60390 -130.65992 0.00000 0.00000 -0.00000 + Hartree 1.18671 0.69634 1.06403 -0.00000 -0.00000 0.00000 + E(xc) -108.59101 -109.01507 -107.83208 0.00000 0.00000 -0.00000 + Local 7.58898 2.30844 11.59849 0.00000 0.00000 -0.00000 + n-local 130.44829 131.06465 127.99507 0.01911 0.07415 -0.21330 + augment 7.40746 7.55216 7.07851 -0.00000 -0.00000 0.00000 + Kinetic 215.91157 225.88597 200.85453 0.06999 -1.12616 -0.90446 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 125.01096 124.57087 124.78090 0.00000 0.00000 0.00000 + in kB 701.58564 699.11577 700.29454 0.00000 0.00000 0.00000 + external pressure = 0.33 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.48 + direct lattice vectors reciprocal lattice vectors + 6.881632370 0.000000000 0.000000000 0.145314359 0.000000000 0.000000000 + 0.000000000 8.172515536 0.000000000 0.000000000 0.122361346 0.000000000 + 0.000000000 0.000000000 5.076106758 0.000000000 0.000000000 0.197001373 + + length of vectors + 6.881632370 8.172515536 5.076106758 0.145314359 0.122361346 0.197001373 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.198E-01 0.789E-01 -.243E+00 -.454E+00 0.373E+00 -.122E+01 0.462E+00 -.443E+00 0.142E+01 -.388E-06 0.139E-06 0.354E-06 + 0.198E-01 -.789E-01 -.243E+00 0.454E+00 -.373E+00 -.122E+01 -.462E+00 0.443E+00 0.142E+01 0.388E-06 -.140E-06 0.354E-06 + -.198E-01 -.789E-01 -.243E+00 -.454E+00 -.373E+00 -.122E+01 0.462E+00 0.443E+00 0.142E+01 -.388E-06 -.139E-06 0.354E-06 + 0.198E-01 0.789E-01 -.243E+00 0.454E+00 0.373E+00 -.122E+01 -.462E+00 -.443E+00 0.142E+01 0.388E-06 0.139E-06 0.354E-06 + -.198E-01 0.789E-01 -.243E+00 -.454E+00 0.373E+00 -.122E+01 0.462E+00 -.443E+00 0.142E+01 -.388E-06 0.139E-06 0.354E-06 + 0.198E-01 -.789E-01 -.243E+00 0.454E+00 -.373E+00 -.122E+01 -.462E+00 0.443E+00 0.142E+01 0.388E-06 -.139E-06 0.354E-06 + -.198E-01 -.789E-01 -.243E+00 -.454E+00 -.373E+00 -.122E+01 0.462E+00 0.443E+00 0.142E+01 -.388E-06 -.140E-06 0.354E-06 + 0.198E-01 0.789E-01 -.243E+00 0.454E+00 0.373E+00 -.122E+01 -.462E+00 -.443E+00 0.142E+01 0.388E-06 0.139E-06 0.354E-06 + -.194E-01 -.139E-01 0.128E+00 -.481E-01 -.249E+00 0.758E+00 0.689E-01 0.255E+00 -.867E+00 0.419E-06 -.440E-07 -.238E-06 + 0.194E-01 0.139E-01 0.128E+00 0.481E-01 0.249E+00 0.758E+00 -.689E-01 -.255E+00 -.867E+00 -.419E-06 0.436E-07 -.238E-06 + -.194E-01 0.139E-01 0.128E+00 -.481E-01 0.249E+00 0.758E+00 0.689E-01 -.255E+00 -.867E+00 0.419E-06 0.438E-07 -.238E-06 + 0.194E-01 -.139E-01 0.128E+00 0.481E-01 -.249E+00 0.758E+00 -.689E-01 0.255E+00 -.867E+00 -.419E-06 -.434E-07 -.238E-06 + -.194E-01 -.139E-01 0.128E+00 -.481E-01 -.249E+00 0.758E+00 0.689E-01 0.255E+00 -.867E+00 0.419E-06 -.434E-07 -.238E-06 + 0.194E-01 0.139E-01 0.128E+00 0.481E-01 0.249E+00 0.758E+00 -.689E-01 -.255E+00 -.867E+00 -.419E-06 0.438E-07 -.238E-06 + -.194E-01 0.139E-01 0.128E+00 -.481E-01 0.249E+00 0.758E+00 0.689E-01 -.255E+00 -.867E+00 0.419E-06 0.436E-07 -.238E-06 + 0.194E-01 -.139E-01 0.128E+00 0.481E-01 -.249E+00 0.758E+00 -.689E-01 0.255E+00 -.867E+00 -.419E-06 -.440E-07 -.238E-06 + -.270E+00 -.173E+00 0.952E-02 -.661E+00 -.314E-01 0.825E-01 0.912E+00 0.204E+00 -.881E-01 -.252E-06 0.457E-06 -.232E-06 + 0.270E+00 0.173E+00 0.952E-02 0.661E+00 0.314E-01 0.825E-01 -.912E+00 -.204E+00 -.881E-01 0.252E-06 -.457E-06 -.232E-06 + -.270E+00 0.173E+00 0.952E-02 -.661E+00 0.314E-01 0.825E-01 0.912E+00 -.204E+00 -.881E-01 -.252E-06 -.457E-06 -.232E-06 + 0.270E+00 -.173E+00 0.952E-02 0.661E+00 -.314E-01 0.825E-01 -.912E+00 0.204E+00 -.881E-01 0.252E-06 0.457E-06 -.232E-06 + -.270E+00 -.173E+00 0.952E-02 -.661E+00 -.314E-01 0.825E-01 0.912E+00 0.204E+00 -.881E-01 -.252E-06 0.457E-06 -.232E-06 + 0.270E+00 0.173E+00 0.952E-02 0.661E+00 0.314E-01 0.825E-01 -.912E+00 -.204E+00 -.881E-01 0.252E-06 -.457E-06 -.232E-06 + -.270E+00 0.173E+00 0.951E-02 -.661E+00 0.314E-01 0.825E-01 0.912E+00 -.204E+00 -.881E-01 -.252E-06 -.457E-06 -.232E-06 + 0.270E+00 -.173E+00 0.952E-02 0.661E+00 -.314E-01 0.825E-01 -.912E+00 0.204E+00 -.881E-01 0.252E-06 0.457E-06 -.232E-06 + -.517E-01 -.609E-01 0.148E-01 -.218E+00 0.668E-01 0.562E-01 0.251E+00 -.858E-02 -.547E-01 0.111E-06 0.509E-06 -.260E-07 + 0.517E-01 0.609E-01 0.148E-01 0.218E+00 -.668E-01 0.562E-01 -.251E+00 0.858E-02 -.547E-01 -.111E-06 -.509E-06 -.260E-07 + -.517E-01 0.609E-01 0.148E-01 -.218E+00 -.668E-01 0.562E-01 0.251E+00 0.858E-02 -.547E-01 0.111E-06 -.509E-06 -.260E-07 + 0.517E-01 -.609E-01 0.148E-01 0.218E+00 0.668E-01 0.562E-01 -.251E+00 -.858E-02 -.547E-01 -.111E-06 0.509E-06 -.260E-07 + -.517E-01 -.609E-01 0.148E-01 -.218E+00 0.668E-01 0.562E-01 0.251E+00 -.858E-02 -.547E-01 0.111E-06 0.509E-06 -.260E-07 + 0.517E-01 0.609E-01 0.148E-01 0.218E+00 -.668E-01 0.562E-01 -.251E+00 0.858E-02 -.547E-01 -.111E-06 -.509E-06 -.260E-07 + -.517E-01 0.609E-01 0.148E-01 -.218E+00 -.668E-01 0.562E-01 0.251E+00 0.858E-02 -.547E-01 0.111E-06 -.509E-06 -.260E-07 + 0.517E-01 -.609E-01 0.148E-01 0.218E+00 0.668E-01 0.562E-01 -.251E+00 -.858E-02 -.547E-01 -.111E-06 0.509E-06 -.260E-07 + 0.308E-01 0.183E+00 0.101E+00 0.228E+00 -.167E+00 0.327E+00 -.240E+00 -.278E-01 -.426E+00 -.123E-06 -.418E-06 0.139E-06 + -.308E-01 -.183E+00 0.101E+00 -.228E+00 0.167E+00 0.327E+00 0.240E+00 0.278E-01 -.426E+00 0.123E-06 0.418E-06 0.139E-06 + 0.308E-01 -.183E+00 0.101E+00 0.228E+00 0.167E+00 0.327E+00 -.240E+00 0.278E-01 -.426E+00 -.123E-06 0.418E-06 0.139E-06 + -.308E-01 0.183E+00 0.101E+00 -.228E+00 -.167E+00 0.327E+00 0.240E+00 -.278E-01 -.426E+00 0.123E-06 -.418E-06 0.139E-06 + 0.308E-01 0.183E+00 0.101E+00 0.228E+00 -.167E+00 0.327E+00 -.240E+00 -.278E-01 -.426E+00 -.123E-06 -.418E-06 0.139E-06 + -.308E-01 -.183E+00 0.101E+00 -.228E+00 0.167E+00 0.327E+00 0.240E+00 0.278E-01 -.426E+00 0.123E-06 0.418E-06 0.139E-06 + 0.308E-01 -.183E+00 0.101E+00 0.228E+00 0.167E+00 0.327E+00 -.240E+00 0.278E-01 -.426E+00 -.123E-06 0.418E-06 0.139E-06 + -.308E-01 0.183E+00 0.101E+00 -.228E+00 -.167E+00 0.327E+00 0.240E+00 -.278E-01 -.426E+00 0.123E-06 -.418E-06 0.139E-06 + ----------------------------------------------------------------------------------------------- + -.288E-04 0.240E-04 0.845E-01 0.236E-14 0.999E-15 -.139E-14 -.555E-16 -.347E-16 -.857E-01 -.283E-12 0.365E-12 -.265E-07 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64172 0.94989 0.00284 -0.011795 0.008703 -0.041811 + 6.23991 7.22263 0.00284 0.011795 -0.008703 -0.041811 + 4.08254 3.13637 0.00284 -0.011795 -0.008703 -0.041811 + 2.79910 5.03614 0.00284 0.011795 0.008703 -0.041811 + 0.64172 5.03614 2.54089 -0.011795 0.008703 -0.041811 + 6.23991 3.13637 2.54089 0.011795 -0.008703 -0.041811 + 4.08254 7.22263 2.54089 -0.011795 -0.008703 -0.041811 + 2.79910 0.94989 2.54089 0.011795 0.008703 -0.041811 + 5.93967 7.38097 1.59042 0.001473 -0.008279 0.019357 + 0.94196 0.79154 1.59042 -0.001473 0.008279 0.019357 + 2.49885 4.87780 1.59042 0.001473 0.008279 0.019357 + 4.38278 3.29472 1.59042 -0.001473 -0.008279 0.019357 + 5.93967 3.29472 4.12848 0.001473 -0.008279 0.019357 + 0.94196 4.87780 4.12848 -0.001473 0.008279 0.019357 + 2.49885 0.79154 4.12848 0.001473 0.008279 0.019357 + 4.38278 7.38097 4.12848 -0.001473 -0.008279 0.019357 + 6.66147 0.95612 3.01558 -0.018852 -0.000651 0.003959 + 0.22016 7.21639 3.01558 0.018852 0.000651 0.003959 + 3.22065 3.13013 3.01558 -0.018852 0.000651 0.003959 + 3.66098 5.04238 3.01558 0.018852 -0.000651 0.003959 + 6.66147 5.04238 0.47753 -0.018852 -0.000651 0.003959 + 0.22016 3.13013 0.47753 0.018852 0.000651 0.003959 + 3.22065 7.21639 0.47753 -0.018852 0.000651 0.003959 + 3.66098 0.95612 0.47753 0.018852 -0.000651 0.003959 + 2.41735 2.19097 0.89334 -0.018503 -0.002603 0.016386 + 4.46428 5.98155 0.89334 0.018503 0.002603 0.016386 + 5.85817 1.89529 0.89334 -0.018503 0.002603 0.016386 + 1.02346 6.27723 0.89334 0.018503 -0.002603 0.016386 + 2.41735 6.27723 3.43140 -0.018503 -0.002603 0.016386 + 4.46428 1.89529 3.43140 0.018503 0.002603 0.016386 + 5.85817 5.98155 3.43140 -0.018503 0.002603 0.016386 + 1.02346 2.19097 3.43140 0.018503 -0.002603 0.016386 + 1.99631 7.45166 1.91289 0.019077 -0.011806 0.002108 + 4.88533 0.72085 1.91289 -0.019077 0.011806 0.002108 + 5.43712 4.80711 1.91289 0.019077 0.011806 0.002108 + 1.44451 3.36540 1.91289 -0.019077 -0.011806 0.002108 + 1.99631 3.36540 4.45095 0.019077 -0.011806 0.002108 + 4.88533 4.80711 4.45095 -0.019077 0.011806 0.002108 + 5.43712 0.72085 4.45095 0.019077 0.011806 0.002108 + 1.44451 7.45166 4.45095 -0.019077 -0.011806 0.002108 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.001206 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.81305218 eV + + energy without entropy= -16.82318367 energy(sigma->0) = -16.81642934 + enthalpy is TOTEN = 107.91536981 eV P V= 124.72842199 + + d Force = 0.9650250E-03[ 0.581E-03, 0.135E-02] d Energy = 0.4005813E-01-0.391E-01 + d Force = 0.2186727E-01[ 0.218E-01, 0.219E-01] d Ewald = 0.2237699E+01-0.222E+01 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0284: real time 0.0292 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0065: real time 0.0065 + FEWALD executed in parallel + FEWALD: cpu time 0.0016: real time 0.0026 + GENKIN: cpu time 0.0247: real time 0.0247 + ORTHCH: cpu time 0.5251: real time 0.5251 + LOOP+: cpu time 51.1152: real time 51.1294 + + +----------------------------------------- Iteration 4( 1) --------------------------------------- + + + POTLOK: cpu time 0.0222: real time 0.0222 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 3.4713: real time 3.4716 + DOS: cpu time 0.0069: real time 0.0069 + CHARGE: cpu time 0.1886: real time 0.1886 + MIXING: cpu time 0.0030: real time 0.0030 + -------------------------------------------- + LOOP: cpu time 3.7000: real time 3.7015 + + eigenvalue-minimisations : 2888 + total energy-change (2. order) :-0.8814527E-02 (-0.7395915E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9511135 magnetization + + free energy = -0.168218666018E+02 energy without entropy= -0.168319979297E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 4( 2) --------------------------------------- + + + POTLOK: cpu time 0.0207: real time 0.0217 + SETDIJ: cpu time 0.0056: real time 0.0066 + EDDAV: cpu time 3.4660: real time 3.4664 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.2073: real time 0.2073 + MIXING: cpu time 0.0034: real time 0.0034 + -------------------------------------------- + LOOP: cpu time 3.7121: real time 3.7144 + + eigenvalue-minimisations : 2844 + total energy-change (2. order) : 0.3105799E-06 (-0.8180421E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9511290 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.6872 + 1.6872 + + free energy = -0.168218662912E+02 energy without entropy= -0.168319975912E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 4( 3) --------------------------------------- + + + POTLOK: cpu time 0.0206: real time 0.0206 + SETDIJ: cpu time 0.0065: real time 0.0065 + EDDAV: cpu time 3.4076: real time 3.4079 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.1900: real time 0.1900 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 3.6364: real time 3.6368 + + eigenvalue-minimisations : 2820 + total energy-change (2. order) : 0.3751170E-06 (-0.1497261E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9511298 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.9373 + 1.0463 2.8283 + + free energy = -0.168218659161E+02 energy without entropy= -0.168319971847E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 4( 4) --------------------------------------- + + + POTLOK: cpu time 0.0200: real time 0.0200 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.3204: real time 3.3207 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.2113: real time 0.2113 + MIXING: cpu time 0.0036: real time 0.0036 + -------------------------------------------- + LOOP: cpu time 3.5692: real time 3.5696 + + eigenvalue-minimisations : 2784 + total energy-change (2. order) : 0.1529354E-06 (-0.3719378E-09) + number of electron 40.0000003 magnetization + augmentation part 0.9511346 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8814 + 0.8642 2.3900 2.3900 + + free energy = -0.168218657632E+02 energy without entropy= -0.168319970222E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 4( 5) --------------------------------------- + + + POTLOK: cpu time 0.0224: real time 0.0224 + SETDIJ: cpu time 0.0068: real time 0.0068 + EDDAV: cpu time 3.3352: real time 3.3355 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1668: real time 0.1668 + MIXING: cpu time 0.0041: real time 0.0041 + -------------------------------------------- + LOOP: cpu time 3.5437: real time 3.5440 + + eigenvalue-minimisations : 2776 + total energy-change (2. order) :-0.7376332E-07 (-0.5381221E-10) + number of electron 40.0000003 magnetization + augmentation part 0.9511348 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8001 + 2.7510 2.7510 0.8492 0.8492 + + free energy = -0.168218658369E+02 energy without entropy= -0.168319971075E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 4( 6) --------------------------------------- + + + POTLOK: cpu time 0.0209: real time 0.0209 + SETDIJ: cpu time 0.0054: real time 0.0054 + EDDAV: cpu time 3.2604: real time 3.2608 + DOS: cpu time 0.0073: real time 0.0073 + -------------------------------------------- + LOOP: cpu time 3.2952: real time 3.2956 + + eigenvalue-minimisations : 2744 + total energy-change (2. order) : 0.2898105E-08 (-0.1043701E-10) + number of electron 40.0000003 magnetization + augmentation part 0.9511348 magnetization + + free energy = -0.168218658341E+02 energy without entropy= -0.168319971048E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9698 2 -25.9698 3 -25.9698 4 -25.9698 5 -25.9698 + 6 -25.9698 7 -25.9698 8 -25.9698 9 -25.9054 10 -25.9054 + 11 -25.9054 12 -25.9054 13 -25.9054 14 -25.9054 15 -25.9054 + 16 -25.9054 17 -25.9201 18 -25.9201 19 -25.9201 20 -25.9201 + 21 -25.9201 22 -25.9201 23 -25.9201 24 -25.9201 25 -25.8446 + 26 -25.8446 27 -25.8446 28 -25.8446 29 -25.8446 30 -25.8446 + 31 -25.8446 32 -25.8446 33 -26.0174 34 -26.0174 35 -26.0174 + 36 -26.0174 37 -26.0174 38 -26.0174 39 -26.0174 40 -26.0174 + + + + E-fermi : 4.4652 XC(G=0): -9.5570 alpha+bet :-20.5770 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9648 2.00000 + 2 1.5075 2.00000 + 3 1.7437 2.00000 + 4 2.0006 2.00000 + 5 2.0437 2.00000 + 6 2.5141 2.00000 + 7 2.6226 2.00000 + 8 2.7722 2.00000 + 9 2.8674 2.00000 + 10 2.9228 2.00000 + 11 3.2100 2.00000 + 12 3.2828 2.00000 + 13 3.3993 2.00000 + 14 3.4323 2.00000 + 15 3.5099 2.00000 + 16 3.6207 2.00000 + 17 3.8396 2.00009 + 18 4.1820 2.06236 + 19 4.2121 2.07043 + 20 4.3898 1.59069 + 21 5.5440 -0.00000 + 22 5.7452 -0.00000 + 23 5.9355 -0.00000 + 24 6.0891 -0.00000 + 25 6.2106 -0.00000 + 26 6.3055 -0.00000 + 27 6.5605 -0.00000 + 28 7.1317 -0.00000 + 29 7.1382 -0.00000 + 30 7.2428 -0.00000 + 31 7.3757 -0.00000 + 32 7.4654 -0.00000 + 33 8.0809 -0.00000 + 34 8.1715 -0.00000 + 35 8.8197 -0.00000 + 36 8.9715 -0.00000 + 37 9.2285 -0.00000 + 38 9.4599 -0.00000 + 39 9.8288 -0.00000 + 40 9.8689 -0.00000 + 41 10.1171 0.00000 + 42 10.3111 0.00000 + 43 10.5554 0.00000 + 44 10.8292 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9832 2.00000 + 2 1.5276 2.00000 + 3 1.7139 2.00000 + 4 1.7645 2.00000 + 5 2.2753 2.00000 + 6 2.3945 2.00000 + 7 2.5261 2.00000 + 8 2.8706 2.00000 + 9 2.9632 2.00000 + 10 3.1468 2.00000 + 11 3.2378 2.00000 + 12 3.2959 2.00000 + 13 3.3762 2.00000 + 14 3.4345 2.00000 + 15 3.5398 2.00000 + 16 3.6247 2.00000 + 17 3.7768 2.00001 + 18 4.0591 2.01448 + 19 4.2295 2.07021 + 20 4.4353 1.25008 + 21 5.4310 -0.00000 + 22 5.5975 -0.00000 + 23 5.8929 -0.00000 + 24 5.9959 -0.00000 + 25 6.1571 -0.00000 + 26 6.5300 -0.00000 + 27 6.6347 -0.00000 + 28 6.8455 -0.00000 + 29 7.1144 -0.00000 + 30 7.2324 -0.00000 + 31 7.3103 -0.00000 + 32 7.3980 -0.00000 + 33 8.3575 -0.00000 + 34 8.4090 -0.00000 + 35 8.8371 -0.00000 + 36 8.8976 -0.00000 + 37 9.2523 -0.00000 + 38 9.4329 -0.00000 + 39 9.7786 -0.00000 + 40 9.9511 0.00000 + 41 10.0788 0.00000 + 42 10.1876 0.00000 + 43 10.8554 0.00000 + 44 10.9356 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0392 2.00000 + 2 1.4675 2.00000 + 3 1.5886 2.00000 + 4 1.8271 2.00000 + 5 2.0345 2.00000 + 6 2.2823 2.00000 + 7 2.8278 2.00000 + 8 2.9691 2.00000 + 9 3.2378 2.00000 + 10 3.2713 2.00000 + 11 3.3179 2.00000 + 12 3.3365 2.00000 + 13 3.4306 2.00000 + 14 3.5248 2.00000 + 15 3.5733 2.00000 + 16 3.6241 2.00000 + 17 3.7252 2.00000 + 18 3.8443 2.00010 + 19 4.1571 2.05166 + 20 4.3412 1.85744 + 21 5.3354 -0.00000 + 22 5.4353 -0.00000 + 23 5.7783 -0.00000 + 24 5.8532 -0.00000 + 25 5.8928 -0.00000 + 26 6.2532 -0.00000 + 27 6.7821 -0.00000 + 28 7.0327 -0.00000 + 29 7.1128 -0.00000 + 30 7.2140 -0.00000 + 31 7.2682 -0.00000 + 32 7.5624 -0.00000 + 33 8.5045 -0.00000 + 34 8.5215 -0.00000 + 35 8.7740 -0.00000 + 36 8.9072 -0.00000 + 37 9.2153 -0.00000 + 38 9.3366 -0.00000 + 39 9.8138 -0.00000 + 40 9.8880 -0.00000 + 41 10.1846 0.00000 + 42 10.3799 0.00000 + 43 11.0113 0.00000 + 44 11.1331 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1356 2.00000 + 2 1.2766 2.00000 + 3 1.6918 2.00000 + 4 1.8388 2.00000 + 5 1.9345 2.00000 + 6 2.0848 2.00000 + 7 3.0555 2.00000 + 8 3.1606 2.00000 + 9 3.3044 2.00000 + 10 3.3952 2.00000 + 11 3.4298 2.00000 + 12 3.4439 2.00000 + 13 3.5061 2.00000 + 14 3.5120 2.00000 + 15 3.6354 2.00000 + 16 3.6522 2.00000 + 17 3.7153 2.00000 + 18 3.7706 2.00001 + 19 3.9153 2.00071 + 20 4.1104 2.03093 + 21 5.3578 -0.00000 + 22 5.4801 -0.00000 + 23 5.6477 -0.00000 + 24 5.6574 -0.00000 + 25 5.7699 -0.00000 + 26 5.7899 -0.00000 + 27 6.9774 -0.00000 + 28 7.1191 -0.00000 + 29 7.1569 -0.00000 + 30 7.1606 -0.00000 + 31 7.6288 -0.00000 + 32 7.8814 -0.00000 + 33 8.1504 -0.00000 + 34 8.2395 -0.00000 + 35 8.8984 -0.00000 + 36 8.9583 -0.00000 + 37 9.1148 -0.00000 + 38 9.2005 -0.00000 + 39 9.8041 -0.00000 + 40 9.8777 -0.00000 + 41 10.4831 0.00000 + 42 10.5778 0.00000 + 43 11.2340 0.00000 + 44 11.3325 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9982 2.00000 + 2 1.3178 2.00000 + 3 2.0229 2.00000 + 4 2.0322 2.00000 + 5 2.0804 2.00000 + 6 2.3382 2.00000 + 7 2.4326 2.00000 + 8 2.9425 2.00000 + 9 3.0081 2.00000 + 10 3.0531 2.00000 + 11 3.1368 2.00000 + 12 3.2108 2.00000 + 13 3.4031 2.00000 + 14 3.4972 2.00000 + 15 3.5036 2.00000 + 16 3.6916 2.00000 + 17 3.7539 2.00001 + 18 4.0094 2.00586 + 19 4.0354 2.00960 + 20 4.2321 2.06974 + 21 5.6892 -0.00000 + 22 5.8220 -0.00000 + 23 5.9799 -0.00000 + 24 6.2287 -0.00000 + 25 6.3110 -0.00000 + 26 6.4416 -0.00000 + 27 6.5150 -0.00000 + 28 6.7798 -0.00000 + 29 7.2792 -0.00000 + 30 7.3349 -0.00000 + 31 7.4327 -0.00000 + 32 7.6253 -0.00000 + 33 8.0382 -0.00000 + 34 8.1917 -0.00000 + 35 8.8964 -0.00000 + 36 9.0473 -0.00000 + 37 9.0902 -0.00000 + 38 9.2201 -0.00000 + 39 9.5557 -0.00000 + 40 9.8849 -0.00000 + 41 9.9237 -0.00000 + 42 10.4088 0.00000 + 43 10.4874 0.00000 + 44 10.9329 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0167 2.00000 + 2 1.3373 2.00000 + 3 1.7488 2.00000 + 4 2.0378 2.00000 + 5 2.0905 2.00000 + 6 2.4258 2.00000 + 7 2.7304 2.00000 + 8 2.8134 2.00000 + 9 2.9747 2.00000 + 10 3.0361 2.00000 + 11 3.2273 2.00000 + 12 3.3522 2.00000 + 13 3.3989 2.00000 + 14 3.5027 2.00000 + 15 3.5255 2.00000 + 16 3.6957 2.00000 + 17 3.7064 2.00000 + 18 3.8281 2.00006 + 19 4.1103 2.03087 + 20 4.2768 2.03603 + 21 5.5673 -0.00000 + 22 5.7506 -0.00000 + 23 5.9437 -0.00000 + 24 6.0747 -0.00000 + 25 6.2347 -0.00000 + 26 6.5031 -0.00000 + 27 6.6448 -0.00000 + 28 6.7192 -0.00000 + 29 7.1743 -0.00000 + 30 7.3201 -0.00000 + 31 7.3436 -0.00000 + 32 7.6021 -0.00000 + 33 8.2871 -0.00000 + 34 8.3709 -0.00000 + 35 8.9012 -0.00000 + 36 9.0074 -0.00000 + 37 9.0329 -0.00000 + 38 9.2326 -0.00000 + 39 9.6316 -0.00000 + 40 9.8276 -0.00000 + 41 9.9532 0.00000 + 42 10.4714 0.00000 + 43 10.5095 0.00000 + 44 11.0520 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0730 2.00000 + 2 1.3965 2.00000 + 3 1.5026 2.00000 + 4 1.8361 2.00000 + 5 2.1136 2.00000 + 6 2.5744 2.00000 + 7 2.8486 2.00000 + 8 2.9964 2.00000 + 9 3.1215 2.00000 + 10 3.1372 2.00000 + 11 3.2746 2.00000 + 12 3.3104 2.00000 + 13 3.4736 2.00000 + 14 3.5334 2.00000 + 15 3.6104 2.00000 + 16 3.6155 2.00000 + 17 3.6738 2.00000 + 18 3.7295 2.00000 + 19 4.0492 2.01224 + 20 4.2336 2.06940 + 21 5.4083 -0.00000 + 22 5.6711 -0.00000 + 23 5.7786 -0.00000 + 24 5.8321 -0.00000 + 25 6.1138 -0.00000 + 26 6.2074 -0.00000 + 27 6.6281 -0.00000 + 28 7.0716 -0.00000 + 29 7.1210 -0.00000 + 30 7.3627 -0.00000 + 31 7.5066 -0.00000 + 32 7.5454 -0.00000 + 33 8.3765 -0.00000 + 34 8.5310 -0.00000 + 35 8.8040 -0.00000 + 36 8.8908 -0.00000 + 37 9.0489 -0.00000 + 38 9.1744 -0.00000 + 39 9.6402 -0.00000 + 40 9.8023 -0.00000 + 41 10.1707 0.00000 + 42 10.5974 0.00000 + 43 10.7164 0.00000 + 44 11.2291 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1699 2.00000 + 2 1.3114 2.00000 + 3 1.4974 2.00000 + 4 1.6429 2.00000 + 5 2.2229 2.00000 + 6 2.3768 2.00000 + 7 3.0922 2.00000 + 8 3.2016 2.00000 + 9 3.2120 2.00000 + 10 3.3171 2.00000 + 11 3.3802 2.00000 + 12 3.4075 2.00000 + 13 3.4334 2.00000 + 14 3.4481 2.00000 + 15 3.5492 2.00000 + 16 3.6273 2.00000 + 17 3.7459 2.00000 + 18 3.7721 2.00001 + 19 3.8487 2.00012 + 20 4.0065 2.00554 + 21 5.4232 -0.00000 + 22 5.6165 -0.00000 + 23 5.6193 -0.00000 + 24 5.7952 -0.00000 + 25 5.7967 -0.00000 + 26 5.9763 -0.00000 + 27 6.7938 -0.00000 + 28 6.9595 -0.00000 + 29 7.3370 -0.00000 + 30 7.4399 -0.00000 + 31 7.7322 -0.00000 + 32 7.8216 -0.00000 + 33 8.1708 -0.00000 + 34 8.2002 -0.00000 + 35 8.8451 -0.00000 + 36 8.9002 -0.00000 + 37 8.9811 -0.00000 + 38 9.0616 -0.00000 + 39 9.6129 -0.00000 + 40 9.7788 -0.00000 + 41 10.4590 0.00000 + 42 10.6332 0.00000 + 43 11.1568 0.00000 + 44 11.3547 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0664 2.00000 + 2 1.1719 2.00000 + 3 2.0971 2.00000 + 4 2.1535 2.00000 + 5 2.1981 2.00000 + 6 2.2484 2.00000 + 7 2.3744 2.00000 + 8 2.6961 2.00000 + 9 3.0186 2.00000 + 10 3.1122 2.00000 + 11 3.3436 2.00000 + 12 3.4331 2.00000 + 13 3.4347 2.00000 + 14 3.4738 2.00000 + 15 3.6014 2.00000 + 16 3.6018 2.00000 + 17 3.7385 2.00000 + 18 3.7809 2.00001 + 19 3.8288 2.00007 + 20 4.0198 2.00718 + 21 5.9384 -0.00000 + 22 5.9549 -0.00000 + 23 6.1013 -0.00000 + 24 6.1493 -0.00000 + 25 6.2192 -0.00000 + 26 6.4236 -0.00000 + 27 6.6283 -0.00000 + 28 6.9406 -0.00000 + 29 6.9808 -0.00000 + 30 7.2855 -0.00000 + 31 7.6170 -0.00000 + 32 7.8770 -0.00000 + 33 8.1961 -0.00000 + 34 8.3669 -0.00000 + 35 8.5254 -0.00000 + 36 9.0206 -0.00000 + 37 9.0797 -0.00000 + 38 9.1521 -0.00000 + 39 9.3200 -0.00000 + 40 9.6059 -0.00000 + 41 9.9570 0.00000 + 42 10.0676 0.00000 + 43 10.7824 0.00000 + 44 10.9635 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0851 2.00000 + 2 1.1909 2.00000 + 3 1.8198 2.00000 + 4 1.9290 2.00000 + 5 2.3647 2.00000 + 6 2.4852 2.00000 + 7 2.6052 2.00000 + 8 2.7269 2.00000 + 9 3.0380 2.00000 + 10 3.1309 2.00000 + 11 3.1420 2.00000 + 12 3.4375 2.00000 + 13 3.4839 2.00000 + 14 3.4895 2.00000 + 15 3.5030 2.00000 + 16 3.6163 2.00000 + 17 3.6859 2.00000 + 18 3.8384 2.00009 + 19 3.9118 2.00065 + 20 4.0486 2.01212 + 21 5.7656 -0.00000 + 22 5.9380 -0.00000 + 23 5.9690 -0.00000 + 24 6.1251 -0.00000 + 25 6.2540 -0.00000 + 26 6.3707 -0.00000 + 27 6.5631 -0.00000 + 28 6.9102 -0.00000 + 29 7.0088 -0.00000 + 30 7.2290 -0.00000 + 31 7.6390 -0.00000 + 32 8.0060 -0.00000 + 33 8.1832 -0.00000 + 34 8.4966 -0.00000 + 35 8.5786 -0.00000 + 36 8.9946 -0.00000 + 37 9.0311 -0.00000 + 38 9.2526 -0.00000 + 39 9.2779 -0.00000 + 40 9.5655 -0.00000 + 41 10.0209 0.00000 + 42 10.1376 0.00000 + 43 10.8010 0.00000 + 44 11.0116 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1421 2.00000 + 2 1.2488 2.00000 + 3 1.5740 2.00000 + 4 1.6842 2.00000 + 5 2.4371 2.00000 + 6 2.7676 2.00000 + 7 2.9087 2.00000 + 8 2.9351 2.00000 + 9 2.9870 2.00000 + 10 3.1119 2.00000 + 11 3.1853 2.00000 + 12 3.2700 2.00000 + 13 3.3803 2.00000 + 14 3.4634 2.00000 + 15 3.5285 2.00000 + 16 3.5989 2.00000 + 17 3.7370 2.00000 + 18 3.8899 2.00037 + 19 3.8998 2.00048 + 20 4.0769 2.01924 + 21 5.5394 -0.00000 + 22 5.6668 -0.00000 + 23 5.8920 -0.00000 + 24 6.0621 -0.00000 + 25 6.0787 -0.00000 + 26 6.3645 -0.00000 + 27 6.4292 -0.00000 + 28 6.7724 -0.00000 + 29 7.2719 -0.00000 + 30 7.4050 -0.00000 + 31 7.7321 -0.00000 + 32 8.0612 -0.00000 + 33 8.1144 -0.00000 + 34 8.4982 -0.00000 + 35 8.6050 -0.00000 + 36 8.8790 -0.00000 + 37 8.9683 -0.00000 + 38 9.2854 -0.00000 + 39 9.2888 -0.00000 + 40 9.5645 -0.00000 + 41 10.2514 0.00000 + 42 10.4280 0.00000 + 43 10.8031 0.00000 + 44 11.0518 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2398 2.00000 + 2 1.3479 2.00000 + 3 1.3822 2.00000 + 4 1.4916 2.00000 + 5 2.5524 2.00000 + 6 2.7107 2.00000 + 7 2.9018 2.00000 + 8 3.0673 2.00000 + 9 3.1594 2.00000 + 10 3.2447 2.00000 + 11 3.2755 2.00000 + 12 3.3650 2.00000 + 13 3.3888 2.00000 + 14 3.4176 2.00000 + 15 3.6033 2.00000 + 16 3.6763 2.00000 + 17 3.6768 2.00000 + 18 3.7692 2.00001 + 19 3.8270 2.00006 + 20 3.8958 2.00043 + 21 5.5147 -0.00000 + 22 5.5772 -0.00000 + 23 5.6943 -0.00000 + 24 5.7685 -0.00000 + 25 6.1366 -0.00000 + 26 6.2834 -0.00000 + 27 6.4893 -0.00000 + 28 6.6378 -0.00000 + 29 7.5778 -0.00000 + 30 7.7206 -0.00000 + 31 7.8128 -0.00000 + 32 8.0177 -0.00000 + 33 8.0468 -0.00000 + 34 8.3343 -0.00000 + 35 8.4401 -0.00000 + 36 8.6384 -0.00000 + 37 9.0350 -0.00000 + 38 9.2611 -0.00000 + 39 9.3196 -0.00000 + 40 9.5400 -0.00000 + 41 10.5484 0.00000 + 42 10.7326 0.00000 + 43 10.7913 0.00000 + 44 10.9877 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0039 2.00000 + 2 1.5547 2.00000 + 3 1.7939 2.00000 + 4 2.0413 2.00000 + 5 2.0864 2.00000 + 6 2.4885 2.00000 + 7 2.5797 2.00000 + 8 2.6660 2.00000 + 9 2.8107 2.00000 + 10 2.9044 2.00000 + 11 3.0817 2.00000 + 12 3.2805 2.00000 + 13 3.3132 2.00000 + 14 3.3355 2.00000 + 15 3.4462 2.00000 + 16 3.7595 2.00001 + 17 3.8607 2.00016 + 18 4.0038 2.00525 + 19 4.0465 2.01168 + 20 4.1718 2.05819 + 21 5.7699 -0.00000 + 22 5.9727 -0.00000 + 23 6.1840 -0.00000 + 24 6.4610 -0.00000 + 25 6.4909 -0.00000 + 26 6.5858 -0.00000 + 27 6.6008 -0.00000 + 28 6.7658 -0.00000 + 29 7.1719 -0.00000 + 30 7.2552 -0.00000 + 31 7.3728 -0.00000 + 32 7.4366 -0.00000 + 33 8.1770 -0.00000 + 34 8.4767 -0.00000 + 35 8.9397 -0.00000 + 36 9.0661 -0.00000 + 37 9.0726 -0.00000 + 38 9.5692 -0.00000 + 39 9.8278 -0.00000 + 40 9.8523 -0.00000 + 41 10.0229 0.00000 + 42 10.0333 0.00000 + 43 10.4053 0.00000 + 44 10.4601 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0224 2.00000 + 2 1.5747 2.00000 + 3 1.7554 2.00000 + 4 1.8145 2.00000 + 5 2.3183 2.00000 + 6 2.4353 2.00000 + 7 2.5214 2.00000 + 8 2.5706 2.00000 + 9 2.9509 2.00000 + 10 3.0979 2.00000 + 11 3.1478 2.00000 + 12 3.1917 2.00000 + 13 3.3002 2.00000 + 14 3.3690 2.00000 + 15 3.5879 2.00000 + 16 3.6570 2.00000 + 17 3.8733 2.00023 + 18 3.9610 2.00211 + 19 4.0839 2.02137 + 20 4.1559 2.05108 + 21 5.7143 -0.00000 + 22 5.8181 -0.00000 + 23 6.1166 -0.00000 + 24 6.3527 -0.00000 + 25 6.3930 -0.00000 + 26 6.4874 -0.00000 + 27 6.7075 -0.00000 + 28 6.7849 -0.00000 + 29 7.1653 -0.00000 + 30 7.2598 -0.00000 + 31 7.2645 -0.00000 + 32 7.4533 -0.00000 + 33 8.3376 -0.00000 + 34 8.5579 -0.00000 + 35 8.9302 -0.00000 + 36 9.0273 -0.00000 + 37 9.0825 -0.00000 + 38 9.5945 -0.00000 + 39 9.8428 -0.00000 + 40 9.9077 -0.00000 + 41 9.9169 -0.00000 + 42 10.1221 0.00000 + 43 10.6454 0.00000 + 44 10.7164 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0787 2.00000 + 2 1.5086 2.00000 + 3 1.6355 2.00000 + 4 1.8765 2.00000 + 5 2.0792 2.00000 + 6 2.3256 2.00000 + 7 2.5830 2.00000 + 8 2.8642 2.00000 + 9 2.9738 2.00000 + 10 3.1457 2.00000 + 11 3.2876 2.00000 + 12 3.3523 2.00000 + 13 3.4473 2.00000 + 14 3.4765 2.00000 + 15 3.5336 2.00000 + 16 3.7448 2.00000 + 17 3.8080 2.00003 + 18 3.9041 2.00053 + 19 4.0064 2.00553 + 20 4.1181 2.03405 + 21 5.4691 -0.00000 + 22 5.7720 -0.00000 + 23 5.9933 -0.00000 + 24 5.9942 -0.00000 + 25 6.1386 -0.00000 + 26 6.3017 -0.00000 + 27 6.7241 -0.00000 + 28 7.0434 -0.00000 + 29 7.0547 -0.00000 + 30 7.1673 -0.00000 + 31 7.3068 -0.00000 + 32 7.7001 -0.00000 + 33 8.3725 -0.00000 + 34 8.4503 -0.00000 + 35 8.9646 -0.00000 + 36 9.0615 -0.00000 + 37 9.0957 -0.00000 + 38 9.4981 -0.00000 + 39 9.9024 -0.00000 + 40 10.0979 0.00000 + 41 10.1427 0.00000 + 42 10.3366 0.00000 + 43 10.9699 0.00000 + 44 11.1223 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1756 2.00000 + 2 1.3172 2.00000 + 3 1.7383 2.00000 + 4 1.8850 2.00000 + 5 1.9823 2.00000 + 6 2.1309 2.00000 + 7 2.6786 2.00000 + 8 2.8106 2.00000 + 9 3.2129 2.00000 + 10 3.3087 2.00000 + 11 3.3506 2.00000 + 12 3.5015 2.00000 + 13 3.5574 2.00000 + 14 3.6254 2.00000 + 15 3.6385 2.00000 + 16 3.6447 2.00000 + 17 3.8001 2.00003 + 18 3.8650 2.00019 + 19 3.8747 2.00024 + 20 3.9227 2.00085 + 21 5.4403 -0.00000 + 22 5.6569 -0.00000 + 23 5.7403 -0.00000 + 24 5.8047 -0.00000 + 25 5.9935 -0.00000 + 26 6.1916 -0.00000 + 27 6.7549 -0.00000 + 28 6.8858 -0.00000 + 29 7.1471 -0.00000 + 30 7.1940 -0.00000 + 31 7.6203 -0.00000 + 32 7.9628 -0.00000 + 33 8.0451 -0.00000 + 34 8.2058 -0.00000 + 35 9.0941 -0.00000 + 36 9.1562 -0.00000 + 37 9.1952 -0.00000 + 38 9.3645 -0.00000 + 39 9.9066 -0.00000 + 40 10.0875 0.00000 + 41 10.3966 0.00000 + 42 10.4948 0.00000 + 43 11.2143 0.00000 + 44 11.3220 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0379 2.00000 + 2 1.3625 2.00000 + 3 2.0733 2.00000 + 4 2.0766 2.00000 + 5 2.1235 2.00000 + 6 2.3777 2.00000 + 7 2.4765 2.00000 + 8 2.5546 2.00000 + 9 2.9105 2.00000 + 10 3.0650 2.00000 + 11 3.0744 2.00000 + 12 3.1633 2.00000 + 13 3.3608 2.00000 + 14 3.5043 2.00000 + 15 3.5116 2.00000 + 16 3.6701 2.00000 + 17 3.8485 2.00012 + 18 3.8771 2.00026 + 19 3.9358 2.00117 + 20 4.0432 2.01104 + 21 5.8532 -0.00000 + 22 6.0159 -0.00000 + 23 6.0748 -0.00000 + 24 6.3306 -0.00000 + 25 6.5059 -0.00000 + 26 6.6159 -0.00000 + 27 6.6730 -0.00000 + 28 6.7925 -0.00000 + 29 7.3976 -0.00000 + 30 7.4064 -0.00000 + 31 7.4786 -0.00000 + 32 7.6254 -0.00000 + 33 8.2032 -0.00000 + 34 8.3175 -0.00000 + 35 8.7548 -0.00000 + 36 8.9377 -0.00000 + 37 9.2199 -0.00000 + 38 9.4224 -0.00000 + 39 9.6363 -0.00000 + 40 9.7309 -0.00000 + 41 9.8397 -0.00000 + 42 10.3519 0.00000 + 43 10.3780 0.00000 + 44 10.9267 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0565 2.00000 + 2 1.3820 2.00000 + 3 1.7907 2.00000 + 4 2.0903 2.00000 + 5 2.1349 2.00000 + 6 2.4672 2.00000 + 7 2.5652 2.00000 + 8 2.7838 2.00000 + 9 2.8476 2.00000 + 10 2.9295 2.00000 + 11 3.1016 2.00000 + 12 3.2075 2.00000 + 13 3.3998 2.00000 + 14 3.4970 2.00000 + 15 3.5909 2.00000 + 16 3.6462 2.00000 + 17 3.7943 2.00002 + 18 3.8645 2.00018 + 19 3.9726 2.00273 + 20 4.0993 2.02666 + 21 5.7502 -0.00000 + 22 5.9638 -0.00000 + 23 5.9840 -0.00000 + 24 6.2271 -0.00000 + 25 6.3218 -0.00000 + 26 6.6084 -0.00000 + 27 6.6490 -0.00000 + 28 6.9061 -0.00000 + 29 7.2642 -0.00000 + 30 7.3894 -0.00000 + 31 7.5079 -0.00000 + 32 7.6160 -0.00000 + 33 8.3737 -0.00000 + 34 8.3816 -0.00000 + 35 8.8478 -0.00000 + 36 8.9168 -0.00000 + 37 9.1968 -0.00000 + 38 9.4047 -0.00000 + 39 9.6254 -0.00000 + 40 9.7429 -0.00000 + 41 9.9186 -0.00000 + 42 10.4252 0.00000 + 43 10.5451 0.00000 + 44 10.9549 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1131 2.00000 + 2 1.4412 2.00000 + 3 1.5441 2.00000 + 4 1.8807 2.00000 + 5 2.1651 2.00000 + 6 2.6083 2.00000 + 7 2.6318 2.00000 + 8 2.8861 2.00000 + 9 2.9865 2.00000 + 10 3.0223 2.00000 + 11 3.1603 2.00000 + 12 3.1825 2.00000 + 13 3.3668 2.00000 + 14 3.6041 2.00000 + 15 3.6188 2.00000 + 16 3.6416 2.00000 + 17 3.7932 2.00002 + 18 3.9062 2.00056 + 19 3.9460 2.00149 + 20 4.1110 2.03116 + 21 5.4929 -0.00000 + 22 5.8352 -0.00000 + 23 5.9218 -0.00000 + 24 5.9736 -0.00000 + 25 6.0352 -0.00000 + 26 6.5290 -0.00000 + 27 6.5501 -0.00000 + 28 7.0292 -0.00000 + 29 7.1710 -0.00000 + 30 7.4148 -0.00000 + 31 7.6192 -0.00000 + 32 7.6902 -0.00000 + 33 8.3442 -0.00000 + 34 8.4621 -0.00000 + 35 8.8702 -0.00000 + 36 8.9182 -0.00000 + 37 9.2684 -0.00000 + 38 9.3010 -0.00000 + 39 9.6499 -0.00000 + 40 9.9970 0.00000 + 41 10.1135 0.00000 + 42 10.5532 0.00000 + 43 10.7723 0.00000 + 44 11.1244 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2104 2.00000 + 2 1.3524 2.00000 + 3 1.5421 2.00000 + 4 1.6876 2.00000 + 5 2.2719 2.00000 + 6 2.4219 2.00000 + 7 2.7225 2.00000 + 8 2.8584 2.00000 + 9 3.0727 2.00000 + 10 3.1926 2.00000 + 11 3.2824 2.00000 + 12 3.3943 2.00000 + 13 3.4498 2.00000 + 14 3.5060 2.00000 + 15 3.6845 2.00000 + 16 3.7039 2.00000 + 17 3.7943 2.00002 + 18 3.8820 2.00030 + 19 3.9270 2.00095 + 20 3.9322 2.00107 + 21 5.4142 -0.00000 + 22 5.6851 -0.00000 + 23 5.6960 -0.00000 + 24 5.7749 -0.00000 + 25 6.0582 -0.00000 + 26 6.3815 -0.00000 + 27 6.6111 -0.00000 + 28 6.7914 -0.00000 + 29 7.3074 -0.00000 + 30 7.4601 -0.00000 + 31 7.8127 -0.00000 + 32 7.9138 -0.00000 + 33 8.1773 -0.00000 + 34 8.1864 -0.00000 + 35 8.9700 -0.00000 + 36 9.0362 -0.00000 + 37 9.1837 -0.00000 + 38 9.3335 -0.00000 + 39 9.6173 -0.00000 + 40 10.0610 0.00000 + 41 10.3615 0.00000 + 42 10.5477 0.00000 + 43 11.1217 0.00000 + 44 11.2305 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1073 2.00000 + 2 1.2144 2.00000 + 3 2.1389 2.00000 + 4 2.1975 2.00000 + 5 2.2402 2.00000 + 6 2.2964 2.00000 + 7 2.4277 2.00000 + 8 2.6344 2.00000 + 9 2.7554 2.00000 + 10 2.7571 2.00000 + 11 3.3261 2.00000 + 12 3.4344 2.00000 + 13 3.4694 2.00000 + 14 3.5014 2.00000 + 15 3.6404 2.00000 + 16 3.6427 2.00000 + 17 3.6797 2.00000 + 18 3.7668 2.00001 + 19 3.8087 2.00004 + 20 3.8368 2.00008 + 21 5.9431 -0.00000 + 22 6.0760 -0.00000 + 23 6.0976 -0.00000 + 24 6.2227 -0.00000 + 25 6.3626 -0.00000 + 26 6.3748 -0.00000 + 27 6.9735 -0.00000 + 28 7.1344 -0.00000 + 29 7.2542 -0.00000 + 30 7.4023 -0.00000 + 31 7.7380 -0.00000 + 32 8.0558 -0.00000 + 33 8.1127 -0.00000 + 34 8.3845 -0.00000 + 35 8.4361 -0.00000 + 36 9.0206 -0.00000 + 37 9.1234 -0.00000 + 38 9.1994 -0.00000 + 39 9.4098 -0.00000 + 40 9.5681 -0.00000 + 41 9.9373 0.00000 + 42 10.0769 0.00000 + 43 10.7601 0.00000 + 44 10.9547 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1260 2.00000 + 2 1.2335 2.00000 + 3 1.8625 2.00000 + 4 1.9726 2.00000 + 5 2.4208 2.00000 + 6 2.5279 2.00000 + 7 2.6266 2.00000 + 8 2.6765 2.00000 + 9 2.7682 2.00000 + 10 2.7941 2.00000 + 11 3.1514 2.00000 + 12 3.3078 2.00000 + 13 3.3896 2.00000 + 14 3.5134 2.00000 + 15 3.6144 2.00000 + 16 3.6982 2.00000 + 17 3.7495 2.00001 + 18 3.8198 2.00005 + 19 3.8484 2.00012 + 20 3.9623 2.00217 + 21 5.8848 -0.00000 + 22 5.9695 -0.00000 + 23 6.0199 -0.00000 + 24 6.1555 -0.00000 + 25 6.1589 -0.00000 + 26 6.3673 -0.00000 + 27 6.9349 -0.00000 + 28 7.1729 -0.00000 + 29 7.1981 -0.00000 + 30 7.4252 -0.00000 + 31 7.7134 -0.00000 + 32 8.0584 -0.00000 + 33 8.1461 -0.00000 + 34 8.5313 -0.00000 + 35 8.5803 -0.00000 + 36 8.9932 -0.00000 + 37 9.0957 -0.00000 + 38 9.2007 -0.00000 + 39 9.4113 -0.00000 + 40 9.5982 -0.00000 + 41 10.0162 0.00000 + 42 10.1891 0.00000 + 43 10.7674 0.00000 + 44 10.9794 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1832 2.00000 + 2 1.2916 2.00000 + 3 1.6164 2.00000 + 4 1.7277 2.00000 + 5 2.4906 2.00000 + 6 2.7094 2.00000 + 7 2.8158 2.00000 + 8 2.8356 2.00000 + 9 2.9380 2.00000 + 10 2.9857 2.00000 + 11 3.0515 2.00000 + 12 3.1191 2.00000 + 13 3.2140 2.00000 + 14 3.3173 2.00000 + 15 3.7457 2.00000 + 16 3.7459 2.00000 + 17 3.8319 2.00007 + 18 3.8769 2.00026 + 19 3.9447 2.00145 + 20 4.0394 2.01032 + 21 5.6289 -0.00000 + 22 5.8014 -0.00000 + 23 5.8016 -0.00000 + 24 5.8786 -0.00000 + 25 6.1477 -0.00000 + 26 6.3369 -0.00000 + 27 6.7631 -0.00000 + 28 6.9404 -0.00000 + 29 7.3924 -0.00000 + 30 7.5885 -0.00000 + 31 7.7755 -0.00000 + 32 8.0970 -0.00000 + 33 8.1145 -0.00000 + 34 8.5379 -0.00000 + 35 8.6929 -0.00000 + 36 8.9647 -0.00000 + 37 9.0341 -0.00000 + 38 9.2238 -0.00000 + 39 9.5132 -0.00000 + 40 9.7761 -0.00000 + 41 10.2078 0.00000 + 42 10.4372 0.00000 + 43 10.7536 0.00000 + 44 11.0213 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2814 2.00000 + 2 1.3909 2.00000 + 3 1.4242 2.00000 + 4 1.5349 2.00000 + 5 2.6005 2.00000 + 6 2.7481 2.00000 + 7 2.8111 2.00000 + 8 2.9146 2.00000 + 9 2.9538 2.00000 + 10 2.9579 2.00000 + 11 3.0565 2.00000 + 12 3.1374 2.00000 + 13 3.4085 2.00000 + 14 3.4522 2.00000 + 15 3.7300 2.00000 + 16 3.7558 2.00001 + 17 3.8334 2.00007 + 18 3.8790 2.00027 + 19 3.9440 2.00143 + 20 3.9567 2.00191 + 21 5.4930 -0.00000 + 22 5.6185 -0.00000 + 23 5.6590 -0.00000 + 24 5.6965 -0.00000 + 25 6.2567 -0.00000 + 26 6.4368 -0.00000 + 27 6.5344 -0.00000 + 28 6.6618 -0.00000 + 29 7.5538 -0.00000 + 30 7.7757 -0.00000 + 31 7.7992 -0.00000 + 32 8.0560 -0.00000 + 33 8.1969 -0.00000 + 34 8.4743 -0.00000 + 35 8.6288 -0.00000 + 36 8.8587 -0.00000 + 37 9.0733 -0.00000 + 38 9.2754 -0.00000 + 39 9.5462 -0.00000 + 40 9.8304 -0.00000 + 41 10.4656 0.00000 + 42 10.6609 0.00000 + 43 10.7480 0.00000 + 44 10.9565 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0829 2.00000 + 2 1.6491 2.00000 + 3 1.8940 2.00000 + 4 2.1229 2.00000 + 5 2.1450 2.00000 + 6 2.1706 2.00000 + 7 2.6444 2.00000 + 8 2.7511 2.00000 + 9 2.7926 2.00000 + 10 2.8602 2.00000 + 11 2.9740 2.00000 + 12 3.0617 2.00000 + 13 3.1498 2.00000 + 14 3.1896 2.00000 + 15 3.4130 2.00000 + 16 3.6171 2.00000 + 17 3.7451 2.00000 + 18 3.8209 2.00005 + 19 3.8907 2.00037 + 20 4.2437 2.06598 + 21 6.1053 -0.00000 + 22 6.1943 -0.00000 + 23 6.2775 -0.00000 + 24 6.6175 -0.00000 + 25 6.8970 -0.00000 + 26 7.0136 -0.00000 + 27 7.0267 -0.00000 + 28 7.0827 -0.00000 + 29 7.2757 -0.00000 + 30 7.3039 -0.00000 + 31 7.3871 -0.00000 + 32 7.3905 -0.00000 + 33 8.1726 -0.00000 + 34 8.5995 -0.00000 + 35 8.6202 -0.00000 + 36 9.1383 -0.00000 + 37 9.2605 -0.00000 + 38 9.5880 -0.00000 + 39 9.6717 -0.00000 + 40 9.7462 -0.00000 + 41 9.8606 -0.00000 + 42 10.0620 0.00000 + 43 10.2189 0.00000 + 44 10.3446 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.1016 2.00000 + 2 1.6690 2.00000 + 3 1.8386 2.00000 + 4 1.9140 2.00000 + 5 2.1652 2.00000 + 6 2.4071 2.00000 + 7 2.5142 2.00000 + 8 2.6395 2.00000 + 9 2.8127 2.00000 + 10 2.8939 2.00000 + 11 3.0294 2.00000 + 12 3.0823 2.00000 + 13 3.2235 2.00000 + 14 3.4132 2.00000 + 15 3.4632 2.00000 + 16 3.4785 2.00000 + 17 3.7217 2.00000 + 18 3.9025 2.00051 + 19 3.9207 2.00081 + 20 4.2468 2.06447 + 21 5.9798 -0.00000 + 22 6.1347 -0.00000 + 23 6.1354 -0.00000 + 24 6.5200 -0.00000 + 25 6.6680 -0.00000 + 26 6.9327 -0.00000 + 27 6.9809 -0.00000 + 28 7.0965 -0.00000 + 29 7.2152 -0.00000 + 30 7.2754 -0.00000 + 31 7.3502 -0.00000 + 32 7.5634 -0.00000 + 33 8.3204 -0.00000 + 34 8.5623 -0.00000 + 35 8.7564 -0.00000 + 36 9.0547 -0.00000 + 37 9.2448 -0.00000 + 38 9.4789 -0.00000 + 39 9.7725 -0.00000 + 40 9.8078 -0.00000 + 41 9.9985 0.00000 + 42 10.2324 0.00000 + 43 10.4230 0.00000 + 44 10.5756 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1585 2.00000 + 2 1.5912 2.00000 + 3 1.7293 2.00000 + 4 1.9744 2.00000 + 5 2.1671 2.00000 + 6 2.2285 2.00000 + 7 2.4099 2.00000 + 8 2.6650 2.00000 + 9 2.8490 2.00000 + 10 2.9511 2.00000 + 11 3.1369 2.00000 + 12 3.2631 2.00000 + 13 3.3566 2.00000 + 14 3.5026 2.00000 + 15 3.5181 2.00000 + 16 3.5772 2.00000 + 17 3.7539 2.00001 + 18 3.8673 2.00020 + 19 4.0179 2.00693 + 20 4.2390 2.06786 + 21 5.6206 -0.00000 + 22 5.9793 -0.00000 + 23 6.0051 -0.00000 + 24 6.2219 -0.00000 + 25 6.4365 -0.00000 + 26 6.7063 -0.00000 + 27 6.8823 -0.00000 + 28 6.8845 -0.00000 + 29 7.2210 -0.00000 + 30 7.2857 -0.00000 + 31 7.4841 -0.00000 + 32 7.7798 -0.00000 + 33 8.3230 -0.00000 + 34 8.3342 -0.00000 + 35 9.0379 -0.00000 + 36 9.1192 -0.00000 + 37 9.3226 -0.00000 + 38 9.5028 -0.00000 + 39 9.8488 -0.00000 + 40 10.0382 0.00000 + 41 10.2482 0.00000 + 42 10.5177 0.00000 + 43 10.7178 0.00000 + 44 10.9592 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2562 2.00000 + 2 1.3988 2.00000 + 3 1.8312 2.00000 + 4 1.9767 2.00000 + 5 2.0764 2.00000 + 6 2.2199 2.00000 + 7 2.3319 2.00000 + 8 2.4768 2.00000 + 9 2.9465 2.00000 + 10 3.0703 2.00000 + 11 3.2570 2.00000 + 12 3.3610 2.00000 + 13 3.4592 2.00000 + 14 3.6148 2.00000 + 15 3.6372 2.00000 + 16 3.6728 2.00000 + 17 3.7595 2.00001 + 18 3.8539 2.00014 + 19 4.0031 2.00518 + 20 4.1715 2.05806 + 21 5.5296 -0.00000 + 22 5.7583 -0.00000 + 23 5.8331 -0.00000 + 24 5.9016 -0.00000 + 25 6.5019 -0.00000 + 26 6.5643 -0.00000 + 27 6.6337 -0.00000 + 28 6.7744 -0.00000 + 29 7.2619 -0.00000 + 30 7.3093 -0.00000 + 31 7.7153 -0.00000 + 32 7.9269 -0.00000 + 33 8.0611 -0.00000 + 34 8.0963 -0.00000 + 35 9.3069 -0.00000 + 36 9.3577 -0.00000 + 37 9.4251 -0.00000 + 38 9.5406 -0.00000 + 39 9.9038 -0.00000 + 40 10.2386 0.00000 + 41 10.2868 0.00000 + 42 10.3717 0.00000 + 43 11.0819 0.00000 + 44 11.2427 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1181 2.00000 + 2 1.4521 2.00000 + 3 2.1561 2.00000 + 4 2.1829 2.00000 + 5 2.1881 2.00000 + 6 2.2085 2.00000 + 7 2.4689 2.00000 + 8 2.5633 2.00000 + 9 2.5796 2.00000 + 10 3.0544 2.00000 + 11 3.1745 2.00000 + 12 3.1998 2.00000 + 13 3.2422 2.00000 + 14 3.2886 2.00000 + 15 3.3329 2.00000 + 16 3.4972 2.00000 + 17 3.6116 2.00000 + 18 3.8050 2.00003 + 19 3.8601 2.00016 + 20 4.1432 2.04520 + 21 6.0642 -0.00000 + 22 6.1237 -0.00000 + 23 6.3162 -0.00000 + 24 6.3434 -0.00000 + 25 6.8774 -0.00000 + 26 6.8885 -0.00000 + 27 7.0073 -0.00000 + 28 7.3222 -0.00000 + 29 7.3723 -0.00000 + 30 7.5528 -0.00000 + 31 7.6172 -0.00000 + 32 7.6285 -0.00000 + 33 8.2102 -0.00000 + 34 8.4044 -0.00000 + 35 8.5838 -0.00000 + 36 9.0797 -0.00000 + 37 9.4046 -0.00000 + 38 9.4125 -0.00000 + 39 9.6375 -0.00000 + 40 9.6787 -0.00000 + 41 9.9103 -0.00000 + 42 10.1584 0.00000 + 43 10.2374 0.00000 + 44 10.6102 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1368 2.00000 + 2 1.4716 2.00000 + 3 1.8749 2.00000 + 4 2.1852 2.00000 + 5 2.2159 2.00000 + 6 2.2269 2.00000 + 7 2.5459 2.00000 + 8 2.6022 2.00000 + 9 2.8563 2.00000 + 10 2.8662 2.00000 + 11 2.9947 2.00000 + 12 3.2105 2.00000 + 13 3.2966 2.00000 + 14 3.3822 2.00000 + 15 3.3882 2.00000 + 16 3.5462 2.00000 + 17 3.7120 2.00000 + 18 3.8152 2.00004 + 19 3.8687 2.00021 + 20 4.1504 2.04855 + 21 5.9512 -0.00000 + 22 6.0129 -0.00000 + 23 6.2051 -0.00000 + 24 6.3467 -0.00000 + 25 6.5551 -0.00000 + 26 6.8029 -0.00000 + 27 7.0146 -0.00000 + 28 7.2649 -0.00000 + 29 7.3418 -0.00000 + 30 7.5566 -0.00000 + 31 7.6574 -0.00000 + 32 7.6685 -0.00000 + 33 8.4052 -0.00000 + 34 8.4668 -0.00000 + 35 8.6488 -0.00000 + 36 9.0433 -0.00000 + 37 9.2959 -0.00000 + 38 9.3896 -0.00000 + 39 9.6914 -0.00000 + 40 9.7876 -0.00000 + 41 10.0087 0.00000 + 42 10.3283 0.00000 + 43 10.4249 0.00000 + 44 10.6808 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1940 2.00000 + 2 1.5309 2.00000 + 3 1.6277 2.00000 + 4 1.9699 2.00000 + 5 2.2484 2.00000 + 6 2.2893 2.00000 + 7 2.6499 2.00000 + 8 2.6580 2.00000 + 9 2.7570 2.00000 + 10 2.9593 2.00000 + 11 3.0754 2.00000 + 12 3.2318 2.00000 + 13 3.3039 2.00000 + 14 3.4299 2.00000 + 15 3.6148 2.00000 + 16 3.6367 2.00000 + 17 3.7505 2.00001 + 18 3.8062 2.00003 + 19 3.9845 2.00353 + 20 4.1573 2.05172 + 21 5.5938 -0.00000 + 22 5.8771 -0.00000 + 23 6.0050 -0.00000 + 24 6.0908 -0.00000 + 25 6.3805 -0.00000 + 26 6.6046 -0.00000 + 27 6.9719 -0.00000 + 28 6.9893 -0.00000 + 29 7.3949 -0.00000 + 30 7.5267 -0.00000 + 31 7.7396 -0.00000 + 32 7.8152 -0.00000 + 33 8.3416 -0.00000 + 34 8.4856 -0.00000 + 35 8.8680 -0.00000 + 36 9.1161 -0.00000 + 37 9.3586 -0.00000 + 38 9.4970 -0.00000 + 39 9.7209 -0.00000 + 40 9.9558 0.00000 + 41 10.2675 0.00000 + 42 10.4540 0.00000 + 43 10.7324 0.00000 + 44 10.9160 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2920 2.00000 + 2 1.4350 2.00000 + 3 1.6318 2.00000 + 4 1.7772 2.00000 + 5 2.3396 2.00000 + 6 2.3999 2.00000 + 7 2.4762 2.00000 + 8 2.5641 2.00000 + 9 2.7556 2.00000 + 10 2.8996 2.00000 + 11 3.3388 2.00000 + 12 3.4233 2.00000 + 13 3.4997 2.00000 + 14 3.5558 2.00000 + 15 3.5596 2.00000 + 16 3.6532 2.00000 + 17 3.7103 2.00000 + 18 3.8770 2.00026 + 19 3.9999 2.00485 + 20 4.1190 2.03444 + 21 5.4602 -0.00000 + 22 5.7390 -0.00000 + 23 5.7579 -0.00000 + 24 5.7825 -0.00000 + 25 6.4472 -0.00000 + 26 6.5455 -0.00000 + 27 6.6826 -0.00000 + 28 6.9272 -0.00000 + 29 7.4149 -0.00000 + 30 7.5439 -0.00000 + 31 7.8667 -0.00000 + 32 7.9375 -0.00000 + 33 8.1302 -0.00000 + 34 8.3180 -0.00000 + 35 9.1820 -0.00000 + 36 9.2831 -0.00000 + 37 9.4182 -0.00000 + 38 9.6081 -0.00000 + 39 9.6778 -0.00000 + 40 10.1423 0.00000 + 41 10.3942 0.00000 + 42 10.4103 0.00000 + 43 10.8359 0.00000 + 44 11.0368 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1896 2.00000 + 2 1.2999 2.00000 + 3 2.2233 2.00000 + 4 2.2731 2.00000 + 5 2.2842 2.00000 + 6 2.3296 2.00000 + 7 2.3891 2.00000 + 8 2.4062 2.00000 + 9 2.5341 2.00000 + 10 2.8751 2.00000 + 11 3.1936 2.00000 + 12 3.3059 2.00000 + 13 3.3251 2.00000 + 14 3.4437 2.00000 + 15 3.4509 2.00000 + 16 3.5102 2.00000 + 17 3.6098 2.00000 + 18 3.7186 2.00000 + 19 3.7243 2.00000 + 20 3.9426 2.00138 + 21 6.0074 -0.00000 + 22 6.0912 -0.00000 + 23 6.2833 -0.00000 + 24 6.4933 -0.00000 + 25 6.5589 -0.00000 + 26 6.6951 -0.00000 + 27 7.1548 -0.00000 + 28 7.2931 -0.00000 + 29 7.5621 -0.00000 + 30 7.6606 -0.00000 + 31 8.0020 -0.00000 + 32 8.0567 -0.00000 + 33 8.1866 -0.00000 + 34 8.4061 -0.00000 + 35 8.5080 -0.00000 + 36 9.1113 -0.00000 + 37 9.1717 -0.00000 + 38 9.2536 -0.00000 + 39 9.5406 -0.00000 + 40 9.6475 -0.00000 + 41 9.7905 -0.00000 + 42 9.9398 0.00000 + 43 10.7013 0.00000 + 44 10.9186 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2085 2.00000 + 2 1.3191 2.00000 + 3 1.9482 2.00000 + 4 2.0600 2.00000 + 5 2.2957 2.00000 + 6 2.4261 2.00000 + 7 2.5312 2.00000 + 8 2.6124 2.00000 + 9 2.7333 2.00000 + 10 2.9002 2.00000 + 11 2.9971 2.00000 + 12 3.1371 2.00000 + 13 3.2433 2.00000 + 14 3.5085 2.00000 + 15 3.5193 2.00000 + 16 3.6288 2.00000 + 17 3.6917 2.00000 + 18 3.7091 2.00000 + 19 3.8283 2.00006 + 20 3.9579 2.00197 + 21 5.9536 -0.00000 + 22 6.0086 -0.00000 + 23 6.1008 -0.00000 + 24 6.3144 -0.00000 + 25 6.4669 -0.00000 + 26 6.6258 -0.00000 + 27 7.1322 -0.00000 + 28 7.2361 -0.00000 + 29 7.5592 -0.00000 + 30 7.6854 -0.00000 + 31 7.9459 -0.00000 + 32 8.1218 -0.00000 + 33 8.2407 -0.00000 + 34 8.4698 -0.00000 + 35 8.6903 -0.00000 + 36 9.0777 -0.00000 + 37 9.1408 -0.00000 + 38 9.2813 -0.00000 + 39 9.5673 -0.00000 + 40 9.7395 -0.00000 + 41 9.8938 -0.00000 + 42 10.0952 0.00000 + 43 10.6904 0.00000 + 44 10.8866 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2662 2.00000 + 2 1.3775 2.00000 + 3 1.7017 2.00000 + 4 1.8151 2.00000 + 5 2.3548 2.00000 + 6 2.4863 2.00000 + 7 2.5982 2.00000 + 8 2.7817 2.00000 + 9 2.8872 2.00000 + 10 2.9575 2.00000 + 11 3.0360 2.00000 + 12 3.0617 2.00000 + 13 3.1255 2.00000 + 14 3.3583 2.00000 + 15 3.7089 2.00000 + 16 3.7109 2.00000 + 17 3.7806 2.00001 + 18 3.8600 2.00016 + 19 3.9375 2.00122 + 20 3.9967 2.00454 + 21 5.6719 -0.00000 + 22 5.7992 -0.00000 + 23 5.8880 -0.00000 + 24 5.8953 -0.00000 + 25 6.4574 -0.00000 + 26 6.5272 -0.00000 + 27 7.0155 -0.00000 + 28 7.0167 -0.00000 + 29 7.6139 -0.00000 + 30 7.7788 -0.00000 + 31 7.9325 -0.00000 + 32 8.1524 -0.00000 + 33 8.2322 -0.00000 + 34 8.5649 -0.00000 + 35 8.8048 -0.00000 + 36 9.1649 -0.00000 + 37 9.1723 -0.00000 + 38 9.3583 -0.00000 + 39 9.7395 -0.00000 + 40 9.9726 0.00000 + 41 10.0456 0.00000 + 42 10.3555 0.00000 + 43 10.6450 0.00000 + 44 10.9334 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3650 2.00000 + 2 1.4773 2.00000 + 3 1.5087 2.00000 + 4 1.6219 2.00000 + 5 2.4534 2.00000 + 6 2.5858 2.00000 + 7 2.5903 2.00000 + 8 2.7165 2.00000 + 9 2.7297 2.00000 + 10 2.8606 2.00000 + 11 3.0611 2.00000 + 12 3.2011 2.00000 + 13 3.4519 2.00000 + 14 3.5018 2.00000 + 15 3.7249 2.00000 + 16 3.7368 2.00000 + 17 3.7763 2.00001 + 18 3.9294 2.00100 + 19 3.9468 2.00152 + 20 4.0189 2.00705 + 21 5.4727 -0.00000 + 22 5.5954 -0.00000 + 23 5.6752 -0.00000 + 24 5.6907 -0.00000 + 25 6.4946 -0.00000 + 26 6.5345 -0.00000 + 27 6.7669 -0.00000 + 28 6.8778 -0.00000 + 29 7.6697 -0.00000 + 30 7.8695 -0.00000 + 31 7.8728 -0.00000 + 32 8.0801 -0.00000 + 33 8.2982 -0.00000 + 34 8.6783 -0.00000 + 35 8.8303 -0.00000 + 36 9.0758 -0.00000 + 37 9.3348 -0.00000 + 38 9.4545 -0.00000 + 39 9.8270 -0.00000 + 40 10.0925 0.00000 + 41 10.2669 0.00000 + 42 10.5177 0.00000 + 43 10.6321 0.00000 + 44 10.8473 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.2033 2.00000 + 2 1.7908 2.00000 + 3 1.8360 2.00000 + 4 2.0426 2.00000 + 5 2.2428 2.00000 + 6 2.2935 2.00000 + 7 2.4968 2.00000 + 8 2.7401 2.00000 + 9 2.7685 2.00000 + 10 2.8556 2.00000 + 11 2.8621 2.00000 + 12 2.9086 2.00000 + 13 3.0823 2.00000 + 14 3.1044 2.00000 + 15 3.4140 2.00000 + 16 3.4294 2.00000 + 17 3.6033 2.00000 + 18 3.6171 2.00000 + 19 3.6756 2.00000 + 20 4.3651 1.74044 + 21 6.1309 -0.00000 + 22 6.4737 -0.00000 + 23 6.5359 -0.00000 + 24 7.0786 -0.00000 + 25 7.1582 -0.00000 + 26 7.2408 -0.00000 + 27 7.2517 -0.00000 + 28 7.3203 -0.00000 + 29 7.4470 -0.00000 + 30 7.5276 -0.00000 + 31 7.5868 -0.00000 + 32 7.8825 -0.00000 + 33 8.1464 -0.00000 + 34 8.2141 -0.00000 + 35 8.6000 -0.00000 + 36 9.2197 -0.00000 + 37 9.3645 -0.00000 + 38 9.3882 -0.00000 + 39 9.4907 -0.00000 + 40 9.5399 -0.00000 + 41 9.6832 -0.00000 + 42 9.7337 -0.00000 + 43 10.0165 0.00000 + 44 10.6933 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2222 2.00000 + 2 1.8093 2.00000 + 3 1.8569 2.00000 + 4 1.9634 2.00000 + 5 2.0629 2.00000 + 6 2.5028 2.00000 + 7 2.5187 2.00000 + 8 2.6041 2.00000 + 9 2.6360 2.00000 + 10 2.7960 2.00000 + 11 2.7988 2.00000 + 12 3.1232 2.00000 + 13 3.1900 2.00000 + 14 3.2127 2.00000 + 15 3.3917 2.00000 + 16 3.4306 2.00000 + 17 3.6029 2.00000 + 18 3.7308 2.00000 + 19 3.7832 2.00002 + 20 4.3659 1.73604 + 21 6.0695 -0.00000 + 22 6.1937 -0.00000 + 23 6.4120 -0.00000 + 24 6.8157 -0.00000 + 25 6.8981 -0.00000 + 26 7.1501 -0.00000 + 27 7.2692 -0.00000 + 28 7.2789 -0.00000 + 29 7.4015 -0.00000 + 30 7.6215 -0.00000 + 31 7.6221 -0.00000 + 32 7.8541 -0.00000 + 33 8.3264 -0.00000 + 34 8.4577 -0.00000 + 35 8.6638 -0.00000 + 36 9.0723 -0.00000 + 37 9.1987 -0.00000 + 38 9.4282 -0.00000 + 39 9.5579 -0.00000 + 40 9.6994 -0.00000 + 41 9.8986 -0.00000 + 42 9.9085 -0.00000 + 43 10.2779 0.00000 + 44 10.6420 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2798 2.00000 + 2 1.7160 2.00000 + 3 1.8658 2.00000 + 4 1.9191 2.00000 + 5 2.1233 2.00000 + 6 2.2897 2.00000 + 7 2.3667 2.00000 + 8 2.5649 2.00000 + 9 2.5677 2.00000 + 10 2.8277 2.00000 + 11 2.9728 2.00000 + 12 3.0703 2.00000 + 13 3.2626 2.00000 + 14 3.4315 2.00000 + 15 3.5101 2.00000 + 16 3.6779 2.00000 + 17 3.7139 2.00000 + 18 3.8199 2.00005 + 19 3.9357 2.00117 + 20 4.3468 1.83287 + 21 5.7481 -0.00000 + 22 5.9169 -0.00000 + 23 6.1131 -0.00000 + 24 6.3038 -0.00000 + 25 6.8170 -0.00000 + 26 6.8375 -0.00000 + 27 6.9005 -0.00000 + 28 7.2362 -0.00000 + 29 7.4829 -0.00000 + 30 7.7084 -0.00000 + 31 7.7555 -0.00000 + 32 7.8948 -0.00000 + 33 8.2329 -0.00000 + 34 8.4388 -0.00000 + 35 9.0692 -0.00000 + 36 9.1774 -0.00000 + 37 9.3573 -0.00000 + 38 9.4391 -0.00000 + 39 9.6183 -0.00000 + 40 9.9783 0.00000 + 41 10.2302 0.00000 + 42 10.2701 0.00000 + 43 10.4453 0.00000 + 44 10.7748 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3786 2.00000 + 2 1.5225 2.00000 + 3 1.9622 2.00000 + 4 2.0218 2.00000 + 5 2.1027 2.00000 + 6 2.1717 2.00000 + 7 2.2329 2.00000 + 8 2.3783 2.00000 + 9 2.6598 2.00000 + 10 2.7943 2.00000 + 11 2.9439 2.00000 + 12 3.0772 2.00000 + 13 3.5042 2.00000 + 14 3.6626 2.00000 + 15 3.6966 2.00000 + 16 3.7297 2.00000 + 17 3.8291 2.00007 + 18 3.8985 2.00046 + 19 4.0227 2.00758 + 20 4.2479 2.06388 + 21 5.5728 -0.00000 + 22 5.7778 -0.00000 + 23 5.8020 -0.00000 + 24 5.9229 -0.00000 + 25 6.6344 -0.00000 + 26 6.6629 -0.00000 + 27 6.8620 -0.00000 + 28 7.1244 -0.00000 + 29 7.5347 -0.00000 + 30 7.6510 -0.00000 + 31 7.8614 -0.00000 + 32 8.0083 -0.00000 + 33 8.0231 -0.00000 + 34 8.3405 -0.00000 + 35 9.2941 -0.00000 + 36 9.4195 -0.00000 + 37 9.4450 -0.00000 + 38 9.5783 -0.00000 + 39 9.7439 -0.00000 + 40 10.1893 0.00000 + 41 10.1913 0.00000 + 42 10.3922 0.00000 + 43 10.8358 0.00000 + 44 11.1331 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2400 2.00000 + 2 1.5872 2.00000 + 3 1.8784 2.00000 + 4 2.2547 2.00000 + 5 2.2962 2.00000 + 6 2.3326 2.00000 + 7 2.3384 2.00000 + 8 2.5924 2.00000 + 9 2.6903 2.00000 + 10 2.9018 2.00000 + 11 2.9435 2.00000 + 12 3.0779 2.00000 + 13 3.2465 2.00000 + 14 3.2728 2.00000 + 15 3.2769 2.00000 + 16 3.3257 2.00000 + 17 3.4604 2.00000 + 18 3.6748 2.00000 + 19 3.6888 2.00000 + 20 4.1566 2.05141 + 21 6.1427 -0.00000 + 22 6.3827 -0.00000 + 23 6.5199 -0.00000 + 24 6.8082 -0.00000 + 25 7.0005 -0.00000 + 26 7.1161 -0.00000 + 27 7.3935 -0.00000 + 28 7.5405 -0.00000 + 29 7.5676 -0.00000 + 30 7.6019 -0.00000 + 31 7.6396 -0.00000 + 32 8.1172 -0.00000 + 33 8.2034 -0.00000 + 34 8.2113 -0.00000 + 35 8.8036 -0.00000 + 36 9.0699 -0.00000 + 37 9.3083 -0.00000 + 38 9.4280 -0.00000 + 39 9.4946 -0.00000 + 40 9.6218 -0.00000 + 41 9.9059 -0.00000 + 42 10.0628 0.00000 + 43 10.0632 0.00000 + 44 10.7424 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2590 2.00000 + 2 1.6068 2.00000 + 3 1.8982 2.00000 + 4 2.0011 2.00000 + 5 2.2887 2.00000 + 6 2.3374 2.00000 + 7 2.3668 2.00000 + 8 2.6389 2.00000 + 9 2.6659 2.00000 + 10 2.9766 2.00000 + 11 3.0028 2.00000 + 12 3.0502 2.00000 + 13 3.1155 2.00000 + 14 3.2593 2.00000 + 15 3.3906 2.00000 + 16 3.5397 2.00000 + 17 3.5640 2.00000 + 18 3.6343 2.00000 + 19 3.7347 2.00000 + 20 4.1641 2.05482 + 21 6.0661 -0.00000 + 22 6.1230 -0.00000 + 23 6.4230 -0.00000 + 24 6.6328 -0.00000 + 25 6.7804 -0.00000 + 26 7.0666 -0.00000 + 27 7.2938 -0.00000 + 28 7.3786 -0.00000 + 29 7.5560 -0.00000 + 30 7.7134 -0.00000 + 31 7.7677 -0.00000 + 32 8.1780 -0.00000 + 33 8.3274 -0.00000 + 34 8.4128 -0.00000 + 35 8.7281 -0.00000 + 36 9.0920 -0.00000 + 37 9.1673 -0.00000 + 38 9.5549 -0.00000 + 39 9.5718 -0.00000 + 40 9.6586 -0.00000 + 41 10.0509 0.00000 + 42 10.2112 0.00000 + 43 10.2248 0.00000 + 44 10.7166 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3169 2.00000 + 2 1.6661 2.00000 + 3 1.7539 2.00000 + 4 1.9577 2.00000 + 5 2.1047 2.00000 + 6 2.3489 2.00000 + 7 2.3791 2.00000 + 8 2.4426 2.00000 + 9 2.7795 2.00000 + 10 2.8413 2.00000 + 11 3.0330 2.00000 + 12 3.1997 2.00000 + 13 3.3316 2.00000 + 14 3.4205 2.00000 + 15 3.5158 2.00000 + 16 3.5544 2.00000 + 17 3.6955 2.00000 + 18 3.7694 2.00001 + 19 3.8632 2.00018 + 20 4.1724 2.05845 + 21 5.6922 -0.00000 + 22 5.8666 -0.00000 + 23 6.0931 -0.00000 + 24 6.1057 -0.00000 + 25 6.7971 -0.00000 + 26 6.8814 -0.00000 + 27 7.0167 -0.00000 + 28 7.4745 -0.00000 + 29 7.5247 -0.00000 + 30 7.7176 -0.00000 + 31 7.8435 -0.00000 + 32 8.1194 -0.00000 + 33 8.2795 -0.00000 + 34 8.6163 -0.00000 + 35 8.9520 -0.00000 + 36 9.1892 -0.00000 + 37 9.3094 -0.00000 + 38 9.6260 -0.00000 + 39 9.6602 -0.00000 + 40 9.8120 -0.00000 + 41 10.2040 0.00000 + 42 10.3878 0.00000 + 43 10.5278 0.00000 + 44 10.8111 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4160 2.00000 + 2 1.5602 2.00000 + 3 1.7667 2.00000 + 4 1.9114 2.00000 + 5 2.0603 2.00000 + 6 2.2041 2.00000 + 7 2.4493 2.00000 + 8 2.5267 2.00000 + 9 2.5962 2.00000 + 10 2.6669 2.00000 + 11 3.2031 2.00000 + 12 3.3091 2.00000 + 13 3.5020 2.00000 + 14 3.5861 2.00000 + 15 3.6173 2.00000 + 16 3.6649 2.00000 + 17 3.7115 2.00000 + 18 3.8740 2.00024 + 19 3.9870 2.00372 + 20 4.1346 2.04126 + 21 5.4861 -0.00000 + 22 5.6790 -0.00000 + 23 5.7341 -0.00000 + 24 5.7366 -0.00000 + 25 6.7614 -0.00000 + 26 6.8301 -0.00000 + 27 6.8533 -0.00000 + 28 7.4959 -0.00000 + 29 7.5715 -0.00000 + 30 7.6601 -0.00000 + 31 7.9225 -0.00000 + 32 8.0567 -0.00000 + 33 8.0642 -0.00000 + 34 8.6327 -0.00000 + 35 9.2542 -0.00000 + 36 9.3768 -0.00000 + 37 9.5101 -0.00000 + 38 9.6404 -0.00000 + 39 9.6740 -0.00000 + 40 9.9782 0.00000 + 41 10.2650 0.00000 + 42 10.4125 0.00000 + 43 10.6587 0.00000 + 44 10.8344 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3147 2.00000 + 2 1.4294 2.00000 + 3 1.9639 2.00000 + 4 2.0934 2.00000 + 5 2.3511 2.00000 + 6 2.4105 2.00000 + 7 2.4555 2.00000 + 8 2.5214 2.00000 + 9 2.6865 2.00000 + 10 2.9868 2.00000 + 11 3.0096 2.00000 + 12 3.0408 2.00000 + 13 3.1068 2.00000 + 14 3.2034 2.00000 + 15 3.4425 2.00000 + 16 3.4748 2.00000 + 17 3.5266 2.00000 + 18 3.6434 2.00000 + 19 3.6601 2.00000 + 20 3.8279 2.00006 + 21 6.2279 -0.00000 + 22 6.3367 -0.00000 + 23 6.5778 -0.00000 + 24 6.6344 -0.00000 + 25 6.7495 -0.00000 + 26 6.7814 -0.00000 + 27 7.4959 -0.00000 + 28 7.5520 -0.00000 + 29 7.7940 -0.00000 + 30 7.8151 -0.00000 + 31 7.9020 -0.00000 + 32 8.0049 -0.00000 + 33 8.5174 -0.00000 + 34 8.5184 -0.00000 + 35 8.7104 -0.00000 + 36 9.1347 -0.00000 + 37 9.1834 -0.00000 + 38 9.2883 -0.00000 + 39 9.5423 -0.00000 + 40 9.6764 -0.00000 + 41 9.7794 -0.00000 + 42 10.0684 0.00000 + 43 10.5700 0.00000 + 44 10.7817 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3338 2.00000 + 2 1.4488 2.00000 + 3 1.9837 2.00000 + 4 2.0763 2.00000 + 5 2.1145 2.00000 + 6 2.1919 2.00000 + 7 2.6634 2.00000 + 8 2.7290 2.00000 + 9 2.7516 2.00000 + 10 2.8482 2.00000 + 11 2.8596 2.00000 + 12 3.0794 2.00000 + 13 3.2697 2.00000 + 14 3.3801 2.00000 + 15 3.3937 2.00000 + 16 3.4876 2.00000 + 17 3.5993 2.00000 + 18 3.6561 2.00000 + 19 3.6877 2.00000 + 20 3.8429 2.00010 + 21 6.1230 -0.00000 + 22 6.1546 -0.00000 + 23 6.3056 -0.00000 + 24 6.3877 -0.00000 + 25 6.7814 -0.00000 + 26 6.8876 -0.00000 + 27 7.3708 -0.00000 + 28 7.3826 -0.00000 + 29 7.7761 -0.00000 + 30 7.8657 -0.00000 + 31 7.9903 -0.00000 + 32 8.1744 -0.00000 + 33 8.4697 -0.00000 + 34 8.6385 -0.00000 + 35 8.7280 -0.00000 + 36 9.1738 -0.00000 + 37 9.2520 -0.00000 + 38 9.2810 -0.00000 + 39 9.6080 -0.00000 + 40 9.7947 -0.00000 + 41 9.8696 -0.00000 + 42 10.1309 0.00000 + 43 10.5670 0.00000 + 44 10.7248 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3921 2.00000 + 2 1.5077 2.00000 + 3 1.8304 2.00000 + 4 1.9465 2.00000 + 5 2.0448 2.00000 + 6 2.1744 2.00000 + 7 2.4800 2.00000 + 8 2.6116 2.00000 + 9 2.7655 2.00000 + 10 3.0743 2.00000 + 11 3.1335 2.00000 + 12 3.1760 2.00000 + 13 3.2334 2.00000 + 14 3.4069 2.00000 + 15 3.5554 2.00000 + 16 3.6170 2.00000 + 17 3.6393 2.00000 + 18 3.7767 2.00001 + 19 3.7845 2.00002 + 20 3.8874 2.00034 + 21 5.7230 -0.00000 + 22 5.8367 -0.00000 + 23 5.9238 -0.00000 + 24 5.9829 -0.00000 + 25 6.8361 -0.00000 + 26 6.8679 -0.00000 + 27 7.1802 -0.00000 + 28 7.3353 -0.00000 + 29 7.7745 -0.00000 + 30 7.8822 -0.00000 + 31 7.9790 -0.00000 + 32 8.2318 -0.00000 + 33 8.4569 -0.00000 + 34 8.7046 -0.00000 + 35 8.9107 -0.00000 + 36 9.2629 -0.00000 + 37 9.3492 -0.00000 + 38 9.4290 -0.00000 + 39 9.7248 -0.00000 + 40 9.9378 0.00000 + 41 10.0354 0.00000 + 42 10.3187 0.00000 + 43 10.5426 0.00000 + 44 10.8330 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4918 2.00000 + 2 1.6081 2.00000 + 3 1.6367 2.00000 + 4 1.7534 2.00000 + 5 2.1459 2.00000 + 6 2.2760 2.00000 + 7 2.2919 2.00000 + 8 2.4235 2.00000 + 9 2.8591 2.00000 + 10 2.9885 2.00000 + 11 3.1978 2.00000 + 12 3.3017 2.00000 + 13 3.4627 2.00000 + 14 3.5527 2.00000 + 15 3.5785 2.00000 + 16 3.6903 2.00000 + 17 3.7026 2.00000 + 18 3.8699 2.00021 + 19 3.8818 2.00030 + 20 3.9485 2.00158 + 21 5.4606 -0.00000 + 22 5.5422 -0.00000 + 23 5.6231 -0.00000 + 24 5.6560 -0.00000 + 25 6.8339 -0.00000 + 26 6.8606 -0.00000 + 27 7.0817 -0.00000 + 28 7.3424 -0.00000 + 29 7.8111 -0.00000 + 30 7.8990 -0.00000 + 31 7.9349 -0.00000 + 32 8.0687 -0.00000 + 33 8.4577 -0.00000 + 34 8.9235 -0.00000 + 35 8.9714 -0.00000 + 36 9.1992 -0.00000 + 37 9.5040 -0.00000 + 38 9.5694 -0.00000 + 39 9.7738 -0.00000 + 40 9.9352 0.00000 + 41 10.2004 0.00000 + 42 10.5002 0.00000 + 43 10.5994 0.00000 + 44 10.8559 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3672 2.00000 + 2 1.5773 2.00000 + 3 1.9791 2.00000 + 4 2.2085 2.00000 + 5 2.2357 2.00000 + 6 2.3974 2.00000 + 7 2.4499 2.00000 + 8 2.5213 2.00000 + 9 2.6276 2.00000 + 10 2.6500 2.00000 + 11 2.9653 2.00000 + 12 3.0386 2.00000 + 13 3.1752 2.00000 + 14 3.1992 2.00000 + 15 3.2267 2.00000 + 16 3.2412 2.00000 + 17 3.3872 2.00000 + 18 3.4102 2.00000 + 19 3.9161 2.00072 + 20 4.1900 2.06523 + 21 6.3839 -0.00000 + 22 6.5991 -0.00000 + 23 6.8427 -0.00000 + 24 7.1343 -0.00000 + 25 7.2190 -0.00000 + 26 7.2395 -0.00000 + 27 7.2570 -0.00000 + 28 7.4024 -0.00000 + 29 7.7539 -0.00000 + 30 7.7873 -0.00000 + 31 7.8022 -0.00000 + 32 8.0672 -0.00000 + 33 8.2195 -0.00000 + 34 8.4489 -0.00000 + 35 8.7239 -0.00000 + 36 9.0886 -0.00000 + 37 9.1757 -0.00000 + 38 9.3731 -0.00000 + 39 9.4815 -0.00000 + 40 9.4906 -0.00000 + 41 9.5141 -0.00000 + 42 9.6515 -0.00000 + 43 9.6655 -0.00000 + 44 9.9326 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3864 2.00000 + 2 1.5966 2.00000 + 3 1.9988 2.00000 + 4 2.1253 2.00000 + 5 2.2390 2.00000 + 6 2.2491 2.00000 + 7 2.3520 2.00000 + 8 2.4996 2.00000 + 9 2.7199 2.00000 + 10 2.7974 2.00000 + 11 2.9220 2.00000 + 12 2.9487 2.00000 + 13 3.0362 2.00000 + 14 3.1820 2.00000 + 15 3.3076 2.00000 + 16 3.4766 2.00000 + 17 3.4786 2.00000 + 18 3.6076 2.00000 + 19 3.9415 2.00134 + 20 4.2008 2.06838 + 21 6.2374 -0.00000 + 22 6.3076 -0.00000 + 23 6.6351 -0.00000 + 24 6.7811 -0.00000 + 25 7.0892 -0.00000 + 26 7.1206 -0.00000 + 27 7.2893 -0.00000 + 28 7.3428 -0.00000 + 29 7.7250 -0.00000 + 30 7.7523 -0.00000 + 31 8.0548 -0.00000 + 32 8.2915 -0.00000 + 33 8.3284 -0.00000 + 34 8.6139 -0.00000 + 35 8.7064 -0.00000 + 36 8.9966 -0.00000 + 37 9.0379 -0.00000 + 38 9.3368 -0.00000 + 39 9.3916 -0.00000 + 40 9.6450 -0.00000 + 41 9.7161 -0.00000 + 42 9.7753 -0.00000 + 43 9.9573 0.00000 + 44 10.1364 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4448 2.00000 + 2 1.6554 2.00000 + 3 1.8830 2.00000 + 4 2.0518 2.00000 + 5 2.1006 2.00000 + 6 2.2943 2.00000 + 7 2.3222 2.00000 + 8 2.4931 2.00000 + 9 2.5576 2.00000 + 10 2.7175 2.00000 + 11 2.7397 2.00000 + 12 2.9599 2.00000 + 13 3.2252 2.00000 + 14 3.3613 2.00000 + 15 3.5898 2.00000 + 16 3.6964 2.00000 + 17 3.7288 2.00000 + 18 3.7756 2.00001 + 19 4.0104 2.00599 + 20 4.2170 2.07084 + 21 5.8488 -0.00000 + 22 5.9092 -0.00000 + 23 6.1803 -0.00000 + 24 6.2512 -0.00000 + 25 6.9660 -0.00000 + 26 7.0140 -0.00000 + 27 7.0862 -0.00000 + 28 7.1908 -0.00000 + 29 7.7488 -0.00000 + 30 7.7834 -0.00000 + 31 8.1550 -0.00000 + 32 8.1948 -0.00000 + 33 8.4585 -0.00000 + 34 8.8494 -0.00000 + 35 9.0055 -0.00000 + 36 9.0093 -0.00000 + 37 9.1466 -0.00000 + 38 9.3700 -0.00000 + 39 9.3755 -0.00000 + 40 9.7119 -0.00000 + 41 10.0431 0.00000 + 42 10.0848 0.00000 + 43 10.3721 0.00000 + 44 10.5716 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5446 2.00000 + 2 1.6894 2.00000 + 3 1.7555 2.00000 + 4 1.8997 2.00000 + 5 2.1620 2.00000 + 6 2.3056 2.00000 + 7 2.3921 2.00000 + 8 2.4210 2.00000 + 9 2.5322 2.00000 + 10 2.5619 2.00000 + 11 2.6606 2.00000 + 12 2.7970 2.00000 + 13 3.5883 2.00000 + 14 3.6508 2.00000 + 15 3.7382 2.00000 + 16 3.7621 2.00001 + 17 3.9054 2.00055 + 18 3.9740 2.00282 + 19 4.0206 2.00729 + 20 4.1685 2.05675 + 21 5.6116 -0.00000 + 22 5.6922 -0.00000 + 23 5.7806 -0.00000 + 24 5.8326 -0.00000 + 25 6.8633 -0.00000 + 26 6.9052 -0.00000 + 27 6.9708 -0.00000 + 28 7.0873 -0.00000 + 29 7.8110 -0.00000 + 30 7.8590 -0.00000 + 31 7.9724 -0.00000 + 32 7.9959 -0.00000 + 33 8.6173 -0.00000 + 34 8.8886 -0.00000 + 35 9.1788 -0.00000 + 36 9.2010 -0.00000 + 37 9.3432 -0.00000 + 38 9.3566 -0.00000 + 39 9.4594 -0.00000 + 40 9.6497 -0.00000 + 41 10.3465 0.00000 + 42 10.5630 0.00000 + 43 10.6259 0.00000 + 44 10.9398 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4058 2.00000 + 2 1.6179 2.00000 + 3 1.7684 2.00000 + 4 1.9956 2.00000 + 5 2.4475 2.00000 + 6 2.4903 2.00000 + 7 2.5204 2.00000 + 8 2.6576 2.00000 + 9 2.7113 2.00000 + 10 2.8108 2.00000 + 11 2.8162 2.00000 + 12 2.8593 2.00000 + 13 3.0106 2.00000 + 14 3.0562 2.00000 + 15 3.3807 2.00000 + 16 3.4278 2.00000 + 17 3.5210 2.00000 + 18 3.5473 2.00000 + 19 3.6813 2.00000 + 20 3.9460 2.00149 + 21 6.4209 -0.00000 + 22 6.5731 -0.00000 + 23 6.6316 -0.00000 + 24 6.8528 -0.00000 + 25 7.2766 -0.00000 + 26 7.3059 -0.00000 + 27 7.4943 -0.00000 + 28 7.5570 -0.00000 + 29 7.6282 -0.00000 + 30 7.6308 -0.00000 + 31 7.7918 -0.00000 + 32 8.0005 -0.00000 + 33 8.3650 -0.00000 + 34 8.7137 -0.00000 + 35 8.8458 -0.00000 + 36 9.0691 -0.00000 + 37 9.2295 -0.00000 + 38 9.2548 -0.00000 + 39 9.5291 -0.00000 + 40 9.7111 -0.00000 + 41 9.8230 -0.00000 + 42 9.8458 -0.00000 + 43 9.8581 -0.00000 + 44 10.1848 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4251 2.00000 + 2 1.6373 2.00000 + 3 1.7883 2.00000 + 4 2.0149 2.00000 + 5 2.1714 2.00000 + 6 2.3724 2.00000 + 7 2.5264 2.00000 + 8 2.5776 2.00000 + 9 2.7327 2.00000 + 10 2.7741 2.00000 + 11 2.9042 2.00000 + 12 3.0167 2.00000 + 13 3.1433 2.00000 + 14 3.2317 2.00000 + 15 3.3082 2.00000 + 16 3.4051 2.00000 + 17 3.5934 2.00000 + 18 3.6534 2.00000 + 19 3.7165 2.00000 + 20 3.9618 2.00215 + 21 6.2378 -0.00000 + 22 6.2468 -0.00000 + 23 6.5460 -0.00000 + 24 6.6162 -0.00000 + 25 7.0958 -0.00000 + 26 7.1079 -0.00000 + 27 7.4765 -0.00000 + 28 7.5116 -0.00000 + 29 7.7437 -0.00000 + 30 7.8498 -0.00000 + 31 7.9393 -0.00000 + 32 8.0946 -0.00000 + 33 8.4176 -0.00000 + 34 8.6810 -0.00000 + 35 8.8473 -0.00000 + 36 9.0768 -0.00000 + 37 9.1577 -0.00000 + 38 9.3081 -0.00000 + 39 9.6415 -0.00000 + 40 9.7410 -0.00000 + 41 9.7680 -0.00000 + 42 9.9758 0.00000 + 43 10.1748 0.00000 + 44 10.3230 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4837 2.00000 + 2 1.6962 2.00000 + 3 1.8484 2.00000 + 4 1.9226 2.00000 + 5 2.0777 2.00000 + 6 2.1348 2.00000 + 7 2.2907 2.00000 + 8 2.5139 2.00000 + 9 2.6262 2.00000 + 10 2.8599 2.00000 + 11 3.0031 2.00000 + 12 3.1733 2.00000 + 13 3.2946 2.00000 + 14 3.3871 2.00000 + 15 3.4954 2.00000 + 16 3.5764 2.00000 + 17 3.7187 2.00000 + 18 3.7477 2.00000 + 19 3.8304 2.00007 + 20 4.0031 2.00518 + 21 5.7906 -0.00000 + 22 5.8647 -0.00000 + 23 6.0894 -0.00000 + 24 6.0939 -0.00000 + 25 7.0840 -0.00000 + 26 7.1013 -0.00000 + 27 7.2584 -0.00000 + 28 7.4172 -0.00000 + 29 7.7929 -0.00000 + 30 7.8550 -0.00000 + 31 8.1197 -0.00000 + 32 8.2190 -0.00000 + 33 8.4091 -0.00000 + 34 8.7703 -0.00000 + 35 8.9573 -0.00000 + 36 9.1408 -0.00000 + 37 9.2191 -0.00000 + 38 9.3905 -0.00000 + 39 9.6839 -0.00000 + 40 9.8763 -0.00000 + 41 9.9072 -0.00000 + 42 10.1061 0.00000 + 43 10.5167 0.00000 + 44 10.7281 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5839 2.00000 + 2 1.7291 2.00000 + 3 1.7964 2.00000 + 4 1.9343 2.00000 + 5 1.9586 2.00000 + 6 2.0988 2.00000 + 7 2.1781 2.00000 + 8 2.3251 2.00000 + 9 2.7189 2.00000 + 10 2.8489 2.00000 + 11 2.9510 2.00000 + 12 3.0702 2.00000 + 13 3.5876 2.00000 + 14 3.6405 2.00000 + 15 3.6769 2.00000 + 16 3.7042 2.00000 + 17 3.7832 2.00002 + 18 3.8973 2.00045 + 19 3.9050 2.00054 + 20 4.0218 2.00747 + 21 5.5162 -0.00000 + 22 5.5851 -0.00000 + 23 5.6753 -0.00000 + 24 5.6830 -0.00000 + 25 7.0743 -0.00000 + 26 7.1196 -0.00000 + 27 7.1290 -0.00000 + 28 7.3695 -0.00000 + 29 7.8063 -0.00000 + 30 7.8807 -0.00000 + 31 8.0504 -0.00000 + 32 8.0668 -0.00000 + 33 8.4343 -0.00000 + 34 8.9914 -0.00000 + 35 9.0636 -0.00000 + 36 9.3093 -0.00000 + 37 9.3466 -0.00000 + 38 9.4953 -0.00000 + 39 9.5399 -0.00000 + 40 9.7682 -0.00000 + 41 10.1263 0.00000 + 42 10.3380 0.00000 + 43 10.6508 0.00000 + 44 10.8968 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4841 2.00000 + 2 1.6042 2.00000 + 3 1.7001 2.00000 + 4 1.8254 2.00000 + 5 2.5215 2.00000 + 6 2.5701 2.00000 + 7 2.6219 2.00000 + 8 2.6775 2.00000 + 9 2.7328 2.00000 + 10 2.7832 2.00000 + 11 2.8578 2.00000 + 12 2.8900 2.00000 + 13 2.9605 2.00000 + 14 3.1889 2.00000 + 15 3.3201 2.00000 + 16 3.5103 2.00000 + 17 3.5611 2.00000 + 18 3.5984 2.00000 + 19 3.6000 2.00000 + 20 3.6011 2.00000 + 21 6.4665 -0.00000 + 22 6.5061 -0.00000 + 23 6.5638 -0.00000 + 24 6.6463 -0.00000 + 25 7.1042 -0.00000 + 26 7.1307 -0.00000 + 27 7.4662 -0.00000 + 28 7.5296 -0.00000 + 29 7.9282 -0.00000 + 30 7.9538 -0.00000 + 31 7.9744 -0.00000 + 32 8.0118 -0.00000 + 33 8.5095 -0.00000 + 34 8.7013 -0.00000 + 35 8.8138 -0.00000 + 36 8.9415 -0.00000 + 37 9.2626 -0.00000 + 38 9.3971 -0.00000 + 39 9.4302 -0.00000 + 40 9.5419 -0.00000 + 41 10.2262 0.00000 + 42 10.3458 0.00000 + 43 10.3999 0.00000 + 44 10.5644 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5036 2.00000 + 2 1.6238 2.00000 + 3 1.7198 2.00000 + 4 1.8452 2.00000 + 5 2.2495 2.00000 + 6 2.3667 2.00000 + 7 2.4636 2.00000 + 8 2.5853 2.00000 + 9 2.8867 2.00000 + 10 2.8949 2.00000 + 11 3.0054 2.00000 + 12 3.1348 2.00000 + 13 3.1375 2.00000 + 14 3.2348 2.00000 + 15 3.3710 2.00000 + 16 3.4305 2.00000 + 17 3.5622 2.00000 + 18 3.6081 2.00000 + 19 3.6111 2.00000 + 20 3.6317 2.00000 + 21 6.2563 -0.00000 + 22 6.2644 -0.00000 + 23 6.3867 -0.00000 + 24 6.4095 -0.00000 + 25 7.1280 -0.00000 + 26 7.1650 -0.00000 + 27 7.4402 -0.00000 + 28 7.4848 -0.00000 + 29 7.9509 -0.00000 + 30 7.9643 -0.00000 + 31 8.0222 -0.00000 + 32 8.0777 -0.00000 + 33 8.6263 -0.00000 + 34 8.6695 -0.00000 + 35 8.8333 -0.00000 + 36 9.0642 -0.00000 + 37 9.2944 -0.00000 + 38 9.3566 -0.00000 + 39 9.5239 -0.00000 + 40 9.6082 -0.00000 + 41 10.2275 0.00000 + 42 10.3378 0.00000 + 43 10.4990 0.00000 + 44 10.6714 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5626 2.00000 + 2 1.6831 2.00000 + 3 1.7796 2.00000 + 4 1.9046 2.00000 + 5 2.0048 2.00000 + 6 2.1242 2.00000 + 7 2.2225 2.00000 + 8 2.3474 2.00000 + 9 2.9612 2.00000 + 10 3.1438 2.00000 + 11 3.2446 2.00000 + 12 3.2583 2.00000 + 13 3.3571 2.00000 + 14 3.3969 2.00000 + 15 3.4818 2.00000 + 16 3.5014 2.00000 + 17 3.5599 2.00000 + 18 3.6552 2.00000 + 19 3.6603 2.00000 + 20 3.7036 2.00000 + 21 5.7998 -0.00000 + 22 5.8612 -0.00000 + 23 5.9232 -0.00000 + 24 5.9643 -0.00000 + 25 7.1976 -0.00000 + 26 7.2102 -0.00000 + 27 7.4130 -0.00000 + 28 7.4880 -0.00000 + 29 7.8991 -0.00000 + 30 7.9334 -0.00000 + 31 8.0099 -0.00000 + 32 8.1811 -0.00000 + 33 8.7179 -0.00000 + 34 8.7448 -0.00000 + 35 8.9537 -0.00000 + 36 9.1733 -0.00000 + 37 9.3482 -0.00000 + 38 9.3695 -0.00000 + 39 9.6015 -0.00000 + 40 9.6584 -0.00000 + 41 10.3127 0.00000 + 42 10.4417 0.00000 + 43 10.6298 0.00000 + 44 10.8298 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6633 2.00000 + 2 1.7839 2.00000 + 3 1.8090 2.00000 + 4 1.8791 2.00000 + 5 1.9332 2.00000 + 6 2.0080 2.00000 + 7 2.0292 2.00000 + 8 2.1552 2.00000 + 9 3.0457 2.00000 + 10 3.1533 2.00000 + 11 3.2455 2.00000 + 12 3.2991 2.00000 + 13 3.4535 2.00000 + 14 3.4916 2.00000 + 15 3.5426 2.00000 + 16 3.6157 2.00000 + 17 3.7198 2.00000 + 18 3.7979 2.00003 + 19 3.8260 2.00006 + 20 3.8335 2.00007 + 21 5.4749 -0.00000 + 22 5.5239 -0.00000 + 23 5.5424 -0.00000 + 24 5.5781 -0.00000 + 25 7.2248 -0.00000 + 26 7.2539 -0.00000 + 27 7.4049 -0.00000 + 28 7.5391 -0.00000 + 29 7.8772 -0.00000 + 30 7.9316 -0.00000 + 31 7.9617 -0.00000 + 32 8.1118 -0.00000 + 33 8.6617 -0.00000 + 34 8.9332 -0.00000 + 35 9.1071 -0.00000 + 36 9.1505 -0.00000 + 37 9.4005 -0.00000 + 38 9.4499 -0.00000 + 39 9.5417 -0.00000 + 40 9.6058 -0.00000 + 41 10.4075 0.00000 + 42 10.5734 0.00000 + 43 10.7264 0.00000 + 44 10.9106 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.014 0.046 0.015 + -0.004 -0.014 -0.240 -0.001 0.002 + 0.012 0.046 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.387 -0.037 0.037 -0.112 -0.038 + -0.037 0.001 -0.002 0.003 0.002 + 0.037 -0.002 0.222 -0.007 0.011 + -0.112 0.003 -0.007 0.139 0.002 + -0.038 0.002 0.011 0.002 0.210 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1648: real time 0.1648 + FORLOC: cpu time 0.0096: real time 0.0096 + FORNL : cpu time 12.4686: real time 12.4697 + STRESS: cpu time 4.7113: real time 4.7117 + FORCOR: cpu time 0.0292: real time 0.0292 + FORHAR: cpu time 0.0214: real time 0.0214 + MIXING: cpu time 0.0053: real time 0.0053 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.68123 14.68123 14.68123 + Ewald -143.62018 -148.60064 -130.65622 0.00000 0.00000 -0.00000 + Hartree 1.18658 0.69628 1.06399 -0.00000 -0.00000 0.00000 + E(xc) -108.58738 -109.01138 -107.82846 0.00000 0.00000 -0.00000 + Local 7.58891 2.30888 11.59881 0.00000 0.00000 -0.00000 + n-local 130.43992 131.05608 127.98694 0.01912 0.07416 -0.21330 + augment 7.40699 7.55167 7.07806 -0.00000 -0.00000 0.00000 + Kinetic 215.90058 225.87372 200.84415 0.07001 -1.12625 -0.90445 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 124.99665 124.55584 124.76849 0.00000 0.00000 0.00000 + in kB 701.45578 698.98206 700.17541 0.00000 0.00000 0.00000 + external pressure = 0.20 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.50 + direct lattice vectors reciprocal lattice vectors + 6.881799927 0.000000000 0.000000000 0.145310821 0.000000000 0.000000000 + 0.000000000 8.172714222 0.000000000 0.000000000 0.122358371 0.000000000 + 0.000000000 0.000000000 5.076218436 0.000000000 0.000000000 0.196997039 + + length of vectors + 6.881799927 8.172714222 5.076218436 0.145310821 0.122358371 0.196997039 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.198E-01 0.788E-01 -.243E+00 -.454E+00 0.373E+00 -.122E+01 0.462E+00 -.443E+00 0.142E+01 0.384E-07 -.114E-07 -.335E-07 + 0.198E-01 -.788E-01 -.243E+00 0.454E+00 -.373E+00 -.122E+01 -.462E+00 0.443E+00 0.142E+01 -.384E-07 0.113E-07 -.335E-07 + -.198E-01 -.788E-01 -.243E+00 -.454E+00 -.373E+00 -.122E+01 0.462E+00 0.443E+00 0.142E+01 0.384E-07 0.114E-07 -.335E-07 + 0.198E-01 0.788E-01 -.243E+00 0.454E+00 0.373E+00 -.122E+01 -.462E+00 -.443E+00 0.142E+01 -.384E-07 -.113E-07 -.335E-07 + -.198E-01 0.788E-01 -.243E+00 -.454E+00 0.373E+00 -.122E+01 0.462E+00 -.443E+00 0.142E+01 0.384E-07 -.113E-07 -.335E-07 + 0.198E-01 -.788E-01 -.243E+00 0.454E+00 -.373E+00 -.122E+01 -.462E+00 0.443E+00 0.142E+01 -.384E-07 0.114E-07 -.335E-07 + -.198E-01 -.788E-01 -.243E+00 -.454E+00 -.373E+00 -.122E+01 0.462E+00 0.443E+00 0.142E+01 0.384E-07 0.113E-07 -.335E-07 + 0.198E-01 0.788E-01 -.243E+00 0.454E+00 0.373E+00 -.122E+01 -.462E+00 -.443E+00 0.142E+01 -.384E-07 -.114E-07 -.335E-07 + -.194E-01 -.139E-01 0.128E+00 -.481E-01 -.249E+00 0.758E+00 0.690E-01 0.255E+00 -.867E+00 -.189E-07 0.227E-07 0.501E-07 + 0.194E-01 0.139E-01 0.128E+00 0.481E-01 0.249E+00 0.758E+00 -.690E-01 -.255E+00 -.867E+00 0.189E-07 -.228E-07 0.501E-07 + -.194E-01 0.139E-01 0.128E+00 -.481E-01 0.249E+00 0.758E+00 0.690E-01 -.255E+00 -.867E+00 -.189E-07 -.227E-07 0.501E-07 + 0.194E-01 -.139E-01 0.128E+00 0.481E-01 -.249E+00 0.758E+00 -.690E-01 0.255E+00 -.867E+00 0.189E-07 0.228E-07 0.501E-07 + -.194E-01 -.139E-01 0.128E+00 -.481E-01 -.249E+00 0.758E+00 0.690E-01 0.255E+00 -.867E+00 -.189E-07 0.228E-07 0.501E-07 + 0.194E-01 0.139E-01 0.128E+00 0.481E-01 0.249E+00 0.758E+00 -.690E-01 -.255E+00 -.867E+00 0.189E-07 -.227E-07 0.501E-07 + -.194E-01 0.139E-01 0.128E+00 -.481E-01 0.249E+00 0.758E+00 0.690E-01 -.255E+00 -.867E+00 -.189E-07 -.228E-07 0.501E-07 + 0.194E-01 -.139E-01 0.128E+00 0.481E-01 -.249E+00 0.758E+00 -.690E-01 0.255E+00 -.867E+00 0.189E-07 0.227E-07 0.501E-07 + -.270E+00 -.173E+00 0.950E-02 -.661E+00 -.315E-01 0.825E-01 0.912E+00 0.204E+00 -.881E-01 0.318E-07 -.759E-07 0.204E-08 + 0.270E+00 0.173E+00 0.950E-02 0.661E+00 0.315E-01 0.825E-01 -.912E+00 -.204E+00 -.881E-01 -.318E-07 0.758E-07 0.204E-08 + -.270E+00 0.173E+00 0.949E-02 -.661E+00 0.315E-01 0.825E-01 0.912E+00 -.204E+00 -.881E-01 0.318E-07 0.759E-07 0.204E-08 + 0.270E+00 -.173E+00 0.950E-02 0.661E+00 -.315E-01 0.825E-01 -.912E+00 0.204E+00 -.881E-01 -.318E-07 -.759E-07 0.204E-08 + -.270E+00 -.173E+00 0.949E-02 -.661E+00 -.315E-01 0.825E-01 0.912E+00 0.204E+00 -.881E-01 0.318E-07 -.759E-07 0.204E-08 + 0.270E+00 0.173E+00 0.949E-02 0.661E+00 0.315E-01 0.825E-01 -.912E+00 -.204E+00 -.881E-01 -.318E-07 0.759E-07 0.204E-08 + -.270E+00 0.173E+00 0.949E-02 -.661E+00 0.315E-01 0.825E-01 0.912E+00 -.204E+00 -.881E-01 0.318E-07 0.758E-07 0.204E-08 + 0.270E+00 -.173E+00 0.949E-02 0.661E+00 -.315E-01 0.825E-01 -.912E+00 0.204E+00 -.881E-01 -.318E-07 -.759E-07 0.204E-08 + -.517E-01 -.608E-01 0.148E-01 -.218E+00 0.668E-01 0.562E-01 0.251E+00 -.859E-02 -.546E-01 0.728E-09 -.497E-07 0.257E-08 + 0.517E-01 0.608E-01 0.148E-01 0.218E+00 -.668E-01 0.562E-01 -.251E+00 0.859E-02 -.546E-01 -.729E-09 0.497E-07 0.257E-08 + -.517E-01 0.608E-01 0.148E-01 -.218E+00 -.668E-01 0.562E-01 0.251E+00 0.859E-02 -.546E-01 0.737E-09 0.497E-07 0.257E-08 + 0.517E-01 -.608E-01 0.148E-01 0.218E+00 0.668E-01 0.562E-01 -.251E+00 -.859E-02 -.546E-01 -.736E-09 -.497E-07 0.257E-08 + -.517E-01 -.608E-01 0.148E-01 -.218E+00 0.668E-01 0.562E-01 0.251E+00 -.859E-02 -.546E-01 0.728E-09 -.497E-07 0.257E-08 + 0.517E-01 0.608E-01 0.148E-01 0.218E+00 -.668E-01 0.562E-01 -.251E+00 0.859E-02 -.546E-01 -.729E-09 0.497E-07 0.257E-08 + -.517E-01 0.608E-01 0.148E-01 -.218E+00 -.668E-01 0.562E-01 0.251E+00 0.859E-02 -.546E-01 0.737E-09 0.497E-07 0.257E-08 + 0.517E-01 -.608E-01 0.148E-01 0.218E+00 0.668E-01 0.562E-01 -.251E+00 -.859E-02 -.546E-01 -.736E-09 -.497E-07 0.257E-08 + 0.308E-01 0.183E+00 0.101E+00 0.228E+00 -.167E+00 0.327E+00 -.240E+00 -.278E-01 -.426E+00 -.381E-08 0.507E-07 -.194E-07 + -.308E-01 -.183E+00 0.101E+00 -.228E+00 0.167E+00 0.327E+00 0.240E+00 0.278E-01 -.426E+00 0.381E-08 -.507E-07 -.194E-07 + 0.308E-01 -.183E+00 0.101E+00 0.228E+00 0.167E+00 0.327E+00 -.240E+00 0.278E-01 -.426E+00 -.380E-08 -.507E-07 -.194E-07 + -.308E-01 0.183E+00 0.101E+00 -.228E+00 -.167E+00 0.327E+00 0.240E+00 -.278E-01 -.426E+00 0.380E-08 0.508E-07 -.194E-07 + 0.308E-01 0.183E+00 0.101E+00 0.228E+00 -.167E+00 0.327E+00 -.240E+00 -.278E-01 -.426E+00 -.381E-08 0.508E-07 -.194E-07 + -.308E-01 -.183E+00 0.101E+00 -.228E+00 0.167E+00 0.327E+00 0.240E+00 0.278E-01 -.426E+00 0.381E-08 -.507E-07 -.194E-07 + 0.308E-01 -.183E+00 0.101E+00 0.228E+00 0.167E+00 0.327E+00 -.240E+00 0.278E-01 -.426E+00 -.380E-08 -.507E-07 -.194E-07 + -.308E-01 0.183E+00 0.101E+00 -.228E+00 -.167E+00 0.327E+00 0.240E+00 -.278E-01 -.426E+00 0.380E-08 0.507E-07 -.194E-07 + ----------------------------------------------------------------------------------------------- + -.288E-04 0.240E-04 0.845E-01 -.172E-14 -.136E-14 0.427E-14 0.000E+00 -.833E-16 -.857E-01 0.384E-13 -.183E-13 0.146E-07 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64174 0.94991 0.00284 -0.011850 0.008745 -0.042001 + 6.24006 7.22281 0.00284 0.011850 -0.008745 -0.042001 + 4.08264 3.13645 0.00284 -0.011850 -0.008745 -0.042001 + 2.79916 5.03626 0.00284 0.011850 0.008745 -0.042001 + 0.64174 5.03626 2.54095 -0.011850 0.008745 -0.042001 + 6.24006 3.13645 2.54095 0.011850 -0.008745 -0.042001 + 4.08264 7.22281 2.54095 -0.011850 -0.008745 -0.042001 + 2.79916 0.94991 2.54095 0.011850 0.008745 -0.042001 + 5.93982 7.38115 1.59045 0.001443 -0.008294 0.019492 + 0.94198 0.79156 1.59045 -0.001443 0.008294 0.019492 + 2.49891 4.87792 1.59045 0.001443 0.008294 0.019492 + 4.38288 3.29480 1.59045 -0.001443 -0.008294 0.019492 + 5.93982 3.29480 4.12856 0.001443 -0.008294 0.019492 + 0.94198 4.87792 4.12856 -0.001443 0.008294 0.019492 + 2.49891 0.79156 4.12856 0.001443 0.008294 0.019492 + 4.38288 7.38115 4.12856 -0.001443 -0.008294 0.019492 + 6.66164 0.95615 3.01565 -0.018936 -0.000677 0.003963 + 0.22016 7.21657 3.01565 0.018936 0.000677 0.003963 + 3.22074 3.13021 3.01565 -0.018936 0.000677 0.003963 + 3.66106 5.04251 3.01565 0.018936 -0.000677 0.003963 + 6.66164 5.04251 0.47754 -0.018936 -0.000677 0.003963 + 0.22016 3.13021 0.47754 0.018936 0.000677 0.003963 + 3.22074 7.21657 0.47754 -0.018936 0.000677 0.003963 + 3.66106 0.95615 0.47754 0.018936 -0.000677 0.003963 + 2.41741 2.19102 0.89336 -0.018530 -0.002608 0.016390 + 4.46439 5.98169 0.89336 0.018530 0.002608 0.016390 + 5.85831 1.89534 0.89336 -0.018530 0.002608 0.016390 + 1.02349 6.27738 0.89336 0.018530 -0.002608 0.016390 + 2.41741 6.27738 3.43147 -0.018530 -0.002608 0.016390 + 4.46439 1.89534 3.43147 0.018530 0.002608 0.016390 + 5.85831 5.98169 3.43147 -0.018530 0.002608 0.016390 + 1.02349 2.19102 3.43147 0.018530 -0.002608 0.016390 + 1.99635 7.45184 1.91293 0.019103 -0.011809 0.002156 + 4.88545 0.72087 1.91293 -0.019103 0.011809 0.002156 + 5.43725 4.80723 1.91293 0.019103 0.011809 0.002156 + 1.44455 3.36548 1.91293 -0.019103 -0.011809 0.002156 + 1.99635 3.36548 4.45104 0.019103 -0.011809 0.002156 + 4.88545 4.80723 4.45104 -0.019103 0.011809 0.002156 + 5.43725 0.72087 4.45104 0.019103 0.011809 0.002156 + 1.44455 7.45184 4.45104 -0.019103 -0.011809 0.002156 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.001201 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.82186583 eV + + energy without entropy= -16.83199710 energy(sigma->0) = -16.82524292 + enthalpy is TOTEN = 107.91536976 eV P V= 124.73723559 + + d Force =-0.2625497E-05[-0.263E-05,-0.262E-05] d Energy = 0.5393906E-07-0.268E-05 + d Force =-0.9814681E-04[-0.981E-04,-0.981E-04] d Ewald =-0.1008227E-01 0.998E-02 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0282: real time 0.0282 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0070: real time 0.0070 + FEWALD executed in parallel + FEWALD: cpu time 0.0016: real time 0.0027 + GENKIN: cpu time 0.0240: real time 0.0240 + ORTHCH: cpu time 0.5446: real time 0.5446 + LOOP+: cpu time 39.5742: real time 39.5827 + + +----------------------------------------- Iteration 5( 1) --------------------------------------- + + + POTLOK: cpu time 0.0220: real time 0.0220 + SETDIJ: cpu time 0.0053: real time 0.0064 + EDDAV: cpu time 4.7945: real time 4.7950 + DOS: cpu time 0.0069: real time 0.0069 + CHARGE: cpu time 0.1894: real time 0.1894 + MIXING: cpu time 0.0029: real time 0.0029 + -------------------------------------------- + LOOP: cpu time 5.0230: real time 5.0246 + + eigenvalue-minimisations : 5384 + total energy-change (2. order) :-0.3797256E-01 (-0.7778299E-03) + number of electron 40.0000003 magnetization + augmentation part 0.9508480 magnetization + + free energy = -0.168598383928E+02 energy without entropy= -0.168700252717E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 5( 2) --------------------------------------- + + + POTLOK: cpu time 0.0203: real time 0.0203 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 5.4469: real time 5.4482 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.2133: real time 0.2133 + MIXING: cpu time 0.0034: real time 0.0034 + -------------------------------------------- + LOOP: cpu time 5.6977: real time 5.6990 + + eigenvalue-minimisations : 6632 + total energy-change (2. order) : 0.3201668E-04 (-0.1940479E-04) + number of electron 40.0000003 magnetization + augmentation part 0.9509469 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.6964 + 1.6964 + + free energy = -0.168598063761E+02 energy without entropy= -0.168699741279E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 5( 3) --------------------------------------- + + + POTLOK: cpu time 0.0208: real time 0.0218 + SETDIJ: cpu time 0.0058: real time 0.0069 + EDDAV: cpu time 5.6986: real time 5.6999 + DOS: cpu time 0.0079: real time 0.0079 + CHARGE: cpu time 0.1716: real time 0.1717 + MIXING: cpu time 0.0043: real time 0.0043 + -------------------------------------------- + LOOP: cpu time 5.9101: real time 5.9139 + + eigenvalue-minimisations : 6800 + total energy-change (2. order) : 0.6970326E-05 (-0.2430376E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9509668 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7434 + 1.3367 2.1501 + + free energy = -0.168597994058E+02 energy without entropy= -0.168699544193E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 5( 4) --------------------------------------- + + + POTLOK: cpu time 0.0216: real time 0.0216 + SETDIJ: cpu time 0.0055: real time 0.0055 + EDDAV: cpu time 4.2827: real time 4.2831 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1711: real time 0.1711 + MIXING: cpu time 0.0039: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 4.4932: real time 4.4937 + + eigenvalue-minimisations : 4612 + total energy-change (2. order) :-0.7254899E-06 (-0.2946331E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9509691 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8079 + 1.0719 1.6652 2.6867 + + free energy = -0.168598001313E+02 energy without entropy= -0.168699537077E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 5( 5) --------------------------------------- + + + POTLOK: cpu time 0.0210: real time 0.0210 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.4833: real time 3.4837 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1706: real time 0.1706 + MIXING: cpu time 0.0046: real time 0.0046 + -------------------------------------------- + LOOP: cpu time 3.6937: real time 3.6941 + + eigenvalue-minimisations : 3092 + total energy-change (2. order) :-0.1474712E-06 (-0.7594977E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9509697 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7565 + 2.7245 1.0260 1.4284 1.8472 + + free energy = -0.168598002787E+02 energy without entropy= -0.168699539260E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 5( 6) --------------------------------------- + + + POTLOK: cpu time 0.0215: real time 0.0215 + SETDIJ: cpu time 0.0056: real time 0.0066 + EDDAV: cpu time 3.4269: real time 3.4272 + DOS: cpu time 0.0078: real time 0.0078 + -------------------------------------------- + LOOP: cpu time 3.4642: real time 3.4656 + + eigenvalue-minimisations : 2988 + total energy-change (2. order) :-0.5697075E-08 (-0.1306341E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9509697 magnetization + + free energy = -0.168598002844E+02 energy without entropy= -0.168699540590E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9656 2 -25.9656 3 -25.9656 4 -25.9656 5 -25.9656 + 6 -25.9656 7 -25.9656 8 -25.9656 9 -25.8982 10 -25.8982 + 11 -25.8982 12 -25.8982 13 -25.8982 14 -25.8982 15 -25.8982 + 16 -25.8982 17 -25.9210 18 -25.9210 19 -25.9210 20 -25.9210 + 21 -25.9210 22 -25.9210 23 -25.9210 24 -25.9210 25 -25.8452 + 26 -25.8452 27 -25.8452 28 -25.8452 29 -25.8452 30 -25.8452 + 31 -25.8452 32 -25.8452 33 -26.0213 34 -26.0213 35 -26.0213 + 36 -26.0213 37 -26.0213 38 -26.0213 39 -26.0213 40 -26.0213 + + + + E-fermi : 4.4648 XC(G=0): -9.5560 alpha+bet :-20.5710 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9633 2.00000 + 2 1.5066 2.00000 + 3 1.7428 2.00000 + 4 1.9995 2.00000 + 5 2.0422 2.00000 + 6 2.5147 2.00000 + 7 2.6221 2.00000 + 8 2.7710 2.00000 + 9 2.8685 2.00000 + 10 2.9218 2.00000 + 11 3.2102 2.00000 + 12 3.2788 2.00000 + 13 3.3968 2.00000 + 14 3.4294 2.00000 + 15 3.5112 2.00000 + 16 3.6206 2.00000 + 17 3.8406 2.00009 + 18 4.1843 2.06337 + 19 4.2124 2.07051 + 20 4.3893 1.59156 + 21 5.5366 -0.00000 + 22 5.7400 -0.00000 + 23 5.9294 -0.00000 + 24 6.0895 -0.00000 + 25 6.2098 -0.00000 + 26 6.2991 -0.00000 + 27 6.5563 -0.00000 + 28 7.1293 -0.00000 + 29 7.1363 -0.00000 + 30 7.2464 -0.00000 + 31 7.3742 -0.00000 + 32 7.4548 -0.00000 + 33 8.0745 -0.00000 + 34 8.1629 -0.00000 + 35 8.8166 -0.00000 + 36 8.9620 -0.00000 + 37 9.2242 -0.00000 + 38 9.4511 -0.00000 + 39 9.8211 -0.00000 + 40 9.8560 -0.00000 + 41 10.1087 0.00000 + 42 10.3058 0.00000 + 43 10.5523 0.00000 + 44 10.8219 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9817 2.00000 + 2 1.5268 2.00000 + 3 1.7126 2.00000 + 4 1.7636 2.00000 + 5 2.2752 2.00000 + 6 2.3931 2.00000 + 7 2.5262 2.00000 + 8 2.8692 2.00000 + 9 2.9629 2.00000 + 10 3.1474 2.00000 + 11 3.2381 2.00000 + 12 3.2920 2.00000 + 13 3.3732 2.00000 + 14 3.4324 2.00000 + 15 3.5408 2.00000 + 16 3.6245 2.00000 + 17 3.7774 2.00001 + 18 4.0596 2.01468 + 19 4.2316 2.06977 + 20 4.4351 1.24850 + 21 5.4254 -0.00000 + 22 5.5920 -0.00000 + 23 5.8890 -0.00000 + 24 5.9931 -0.00000 + 25 6.1522 -0.00000 + 26 6.5285 -0.00000 + 27 6.6302 -0.00000 + 28 6.8394 -0.00000 + 29 7.1135 -0.00000 + 30 7.2357 -0.00000 + 31 7.3052 -0.00000 + 32 7.3948 -0.00000 + 33 8.3490 -0.00000 + 34 8.3987 -0.00000 + 35 8.8331 -0.00000 + 36 8.8891 -0.00000 + 37 9.2479 -0.00000 + 38 9.4287 -0.00000 + 39 9.7678 -0.00000 + 40 9.9384 0.00000 + 41 10.0735 0.00000 + 42 10.1788 0.00000 + 43 10.8517 0.00000 + 44 10.9318 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0378 2.00000 + 2 1.4663 2.00000 + 3 1.5878 2.00000 + 4 1.8263 2.00000 + 5 2.0342 2.00000 + 6 2.2823 2.00000 + 7 2.8263 2.00000 + 8 2.9667 2.00000 + 9 3.2382 2.00000 + 10 3.2687 2.00000 + 11 3.3177 2.00000 + 12 3.3337 2.00000 + 13 3.4302 2.00000 + 14 3.5245 2.00000 + 15 3.5725 2.00000 + 16 3.6236 2.00000 + 17 3.7266 2.00000 + 18 3.8446 2.00011 + 19 4.1583 2.05236 + 20 4.3413 1.85543 + 21 5.3309 -0.00000 + 22 5.4312 -0.00000 + 23 5.7761 -0.00000 + 24 5.8495 -0.00000 + 25 5.8882 -0.00000 + 26 6.2472 -0.00000 + 27 6.7774 -0.00000 + 28 7.0301 -0.00000 + 29 7.1128 -0.00000 + 30 7.2161 -0.00000 + 31 7.2645 -0.00000 + 32 7.5554 -0.00000 + 33 8.4928 -0.00000 + 34 8.5133 -0.00000 + 35 8.7664 -0.00000 + 36 8.9035 -0.00000 + 37 9.2115 -0.00000 + 38 9.3303 -0.00000 + 39 9.8072 -0.00000 + 40 9.8828 -0.00000 + 41 10.1716 0.00000 + 42 10.3696 0.00000 + 43 11.0101 0.00000 + 44 11.1329 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1343 2.00000 + 2 1.2753 2.00000 + 3 1.6910 2.00000 + 4 1.8380 2.00000 + 5 1.9343 2.00000 + 6 2.0846 2.00000 + 7 3.0529 2.00000 + 8 3.1578 2.00000 + 9 3.3031 2.00000 + 10 3.3928 2.00000 + 11 3.4293 2.00000 + 12 3.4441 2.00000 + 13 3.5039 2.00000 + 14 3.5118 2.00000 + 15 3.6357 2.00000 + 16 3.6526 2.00000 + 17 3.7161 2.00000 + 18 3.7713 2.00001 + 19 3.9153 2.00071 + 20 4.1109 2.03128 + 21 5.3553 -0.00000 + 22 5.4773 -0.00000 + 23 5.6435 -0.00000 + 24 5.6543 -0.00000 + 25 5.7656 -0.00000 + 26 5.7847 -0.00000 + 27 6.9727 -0.00000 + 28 7.1203 -0.00000 + 29 7.1565 -0.00000 + 30 7.1589 -0.00000 + 31 7.6235 -0.00000 + 32 7.8724 -0.00000 + 33 8.1433 -0.00000 + 34 8.2290 -0.00000 + 35 8.8931 -0.00000 + 36 8.9538 -0.00000 + 37 9.1099 -0.00000 + 38 9.1939 -0.00000 + 39 9.7998 -0.00000 + 40 9.8734 -0.00000 + 41 10.4695 0.00000 + 42 10.5651 0.00000 + 43 11.2328 0.00000 + 44 11.3342 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9968 2.00000 + 2 1.3168 2.00000 + 3 2.0221 2.00000 + 4 2.0312 2.00000 + 5 2.0788 2.00000 + 6 2.3381 2.00000 + 7 2.4321 2.00000 + 8 2.9404 2.00000 + 9 3.0083 2.00000 + 10 3.0533 2.00000 + 11 3.1381 2.00000 + 12 3.2075 2.00000 + 13 3.4009 2.00000 + 14 3.4946 2.00000 + 15 3.5039 2.00000 + 16 3.6913 2.00000 + 17 3.7540 2.00001 + 18 4.0118 2.00620 + 19 4.0359 2.00975 + 20 4.2314 2.06980 + 21 5.6826 -0.00000 + 22 5.8175 -0.00000 + 23 5.9756 -0.00000 + 24 6.2227 -0.00000 + 25 6.3102 -0.00000 + 26 6.4369 -0.00000 + 27 6.5119 -0.00000 + 28 6.7780 -0.00000 + 29 7.2774 -0.00000 + 30 7.3317 -0.00000 + 31 7.4219 -0.00000 + 32 7.6284 -0.00000 + 33 8.0312 -0.00000 + 34 8.1838 -0.00000 + 35 8.8918 -0.00000 + 36 9.0441 -0.00000 + 37 9.0825 -0.00000 + 38 9.2162 -0.00000 + 39 9.5468 -0.00000 + 40 9.8753 -0.00000 + 41 9.9175 -0.00000 + 42 10.3991 0.00000 + 43 10.4874 0.00000 + 44 10.9271 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0153 2.00000 + 2 1.3363 2.00000 + 3 1.7476 2.00000 + 4 2.0367 2.00000 + 5 2.0906 2.00000 + 6 2.4245 2.00000 + 7 2.7304 2.00000 + 8 2.8132 2.00000 + 9 2.9731 2.00000 + 10 3.0362 2.00000 + 11 3.2240 2.00000 + 12 3.3523 2.00000 + 13 3.3964 2.00000 + 14 3.5017 2.00000 + 15 3.5257 2.00000 + 16 3.6954 2.00000 + 17 3.7063 2.00000 + 18 3.8292 2.00007 + 19 4.1116 2.03156 + 20 4.2768 2.03540 + 21 5.5622 -0.00000 + 22 5.7456 -0.00000 + 23 5.9393 -0.00000 + 24 6.0698 -0.00000 + 25 6.2326 -0.00000 + 26 6.4985 -0.00000 + 27 6.6408 -0.00000 + 28 6.7164 -0.00000 + 29 7.1691 -0.00000 + 30 7.3180 -0.00000 + 31 7.3387 -0.00000 + 32 7.6048 -0.00000 + 33 8.2778 -0.00000 + 34 8.3631 -0.00000 + 35 8.8950 -0.00000 + 36 9.0035 -0.00000 + 37 9.0270 -0.00000 + 38 9.2276 -0.00000 + 39 9.6247 -0.00000 + 40 9.8224 -0.00000 + 41 9.9430 0.00000 + 42 10.4613 0.00000 + 43 10.5087 0.00000 + 44 11.0456 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0717 2.00000 + 2 1.3955 2.00000 + 3 1.5014 2.00000 + 4 1.8354 2.00000 + 5 2.1133 2.00000 + 6 2.5746 2.00000 + 7 2.8473 2.00000 + 8 2.9940 2.00000 + 9 3.1217 2.00000 + 10 3.1374 2.00000 + 11 3.2714 2.00000 + 12 3.3076 2.00000 + 13 3.4722 2.00000 + 14 3.5321 2.00000 + 15 3.6111 2.00000 + 16 3.6163 2.00000 + 17 3.6746 2.00000 + 18 3.7298 2.00000 + 19 4.0501 2.01252 + 20 4.2340 2.06923 + 21 5.4035 -0.00000 + 22 5.6674 -0.00000 + 23 5.7743 -0.00000 + 24 5.8282 -0.00000 + 25 6.1110 -0.00000 + 26 6.2028 -0.00000 + 27 6.6232 -0.00000 + 28 7.0681 -0.00000 + 29 7.1173 -0.00000 + 30 7.3615 -0.00000 + 31 7.4998 -0.00000 + 32 7.5471 -0.00000 + 33 8.3665 -0.00000 + 34 8.5234 -0.00000 + 35 8.7972 -0.00000 + 36 8.8865 -0.00000 + 37 9.0453 -0.00000 + 38 9.1677 -0.00000 + 39 9.6355 -0.00000 + 40 9.7984 -0.00000 + 41 10.1589 0.00000 + 42 10.5857 0.00000 + 43 10.7150 0.00000 + 44 11.2247 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1686 2.00000 + 2 1.3101 2.00000 + 3 1.4965 2.00000 + 4 1.6421 2.00000 + 5 2.2226 2.00000 + 6 2.3767 2.00000 + 7 3.0895 2.00000 + 8 3.1987 2.00000 + 9 3.2121 2.00000 + 10 3.3149 2.00000 + 11 3.3788 2.00000 + 12 3.4077 2.00000 + 13 3.4334 2.00000 + 14 3.4458 2.00000 + 15 3.5491 2.00000 + 16 3.6271 2.00000 + 17 3.7469 2.00000 + 18 3.7730 2.00001 + 19 3.8486 2.00012 + 20 4.0070 2.00564 + 21 5.4195 -0.00000 + 22 5.6130 -0.00000 + 23 5.6149 -0.00000 + 24 5.7923 -0.00000 + 25 5.7924 -0.00000 + 26 5.9733 -0.00000 + 27 6.7893 -0.00000 + 28 6.9557 -0.00000 + 29 7.3365 -0.00000 + 30 7.4407 -0.00000 + 31 7.7273 -0.00000 + 32 7.8132 -0.00000 + 33 8.1612 -0.00000 + 34 8.1932 -0.00000 + 35 8.8406 -0.00000 + 36 8.8955 -0.00000 + 37 8.9752 -0.00000 + 38 9.0580 -0.00000 + 39 9.6089 -0.00000 + 40 9.7749 -0.00000 + 41 10.4454 0.00000 + 42 10.6194 0.00000 + 43 11.1563 0.00000 + 44 11.3525 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0651 2.00000 + 2 1.1706 2.00000 + 3 2.0963 2.00000 + 4 2.1521 2.00000 + 5 2.1976 2.00000 + 6 2.2469 2.00000 + 7 2.3747 2.00000 + 8 2.6961 2.00000 + 9 3.0164 2.00000 + 10 3.1096 2.00000 + 11 3.3435 2.00000 + 12 3.4318 2.00000 + 13 3.4366 2.00000 + 14 3.4730 2.00000 + 15 3.6002 2.00000 + 16 3.6009 2.00000 + 17 3.7409 2.00000 + 18 3.7809 2.00001 + 19 3.8283 2.00007 + 20 4.0192 2.00715 + 21 5.9327 -0.00000 + 22 5.9501 -0.00000 + 23 6.0959 -0.00000 + 24 6.1459 -0.00000 + 25 6.2140 -0.00000 + 26 6.4213 -0.00000 + 27 6.6274 -0.00000 + 28 6.9344 -0.00000 + 29 6.9796 -0.00000 + 30 7.2759 -0.00000 + 31 7.6121 -0.00000 + 32 7.8704 -0.00000 + 33 8.1923 -0.00000 + 34 8.3668 -0.00000 + 35 8.5213 -0.00000 + 36 9.0152 -0.00000 + 37 9.0795 -0.00000 + 38 9.1474 -0.00000 + 39 9.3138 -0.00000 + 40 9.5998 -0.00000 + 41 9.9502 0.00000 + 42 10.0630 0.00000 + 43 10.7702 0.00000 + 44 10.9509 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0838 2.00000 + 2 1.1897 2.00000 + 3 1.8187 2.00000 + 4 1.9281 2.00000 + 5 2.3643 2.00000 + 6 2.4840 2.00000 + 7 2.6047 2.00000 + 8 2.7270 2.00000 + 9 3.0358 2.00000 + 10 3.1283 2.00000 + 11 3.1427 2.00000 + 12 3.4357 2.00000 + 13 3.4848 2.00000 + 14 3.4885 2.00000 + 15 3.5018 2.00000 + 16 3.6157 2.00000 + 17 3.6870 2.00000 + 18 3.8381 2.00009 + 19 3.9131 2.00067 + 20 4.0485 2.01219 + 21 5.7607 -0.00000 + 22 5.9330 -0.00000 + 23 5.9647 -0.00000 + 24 6.1204 -0.00000 + 25 6.2497 -0.00000 + 26 6.3665 -0.00000 + 27 6.5612 -0.00000 + 28 6.9076 -0.00000 + 29 7.0036 -0.00000 + 30 7.2220 -0.00000 + 31 7.6353 -0.00000 + 32 7.9998 -0.00000 + 33 8.1822 -0.00000 + 34 8.4925 -0.00000 + 35 8.5731 -0.00000 + 36 8.9918 -0.00000 + 37 9.0249 -0.00000 + 38 9.2496 -0.00000 + 39 9.2731 -0.00000 + 40 9.5606 -0.00000 + 41 10.0133 0.00000 + 42 10.1324 0.00000 + 43 10.7884 0.00000 + 44 10.9992 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1408 2.00000 + 2 1.2477 2.00000 + 3 1.5729 2.00000 + 4 1.6833 2.00000 + 5 2.4369 2.00000 + 6 2.7674 2.00000 + 7 2.9092 2.00000 + 8 2.9342 2.00000 + 9 2.9859 2.00000 + 10 3.1101 2.00000 + 11 3.1827 2.00000 + 12 3.2706 2.00000 + 13 3.3776 2.00000 + 14 3.4612 2.00000 + 15 3.5277 2.00000 + 16 3.5990 2.00000 + 17 3.7378 2.00000 + 18 3.8907 2.00038 + 19 3.9006 2.00049 + 20 4.0776 2.01956 + 21 5.5345 -0.00000 + 22 5.6620 -0.00000 + 23 5.8889 -0.00000 + 24 6.0572 -0.00000 + 25 6.0753 -0.00000 + 26 6.3594 -0.00000 + 27 6.4269 -0.00000 + 28 6.7697 -0.00000 + 29 7.2667 -0.00000 + 30 7.3985 -0.00000 + 31 7.7292 -0.00000 + 32 8.0602 -0.00000 + 33 8.1083 -0.00000 + 34 8.4933 -0.00000 + 35 8.5987 -0.00000 + 36 8.8735 -0.00000 + 37 8.9632 -0.00000 + 38 9.2825 -0.00000 + 39 9.2863 -0.00000 + 40 9.5611 -0.00000 + 41 10.2415 0.00000 + 42 10.4215 0.00000 + 43 10.7900 0.00000 + 44 11.0413 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2386 2.00000 + 2 1.3468 2.00000 + 3 1.3810 2.00000 + 4 1.4906 2.00000 + 5 2.5523 2.00000 + 6 2.7109 2.00000 + 7 2.9019 2.00000 + 8 3.0676 2.00000 + 9 3.1566 2.00000 + 10 3.2420 2.00000 + 11 3.2725 2.00000 + 12 3.3620 2.00000 + 13 3.3882 2.00000 + 14 3.4176 2.00000 + 15 3.6034 2.00000 + 16 3.6769 2.00000 + 17 3.6769 2.00000 + 18 3.7694 2.00001 + 19 3.8277 2.00006 + 20 3.8961 2.00044 + 21 5.5106 -0.00000 + 22 5.5729 -0.00000 + 23 5.6908 -0.00000 + 24 5.7649 -0.00000 + 25 6.1332 -0.00000 + 26 6.2806 -0.00000 + 27 6.4852 -0.00000 + 28 6.6346 -0.00000 + 29 7.5731 -0.00000 + 30 7.7134 -0.00000 + 31 7.8095 -0.00000 + 32 8.0146 -0.00000 + 33 8.0392 -0.00000 + 34 8.3283 -0.00000 + 35 8.4364 -0.00000 + 36 8.6334 -0.00000 + 37 9.0316 -0.00000 + 38 9.2584 -0.00000 + 39 9.3169 -0.00000 + 40 9.5371 -0.00000 + 41 10.5365 0.00000 + 42 10.7196 0.00000 + 43 10.7839 0.00000 + 44 10.9797 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0024 2.00000 + 2 1.5538 2.00000 + 3 1.7930 2.00000 + 4 2.0402 2.00000 + 5 2.0848 2.00000 + 6 2.4874 2.00000 + 7 2.5796 2.00000 + 8 2.6656 2.00000 + 9 2.8100 2.00000 + 10 2.9054 2.00000 + 11 3.0789 2.00000 + 12 3.2808 2.00000 + 13 3.3103 2.00000 + 14 3.3358 2.00000 + 15 3.4458 2.00000 + 16 3.7598 2.00001 + 17 3.8590 2.00016 + 18 4.0053 2.00546 + 19 4.0464 2.01175 + 20 4.1713 2.05814 + 21 5.7634 -0.00000 + 22 5.9675 -0.00000 + 23 6.1815 -0.00000 + 24 6.4579 -0.00000 + 25 6.4903 -0.00000 + 26 6.5796 -0.00000 + 27 6.5973 -0.00000 + 28 6.7614 -0.00000 + 29 7.1694 -0.00000 + 30 7.2586 -0.00000 + 31 7.3721 -0.00000 + 32 7.4262 -0.00000 + 33 8.1689 -0.00000 + 34 8.4694 -0.00000 + 35 8.9352 -0.00000 + 36 9.0584 -0.00000 + 37 9.0662 -0.00000 + 38 9.5657 -0.00000 + 39 9.8162 -0.00000 + 40 9.8428 -0.00000 + 41 10.0141 0.00000 + 42 10.0277 0.00000 + 43 10.4029 0.00000 + 44 10.4560 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0209 2.00000 + 2 1.5739 2.00000 + 3 1.7541 2.00000 + 4 1.8136 2.00000 + 5 2.3182 2.00000 + 6 2.4338 2.00000 + 7 2.5198 2.00000 + 8 2.5703 2.00000 + 9 2.9508 2.00000 + 10 3.0951 2.00000 + 11 3.1464 2.00000 + 12 3.1915 2.00000 + 13 3.3005 2.00000 + 14 3.3693 2.00000 + 15 3.5867 2.00000 + 16 3.6569 2.00000 + 17 3.8717 2.00023 + 18 3.9610 2.00213 + 19 4.0853 2.02194 + 20 4.1556 2.05113 + 21 5.7087 -0.00000 + 22 5.8129 -0.00000 + 23 6.1148 -0.00000 + 24 6.3486 -0.00000 + 25 6.3885 -0.00000 + 26 6.4828 -0.00000 + 27 6.7068 -0.00000 + 28 6.7802 -0.00000 + 29 7.1639 -0.00000 + 30 7.2567 -0.00000 + 31 7.2626 -0.00000 + 32 7.4498 -0.00000 + 33 8.3293 -0.00000 + 34 8.5487 -0.00000 + 35 8.9237 -0.00000 + 36 9.0221 -0.00000 + 37 9.0775 -0.00000 + 38 9.5895 -0.00000 + 39 9.8340 -0.00000 + 40 9.9043 -0.00000 + 41 9.9050 -0.00000 + 42 10.1130 0.00000 + 43 10.6413 0.00000 + 44 10.7136 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0773 2.00000 + 2 1.5073 2.00000 + 3 1.6346 2.00000 + 4 1.8758 2.00000 + 5 2.0789 2.00000 + 6 2.3256 2.00000 + 7 2.5810 2.00000 + 8 2.8627 2.00000 + 9 2.9717 2.00000 + 10 3.1432 2.00000 + 11 3.2879 2.00000 + 12 3.3529 2.00000 + 13 3.4466 2.00000 + 14 3.4770 2.00000 + 15 3.5336 2.00000 + 16 3.7435 2.00000 + 17 3.8081 2.00004 + 18 3.9030 2.00052 + 19 4.0065 2.00558 + 20 4.1185 2.03439 + 21 5.4650 -0.00000 + 22 5.7679 -0.00000 + 23 5.9908 -0.00000 + 24 5.9915 -0.00000 + 25 6.1334 -0.00000 + 26 6.2967 -0.00000 + 27 6.7189 -0.00000 + 28 7.0428 -0.00000 + 29 7.0492 -0.00000 + 30 7.1672 -0.00000 + 31 7.3070 -0.00000 + 32 7.6939 -0.00000 + 33 8.3652 -0.00000 + 34 8.4408 -0.00000 + 35 8.9579 -0.00000 + 36 9.0570 -0.00000 + 37 9.0911 -0.00000 + 38 9.4924 -0.00000 + 39 9.8949 -0.00000 + 40 10.0936 0.00000 + 41 10.1304 0.00000 + 42 10.3263 0.00000 + 43 10.9681 0.00000 + 44 11.1192 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1742 2.00000 + 2 1.3158 2.00000 + 3 1.7375 2.00000 + 4 1.8842 2.00000 + 5 1.9819 2.00000 + 6 2.1307 2.00000 + 7 2.6766 2.00000 + 8 2.8085 2.00000 + 9 3.2108 2.00000 + 10 3.3077 2.00000 + 11 3.3491 2.00000 + 12 3.5008 2.00000 + 13 3.5577 2.00000 + 14 3.6265 2.00000 + 15 3.6387 2.00000 + 16 3.6450 2.00000 + 17 3.7994 2.00003 + 18 3.8643 2.00018 + 19 3.8741 2.00024 + 20 3.9223 2.00085 + 21 5.4380 -0.00000 + 22 5.6554 -0.00000 + 23 5.7362 -0.00000 + 24 5.7999 -0.00000 + 25 5.9893 -0.00000 + 26 6.1871 -0.00000 + 27 6.7494 -0.00000 + 28 6.8806 -0.00000 + 29 7.1477 -0.00000 + 30 7.1953 -0.00000 + 31 7.6162 -0.00000 + 32 7.9555 -0.00000 + 33 8.0393 -0.00000 + 34 8.1976 -0.00000 + 35 9.0885 -0.00000 + 36 9.1506 -0.00000 + 37 9.1902 -0.00000 + 38 9.3580 -0.00000 + 39 9.9012 -0.00000 + 40 10.0827 0.00000 + 41 10.3839 0.00000 + 42 10.4828 0.00000 + 43 11.2145 0.00000 + 44 11.3224 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0365 2.00000 + 2 1.3614 2.00000 + 3 2.0724 2.00000 + 4 2.0758 2.00000 + 5 2.1219 2.00000 + 6 2.3776 2.00000 + 7 2.4760 2.00000 + 8 2.5527 2.00000 + 9 2.9084 2.00000 + 10 3.0649 2.00000 + 11 3.0746 2.00000 + 12 3.1646 2.00000 + 13 3.3582 2.00000 + 14 3.5034 2.00000 + 15 3.5111 2.00000 + 16 3.6696 2.00000 + 17 3.8471 2.00011 + 18 3.8785 2.00027 + 19 3.9366 2.00120 + 20 4.0431 2.01109 + 21 5.8467 -0.00000 + 22 6.0134 -0.00000 + 23 6.0695 -0.00000 + 24 6.3276 -0.00000 + 25 6.4999 -0.00000 + 26 6.6115 -0.00000 + 27 6.6709 -0.00000 + 28 6.7901 -0.00000 + 29 7.3876 -0.00000 + 30 7.4028 -0.00000 + 31 7.4767 -0.00000 + 32 7.6279 -0.00000 + 33 8.1957 -0.00000 + 34 8.3111 -0.00000 + 35 8.7500 -0.00000 + 36 8.9320 -0.00000 + 37 9.2139 -0.00000 + 38 9.4185 -0.00000 + 39 9.6298 -0.00000 + 40 9.7249 -0.00000 + 41 9.8309 -0.00000 + 42 10.3422 0.00000 + 43 10.3746 0.00000 + 44 10.9224 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0551 2.00000 + 2 1.3809 2.00000 + 3 1.7895 2.00000 + 4 2.0891 2.00000 + 5 2.1350 2.00000 + 6 2.4658 2.00000 + 7 2.5633 2.00000 + 8 2.7838 2.00000 + 9 2.8475 2.00000 + 10 2.9274 2.00000 + 11 3.1018 2.00000 + 12 3.2054 2.00000 + 13 3.4006 2.00000 + 14 3.4960 2.00000 + 15 3.5903 2.00000 + 16 3.6451 2.00000 + 17 3.7952 2.00002 + 18 3.8634 2.00018 + 19 3.9735 2.00281 + 20 4.0996 2.02689 + 21 5.7443 -0.00000 + 22 5.9611 -0.00000 + 23 5.9789 -0.00000 + 24 6.2246 -0.00000 + 25 6.3160 -0.00000 + 26 6.6032 -0.00000 + 27 6.6457 -0.00000 + 28 6.9043 -0.00000 + 29 7.2568 -0.00000 + 30 7.3867 -0.00000 + 31 7.5040 -0.00000 + 32 7.6181 -0.00000 + 33 8.3666 -0.00000 + 34 8.3740 -0.00000 + 35 8.8417 -0.00000 + 36 8.9105 -0.00000 + 37 9.1917 -0.00000 + 38 9.3992 -0.00000 + 39 9.6213 -0.00000 + 40 9.7382 -0.00000 + 41 9.9091 -0.00000 + 42 10.4152 0.00000 + 43 10.5408 0.00000 + 44 10.9515 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1117 2.00000 + 2 1.4402 2.00000 + 3 1.5429 2.00000 + 4 1.8799 2.00000 + 5 2.1647 2.00000 + 6 2.6084 2.00000 + 7 2.6299 2.00000 + 8 2.8847 2.00000 + 9 2.9845 2.00000 + 10 3.0202 2.00000 + 11 3.1602 2.00000 + 12 3.1827 2.00000 + 13 3.3654 2.00000 + 14 3.6033 2.00000 + 15 3.6193 2.00000 + 16 3.6426 2.00000 + 17 3.7921 2.00002 + 18 3.9057 2.00056 + 19 3.9465 2.00152 + 20 4.1113 2.03142 + 21 5.4880 -0.00000 + 22 5.8322 -0.00000 + 23 5.9179 -0.00000 + 24 5.9698 -0.00000 + 25 6.0310 -0.00000 + 26 6.5253 -0.00000 + 27 6.5446 -0.00000 + 28 7.0243 -0.00000 + 29 7.1687 -0.00000 + 30 7.4136 -0.00000 + 31 7.6196 -0.00000 + 32 7.6839 -0.00000 + 33 8.3364 -0.00000 + 34 8.4554 -0.00000 + 35 8.8649 -0.00000 + 36 8.9122 -0.00000 + 37 9.2640 -0.00000 + 38 9.2955 -0.00000 + 39 9.6450 -0.00000 + 40 9.9926 0.00000 + 41 10.1023 0.00000 + 42 10.5418 0.00000 + 43 10.7692 0.00000 + 44 11.1220 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2091 2.00000 + 2 1.3511 2.00000 + 3 1.5412 2.00000 + 4 1.6867 2.00000 + 5 2.2716 2.00000 + 6 2.4218 2.00000 + 7 2.7204 2.00000 + 8 2.8563 2.00000 + 9 3.0709 2.00000 + 10 3.1917 2.00000 + 11 3.2815 2.00000 + 12 3.3934 2.00000 + 13 3.4502 2.00000 + 14 3.5061 2.00000 + 15 3.6845 2.00000 + 16 3.7042 2.00000 + 17 3.7938 2.00002 + 18 3.8813 2.00029 + 19 3.9269 2.00095 + 20 3.9319 2.00108 + 21 5.4107 -0.00000 + 22 5.6823 -0.00000 + 23 5.6917 -0.00000 + 24 5.7709 -0.00000 + 25 6.0548 -0.00000 + 26 6.3776 -0.00000 + 27 6.6058 -0.00000 + 28 6.7866 -0.00000 + 29 7.3058 -0.00000 + 30 7.4603 -0.00000 + 31 7.8094 -0.00000 + 32 7.9065 -0.00000 + 33 8.1700 -0.00000 + 34 8.1812 -0.00000 + 35 8.9649 -0.00000 + 36 9.0307 -0.00000 + 37 9.1777 -0.00000 + 38 9.3296 -0.00000 + 39 9.6129 -0.00000 + 40 10.0562 0.00000 + 41 10.3488 0.00000 + 42 10.5349 0.00000 + 43 11.1200 0.00000 + 44 11.2309 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1059 2.00000 + 2 1.2131 2.00000 + 3 2.1381 2.00000 + 4 2.1961 2.00000 + 5 2.2397 2.00000 + 6 2.2948 2.00000 + 7 2.4279 2.00000 + 8 2.6325 2.00000 + 9 2.7535 2.00000 + 10 2.7571 2.00000 + 11 3.3256 2.00000 + 12 3.4362 2.00000 + 13 3.4676 2.00000 + 14 3.5000 2.00000 + 15 3.6386 2.00000 + 16 3.6420 2.00000 + 17 3.6815 2.00000 + 18 3.7684 2.00001 + 19 3.8081 2.00004 + 20 3.8364 2.00008 + 21 5.9389 -0.00000 + 22 6.0727 -0.00000 + 23 6.0933 -0.00000 + 24 6.2172 -0.00000 + 25 6.3580 -0.00000 + 26 6.3692 -0.00000 + 27 6.9687 -0.00000 + 28 7.1323 -0.00000 + 29 7.2461 -0.00000 + 30 7.4001 -0.00000 + 31 7.7329 -0.00000 + 32 8.0499 -0.00000 + 33 8.1083 -0.00000 + 34 8.3790 -0.00000 + 35 8.4355 -0.00000 + 36 9.0147 -0.00000 + 37 9.1236 -0.00000 + 38 9.1942 -0.00000 + 39 9.4044 -0.00000 + 40 9.5628 -0.00000 + 41 9.9311 0.00000 + 42 10.0720 0.00000 + 43 10.7486 0.00000 + 44 10.9442 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1247 2.00000 + 2 1.2322 2.00000 + 3 1.8614 2.00000 + 4 1.9717 2.00000 + 5 2.4203 2.00000 + 6 2.5267 2.00000 + 7 2.6255 2.00000 + 8 2.6753 2.00000 + 9 2.7669 2.00000 + 10 2.7936 2.00000 + 11 3.1518 2.00000 + 12 3.3060 2.00000 + 13 3.3884 2.00000 + 14 3.5134 2.00000 + 15 3.6151 2.00000 + 16 3.6976 2.00000 + 17 3.7485 2.00001 + 18 3.8207 2.00005 + 19 3.8484 2.00012 + 20 3.9628 2.00221 + 21 5.8801 -0.00000 + 22 5.9658 -0.00000 + 23 6.0170 -0.00000 + 24 6.1500 -0.00000 + 25 6.1535 -0.00000 + 26 6.3620 -0.00000 + 27 6.9308 -0.00000 + 28 7.1670 -0.00000 + 29 7.1950 -0.00000 + 30 7.4212 -0.00000 + 31 7.7094 -0.00000 + 32 8.0534 -0.00000 + 33 8.1438 -0.00000 + 34 8.5244 -0.00000 + 35 8.5767 -0.00000 + 36 8.9872 -0.00000 + 37 9.0933 -0.00000 + 38 9.1971 -0.00000 + 39 9.4068 -0.00000 + 40 9.5940 -0.00000 + 41 10.0092 0.00000 + 42 10.1837 0.00000 + 43 10.7556 0.00000 + 44 10.9690 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1819 2.00000 + 2 1.2904 2.00000 + 3 1.6153 2.00000 + 4 1.7267 2.00000 + 5 2.4904 2.00000 + 6 2.7075 2.00000 + 7 2.8150 2.00000 + 8 2.8341 2.00000 + 9 2.9383 2.00000 + 10 2.9850 2.00000 + 11 3.0509 2.00000 + 12 3.1171 2.00000 + 13 3.2128 2.00000 + 14 3.3171 2.00000 + 15 3.7454 2.00000 + 16 3.7456 2.00000 + 17 3.8314 2.00007 + 18 3.8775 2.00027 + 19 3.9452 2.00148 + 20 4.0399 2.01048 + 21 5.6236 -0.00000 + 22 5.7967 -0.00000 + 23 5.7984 -0.00000 + 24 5.8755 -0.00000 + 25 6.1431 -0.00000 + 26 6.3316 -0.00000 + 27 6.7595 -0.00000 + 28 6.9363 -0.00000 + 29 7.3883 -0.00000 + 30 7.5828 -0.00000 + 31 7.7724 -0.00000 + 32 8.0951 -0.00000 + 33 8.1093 -0.00000 + 34 8.5328 -0.00000 + 35 8.6881 -0.00000 + 36 8.9597 -0.00000 + 37 9.0288 -0.00000 + 38 9.2216 -0.00000 + 39 9.5093 -0.00000 + 40 9.7717 -0.00000 + 41 10.1987 0.00000 + 42 10.4312 0.00000 + 43 10.7414 0.00000 + 44 11.0121 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2801 2.00000 + 2 1.3897 2.00000 + 3 1.4230 2.00000 + 4 1.5339 2.00000 + 5 2.6005 2.00000 + 6 2.7482 2.00000 + 7 2.8091 2.00000 + 8 2.9133 2.00000 + 9 2.9517 2.00000 + 10 2.9574 2.00000 + 11 3.0553 2.00000 + 12 3.1368 2.00000 + 13 3.4078 2.00000 + 14 3.4519 2.00000 + 15 3.7300 2.00000 + 16 3.7558 2.00001 + 17 3.8332 2.00008 + 18 3.8786 2.00027 + 19 3.9440 2.00144 + 20 3.9567 2.00193 + 21 5.4890 -0.00000 + 22 5.6142 -0.00000 + 23 5.6555 -0.00000 + 24 5.6931 -0.00000 + 25 6.2531 -0.00000 + 26 6.4320 -0.00000 + 27 6.5305 -0.00000 + 28 6.6575 -0.00000 + 29 7.5495 -0.00000 + 30 7.7694 -0.00000 + 31 7.7966 -0.00000 + 32 8.0506 -0.00000 + 33 8.1939 -0.00000 + 34 8.4701 -0.00000 + 35 8.6246 -0.00000 + 36 8.8540 -0.00000 + 37 9.0687 -0.00000 + 38 9.2717 -0.00000 + 39 9.5427 -0.00000 + 40 9.8261 -0.00000 + 41 10.4547 0.00000 + 42 10.6492 0.00000 + 43 10.7411 0.00000 + 44 10.9505 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0814 2.00000 + 2 1.6481 2.00000 + 3 1.8930 2.00000 + 4 2.1217 2.00000 + 5 2.1433 2.00000 + 6 2.1688 2.00000 + 7 2.6447 2.00000 + 8 2.7507 2.00000 + 9 2.7908 2.00000 + 10 2.8595 2.00000 + 11 2.9748 2.00000 + 12 3.0612 2.00000 + 13 3.1472 2.00000 + 14 3.1888 2.00000 + 15 3.4138 2.00000 + 16 3.6167 2.00000 + 17 3.7454 2.00000 + 18 3.8208 2.00005 + 19 3.8904 2.00037 + 20 4.2427 2.06625 + 21 6.1000 -0.00000 + 22 6.1900 -0.00000 + 23 6.2720 -0.00000 + 24 6.6152 -0.00000 + 25 6.8963 -0.00000 + 26 7.0075 -0.00000 + 27 7.0223 -0.00000 + 28 7.0781 -0.00000 + 29 7.2723 -0.00000 + 30 7.3069 -0.00000 + 31 7.3809 -0.00000 + 32 7.3867 -0.00000 + 33 8.1656 -0.00000 + 34 8.5940 -0.00000 + 35 8.6127 -0.00000 + 36 9.1324 -0.00000 + 37 9.2553 -0.00000 + 38 9.5820 -0.00000 + 39 9.6633 -0.00000 + 40 9.7370 -0.00000 + 41 9.8504 -0.00000 + 42 10.0594 0.00000 + 43 10.2177 0.00000 + 44 10.3415 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.1001 2.00000 + 2 1.6681 2.00000 + 3 1.8373 2.00000 + 4 1.9131 2.00000 + 5 2.1635 2.00000 + 6 2.4067 2.00000 + 7 2.5126 2.00000 + 8 2.6395 2.00000 + 9 2.8109 2.00000 + 10 2.8919 2.00000 + 11 3.0294 2.00000 + 12 3.0819 2.00000 + 13 3.2240 2.00000 + 14 3.4138 2.00000 + 15 3.4616 2.00000 + 16 3.4779 2.00000 + 17 3.7214 2.00000 + 18 3.9026 2.00052 + 19 3.9211 2.00083 + 20 4.2458 2.06475 + 21 5.9744 -0.00000 + 22 6.1295 -0.00000 + 23 6.1311 -0.00000 + 24 6.5184 -0.00000 + 25 6.6642 -0.00000 + 26 6.9292 -0.00000 + 27 6.9758 -0.00000 + 28 7.0952 -0.00000 + 29 7.2073 -0.00000 + 30 7.2735 -0.00000 + 31 7.3513 -0.00000 + 32 7.5597 -0.00000 + 33 8.3128 -0.00000 + 34 8.5540 -0.00000 + 35 8.7511 -0.00000 + 36 9.0486 -0.00000 + 37 9.2404 -0.00000 + 38 9.4750 -0.00000 + 39 9.7650 -0.00000 + 40 9.7979 -0.00000 + 41 9.9890 0.00000 + 42 10.2290 0.00000 + 43 10.4198 0.00000 + 44 10.5727 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1570 2.00000 + 2 1.5899 2.00000 + 3 1.7284 2.00000 + 4 1.9736 2.00000 + 5 2.1669 2.00000 + 6 2.2264 2.00000 + 7 2.4097 2.00000 + 8 2.6631 2.00000 + 9 2.8469 2.00000 + 10 2.9499 2.00000 + 11 3.1370 2.00000 + 12 3.2617 2.00000 + 13 3.3569 2.00000 + 14 3.5030 2.00000 + 15 3.5182 2.00000 + 16 3.5771 2.00000 + 17 3.7525 2.00001 + 18 3.8674 2.00020 + 19 4.0178 2.00697 + 20 4.2382 2.06798 + 21 5.6163 -0.00000 + 22 5.9748 -0.00000 + 23 6.0015 -0.00000 + 24 6.2188 -0.00000 + 25 6.4339 -0.00000 + 26 6.7009 -0.00000 + 27 6.8773 -0.00000 + 28 6.8780 -0.00000 + 29 7.2219 -0.00000 + 30 7.2846 -0.00000 + 31 7.4829 -0.00000 + 32 7.7745 -0.00000 + 33 8.3169 -0.00000 + 34 8.3260 -0.00000 + 35 9.0329 -0.00000 + 36 9.1127 -0.00000 + 37 9.3181 -0.00000 + 38 9.4991 -0.00000 + 39 9.8426 -0.00000 + 40 10.0274 0.00000 + 41 10.2386 0.00000 + 42 10.5115 0.00000 + 43 10.7153 0.00000 + 44 10.9563 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2548 2.00000 + 2 1.3974 2.00000 + 3 1.8304 2.00000 + 4 1.9761 2.00000 + 5 2.0759 2.00000 + 6 2.2196 2.00000 + 7 2.3299 2.00000 + 8 2.4749 2.00000 + 9 2.9449 2.00000 + 10 3.0694 2.00000 + 11 3.2563 2.00000 + 12 3.3605 2.00000 + 13 3.4579 2.00000 + 14 3.6152 2.00000 + 15 3.6381 2.00000 + 16 3.6731 2.00000 + 17 3.7594 2.00001 + 18 3.8525 2.00013 + 19 4.0021 2.00511 + 20 4.1708 2.05794 + 21 5.5269 -0.00000 + 22 5.7563 -0.00000 + 23 5.8288 -0.00000 + 24 5.8980 -0.00000 + 25 6.4975 -0.00000 + 26 6.5587 -0.00000 + 27 6.6280 -0.00000 + 28 6.7698 -0.00000 + 29 7.2617 -0.00000 + 30 7.3095 -0.00000 + 31 7.7124 -0.00000 + 32 7.9206 -0.00000 + 33 8.0570 -0.00000 + 34 8.0893 -0.00000 + 35 9.3006 -0.00000 + 36 9.3528 -0.00000 + 37 9.4198 -0.00000 + 38 9.5359 -0.00000 + 39 9.8983 -0.00000 + 40 10.2277 0.00000 + 41 10.2805 0.00000 + 42 10.3618 0.00000 + 43 11.0801 0.00000 + 44 11.2411 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1166 2.00000 + 2 1.4509 2.00000 + 3 2.1550 2.00000 + 4 2.1821 2.00000 + 5 2.1864 2.00000 + 6 2.2068 2.00000 + 7 2.4685 2.00000 + 8 2.5626 2.00000 + 9 2.5780 2.00000 + 10 3.0533 2.00000 + 11 3.1753 2.00000 + 12 3.2002 2.00000 + 13 3.2408 2.00000 + 14 3.2882 2.00000 + 15 3.3318 2.00000 + 16 3.4962 2.00000 + 17 3.6114 2.00000 + 18 3.8058 2.00003 + 19 3.8609 2.00017 + 20 4.1425 2.04507 + 21 6.0604 -0.00000 + 22 6.1189 -0.00000 + 23 6.3126 -0.00000 + 24 6.3374 -0.00000 + 25 6.8724 -0.00000 + 26 6.8818 -0.00000 + 27 7.0058 -0.00000 + 28 7.3186 -0.00000 + 29 7.3644 -0.00000 + 30 7.5510 -0.00000 + 31 7.6131 -0.00000 + 32 7.6301 -0.00000 + 33 8.2035 -0.00000 + 34 8.3984 -0.00000 + 35 8.5777 -0.00000 + 36 9.0739 -0.00000 + 37 9.3984 -0.00000 + 38 9.4075 -0.00000 + 39 9.6316 -0.00000 + 40 9.6716 -0.00000 + 41 9.9069 -0.00000 + 42 10.1561 0.00000 + 43 10.2282 0.00000 + 44 10.6067 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1353 2.00000 + 2 1.4705 2.00000 + 3 1.8736 2.00000 + 4 2.1842 2.00000 + 5 2.2144 2.00000 + 6 2.2264 2.00000 + 7 2.5443 2.00000 + 8 2.6008 2.00000 + 9 2.8548 2.00000 + 10 2.8670 2.00000 + 11 2.9935 2.00000 + 12 3.2110 2.00000 + 13 3.2954 2.00000 + 14 3.3813 2.00000 + 15 3.3885 2.00000 + 16 3.5453 2.00000 + 17 3.7120 2.00000 + 18 3.8164 2.00005 + 19 3.8688 2.00021 + 20 4.1498 2.04845 + 21 5.9456 -0.00000 + 22 6.0092 -0.00000 + 23 6.2015 -0.00000 + 24 6.3420 -0.00000 + 25 6.5495 -0.00000 + 26 6.7977 -0.00000 + 27 7.0123 -0.00000 + 28 7.2587 -0.00000 + 29 7.3391 -0.00000 + 30 7.5546 -0.00000 + 31 7.6532 -0.00000 + 32 7.6682 -0.00000 + 33 8.3979 -0.00000 + 34 8.4610 -0.00000 + 35 8.6413 -0.00000 + 36 9.0379 -0.00000 + 37 9.2919 -0.00000 + 38 9.3852 -0.00000 + 39 9.6861 -0.00000 + 40 9.7793 -0.00000 + 41 10.0054 0.00000 + 42 10.3189 0.00000 + 43 10.4206 0.00000 + 44 10.6775 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1925 2.00000 + 2 1.5298 2.00000 + 3 1.6264 2.00000 + 4 1.9692 2.00000 + 5 2.2474 2.00000 + 6 2.2880 2.00000 + 7 2.6493 2.00000 + 8 2.6563 2.00000 + 9 2.7559 2.00000 + 10 2.9579 2.00000 + 11 3.0745 2.00000 + 12 3.2316 2.00000 + 13 3.3038 2.00000 + 14 3.4291 2.00000 + 15 3.6151 2.00000 + 16 3.6371 2.00000 + 17 3.7511 2.00001 + 18 3.8053 2.00003 + 19 3.9842 2.00353 + 20 4.1568 2.05169 + 21 5.5888 -0.00000 + 22 5.8735 -0.00000 + 23 6.0019 -0.00000 + 24 6.0861 -0.00000 + 25 6.3763 -0.00000 + 26 6.5991 -0.00000 + 27 6.9664 -0.00000 + 28 6.9856 -0.00000 + 29 7.3928 -0.00000 + 30 7.5262 -0.00000 + 31 7.7378 -0.00000 + 32 7.8096 -0.00000 + 33 8.3346 -0.00000 + 34 8.4798 -0.00000 + 35 8.8627 -0.00000 + 36 9.1108 -0.00000 + 37 9.3545 -0.00000 + 38 9.4928 -0.00000 + 39 9.7163 -0.00000 + 40 9.9459 0.00000 + 41 10.2627 0.00000 + 42 10.4435 0.00000 + 43 10.7284 0.00000 + 44 10.9129 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2907 2.00000 + 2 1.4337 2.00000 + 3 1.6308 2.00000 + 4 1.7763 2.00000 + 5 2.3387 2.00000 + 6 2.3987 2.00000 + 7 2.4754 2.00000 + 8 2.5628 2.00000 + 9 2.7541 2.00000 + 10 2.8984 2.00000 + 11 3.3380 2.00000 + 12 3.4229 2.00000 + 13 3.4999 2.00000 + 14 3.5558 2.00000 + 15 3.5597 2.00000 + 16 3.6531 2.00000 + 17 3.7106 2.00000 + 18 3.8758 2.00025 + 19 3.9991 2.00481 + 20 4.1185 2.03437 + 21 5.4565 -0.00000 + 22 5.7352 -0.00000 + 23 5.7552 -0.00000 + 24 5.7785 -0.00000 + 25 6.4431 -0.00000 + 26 6.5400 -0.00000 + 27 6.6771 -0.00000 + 28 6.9231 -0.00000 + 29 7.4129 -0.00000 + 30 7.5439 -0.00000 + 31 7.8634 -0.00000 + 32 7.9311 -0.00000 + 33 8.1241 -0.00000 + 34 8.3144 -0.00000 + 35 9.1776 -0.00000 + 36 9.2777 -0.00000 + 37 9.4133 -0.00000 + 38 9.6041 -0.00000 + 39 9.6725 -0.00000 + 40 10.1311 0.00000 + 41 10.3873 0.00000 + 42 10.3994 0.00000 + 43 10.8341 0.00000 + 44 11.0352 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1882 2.00000 + 2 1.2986 2.00000 + 3 2.2224 2.00000 + 4 2.2717 2.00000 + 5 2.2826 2.00000 + 6 2.3287 2.00000 + 7 2.3874 2.00000 + 8 2.4045 2.00000 + 9 2.5343 2.00000 + 10 2.8752 2.00000 + 11 3.1916 2.00000 + 12 3.3060 2.00000 + 13 3.3231 2.00000 + 14 3.4436 2.00000 + 15 3.4508 2.00000 + 16 3.5109 2.00000 + 17 3.6084 2.00000 + 18 3.7203 2.00000 + 19 3.7253 2.00000 + 20 3.9424 2.00138 + 21 6.0039 -0.00000 + 22 6.0883 -0.00000 + 23 6.2774 -0.00000 + 24 6.4866 -0.00000 + 25 6.5537 -0.00000 + 26 6.6881 -0.00000 + 27 7.1519 -0.00000 + 28 7.2879 -0.00000 + 29 7.5583 -0.00000 + 30 7.6572 -0.00000 + 31 7.9969 -0.00000 + 32 8.0523 -0.00000 + 33 8.1796 -0.00000 + 34 8.4011 -0.00000 + 35 8.5070 -0.00000 + 36 9.1058 -0.00000 + 37 9.1715 -0.00000 + 38 9.2478 -0.00000 + 39 9.5358 -0.00000 + 40 9.6431 -0.00000 + 41 9.7855 -0.00000 + 42 9.9359 0.00000 + 43 10.6914 0.00000 + 44 10.9102 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2071 2.00000 + 2 1.3179 2.00000 + 3 1.9471 2.00000 + 4 2.0591 2.00000 + 5 2.2940 2.00000 + 6 2.4243 2.00000 + 7 2.5307 2.00000 + 8 2.6111 2.00000 + 9 2.7327 2.00000 + 10 2.9004 2.00000 + 11 2.9957 2.00000 + 12 3.1357 2.00000 + 13 3.2434 2.00000 + 14 3.5081 2.00000 + 15 3.5190 2.00000 + 16 3.6285 2.00000 + 17 3.6917 2.00000 + 18 3.7094 2.00000 + 19 3.8292 2.00007 + 20 3.9579 2.00198 + 21 5.9502 -0.00000 + 22 6.0050 -0.00000 + 23 6.0954 -0.00000 + 24 6.3085 -0.00000 + 25 6.4612 -0.00000 + 26 6.6201 -0.00000 + 27 7.1290 -0.00000 + 28 7.2313 -0.00000 + 29 7.5550 -0.00000 + 30 7.6808 -0.00000 + 31 7.9426 -0.00000 + 32 8.1182 -0.00000 + 33 8.2360 -0.00000 + 34 8.4628 -0.00000 + 35 8.6866 -0.00000 + 36 9.0728 -0.00000 + 37 9.1382 -0.00000 + 38 9.2782 -0.00000 + 39 9.5630 -0.00000 + 40 9.7354 -0.00000 + 41 9.8878 -0.00000 + 42 10.0905 0.00000 + 43 10.6802 0.00000 + 44 10.8785 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2649 2.00000 + 2 1.3763 2.00000 + 3 1.7005 2.00000 + 4 1.8141 2.00000 + 5 2.3531 2.00000 + 6 2.4846 2.00000 + 7 2.5979 2.00000 + 8 2.7801 2.00000 + 9 2.8864 2.00000 + 10 2.9563 2.00000 + 11 3.0362 2.00000 + 12 3.0612 2.00000 + 13 3.1249 2.00000 + 14 3.3584 2.00000 + 15 3.7084 2.00000 + 16 3.7110 2.00000 + 17 3.7811 2.00001 + 18 3.8595 2.00016 + 19 3.9375 2.00123 + 20 3.9968 2.00459 + 21 5.6666 -0.00000 + 22 5.7954 -0.00000 + 23 5.8847 -0.00000 + 24 5.8904 -0.00000 + 25 6.4527 -0.00000 + 26 6.5219 -0.00000 + 27 7.0109 -0.00000 + 28 7.0127 -0.00000 + 29 7.6099 -0.00000 + 30 7.7735 -0.00000 + 31 7.9307 -0.00000 + 32 8.1486 -0.00000 + 33 8.2276 -0.00000 + 34 8.5594 -0.00000 + 35 8.8005 -0.00000 + 36 9.1607 -0.00000 + 37 9.1683 -0.00000 + 38 9.3552 -0.00000 + 39 9.7348 -0.00000 + 40 9.9673 0.00000 + 41 10.0384 0.00000 + 42 10.3508 0.00000 + 43 10.6345 0.00000 + 44 10.9252 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3637 2.00000 + 2 1.4761 2.00000 + 3 1.5075 2.00000 + 4 1.6208 2.00000 + 5 2.4518 2.00000 + 6 2.5842 2.00000 + 7 2.5889 2.00000 + 8 2.7161 2.00000 + 9 2.7283 2.00000 + 10 2.8604 2.00000 + 11 3.0610 2.00000 + 12 3.2012 2.00000 + 13 3.4515 2.00000 + 14 3.5016 2.00000 + 15 3.7256 2.00000 + 16 3.7371 2.00000 + 17 3.7754 2.00001 + 18 3.9285 2.00099 + 19 3.9461 2.00151 + 20 4.0184 2.00704 + 21 5.4684 -0.00000 + 22 5.5910 -0.00000 + 23 5.6715 -0.00000 + 24 5.6872 -0.00000 + 25 6.4904 -0.00000 + 26 6.5296 -0.00000 + 27 6.7619 -0.00000 + 28 6.8733 -0.00000 + 29 7.6659 -0.00000 + 30 7.8640 -0.00000 + 31 7.8710 -0.00000 + 32 8.0757 -0.00000 + 33 8.2945 -0.00000 + 34 8.6748 -0.00000 + 35 8.8261 -0.00000 + 36 9.0723 -0.00000 + 37 9.3301 -0.00000 + 38 9.4491 -0.00000 + 39 9.8222 -0.00000 + 40 10.0861 0.00000 + 41 10.2589 0.00000 + 42 10.5080 0.00000 + 43 10.6280 0.00000 + 44 10.8431 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.2017 2.00000 + 2 1.7898 2.00000 + 3 1.8343 2.00000 + 4 2.0416 2.00000 + 5 2.2414 2.00000 + 6 2.2915 2.00000 + 7 2.4956 2.00000 + 8 2.7391 2.00000 + 9 2.7677 2.00000 + 10 2.8554 2.00000 + 11 2.8618 2.00000 + 12 2.9078 2.00000 + 13 3.0809 2.00000 + 14 3.1046 2.00000 + 15 3.4157 2.00000 + 16 3.4286 2.00000 + 17 3.6034 2.00000 + 18 3.6168 2.00000 + 19 3.6746 2.00000 + 20 4.3649 1.73957 + 21 6.1255 -0.00000 + 22 6.4694 -0.00000 + 23 6.5299 -0.00000 + 24 7.0739 -0.00000 + 25 7.1585 -0.00000 + 26 7.2390 -0.00000 + 27 7.2440 -0.00000 + 28 7.3168 -0.00000 + 29 7.4407 -0.00000 + 30 7.5283 -0.00000 + 31 7.5842 -0.00000 + 32 7.8779 -0.00000 + 33 8.1413 -0.00000 + 34 8.2081 -0.00000 + 35 8.5934 -0.00000 + 36 9.2139 -0.00000 + 37 9.3595 -0.00000 + 38 9.3809 -0.00000 + 39 9.4859 -0.00000 + 40 9.5330 -0.00000 + 41 9.6742 -0.00000 + 42 9.7314 -0.00000 + 43 10.0155 0.00000 + 44 10.6882 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2207 2.00000 + 2 1.8083 2.00000 + 3 1.8551 2.00000 + 4 1.9620 2.00000 + 5 2.0619 2.00000 + 6 2.5010 2.00000 + 7 2.5181 2.00000 + 8 2.6030 2.00000 + 9 2.6348 2.00000 + 10 2.7952 2.00000 + 11 2.7984 2.00000 + 12 3.1232 2.00000 + 13 3.1896 2.00000 + 14 3.2121 2.00000 + 15 3.3911 2.00000 + 16 3.4303 2.00000 + 17 3.6043 2.00000 + 18 3.7301 2.00000 + 19 3.7826 2.00002 + 20 4.3657 1.73541 + 21 6.0643 -0.00000 + 22 6.1881 -0.00000 + 23 6.4075 -0.00000 + 24 6.8123 -0.00000 + 25 6.8963 -0.00000 + 26 7.1428 -0.00000 + 27 7.2661 -0.00000 + 28 7.2754 -0.00000 + 29 7.4007 -0.00000 + 30 7.6177 -0.00000 + 31 7.6203 -0.00000 + 32 7.8499 -0.00000 + 33 8.3200 -0.00000 + 34 8.4501 -0.00000 + 35 8.6575 -0.00000 + 36 9.0678 -0.00000 + 37 9.1957 -0.00000 + 38 9.4230 -0.00000 + 39 9.5532 -0.00000 + 40 9.6914 -0.00000 + 41 9.8951 -0.00000 + 42 9.9006 -0.00000 + 43 10.2749 0.00000 + 44 10.6372 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2783 2.00000 + 2 1.7145 2.00000 + 3 1.8649 2.00000 + 4 1.9174 2.00000 + 5 2.1225 2.00000 + 6 2.2890 2.00000 + 7 2.3653 2.00000 + 8 2.5634 2.00000 + 9 2.5673 2.00000 + 10 2.8274 2.00000 + 11 2.9718 2.00000 + 12 3.0688 2.00000 + 13 3.2620 2.00000 + 14 3.4315 2.00000 + 15 3.5101 2.00000 + 16 3.6791 2.00000 + 17 3.7129 2.00000 + 18 3.8199 2.00005 + 19 3.9348 2.00115 + 20 4.3463 1.83315 + 21 5.7435 -0.00000 + 22 5.9122 -0.00000 + 23 6.1097 -0.00000 + 24 6.3005 -0.00000 + 25 6.8144 -0.00000 + 26 6.8311 -0.00000 + 27 6.8968 -0.00000 + 28 7.2326 -0.00000 + 29 7.4820 -0.00000 + 30 7.7051 -0.00000 + 31 7.7500 -0.00000 + 32 7.8928 -0.00000 + 33 8.2253 -0.00000 + 34 8.4337 -0.00000 + 35 9.0639 -0.00000 + 36 9.1725 -0.00000 + 37 9.3545 -0.00000 + 38 9.4336 -0.00000 + 39 9.6144 -0.00000 + 40 9.9699 0.00000 + 41 10.2226 0.00000 + 42 10.2665 0.00000 + 43 10.4405 0.00000 + 44 10.7707 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3772 2.00000 + 2 1.5210 2.00000 + 3 1.9614 2.00000 + 4 2.0201 2.00000 + 5 2.1020 2.00000 + 6 2.1699 2.00000 + 7 2.2323 2.00000 + 8 2.3777 2.00000 + 9 2.6585 2.00000 + 10 2.7936 2.00000 + 11 2.9430 2.00000 + 12 3.0767 2.00000 + 13 3.5029 2.00000 + 14 3.6628 2.00000 + 15 3.6970 2.00000 + 16 3.7310 2.00000 + 17 3.8289 2.00007 + 18 3.8967 2.00044 + 19 4.0216 2.00748 + 20 4.2471 2.06410 + 21 5.5695 -0.00000 + 22 5.7752 -0.00000 + 23 5.7979 -0.00000 + 24 5.9193 -0.00000 + 25 6.6291 -0.00000 + 26 6.6584 -0.00000 + 27 6.8579 -0.00000 + 28 7.1207 -0.00000 + 29 7.5331 -0.00000 + 30 7.6484 -0.00000 + 31 7.8551 -0.00000 + 32 8.0014 -0.00000 + 33 8.0210 -0.00000 + 34 8.3378 -0.00000 + 35 9.2877 -0.00000 + 36 9.4173 -0.00000 + 37 9.4388 -0.00000 + 38 9.5749 -0.00000 + 39 9.7389 -0.00000 + 40 10.1834 0.00000 + 41 10.1850 0.00000 + 42 10.3850 0.00000 + 43 10.8304 0.00000 + 44 11.1277 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2385 2.00000 + 2 1.5860 2.00000 + 3 1.8768 2.00000 + 4 2.2524 2.00000 + 5 2.2960 2.00000 + 6 2.3307 2.00000 + 7 2.3375 2.00000 + 8 2.5920 2.00000 + 9 2.6895 2.00000 + 10 2.8999 2.00000 + 11 2.9430 2.00000 + 12 3.0768 2.00000 + 13 3.2474 2.00000 + 14 3.2726 2.00000 + 15 3.2758 2.00000 + 16 3.3263 2.00000 + 17 3.4593 2.00000 + 18 3.6755 2.00000 + 19 3.6896 2.00000 + 20 4.1565 2.05153 + 21 6.1380 -0.00000 + 22 6.3790 -0.00000 + 23 6.5140 -0.00000 + 24 6.8029 -0.00000 + 25 6.9934 -0.00000 + 26 7.1107 -0.00000 + 27 7.3911 -0.00000 + 28 7.5348 -0.00000 + 29 7.5627 -0.00000 + 30 7.6008 -0.00000 + 31 7.6397 -0.00000 + 32 8.1100 -0.00000 + 33 8.1988 -0.00000 + 34 8.2074 -0.00000 + 35 8.7969 -0.00000 + 36 9.0650 -0.00000 + 37 9.3037 -0.00000 + 38 9.4219 -0.00000 + 39 9.4890 -0.00000 + 40 9.6168 -0.00000 + 41 9.9061 -0.00000 + 42 10.0557 0.00000 + 43 10.0610 0.00000 + 44 10.7368 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2575 2.00000 + 2 1.6056 2.00000 + 3 1.8965 2.00000 + 4 1.9997 2.00000 + 5 2.2873 2.00000 + 6 2.3361 2.00000 + 7 2.3665 2.00000 + 8 2.6374 2.00000 + 9 2.6644 2.00000 + 10 2.9766 2.00000 + 11 3.0022 2.00000 + 12 3.0499 2.00000 + 13 3.1144 2.00000 + 14 3.2582 2.00000 + 15 3.3908 2.00000 + 16 3.5401 2.00000 + 17 3.5641 2.00000 + 18 3.6339 2.00000 + 19 3.7355 2.00000 + 20 4.1639 2.05492 + 21 6.0616 -0.00000 + 22 6.1176 -0.00000 + 23 6.4190 -0.00000 + 24 6.6271 -0.00000 + 25 6.7757 -0.00000 + 26 7.0606 -0.00000 + 27 7.2905 -0.00000 + 28 7.3754 -0.00000 + 29 7.5547 -0.00000 + 30 7.7114 -0.00000 + 31 7.7630 -0.00000 + 32 8.1737 -0.00000 + 33 8.3201 -0.00000 + 34 8.4067 -0.00000 + 35 8.7208 -0.00000 + 36 9.0896 -0.00000 + 37 9.1639 -0.00000 + 38 9.5496 -0.00000 + 39 9.5669 -0.00000 + 40 9.6526 -0.00000 + 41 10.0495 0.00000 + 42 10.2032 0.00000 + 43 10.2226 0.00000 + 44 10.7113 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3154 2.00000 + 2 1.6649 2.00000 + 3 1.7525 2.00000 + 4 1.9560 2.00000 + 5 2.1038 2.00000 + 6 2.3475 2.00000 + 7 2.3776 2.00000 + 8 2.4419 2.00000 + 9 2.7785 2.00000 + 10 2.8413 2.00000 + 11 3.0321 2.00000 + 12 3.1983 2.00000 + 13 3.3314 2.00000 + 14 3.4201 2.00000 + 15 3.5169 2.00000 + 16 3.5537 2.00000 + 17 3.6959 2.00000 + 18 3.7693 2.00001 + 19 3.8625 2.00017 + 20 4.1721 2.05848 + 21 5.6871 -0.00000 + 22 5.8624 -0.00000 + 23 6.0896 -0.00000 + 24 6.1009 -0.00000 + 25 6.7931 -0.00000 + 26 6.8758 -0.00000 + 27 7.0129 -0.00000 + 28 7.4714 -0.00000 + 29 7.5229 -0.00000 + 30 7.7152 -0.00000 + 31 7.8379 -0.00000 + 32 8.1155 -0.00000 + 33 8.2725 -0.00000 + 34 8.6110 -0.00000 + 35 8.9466 -0.00000 + 36 9.1852 -0.00000 + 37 9.3066 -0.00000 + 38 9.6215 -0.00000 + 39 9.6560 -0.00000 + 40 9.8045 -0.00000 + 41 10.2010 0.00000 + 42 10.3790 0.00000 + 43 10.5258 0.00000 + 44 10.8056 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4146 2.00000 + 2 1.5588 2.00000 + 3 1.7657 2.00000 + 4 1.9106 2.00000 + 5 2.0586 2.00000 + 6 2.2025 2.00000 + 7 2.4479 2.00000 + 8 2.5262 2.00000 + 9 2.5950 2.00000 + 10 2.6666 2.00000 + 11 3.2026 2.00000 + 12 3.3085 2.00000 + 13 3.5020 2.00000 + 14 3.5871 2.00000 + 15 3.6175 2.00000 + 16 3.6641 2.00000 + 17 3.7118 2.00000 + 18 3.8725 2.00023 + 19 3.9861 2.00368 + 20 4.1338 2.04111 + 21 5.4820 -0.00000 + 22 5.6749 -0.00000 + 23 5.7298 -0.00000 + 24 5.7333 -0.00000 + 25 6.7563 -0.00000 + 26 6.8257 -0.00000 + 27 6.8491 -0.00000 + 28 7.4936 -0.00000 + 29 7.5684 -0.00000 + 30 7.6574 -0.00000 + 31 7.9165 -0.00000 + 32 8.0533 -0.00000 + 33 8.0579 -0.00000 + 34 8.6299 -0.00000 + 35 9.2516 -0.00000 + 36 9.3718 -0.00000 + 37 9.5062 -0.00000 + 38 9.6345 -0.00000 + 39 9.6680 -0.00000 + 40 9.9712 0.00000 + 41 10.2613 0.00000 + 42 10.4041 0.00000 + 43 10.6564 0.00000 + 44 10.8280 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3132 2.00000 + 2 1.4281 2.00000 + 3 1.9623 2.00000 + 4 2.0918 2.00000 + 5 2.3504 2.00000 + 6 2.4087 2.00000 + 7 2.4548 2.00000 + 8 2.5196 2.00000 + 9 2.6866 2.00000 + 10 2.9847 2.00000 + 11 3.0100 2.00000 + 12 3.0402 2.00000 + 13 3.1049 2.00000 + 14 3.2025 2.00000 + 15 3.4417 2.00000 + 16 3.4750 2.00000 + 17 3.5277 2.00000 + 18 3.6447 2.00000 + 19 3.6613 2.00000 + 20 3.8280 2.00006 + 21 6.2242 -0.00000 + 22 6.3339 -0.00000 + 23 6.5716 -0.00000 + 24 6.6277 -0.00000 + 25 6.7429 -0.00000 + 26 6.7755 -0.00000 + 27 7.4917 -0.00000 + 28 7.5472 -0.00000 + 29 7.7886 -0.00000 + 30 7.8113 -0.00000 + 31 7.8970 -0.00000 + 32 7.9972 -0.00000 + 33 8.5148 -0.00000 + 34 8.5164 -0.00000 + 35 8.7058 -0.00000 + 36 9.1333 -0.00000 + 37 9.1785 -0.00000 + 38 9.2843 -0.00000 + 39 9.5383 -0.00000 + 40 9.6746 -0.00000 + 41 9.7739 -0.00000 + 42 10.0637 0.00000 + 43 10.5622 0.00000 + 44 10.7734 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3324 2.00000 + 2 1.4475 2.00000 + 3 1.9821 2.00000 + 4 2.0750 2.00000 + 5 2.1130 2.00000 + 6 2.1908 2.00000 + 7 2.6624 2.00000 + 8 2.7275 2.00000 + 9 2.7503 2.00000 + 10 2.8473 2.00000 + 11 2.8593 2.00000 + 12 3.0793 2.00000 + 13 3.2690 2.00000 + 14 3.3800 2.00000 + 15 3.3919 2.00000 + 16 3.4875 2.00000 + 17 3.6004 2.00000 + 18 3.6567 2.00000 + 19 3.6886 2.00000 + 20 3.8430 2.00010 + 21 6.1193 -0.00000 + 22 6.1499 -0.00000 + 23 6.3007 -0.00000 + 24 6.3815 -0.00000 + 25 6.7759 -0.00000 + 26 6.8818 -0.00000 + 27 7.3672 -0.00000 + 28 7.3789 -0.00000 + 29 7.7714 -0.00000 + 30 7.8604 -0.00000 + 31 7.9858 -0.00000 + 32 8.1669 -0.00000 + 33 8.4663 -0.00000 + 34 8.6342 -0.00000 + 35 8.7239 -0.00000 + 36 9.1715 -0.00000 + 37 9.2494 -0.00000 + 38 9.2773 -0.00000 + 39 9.6029 -0.00000 + 40 9.7920 -0.00000 + 41 9.8649 -0.00000 + 42 10.1266 0.00000 + 43 10.5588 0.00000 + 44 10.7178 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3907 2.00000 + 2 1.5064 2.00000 + 3 1.8292 2.00000 + 4 1.9455 2.00000 + 5 2.0431 2.00000 + 6 2.1729 2.00000 + 7 2.4785 2.00000 + 8 2.6103 2.00000 + 9 2.7651 2.00000 + 10 3.0733 2.00000 + 11 3.1336 2.00000 + 12 3.1759 2.00000 + 13 3.2329 2.00000 + 14 3.4063 2.00000 + 15 3.5557 2.00000 + 16 3.6164 2.00000 + 17 3.6400 2.00000 + 18 3.7767 2.00001 + 19 3.7837 2.00002 + 20 3.8873 2.00035 + 21 5.7178 -0.00000 + 22 5.8323 -0.00000 + 23 5.9189 -0.00000 + 24 5.9790 -0.00000 + 25 6.8316 -0.00000 + 26 6.8627 -0.00000 + 27 7.1764 -0.00000 + 28 7.3316 -0.00000 + 29 7.7705 -0.00000 + 30 7.8770 -0.00000 + 31 7.9755 -0.00000 + 32 8.2260 -0.00000 + 33 8.4526 -0.00000 + 34 8.6992 -0.00000 + 35 8.9059 -0.00000 + 36 9.2604 -0.00000 + 37 9.3465 -0.00000 + 38 9.4248 -0.00000 + 39 9.7183 -0.00000 + 40 9.9327 0.00000 + 41 10.0323 0.00000 + 42 10.3161 0.00000 + 43 10.5341 0.00000 + 44 10.8266 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4905 2.00000 + 2 1.6068 2.00000 + 3 1.6354 2.00000 + 4 1.7523 2.00000 + 5 2.1443 2.00000 + 6 2.2745 2.00000 + 7 2.2903 2.00000 + 8 2.4222 2.00000 + 9 2.8589 2.00000 + 10 2.9885 2.00000 + 11 3.1975 2.00000 + 12 3.3014 2.00000 + 13 3.4635 2.00000 + 14 3.5529 2.00000 + 15 3.5795 2.00000 + 16 3.6887 2.00000 + 17 3.7032 2.00000 + 18 3.8685 2.00021 + 19 3.8807 2.00029 + 20 3.9476 2.00156 + 21 5.4560 -0.00000 + 22 5.5375 -0.00000 + 23 5.6189 -0.00000 + 24 5.6521 -0.00000 + 25 6.8292 -0.00000 + 26 6.8563 -0.00000 + 27 7.0774 -0.00000 + 28 7.3385 -0.00000 + 29 7.8078 -0.00000 + 30 7.8959 -0.00000 + 31 7.9300 -0.00000 + 32 8.0637 -0.00000 + 33 8.4532 -0.00000 + 34 8.9199 -0.00000 + 35 8.9666 -0.00000 + 36 9.1961 -0.00000 + 37 9.4999 -0.00000 + 38 9.5638 -0.00000 + 39 9.7660 -0.00000 + 40 9.9293 0.00000 + 41 10.1981 0.00000 + 42 10.4928 0.00000 + 43 10.5975 0.00000 + 44 10.8530 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3656 2.00000 + 2 1.5756 2.00000 + 3 1.9779 2.00000 + 4 2.2069 2.00000 + 5 2.2346 2.00000 + 6 2.3965 2.00000 + 7 2.4478 2.00000 + 8 2.5206 2.00000 + 9 2.6253 2.00000 + 10 2.6493 2.00000 + 11 2.9661 2.00000 + 12 3.0379 2.00000 + 13 3.1761 2.00000 + 14 3.1985 2.00000 + 15 3.2259 2.00000 + 16 3.2413 2.00000 + 17 3.3868 2.00000 + 18 3.4103 2.00000 + 19 3.9157 2.00072 + 20 4.1899 2.06531 + 21 6.3778 -0.00000 + 22 6.5927 -0.00000 + 23 6.8387 -0.00000 + 24 7.1285 -0.00000 + 25 7.2195 -0.00000 + 26 7.2392 -0.00000 + 27 7.2502 -0.00000 + 28 7.3961 -0.00000 + 29 7.7495 -0.00000 + 30 7.7853 -0.00000 + 31 7.7991 -0.00000 + 32 8.0607 -0.00000 + 33 8.2164 -0.00000 + 34 8.4443 -0.00000 + 35 8.7191 -0.00000 + 36 9.0820 -0.00000 + 37 9.1685 -0.00000 + 38 9.3687 -0.00000 + 39 9.4782 -0.00000 + 40 9.4845 -0.00000 + 41 9.5094 -0.00000 + 42 9.6482 -0.00000 + 43 9.6611 -0.00000 + 44 9.9300 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3848 2.00000 + 2 1.5950 2.00000 + 3 1.9976 2.00000 + 4 2.1235 2.00000 + 5 2.2380 2.00000 + 6 2.2480 2.00000 + 7 2.3507 2.00000 + 8 2.4987 2.00000 + 9 2.7195 2.00000 + 10 2.7959 2.00000 + 11 2.9212 2.00000 + 12 2.9483 2.00000 + 13 3.0357 2.00000 + 14 3.1819 2.00000 + 15 3.3074 2.00000 + 16 3.4768 2.00000 + 17 3.4786 2.00000 + 18 3.6079 2.00000 + 19 3.9409 2.00133 + 20 4.2006 2.06841 + 21 6.2316 -0.00000 + 22 6.3017 -0.00000 + 23 6.6314 -0.00000 + 24 6.7778 -0.00000 + 25 7.0863 -0.00000 + 26 7.1146 -0.00000 + 27 7.2866 -0.00000 + 28 7.3418 -0.00000 + 29 7.7219 -0.00000 + 30 7.7466 -0.00000 + 31 8.0508 -0.00000 + 32 8.2850 -0.00000 + 33 8.3236 -0.00000 + 34 8.6080 -0.00000 + 35 8.7019 -0.00000 + 36 8.9937 -0.00000 + 37 9.0336 -0.00000 + 38 9.3337 -0.00000 + 39 9.3867 -0.00000 + 40 9.6412 -0.00000 + 41 9.7102 -0.00000 + 42 9.7697 -0.00000 + 43 9.9519 0.00000 + 44 10.1328 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4432 2.00000 + 2 1.6538 2.00000 + 3 1.8815 2.00000 + 4 2.0503 2.00000 + 5 2.0996 2.00000 + 6 2.2931 2.00000 + 7 2.3215 2.00000 + 8 2.4923 2.00000 + 9 2.5571 2.00000 + 10 2.7165 2.00000 + 11 2.7393 2.00000 + 12 2.9595 2.00000 + 13 3.2238 2.00000 + 14 3.3601 2.00000 + 15 3.5902 2.00000 + 16 3.6974 2.00000 + 17 3.7286 2.00000 + 18 3.7757 2.00001 + 19 4.0093 2.00590 + 20 4.2164 2.07083 + 21 5.8438 -0.00000 + 22 5.9042 -0.00000 + 23 6.1770 -0.00000 + 24 6.2479 -0.00000 + 25 6.9605 -0.00000 + 26 7.0114 -0.00000 + 27 7.0845 -0.00000 + 28 7.1872 -0.00000 + 29 7.7452 -0.00000 + 30 7.7774 -0.00000 + 31 8.1488 -0.00000 + 32 8.1875 -0.00000 + 33 8.4565 -0.00000 + 34 8.8451 -0.00000 + 35 9.0025 -0.00000 + 36 9.0059 -0.00000 + 37 9.1439 -0.00000 + 38 9.3668 -0.00000 + 39 9.3707 -0.00000 + 40 9.7084 -0.00000 + 41 10.0367 0.00000 + 42 10.0792 0.00000 + 43 10.3663 0.00000 + 44 10.5669 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5431 2.00000 + 2 1.6879 2.00000 + 3 1.7539 2.00000 + 4 1.8981 2.00000 + 5 2.1611 2.00000 + 6 2.3050 2.00000 + 7 2.3910 2.00000 + 8 2.4201 2.00000 + 9 2.5316 2.00000 + 10 2.5613 2.00000 + 11 2.6596 2.00000 + 12 2.7965 2.00000 + 13 3.5874 2.00000 + 14 3.6504 2.00000 + 15 3.7388 2.00000 + 16 3.7629 2.00001 + 17 3.9049 2.00055 + 18 3.9732 2.00279 + 19 4.0192 2.00715 + 20 4.1675 2.05648 + 21 5.6078 -0.00000 + 22 5.6881 -0.00000 + 23 5.7775 -0.00000 + 24 5.8291 -0.00000 + 25 6.8590 -0.00000 + 26 6.9019 -0.00000 + 27 6.9674 -0.00000 + 28 7.0837 -0.00000 + 29 7.8068 -0.00000 + 30 7.8528 -0.00000 + 31 7.9673 -0.00000 + 32 7.9893 -0.00000 + 33 8.6156 -0.00000 + 34 8.8866 -0.00000 + 35 9.1774 -0.00000 + 36 9.1958 -0.00000 + 37 9.3382 -0.00000 + 38 9.3535 -0.00000 + 39 9.4560 -0.00000 + 40 9.6463 -0.00000 + 41 10.3404 0.00000 + 42 10.5574 0.00000 + 43 10.6204 0.00000 + 44 10.9352 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4042 2.00000 + 2 1.6163 2.00000 + 3 1.7671 2.00000 + 4 1.9941 2.00000 + 5 2.4466 2.00000 + 6 2.4882 2.00000 + 7 2.5194 2.00000 + 8 2.6555 2.00000 + 9 2.7105 2.00000 + 10 2.8106 2.00000 + 11 2.8152 2.00000 + 12 2.8586 2.00000 + 13 3.0108 2.00000 + 14 3.0552 2.00000 + 15 3.3808 2.00000 + 16 3.4284 2.00000 + 17 3.5212 2.00000 + 18 3.5479 2.00000 + 19 3.6813 2.00000 + 20 3.9459 2.00150 + 21 6.4156 -0.00000 + 22 6.5673 -0.00000 + 23 6.6276 -0.00000 + 24 6.8476 -0.00000 + 25 7.2696 -0.00000 + 26 7.3005 -0.00000 + 27 7.4894 -0.00000 + 28 7.5500 -0.00000 + 29 7.6279 -0.00000 + 30 7.6306 -0.00000 + 31 7.7866 -0.00000 + 32 7.9938 -0.00000 + 33 8.3619 -0.00000 + 34 8.7084 -0.00000 + 35 8.8421 -0.00000 + 36 9.0637 -0.00000 + 37 9.2262 -0.00000 + 38 9.2488 -0.00000 + 39 9.5261 -0.00000 + 40 9.7097 -0.00000 + 41 9.8175 -0.00000 + 42 9.8433 -0.00000 + 43 9.8532 -0.00000 + 44 10.1784 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4235 2.00000 + 2 1.6357 2.00000 + 3 1.7870 2.00000 + 4 2.0134 2.00000 + 5 2.1701 2.00000 + 6 2.3710 2.00000 + 7 2.5250 2.00000 + 8 2.5773 2.00000 + 9 2.7310 2.00000 + 10 2.7740 2.00000 + 11 2.9028 2.00000 + 12 3.0152 2.00000 + 13 3.1437 2.00000 + 14 3.2311 2.00000 + 15 3.3084 2.00000 + 16 3.4050 2.00000 + 17 3.5940 2.00000 + 18 3.6544 2.00000 + 19 3.7159 2.00000 + 20 3.9616 2.00216 + 21 6.2327 -0.00000 + 22 6.2413 -0.00000 + 23 6.5416 -0.00000 + 24 6.6110 -0.00000 + 25 7.0907 -0.00000 + 26 7.1027 -0.00000 + 27 7.4753 -0.00000 + 28 7.5102 -0.00000 + 29 7.7404 -0.00000 + 30 7.8435 -0.00000 + 31 7.9330 -0.00000 + 32 8.0879 -0.00000 + 33 8.4129 -0.00000 + 34 8.6751 -0.00000 + 35 8.8432 -0.00000 + 36 9.0735 -0.00000 + 37 9.1539 -0.00000 + 38 9.3044 -0.00000 + 39 9.6374 -0.00000 + 40 9.7374 -0.00000 + 41 9.7658 -0.00000 + 42 9.9737 0.00000 + 43 10.1681 0.00000 + 44 10.3165 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4822 2.00000 + 2 1.6947 2.00000 + 3 1.8471 2.00000 + 4 1.9211 2.00000 + 5 2.0764 2.00000 + 6 2.1334 2.00000 + 7 2.2897 2.00000 + 8 2.5129 2.00000 + 9 2.6255 2.00000 + 10 2.8592 2.00000 + 11 3.0030 2.00000 + 12 3.1725 2.00000 + 13 3.2939 2.00000 + 14 3.3864 2.00000 + 15 3.4949 2.00000 + 16 3.5771 2.00000 + 17 3.7194 2.00000 + 18 3.7483 2.00000 + 19 3.8291 2.00007 + 20 4.0025 2.00515 + 21 5.7856 -0.00000 + 22 5.8599 -0.00000 + 23 6.0848 -0.00000 + 24 6.0898 -0.00000 + 25 7.0790 -0.00000 + 26 7.0973 -0.00000 + 27 7.2566 -0.00000 + 28 7.4154 -0.00000 + 29 7.7888 -0.00000 + 30 7.8489 -0.00000 + 31 8.1140 -0.00000 + 32 8.2119 -0.00000 + 33 8.4046 -0.00000 + 34 8.7664 -0.00000 + 35 8.9526 -0.00000 + 36 9.1377 -0.00000 + 37 9.2159 -0.00000 + 38 9.3862 -0.00000 + 39 9.6799 -0.00000 + 40 9.8730 -0.00000 + 41 9.9037 -0.00000 + 42 10.1046 0.00000 + 43 10.5095 0.00000 + 44 10.7218 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5824 2.00000 + 2 1.7277 2.00000 + 3 1.7949 2.00000 + 4 1.9328 2.00000 + 5 1.9575 2.00000 + 6 2.0977 2.00000 + 7 2.1769 2.00000 + 8 2.3240 2.00000 + 9 2.7184 2.00000 + 10 2.8486 2.00000 + 11 2.9504 2.00000 + 12 3.0699 2.00000 + 13 3.5874 2.00000 + 14 3.6406 2.00000 + 15 3.6782 2.00000 + 16 3.7047 2.00000 + 17 3.7824 2.00002 + 18 3.8963 2.00044 + 19 3.9033 2.00053 + 20 4.0207 2.00736 + 21 5.5119 -0.00000 + 22 5.5807 -0.00000 + 23 5.6711 -0.00000 + 24 5.6791 -0.00000 + 25 7.0699 -0.00000 + 26 7.1166 -0.00000 + 27 7.1253 -0.00000 + 28 7.3668 -0.00000 + 29 7.8022 -0.00000 + 30 7.8748 -0.00000 + 31 8.0447 -0.00000 + 32 8.0604 -0.00000 + 33 8.4313 -0.00000 + 34 8.9892 -0.00000 + 35 9.0606 -0.00000 + 36 9.3042 -0.00000 + 37 9.3419 -0.00000 + 38 9.4908 -0.00000 + 39 9.5354 -0.00000 + 40 9.7652 -0.00000 + 41 10.1226 0.00000 + 42 10.3364 0.00000 + 43 10.6440 0.00000 + 44 10.8893 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4826 2.00000 + 2 1.6028 2.00000 + 3 1.6985 2.00000 + 4 1.8239 2.00000 + 5 2.5207 2.00000 + 6 2.5682 2.00000 + 7 2.6211 2.00000 + 8 2.6753 2.00000 + 9 2.7327 2.00000 + 10 2.7815 2.00000 + 11 2.8576 2.00000 + 12 2.8883 2.00000 + 13 2.9600 2.00000 + 14 3.1884 2.00000 + 15 3.3195 2.00000 + 16 3.5096 2.00000 + 17 3.5622 2.00000 + 18 3.5996 2.00000 + 19 3.6011 2.00000 + 20 3.6022 2.00000 + 21 6.4622 -0.00000 + 22 6.5022 -0.00000 + 23 6.5586 -0.00000 + 24 6.6412 -0.00000 + 25 7.0976 -0.00000 + 26 7.1237 -0.00000 + 27 7.4592 -0.00000 + 28 7.5222 -0.00000 + 29 7.9246 -0.00000 + 30 7.9478 -0.00000 + 31 7.9708 -0.00000 + 32 8.0055 -0.00000 + 33 8.5083 -0.00000 + 34 8.6980 -0.00000 + 35 8.8115 -0.00000 + 36 8.9403 -0.00000 + 37 9.2580 -0.00000 + 38 9.3930 -0.00000 + 39 9.4272 -0.00000 + 40 9.5399 -0.00000 + 41 10.2189 0.00000 + 42 10.3422 0.00000 + 43 10.3947 0.00000 + 44 10.5560 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5021 2.00000 + 2 1.6224 2.00000 + 3 1.7182 2.00000 + 4 1.8437 2.00000 + 5 2.2482 2.00000 + 6 2.3656 2.00000 + 7 2.4622 2.00000 + 8 2.5841 2.00000 + 9 2.8856 2.00000 + 10 2.8941 2.00000 + 11 3.0048 2.00000 + 12 3.1335 2.00000 + 13 3.1364 2.00000 + 14 3.2348 2.00000 + 15 3.3701 2.00000 + 16 3.4307 2.00000 + 17 3.5632 2.00000 + 18 3.6091 2.00000 + 19 3.6111 2.00000 + 20 3.6329 2.00000 + 21 6.2511 -0.00000 + 22 6.2599 -0.00000 + 23 6.3820 -0.00000 + 24 6.4040 -0.00000 + 25 7.1227 -0.00000 + 26 7.1596 -0.00000 + 27 7.4357 -0.00000 + 28 7.4807 -0.00000 + 29 7.9458 -0.00000 + 30 7.9583 -0.00000 + 31 8.0162 -0.00000 + 32 8.0705 -0.00000 + 33 8.6233 -0.00000 + 34 8.6668 -0.00000 + 35 8.8303 -0.00000 + 36 9.0613 -0.00000 + 37 9.2908 -0.00000 + 38 9.3537 -0.00000 + 39 9.5204 -0.00000 + 40 9.6058 -0.00000 + 41 10.2228 0.00000 + 42 10.3344 0.00000 + 43 10.4920 0.00000 + 44 10.6636 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5612 2.00000 + 2 1.6818 2.00000 + 3 1.7781 2.00000 + 4 1.9032 2.00000 + 5 2.0035 2.00000 + 6 2.1231 2.00000 + 7 2.2211 2.00000 + 8 2.3462 2.00000 + 9 2.9607 2.00000 + 10 3.1432 2.00000 + 11 3.2441 2.00000 + 12 3.2572 2.00000 + 13 3.3575 2.00000 + 14 3.3970 2.00000 + 15 3.4827 2.00000 + 16 3.5004 2.00000 + 17 3.5600 2.00000 + 18 3.6542 2.00000 + 19 3.6609 2.00000 + 20 3.7029 2.00000 + 21 5.7947 -0.00000 + 22 5.8566 -0.00000 + 23 5.9181 -0.00000 + 24 5.9597 -0.00000 + 25 7.1932 -0.00000 + 26 7.2063 -0.00000 + 27 7.4102 -0.00000 + 28 7.4851 -0.00000 + 29 7.8933 -0.00000 + 30 7.9278 -0.00000 + 31 8.0048 -0.00000 + 32 8.1745 -0.00000 + 33 8.7129 -0.00000 + 34 8.7403 -0.00000 + 35 8.9487 -0.00000 + 36 9.1688 -0.00000 + 37 9.3454 -0.00000 + 38 9.3662 -0.00000 + 39 9.5978 -0.00000 + 40 9.6552 -0.00000 + 41 10.3110 0.00000 + 42 10.4405 0.00000 + 43 10.6229 0.00000 + 44 10.8242 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6619 2.00000 + 2 1.7826 2.00000 + 3 1.8077 2.00000 + 4 1.8777 2.00000 + 5 1.9319 2.00000 + 6 2.0066 2.00000 + 7 2.0277 2.00000 + 8 2.1539 2.00000 + 9 3.0454 2.00000 + 10 3.1531 2.00000 + 11 3.2449 2.00000 + 12 3.2983 2.00000 + 13 3.4552 2.00000 + 14 3.4929 2.00000 + 15 3.5435 2.00000 + 16 3.6169 2.00000 + 17 3.7179 2.00000 + 18 3.7961 2.00002 + 19 3.8244 2.00006 + 20 3.8319 2.00007 + 21 5.4702 -0.00000 + 22 5.5193 -0.00000 + 23 5.5378 -0.00000 + 24 5.5737 -0.00000 + 25 7.2207 -0.00000 + 26 7.2501 -0.00000 + 27 7.4020 -0.00000 + 28 7.5365 -0.00000 + 29 7.8717 -0.00000 + 30 7.9267 -0.00000 + 31 7.9573 -0.00000 + 32 8.1067 -0.00000 + 33 8.6563 -0.00000 + 34 8.9279 -0.00000 + 35 9.1014 -0.00000 + 36 9.1448 -0.00000 + 37 9.3961 -0.00000 + 38 9.4459 -0.00000 + 39 9.5379 -0.00000 + 40 9.6024 -0.00000 + 41 10.4070 0.00000 + 42 10.5739 0.00000 + 43 10.7214 0.00000 + 44 10.9079 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.014 0.045 0.015 + -0.004 -0.014 -0.240 -0.001 0.002 + 0.012 0.045 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.388 -0.037 0.038 -0.112 -0.039 + -0.037 0.001 -0.002 0.003 0.002 + 0.038 -0.002 0.222 -0.007 0.011 + -0.112 0.003 -0.007 0.139 0.002 + -0.039 0.002 0.011 0.002 0.210 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1724: real time 0.1724 + FORLOC: cpu time 0.0095: real time 0.0095 + FORNL : cpu time 12.7017: real time 12.7029 + STRESS: cpu time 4.9434: real time 4.9438 + FORCOR: cpu time 0.0347: real time 0.0347 + FORHAR: cpu time 0.0251: real time 0.0251 + MIXING: cpu time 0.0043: real time 0.0043 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.67694 14.67694 14.67694 + Ewald -143.55482 -148.59364 -130.73220 0.00000 0.00000 -0.00000 + Hartree 1.18588 0.69390 1.06194 -0.00000 -0.00000 0.00000 + E(xc) -108.56774 -108.99913 -107.81701 0.00000 0.00000 -0.00000 + Local 7.62567 2.28012 11.58265 0.00000 0.00000 -0.00000 + n-local 130.48628 131.11113 128.06724 0.01923 0.07431 -0.21302 + augment 7.40398 7.55091 7.07925 -0.00000 -0.00000 0.00000 + Kinetic 215.74968 225.88927 200.82473 0.07209 -1.13042 -0.90174 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 125.00587 124.60949 124.74353 0.00000 0.00000 0.00000 + in kB 701.30233 699.07858 699.83055 0.00000 0.00000 0.00000 + external pressure = 0.07 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.59 + direct lattice vectors reciprocal lattice vectors + 6.884576760 0.000000000 0.000000000 0.145252212 0.000000000 0.000000000 + 0.000000000 8.171094924 0.000000000 0.000000000 0.122382619 0.000000000 + 0.000000000 0.000000000 5.076661641 0.000000000 0.000000000 0.196979840 + + length of vectors + 6.884576760 8.171094924 5.076661641 0.145252212 0.122382619 0.196979840 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.235E-01 0.872E-01 -.253E+00 -.451E+00 0.365E+00 -.119E+01 0.467E+00 -.448E+00 0.142E+01 0.373E-06 -.703E-07 0.797E-06 + 0.235E-01 -.872E-01 -.253E+00 0.451E+00 -.365E+00 -.119E+01 -.467E+00 0.448E+00 0.142E+01 -.373E-06 0.704E-07 0.797E-06 + -.235E-01 -.872E-01 -.253E+00 -.451E+00 -.365E+00 -.119E+01 0.467E+00 0.448E+00 0.142E+01 0.373E-06 0.704E-07 0.797E-06 + 0.235E-01 0.872E-01 -.253E+00 0.451E+00 0.365E+00 -.119E+01 -.467E+00 -.448E+00 0.142E+01 -.373E-06 -.704E-07 0.797E-06 + -.235E-01 0.872E-01 -.253E+00 -.451E+00 0.365E+00 -.119E+01 0.467E+00 -.448E+00 0.142E+01 0.373E-06 -.704E-07 0.797E-06 + 0.235E-01 -.872E-01 -.253E+00 0.451E+00 -.365E+00 -.119E+01 -.467E+00 0.448E+00 0.142E+01 -.373E-06 0.704E-07 0.797E-06 + -.235E-01 -.872E-01 -.253E+00 -.451E+00 -.365E+00 -.119E+01 0.467E+00 0.448E+00 0.142E+01 0.373E-06 0.704E-07 0.797E-06 + 0.235E-01 0.872E-01 -.253E+00 0.451E+00 0.365E+00 -.119E+01 -.467E+00 -.448E+00 0.142E+01 -.373E-06 -.703E-07 0.797E-06 + -.240E-01 -.249E-01 0.130E+00 -.395E-01 -.241E+00 0.736E+00 0.713E-01 0.262E+00 -.859E+00 0.469E-06 0.627E-06 0.203E-07 + 0.240E-01 0.249E-01 0.130E+00 0.395E-01 0.241E+00 0.736E+00 -.713E-01 -.262E+00 -.859E+00 -.469E-06 -.627E-06 0.203E-07 + -.240E-01 0.249E-01 0.130E+00 -.395E-01 0.241E+00 0.736E+00 0.713E-01 -.262E+00 -.859E+00 0.469E-06 -.627E-06 0.203E-07 + 0.240E-01 -.249E-01 0.130E+00 0.395E-01 -.241E+00 0.736E+00 -.713E-01 0.262E+00 -.859E+00 -.469E-06 0.627E-06 0.203E-07 + -.240E-01 -.249E-01 0.130E+00 -.395E-01 -.241E+00 0.736E+00 0.713E-01 0.262E+00 -.859E+00 0.469E-06 0.627E-06 0.203E-07 + 0.240E-01 0.249E-01 0.130E+00 0.395E-01 0.241E+00 0.736E+00 -.713E-01 -.262E+00 -.859E+00 -.469E-06 -.627E-06 0.203E-07 + -.240E-01 0.249E-01 0.130E+00 -.395E-01 0.241E+00 0.736E+00 0.713E-01 -.262E+00 -.859E+00 0.469E-06 -.627E-06 0.203E-07 + 0.240E-01 -.249E-01 0.130E+00 0.395E-01 -.241E+00 0.736E+00 -.713E-01 0.262E+00 -.859E+00 -.469E-06 0.627E-06 0.203E-07 + -.272E+00 -.169E+00 0.190E-01 -.657E+00 -.292E-01 0.706E-01 0.914E+00 0.199E+00 -.952E-01 0.173E-08 -.300E-06 -.103E-05 + 0.272E+00 0.169E+00 0.190E-01 0.657E+00 0.292E-01 0.706E-01 -.914E+00 -.199E+00 -.952E-01 -.173E-08 0.300E-06 -.103E-05 + -.272E+00 0.169E+00 0.190E-01 -.657E+00 0.292E-01 0.706E-01 0.914E+00 -.199E+00 -.952E-01 0.171E-08 0.300E-06 -.103E-05 + 0.272E+00 -.169E+00 0.190E-01 0.657E+00 -.292E-01 0.706E-01 -.914E+00 0.199E+00 -.952E-01 -.170E-08 -.300E-06 -.103E-05 + -.272E+00 -.169E+00 0.190E-01 -.657E+00 -.292E-01 0.706E-01 0.914E+00 0.199E+00 -.952E-01 0.173E-08 -.300E-06 -.103E-05 + 0.272E+00 0.169E+00 0.190E-01 0.657E+00 0.292E-01 0.706E-01 -.914E+00 -.199E+00 -.952E-01 -.173E-08 0.300E-06 -.103E-05 + -.272E+00 0.169E+00 0.190E-01 -.657E+00 0.292E-01 0.706E-01 0.914E+00 -.199E+00 -.952E-01 0.170E-08 0.300E-06 -.103E-05 + 0.272E+00 -.169E+00 0.190E-01 0.657E+00 -.292E-01 0.706E-01 -.914E+00 0.199E+00 -.952E-01 -.171E-08 -.300E-06 -.103E-05 + -.540E-01 -.658E-01 0.136E-01 -.208E+00 0.681E-01 0.496E-01 0.252E+00 -.200E-02 -.517E-01 -.590E-08 0.222E-06 0.966E-07 + 0.540E-01 0.658E-01 0.136E-01 0.208E+00 -.681E-01 0.496E-01 -.252E+00 0.200E-02 -.517E-01 0.590E-08 -.222E-06 0.966E-07 + -.540E-01 0.658E-01 0.136E-01 -.208E+00 -.681E-01 0.496E-01 0.252E+00 0.200E-02 -.517E-01 -.580E-08 -.222E-06 0.966E-07 + 0.540E-01 -.658E-01 0.136E-01 0.208E+00 0.681E-01 0.496E-01 -.252E+00 -.200E-02 -.517E-01 0.580E-08 0.222E-06 0.966E-07 + -.540E-01 -.658E-01 0.136E-01 -.208E+00 0.681E-01 0.496E-01 0.252E+00 -.200E-02 -.517E-01 -.590E-08 0.222E-06 0.966E-07 + 0.540E-01 0.658E-01 0.136E-01 0.208E+00 -.681E-01 0.496E-01 -.252E+00 0.200E-02 -.517E-01 0.590E-08 -.222E-06 0.966E-07 + -.540E-01 0.658E-01 0.136E-01 -.208E+00 -.681E-01 0.496E-01 0.252E+00 0.200E-02 -.517E-01 -.580E-08 -.222E-06 0.966E-07 + 0.540E-01 -.658E-01 0.136E-01 0.208E+00 0.681E-01 0.496E-01 -.252E+00 -.200E-02 -.517E-01 0.580E-08 0.222E-06 0.966E-07 + 0.375E-01 0.173E+00 0.998E-01 0.219E+00 -.156E+00 0.332E+00 -.244E+00 -.192E-01 -.426E+00 -.891E-06 0.314E-06 0.121E-06 + -.375E-01 -.173E+00 0.998E-01 -.219E+00 0.156E+00 0.332E+00 0.244E+00 0.192E-01 -.426E+00 0.891E-06 -.314E-06 0.121E-06 + 0.375E-01 -.173E+00 0.998E-01 0.219E+00 0.156E+00 0.332E+00 -.244E+00 0.192E-01 -.426E+00 -.891E-06 -.314E-06 0.121E-06 + -.375E-01 0.173E+00 0.998E-01 -.219E+00 -.156E+00 0.332E+00 0.244E+00 -.192E-01 -.426E+00 0.891E-06 0.314E-06 0.121E-06 + 0.375E-01 0.173E+00 0.998E-01 0.219E+00 -.156E+00 0.332E+00 -.244E+00 -.192E-01 -.426E+00 -.891E-06 0.314E-06 0.121E-06 + -.375E-01 -.173E+00 0.998E-01 -.219E+00 0.156E+00 0.332E+00 0.244E+00 0.192E-01 -.426E+00 0.891E-06 -.314E-06 0.121E-06 + 0.375E-01 -.173E+00 0.998E-01 0.219E+00 0.156E+00 0.332E+00 -.244E+00 0.192E-01 -.426E+00 -.891E-06 -.314E-06 0.121E-06 + -.375E-01 0.173E+00 0.998E-01 -.219E+00 -.156E+00 0.332E+00 0.244E+00 -.192E-01 -.426E+00 0.891E-06 0.314E-06 0.121E-06 + ----------------------------------------------------------------------------------------------- + -.288E-04 0.240E-04 0.754E-01 0.472E-15 -.705E-14 -.500E-15 0.305E-15 -.194E-15 -.764E-01 0.543E-12 0.106E-12 0.496E-07 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64135 0.95019 0.00056 -0.007592 0.004656 -0.018902 + 6.24323 7.22090 0.00056 0.007592 -0.004656 -0.018902 + 4.08364 3.13535 0.00056 -0.007592 -0.004656 -0.018902 + 2.80094 5.03574 0.00056 0.007592 0.004656 -0.018902 + 0.64135 5.03574 2.53889 -0.007592 0.004656 -0.018902 + 6.24323 3.13535 2.53889 0.007592 -0.004656 -0.018902 + 4.08364 7.22090 2.53889 -0.007592 -0.004656 -0.018902 + 2.80094 0.95019 2.53889 0.007592 0.004656 -0.018902 + 5.94229 7.37924 1.59165 0.007725 -0.003861 0.007617 + 0.94228 0.79186 1.59165 -0.007725 0.003861 0.007617 + 2.50000 4.87740 1.59165 0.007725 0.003861 0.007617 + 4.38457 3.29369 1.59165 -0.007725 -0.003861 0.007617 + 5.94229 3.29369 4.12998 0.007725 -0.003861 0.007617 + 0.94228 4.87740 4.12998 -0.007725 0.003861 0.007617 + 2.50000 0.79186 4.12998 0.007725 0.003861 0.007617 + 4.38457 7.37924 4.12998 -0.007725 -0.003861 0.007617 + 6.66329 0.95592 3.01613 -0.014709 0.001577 -0.005528 + 0.22128 7.21517 3.01613 0.014709 -0.001577 -0.005528 + 3.22101 3.12962 3.01613 -0.014709 -0.001577 -0.005528 + 3.66357 5.04147 3.01613 0.014709 0.001577 -0.005528 + 6.66329 5.04147 0.47779 -0.014709 0.001577 -0.005528 + 0.22128 3.12962 0.47779 0.014709 -0.001577 -0.005528 + 3.22101 7.21517 0.47779 -0.014709 -0.001577 -0.005528 + 3.66357 0.95592 0.47779 0.014709 0.001577 -0.005528 + 2.41738 2.19045 0.89434 -0.010477 0.000260 0.011510 + 4.46720 5.98065 0.89434 0.010477 -0.000260 0.011510 + 5.85966 1.89510 0.89434 -0.010477 -0.000260 0.011510 + 1.02491 6.27599 0.89434 0.010477 0.000260 0.011510 + 2.41738 6.27599 3.43267 -0.010477 0.000260 0.011510 + 4.46720 1.89510 3.43267 0.010477 -0.000260 0.011510 + 5.85966 5.98065 3.43267 -0.010477 -0.000260 0.011510 + 1.02491 2.19045 3.43267 0.010477 0.000260 0.011510 + 1.99820 7.44972 1.91321 0.012369 -0.002232 0.005303 + 4.88637 0.72138 1.91321 -0.012369 0.002232 0.005303 + 5.44049 4.80692 1.91321 0.012369 0.002232 0.005303 + 1.44408 3.36417 1.91321 -0.012369 -0.002232 0.005303 + 1.99820 3.36417 4.45155 0.012369 -0.002232 0.005303 + 4.88637 4.80692 4.45155 -0.012369 0.002232 0.005303 + 5.44049 0.72138 4.45155 0.012369 0.002232 0.005303 + 1.44408 7.44972 4.45155 -0.012369 -0.002232 0.005303 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.001039 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.85980028 eV + + energy without entropy= -16.86995406 energy(sigma->0) = -16.86318488 + enthalpy is TOTEN = 107.91393558 eV P V= 124.77373587 + + d Force = 0.1298210E-02[ 0.883E-03, 0.171E-02] d Energy = 0.1434174E-02-0.136E-03 + d Force = 0.4352230E-01[ 0.429E-01, 0.441E-01] d Ewald = 0.3627011E-02 0.399E-01 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0338: real time 0.0338 + + +-------------------------------------------------------------------------------------------------------- + + + Conjugate gradient step on ions: + trial-energy change: -0.001434 1 .order -0.001431 -0.001856 -0.001007 + (g-gl).g = 0.197E-02 g.g = 0.197E-02 gl.gl = 0.722E+00 + g(Force) = 0.182E-02 g(Stress)= 0.146E-03 ortho =-0.352E-05 + gamma = 0.00273 + trial = 0.94293 + opt step = 2.06047 (harmonic = 2.06047) maximal distance =0.00230637 + next E = 107.913342 (d E = -0.00203) + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0119: real time 0.0119 + FEWALD executed in parallel + FEWALD: cpu time 0.0019: real time 0.0029 + GENKIN: cpu time 0.0333: real time 0.0333 + ORTHCH: cpu time 0.6134: real time 0.6134 + LOOP+: cpu time 46.9665: real time 46.9782 + + +----------------------------------------- Iteration 6( 1) --------------------------------------- + + + POTLOK: cpu time 0.0258: real time 0.0258 + SETDIJ: cpu time 0.0068: real time 0.0068 + EDDAV: cpu time 4.7198: real time 4.7203 + DOS: cpu time 0.0068: real time 0.0068 + CHARGE: cpu time 0.1867: real time 0.1868 + MIXING: cpu time 0.0030: real time 0.0030 + -------------------------------------------- + LOOP: cpu time 4.9509: real time 4.9514 + + eigenvalue-minimisations : 5376 + total energy-change (2. order) :-0.4389371E-01 (-0.1091465E-02) + number of electron 40.0000003 magnetization + augmentation part 0.9506324 magnetization + + free energy = -0.169036939932E+02 energy without entropy= -0.169139124390E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 6( 2) --------------------------------------- + + + POTLOK: cpu time 0.0202: real time 0.0202 + SETDIJ: cpu time 0.0062: real time 0.0062 + EDDAV: cpu time 5.5586: real time 5.5592 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1676: real time 0.1676 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 5.7647: real time 5.7653 + + eigenvalue-minimisations : 6624 + total energy-change (2. order) : 0.4510174E-04 (-0.2719451E-04) + number of electron 40.0000003 magnetization + augmentation part 0.9507499 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.6967 + 1.6967 + + free energy = -0.169036488914E+02 energy without entropy= -0.169138450295E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 6( 3) --------------------------------------- + + + POTLOK: cpu time 0.0218: real time 0.0218 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 5.4930: real time 5.4936 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1754: real time 0.1754 + MIXING: cpu time 0.0042: real time 0.0042 + -------------------------------------------- + LOOP: cpu time 5.7084: real time 5.7090 + + eigenvalue-minimisations : 6808 + total energy-change (2. order) : 0.9980090E-05 (-0.3402975E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9507732 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7444 + 1.3367 2.1522 + + free energy = -0.169036389113E+02 energy without entropy= -0.169138201540E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 6( 4) --------------------------------------- + + + POTLOK: cpu time 0.0212: real time 0.0212 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 4.5660: real time 4.5666 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1706: real time 0.1715 + MIXING: cpu time 0.0041: real time 0.0041 + -------------------------------------------- + LOOP: cpu time 4.7756: real time 4.7769 + + eigenvalue-minimisations : 5052 + total energy-change (2. order) :-0.9427347E-06 (-0.4150462E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9507759 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8099 + 1.0735 1.6660 2.6903 + + free energy = -0.169036398541E+02 energy without entropy= -0.169138193993E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 6( 5) --------------------------------------- + + + POTLOK: cpu time 0.0224: real time 0.0234 + SETDIJ: cpu time 0.0054: real time 0.0065 + EDDAV: cpu time 3.4930: real time 3.4941 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1653: real time 0.1653 + MIXING: cpu time 0.0042: real time 0.0042 + -------------------------------------------- + LOOP: cpu time 3.6987: real time 3.7024 + + eigenvalue-minimisations : 3116 + total energy-change (2. order) :-0.1726075E-06 (-0.8982974E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9507766 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7519 + 2.7156 1.0291 1.4232 1.8398 + + free energy = -0.169036400267E+02 energy without entropy= -0.169138196608E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 6( 6) --------------------------------------- + + + POTLOK: cpu time 0.0228: real time 0.0228 + SETDIJ: cpu time 0.0061: real time 0.0061 + EDDAV: cpu time 3.4738: real time 3.4742 + DOS: cpu time 0.0070: real time 0.0070 + -------------------------------------------- + LOOP: cpu time 3.5107: real time 3.5111 + + eigenvalue-minimisations : 2984 + total energy-change (2. order) :-0.6280402E-08 (-0.1691064E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9507766 magnetization + + free energy = -0.169036400329E+02 energy without entropy= -0.169138198138E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9607 2 -25.9607 3 -25.9607 4 -25.9607 5 -25.9607 + 6 -25.9607 7 -25.9607 8 -25.9607 9 -25.8898 10 -25.8898 + 11 -25.8898 12 -25.8898 13 -25.8898 14 -25.8898 15 -25.8898 + 16 -25.8898 17 -25.9222 18 -25.9222 19 -25.9222 20 -25.9222 + 21 -25.9222 22 -25.9222 23 -25.9222 24 -25.9222 25 -25.8460 + 26 -25.8460 27 -25.8460 28 -25.8460 29 -25.8460 30 -25.8460 + 31 -25.8460 32 -25.8460 33 -26.0260 34 -26.0260 35 -26.0260 + 36 -26.0260 37 -26.0260 38 -26.0260 39 -26.0260 40 -26.0260 + + + + E-fermi : 4.4644 XC(G=0): -9.5549 alpha+bet :-20.5638 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9616 2.00000 + 2 1.5055 2.00000 + 3 1.7418 2.00000 + 4 1.9982 2.00000 + 5 2.0403 2.00000 + 6 2.5155 2.00000 + 7 2.6215 2.00000 + 8 2.7696 2.00000 + 9 2.8698 2.00000 + 10 2.9205 2.00000 + 11 3.2105 2.00000 + 12 3.2740 2.00000 + 13 3.3938 2.00000 + 14 3.4260 2.00000 + 15 3.5127 2.00000 + 16 3.6205 2.00000 + 17 3.8418 2.00010 + 18 4.1871 2.06451 + 19 4.2128 2.07060 + 20 4.3887 1.59272 + 21 5.5279 -0.00000 + 22 5.7337 -0.00000 + 23 5.9222 -0.00000 + 24 6.0902 -0.00000 + 25 6.2089 -0.00000 + 26 6.2915 -0.00000 + 27 6.5512 -0.00000 + 28 7.1266 -0.00000 + 29 7.1340 -0.00000 + 30 7.2507 -0.00000 + 31 7.3725 -0.00000 + 32 7.4421 -0.00000 + 33 8.0668 -0.00000 + 34 8.1527 -0.00000 + 35 8.8129 -0.00000 + 36 8.9508 -0.00000 + 37 9.2191 -0.00000 + 38 9.4403 -0.00000 + 39 9.8122 -0.00000 + 40 9.8408 -0.00000 + 41 10.0989 0.00000 + 42 10.2995 0.00000 + 43 10.5487 0.00000 + 44 10.8132 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9800 2.00000 + 2 1.5257 2.00000 + 3 1.7111 2.00000 + 4 1.7626 2.00000 + 5 2.2751 2.00000 + 6 2.3914 2.00000 + 7 2.5264 2.00000 + 8 2.8675 2.00000 + 9 2.9626 2.00000 + 10 3.1480 2.00000 + 11 3.2384 2.00000 + 12 3.2874 2.00000 + 13 3.3697 2.00000 + 14 3.4300 2.00000 + 15 3.5421 2.00000 + 16 3.6242 2.00000 + 17 3.7782 2.00001 + 18 4.0601 2.01492 + 19 4.2341 2.06909 + 20 4.4349 1.24671 + 21 5.4187 -0.00000 + 22 5.5856 -0.00000 + 23 5.8841 -0.00000 + 24 5.9901 -0.00000 + 25 6.1465 -0.00000 + 26 6.5266 -0.00000 + 27 6.6248 -0.00000 + 28 6.8320 -0.00000 + 29 7.1123 -0.00000 + 30 7.2397 -0.00000 + 31 7.2993 -0.00000 + 32 7.3909 -0.00000 + 33 8.3389 -0.00000 + 34 8.3865 -0.00000 + 35 8.8281 -0.00000 + 36 8.8793 -0.00000 + 37 9.2427 -0.00000 + 38 9.4237 -0.00000 + 39 9.7552 -0.00000 + 40 9.9232 -0.00000 + 41 10.0673 0.00000 + 42 10.1684 0.00000 + 43 10.8472 0.00000 + 44 10.9273 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0361 2.00000 + 2 1.4647 2.00000 + 3 1.5868 2.00000 + 4 1.8254 2.00000 + 5 2.0338 2.00000 + 6 2.2822 2.00000 + 7 2.8246 2.00000 + 8 2.9639 2.00000 + 9 3.2387 2.00000 + 10 3.2655 2.00000 + 11 3.3170 2.00000 + 12 3.3307 2.00000 + 13 3.4297 2.00000 + 14 3.5244 2.00000 + 15 3.5716 2.00000 + 16 3.6231 2.00000 + 17 3.7282 2.00000 + 18 3.8450 2.00011 + 19 4.1597 2.05317 + 20 4.3414 1.85310 + 21 5.3256 -0.00000 + 22 5.4264 -0.00000 + 23 5.7734 -0.00000 + 24 5.8451 -0.00000 + 25 5.8831 -0.00000 + 26 6.2401 -0.00000 + 27 6.7718 -0.00000 + 28 7.0269 -0.00000 + 29 7.1128 -0.00000 + 30 7.2188 -0.00000 + 31 7.2601 -0.00000 + 32 7.5471 -0.00000 + 33 8.4790 -0.00000 + 34 8.5036 -0.00000 + 35 8.7575 -0.00000 + 36 8.8991 -0.00000 + 37 9.2070 -0.00000 + 38 9.3227 -0.00000 + 39 9.7991 -0.00000 + 40 9.8768 -0.00000 + 41 10.1563 0.00000 + 42 10.3575 0.00000 + 43 11.0086 0.00000 + 44 11.1328 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1326 2.00000 + 2 1.2738 2.00000 + 3 1.6901 2.00000 + 4 1.8371 2.00000 + 5 1.9339 2.00000 + 6 2.0843 2.00000 + 7 3.0498 2.00000 + 8 3.1544 2.00000 + 9 3.3015 2.00000 + 10 3.3900 2.00000 + 11 3.4288 2.00000 + 12 3.4443 2.00000 + 13 3.5013 2.00000 + 14 3.5117 2.00000 + 15 3.6361 2.00000 + 16 3.6532 2.00000 + 17 3.7170 2.00000 + 18 3.7721 2.00001 + 19 3.9153 2.00072 + 20 4.1115 2.03169 + 21 5.3523 -0.00000 + 22 5.4740 -0.00000 + 23 5.6384 -0.00000 + 24 5.6506 -0.00000 + 25 5.7605 -0.00000 + 26 5.7786 -0.00000 + 27 6.9672 -0.00000 + 28 7.1217 -0.00000 + 29 7.1516 -0.00000 + 30 7.1612 -0.00000 + 31 7.6173 -0.00000 + 32 7.8617 -0.00000 + 33 8.1348 -0.00000 + 34 8.2166 -0.00000 + 35 8.8867 -0.00000 + 36 8.9485 -0.00000 + 37 9.1040 -0.00000 + 38 9.1860 -0.00000 + 39 9.7946 -0.00000 + 40 9.8683 -0.00000 + 41 10.4535 0.00000 + 42 10.5501 0.00000 + 43 11.2315 0.00000 + 44 11.3362 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9951 2.00000 + 2 1.3155 2.00000 + 3 2.0213 2.00000 + 4 2.0301 2.00000 + 5 2.0770 2.00000 + 6 2.3379 2.00000 + 7 2.4315 2.00000 + 8 2.9379 2.00000 + 9 3.0085 2.00000 + 10 3.0536 2.00000 + 11 3.1397 2.00000 + 12 3.2036 2.00000 + 13 3.3985 2.00000 + 14 3.4917 2.00000 + 15 3.5043 2.00000 + 16 3.6911 2.00000 + 17 3.7542 2.00001 + 18 4.0148 2.00662 + 19 4.0365 2.00993 + 20 4.2307 2.06987 + 21 5.6747 -0.00000 + 22 5.8121 -0.00000 + 23 5.9704 -0.00000 + 24 6.2156 -0.00000 + 25 6.3095 -0.00000 + 26 6.4314 -0.00000 + 27 6.5082 -0.00000 + 28 6.7758 -0.00000 + 29 7.2753 -0.00000 + 30 7.3281 -0.00000 + 31 7.4091 -0.00000 + 32 7.6320 -0.00000 + 33 8.0229 -0.00000 + 34 8.1744 -0.00000 + 35 8.8863 -0.00000 + 36 9.0404 -0.00000 + 37 9.0736 -0.00000 + 38 9.2116 -0.00000 + 39 9.5363 -0.00000 + 40 9.8638 -0.00000 + 41 9.9102 -0.00000 + 42 10.3877 0.00000 + 43 10.4872 0.00000 + 44 10.9204 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0136 2.00000 + 2 1.3350 2.00000 + 3 1.7461 2.00000 + 4 2.0353 2.00000 + 5 2.0907 2.00000 + 6 2.4229 2.00000 + 7 2.7303 2.00000 + 8 2.8130 2.00000 + 9 2.9712 2.00000 + 10 3.0364 2.00000 + 11 3.2201 2.00000 + 12 3.3524 2.00000 + 13 3.3936 2.00000 + 14 3.5005 2.00000 + 15 3.5260 2.00000 + 16 3.6951 2.00000 + 17 3.7061 2.00000 + 18 3.8305 2.00007 + 19 4.1132 2.03237 + 20 4.2769 2.03465 + 21 5.5560 -0.00000 + 22 5.7396 -0.00000 + 23 5.9341 -0.00000 + 24 6.0640 -0.00000 + 25 6.2301 -0.00000 + 26 6.4930 -0.00000 + 27 6.6361 -0.00000 + 28 6.7131 -0.00000 + 29 7.1629 -0.00000 + 30 7.3156 -0.00000 + 31 7.3330 -0.00000 + 32 7.6081 -0.00000 + 33 8.2669 -0.00000 + 34 8.3538 -0.00000 + 35 8.8875 -0.00000 + 36 8.9988 -0.00000 + 37 9.0202 -0.00000 + 38 9.2216 -0.00000 + 39 9.6165 -0.00000 + 40 9.8162 -0.00000 + 41 9.9309 0.00000 + 42 10.4494 0.00000 + 43 10.5078 0.00000 + 44 11.0382 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0700 2.00000 + 2 1.3943 2.00000 + 3 1.4999 2.00000 + 4 1.8345 2.00000 + 5 2.1129 2.00000 + 6 2.5749 2.00000 + 7 2.8458 2.00000 + 8 2.9911 2.00000 + 9 3.1219 2.00000 + 10 3.1375 2.00000 + 11 3.2677 2.00000 + 12 3.3043 2.00000 + 13 3.4707 2.00000 + 14 3.5305 2.00000 + 15 3.6118 2.00000 + 16 3.6172 2.00000 + 17 3.6756 2.00000 + 18 3.7301 2.00000 + 19 4.0512 2.01285 + 20 4.2344 2.06902 + 21 5.3978 -0.00000 + 22 5.6631 -0.00000 + 23 5.7691 -0.00000 + 24 5.8236 -0.00000 + 25 6.1078 -0.00000 + 26 6.1975 -0.00000 + 27 6.6174 -0.00000 + 28 7.0639 -0.00000 + 29 7.1130 -0.00000 + 30 7.3601 -0.00000 + 31 7.4917 -0.00000 + 32 7.5492 -0.00000 + 33 8.3547 -0.00000 + 34 8.5145 -0.00000 + 35 8.7893 -0.00000 + 36 8.8815 -0.00000 + 37 9.0410 -0.00000 + 38 9.1597 -0.00000 + 39 9.6298 -0.00000 + 40 9.7937 -0.00000 + 41 10.1449 0.00000 + 42 10.5719 0.00000 + 43 10.7134 0.00000 + 44 11.2196 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1670 2.00000 + 2 1.3086 2.00000 + 3 1.4954 2.00000 + 4 1.6411 2.00000 + 5 2.2224 2.00000 + 6 2.3767 2.00000 + 7 3.0862 2.00000 + 8 3.1952 2.00000 + 9 3.2121 2.00000 + 10 3.3123 2.00000 + 11 3.3768 2.00000 + 12 3.4083 2.00000 + 13 3.4335 2.00000 + 14 3.4431 2.00000 + 15 3.5491 2.00000 + 16 3.6269 2.00000 + 17 3.7479 2.00000 + 18 3.7741 2.00001 + 19 3.8485 2.00012 + 20 4.0076 2.00575 + 21 5.4152 -0.00000 + 22 5.6090 -0.00000 + 23 5.6097 -0.00000 + 24 5.7873 -0.00000 + 25 5.7889 -0.00000 + 26 5.9697 -0.00000 + 27 6.7840 -0.00000 + 28 6.9513 -0.00000 + 29 7.3358 -0.00000 + 30 7.4416 -0.00000 + 31 7.7216 -0.00000 + 32 7.8032 -0.00000 + 33 8.1499 -0.00000 + 34 8.1850 -0.00000 + 35 8.8352 -0.00000 + 36 8.8899 -0.00000 + 37 8.9682 -0.00000 + 38 9.0537 -0.00000 + 39 9.6041 -0.00000 + 40 9.7703 -0.00000 + 41 10.4293 0.00000 + 42 10.6032 0.00000 + 43 11.1556 0.00000 + 44 11.3501 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0635 2.00000 + 2 1.1692 2.00000 + 3 2.0954 2.00000 + 4 2.1504 2.00000 + 5 2.1970 2.00000 + 6 2.2450 2.00000 + 7 2.3750 2.00000 + 8 2.6962 2.00000 + 9 3.0137 2.00000 + 10 3.1064 2.00000 + 11 3.3434 2.00000 + 12 3.4302 2.00000 + 13 3.4389 2.00000 + 14 3.4722 2.00000 + 15 3.5982 2.00000 + 16 3.6003 2.00000 + 17 3.7436 2.00000 + 18 3.7809 2.00001 + 19 3.8279 2.00006 + 20 4.0185 2.00711 + 21 5.9259 -0.00000 + 22 5.9445 -0.00000 + 23 6.0895 -0.00000 + 24 6.1418 -0.00000 + 25 6.2078 -0.00000 + 26 6.4186 -0.00000 + 27 6.6264 -0.00000 + 28 6.9270 -0.00000 + 29 6.9782 -0.00000 + 30 7.2645 -0.00000 + 31 7.6062 -0.00000 + 32 7.8626 -0.00000 + 33 8.1875 -0.00000 + 34 8.3669 -0.00000 + 35 8.5166 -0.00000 + 36 9.0088 -0.00000 + 37 9.0791 -0.00000 + 38 9.1417 -0.00000 + 39 9.3064 -0.00000 + 40 9.5925 -0.00000 + 41 9.9422 0.00000 + 42 10.0577 0.00000 + 43 10.7558 0.00000 + 44 10.9361 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0822 2.00000 + 2 1.1882 2.00000 + 3 1.8174 2.00000 + 4 1.9271 2.00000 + 5 2.3638 2.00000 + 6 2.4826 2.00000 + 7 2.6040 2.00000 + 8 2.7271 2.00000 + 9 3.0330 2.00000 + 10 3.1250 2.00000 + 11 3.1435 2.00000 + 12 3.4337 2.00000 + 13 3.4852 2.00000 + 14 3.4879 2.00000 + 15 3.5004 2.00000 + 16 3.6150 2.00000 + 17 3.6883 2.00000 + 18 3.8377 2.00009 + 19 3.9146 2.00071 + 20 4.0485 2.01227 + 21 5.7549 -0.00000 + 22 5.9272 -0.00000 + 23 5.9595 -0.00000 + 24 6.1149 -0.00000 + 25 6.2447 -0.00000 + 26 6.3617 -0.00000 + 27 6.5589 -0.00000 + 28 6.9044 -0.00000 + 29 6.9974 -0.00000 + 30 7.2139 -0.00000 + 31 7.6309 -0.00000 + 32 7.9924 -0.00000 + 33 8.1808 -0.00000 + 34 8.4878 -0.00000 + 35 8.5667 -0.00000 + 36 8.9883 -0.00000 + 37 9.0174 -0.00000 + 38 9.2459 -0.00000 + 39 9.2675 -0.00000 + 40 9.5548 -0.00000 + 41 10.0044 0.00000 + 42 10.1264 0.00000 + 43 10.7735 0.00000 + 44 10.9846 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1393 2.00000 + 2 1.2463 2.00000 + 3 1.5716 2.00000 + 4 1.6821 2.00000 + 5 2.4367 2.00000 + 6 2.7670 2.00000 + 7 2.9096 2.00000 + 8 2.9332 2.00000 + 9 2.9845 2.00000 + 10 3.1079 2.00000 + 11 3.1794 2.00000 + 12 3.2713 2.00000 + 13 3.3745 2.00000 + 14 3.4587 2.00000 + 15 3.5268 2.00000 + 16 3.5992 2.00000 + 17 3.7387 2.00000 + 18 3.8917 2.00039 + 19 3.9015 2.00051 + 20 4.0785 2.01994 + 21 5.5287 -0.00000 + 22 5.6563 -0.00000 + 23 5.8852 -0.00000 + 24 6.0514 -0.00000 + 25 6.0713 -0.00000 + 26 6.3534 -0.00000 + 27 6.4242 -0.00000 + 28 6.7664 -0.00000 + 29 7.2606 -0.00000 + 30 7.3908 -0.00000 + 31 7.7256 -0.00000 + 32 8.0589 -0.00000 + 33 8.1010 -0.00000 + 34 8.4875 -0.00000 + 35 8.5913 -0.00000 + 36 8.8669 -0.00000 + 37 8.9571 -0.00000 + 38 9.2791 -0.00000 + 39 9.2833 -0.00000 + 40 9.5571 -0.00000 + 41 10.2298 0.00000 + 42 10.4140 0.00000 + 43 10.7745 0.00000 + 44 11.0290 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2371 2.00000 + 2 1.3455 2.00000 + 3 1.3797 2.00000 + 4 1.4894 2.00000 + 5 2.5523 2.00000 + 6 2.7111 2.00000 + 7 2.9021 2.00000 + 8 3.0679 2.00000 + 9 3.1532 2.00000 + 10 3.2386 2.00000 + 11 3.2689 2.00000 + 12 3.3585 2.00000 + 13 3.3876 2.00000 + 14 3.4176 2.00000 + 15 3.6035 2.00000 + 16 3.6770 2.00000 + 17 3.6778 2.00000 + 18 3.7697 2.00001 + 19 3.8284 2.00007 + 20 3.8965 2.00045 + 21 5.5058 -0.00000 + 22 5.5679 -0.00000 + 23 5.6867 -0.00000 + 24 5.7606 -0.00000 + 25 6.1292 -0.00000 + 26 6.2774 -0.00000 + 27 6.4804 -0.00000 + 28 6.6309 -0.00000 + 29 7.5676 -0.00000 + 30 7.7048 -0.00000 + 31 7.8056 -0.00000 + 32 8.0110 -0.00000 + 33 8.0303 -0.00000 + 34 8.3214 -0.00000 + 35 8.4320 -0.00000 + 36 8.6274 -0.00000 + 37 9.0276 -0.00000 + 38 9.2552 -0.00000 + 39 9.3136 -0.00000 + 40 9.5335 -0.00000 + 41 10.5225 0.00000 + 42 10.7044 0.00000 + 43 10.7752 0.00000 + 44 10.9704 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0007 2.00000 + 2 1.5527 2.00000 + 3 1.7919 2.00000 + 4 2.0389 2.00000 + 5 2.0828 2.00000 + 6 2.4860 2.00000 + 7 2.5794 2.00000 + 8 2.6650 2.00000 + 9 2.8092 2.00000 + 10 2.9065 2.00000 + 11 3.0756 2.00000 + 12 3.2812 2.00000 + 13 3.3069 2.00000 + 14 3.3362 2.00000 + 15 3.4453 2.00000 + 16 3.7600 2.00001 + 17 3.8570 2.00015 + 18 4.0071 2.00570 + 19 4.0464 2.01182 + 20 4.1707 2.05808 + 21 5.7558 -0.00000 + 22 5.9613 -0.00000 + 23 6.1783 -0.00000 + 24 6.4544 -0.00000 + 25 6.4896 -0.00000 + 26 6.5722 -0.00000 + 27 6.5932 -0.00000 + 28 6.7562 -0.00000 + 29 7.1665 -0.00000 + 30 7.2627 -0.00000 + 31 7.3712 -0.00000 + 32 7.4140 -0.00000 + 33 8.1593 -0.00000 + 34 8.4607 -0.00000 + 35 8.9299 -0.00000 + 36 9.0495 -0.00000 + 37 9.0585 -0.00000 + 38 9.5616 -0.00000 + 39 9.8024 -0.00000 + 40 9.8316 -0.00000 + 41 10.0038 0.00000 + 42 10.0211 0.00000 + 43 10.4001 0.00000 + 44 10.4511 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0191 2.00000 + 2 1.5728 2.00000 + 3 1.7526 2.00000 + 4 1.8126 2.00000 + 5 2.3181 2.00000 + 6 2.4321 2.00000 + 7 2.5179 2.00000 + 8 2.5700 2.00000 + 9 2.9508 2.00000 + 10 3.0918 2.00000 + 11 3.1446 2.00000 + 12 3.1913 2.00000 + 13 3.3010 2.00000 + 14 3.3697 2.00000 + 15 3.5854 2.00000 + 16 3.6567 2.00000 + 17 3.8699 2.00022 + 18 3.9610 2.00215 + 19 4.0869 2.02261 + 20 4.1553 2.05118 + 21 5.7022 -0.00000 + 22 5.8067 -0.00000 + 23 6.1127 -0.00000 + 24 6.3436 -0.00000 + 25 6.3831 -0.00000 + 26 6.4774 -0.00000 + 27 6.7060 -0.00000 + 28 6.7747 -0.00000 + 29 7.1622 -0.00000 + 30 7.2474 -0.00000 + 31 7.2659 -0.00000 + 32 7.4456 -0.00000 + 33 8.3195 -0.00000 + 34 8.5378 -0.00000 + 35 8.9158 -0.00000 + 36 9.0161 -0.00000 + 37 9.0714 -0.00000 + 38 9.5836 -0.00000 + 39 9.8235 -0.00000 + 40 9.8908 -0.00000 + 41 9.9004 -0.00000 + 42 10.1023 0.00000 + 43 10.6365 0.00000 + 44 10.7104 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0756 2.00000 + 2 1.5058 2.00000 + 3 1.6336 2.00000 + 4 1.8748 2.00000 + 5 2.0785 2.00000 + 6 2.3255 2.00000 + 7 2.5785 2.00000 + 8 2.8609 2.00000 + 9 2.9693 2.00000 + 10 3.1401 2.00000 + 11 3.2883 2.00000 + 12 3.3535 2.00000 + 13 3.4456 2.00000 + 14 3.4776 2.00000 + 15 3.5337 2.00000 + 16 3.7420 2.00000 + 17 3.8081 2.00004 + 18 3.9018 2.00051 + 19 4.0066 2.00564 + 20 4.1190 2.03478 + 21 5.4602 -0.00000 + 22 5.7631 -0.00000 + 23 5.9868 -0.00000 + 24 5.9893 -0.00000 + 25 6.1272 -0.00000 + 26 6.2908 -0.00000 + 27 6.7127 -0.00000 + 28 7.0421 -0.00000 + 29 7.0427 -0.00000 + 30 7.1672 -0.00000 + 31 7.3073 -0.00000 + 32 7.6866 -0.00000 + 33 8.3565 -0.00000 + 34 8.4297 -0.00000 + 35 8.9499 -0.00000 + 36 9.0516 -0.00000 + 37 9.0857 -0.00000 + 38 9.4857 -0.00000 + 39 9.8860 -0.00000 + 40 10.0885 0.00000 + 41 10.1158 0.00000 + 42 10.3143 0.00000 + 43 10.9661 0.00000 + 44 11.1156 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1726 2.00000 + 2 1.3143 2.00000 + 3 1.7366 2.00000 + 4 1.8833 2.00000 + 5 1.9815 2.00000 + 6 2.1304 2.00000 + 7 2.6741 2.00000 + 8 2.8060 2.00000 + 9 3.2084 2.00000 + 10 3.3065 2.00000 + 11 3.3473 2.00000 + 12 3.5000 2.00000 + 13 3.5581 2.00000 + 14 3.6276 2.00000 + 15 3.6390 2.00000 + 16 3.6453 2.00000 + 17 3.7985 2.00003 + 18 3.8634 2.00018 + 19 3.8735 2.00024 + 20 3.9218 2.00085 + 21 5.4353 -0.00000 + 22 5.6535 -0.00000 + 23 5.7314 -0.00000 + 24 5.7941 -0.00000 + 25 5.9844 -0.00000 + 26 6.1819 -0.00000 + 27 6.7430 -0.00000 + 28 6.8745 -0.00000 + 29 7.1483 -0.00000 + 30 7.1968 -0.00000 + 31 7.6115 -0.00000 + 32 7.9469 -0.00000 + 33 8.0324 -0.00000 + 34 8.1880 -0.00000 + 35 9.0818 -0.00000 + 36 9.1440 -0.00000 + 37 9.1843 -0.00000 + 38 9.3502 -0.00000 + 39 9.8949 -0.00000 + 40 10.0770 0.00000 + 41 10.3690 0.00000 + 42 10.4688 0.00000 + 43 11.2148 0.00000 + 44 11.3228 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0347 2.00000 + 2 1.3600 2.00000 + 3 2.0712 2.00000 + 4 2.0749 2.00000 + 5 2.1200 2.00000 + 6 2.3775 2.00000 + 7 2.4753 2.00000 + 8 2.5504 2.00000 + 9 2.9060 2.00000 + 10 3.0648 2.00000 + 11 3.0748 2.00000 + 12 3.1662 2.00000 + 13 3.3551 2.00000 + 14 3.5024 2.00000 + 15 3.5104 2.00000 + 16 3.6689 2.00000 + 17 3.8455 2.00011 + 18 3.8802 2.00029 + 19 3.9375 2.00124 + 20 4.0430 2.01116 + 21 5.8390 -0.00000 + 22 6.0104 -0.00000 + 23 6.0632 -0.00000 + 24 6.3240 -0.00000 + 25 6.4929 -0.00000 + 26 6.6062 -0.00000 + 27 6.6684 -0.00000 + 28 6.7872 -0.00000 + 29 7.3757 -0.00000 + 30 7.3986 -0.00000 + 31 7.4743 -0.00000 + 32 7.6309 -0.00000 + 33 8.1867 -0.00000 + 34 8.3034 -0.00000 + 35 8.7442 -0.00000 + 36 8.9252 -0.00000 + 37 9.2069 -0.00000 + 38 9.4139 -0.00000 + 39 9.6220 -0.00000 + 40 9.7179 -0.00000 + 41 9.8206 -0.00000 + 42 10.3309 0.00000 + 43 10.3707 0.00000 + 44 10.9173 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0534 2.00000 + 2 1.3796 2.00000 + 3 1.7880 2.00000 + 4 2.0876 2.00000 + 5 2.1352 2.00000 + 6 2.4642 2.00000 + 7 2.5611 2.00000 + 8 2.7837 2.00000 + 9 2.8475 2.00000 + 10 2.9250 2.00000 + 11 3.1020 2.00000 + 12 3.2030 2.00000 + 13 3.4015 2.00000 + 14 3.4948 2.00000 + 15 3.5896 2.00000 + 16 3.6438 2.00000 + 17 3.7962 2.00002 + 18 3.8621 2.00018 + 19 3.9746 2.00290 + 20 4.0999 2.02717 + 21 5.7374 -0.00000 + 22 5.9576 -0.00000 + 23 5.9730 -0.00000 + 24 6.2215 -0.00000 + 25 6.3091 -0.00000 + 26 6.5972 -0.00000 + 27 6.6417 -0.00000 + 28 6.9022 -0.00000 + 29 7.2480 -0.00000 + 30 7.3836 -0.00000 + 31 7.4995 -0.00000 + 32 7.6205 -0.00000 + 33 8.3583 -0.00000 + 34 8.3649 -0.00000 + 35 8.8346 -0.00000 + 36 8.9031 -0.00000 + 37 9.1858 -0.00000 + 38 9.3927 -0.00000 + 39 9.6162 -0.00000 + 40 9.7327 -0.00000 + 41 9.8979 -0.00000 + 42 10.4034 0.00000 + 43 10.5357 0.00000 + 44 10.9474 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1101 2.00000 + 2 1.4390 2.00000 + 3 1.5414 2.00000 + 4 1.8790 2.00000 + 5 2.1642 2.00000 + 6 2.6084 2.00000 + 7 2.6278 2.00000 + 8 2.8831 2.00000 + 9 2.9822 2.00000 + 10 3.0178 2.00000 + 11 3.1600 2.00000 + 12 3.1829 2.00000 + 13 3.3638 2.00000 + 14 3.6024 2.00000 + 15 3.6199 2.00000 + 16 3.6438 2.00000 + 17 3.7909 2.00002 + 18 3.9052 2.00056 + 19 3.9471 2.00156 + 20 4.1116 2.03171 + 21 5.4822 -0.00000 + 22 5.8286 -0.00000 + 23 5.9132 -0.00000 + 24 5.9653 -0.00000 + 25 6.0260 -0.00000 + 26 6.5209 -0.00000 + 27 6.5379 -0.00000 + 28 7.0185 -0.00000 + 29 7.1661 -0.00000 + 30 7.4121 -0.00000 + 31 7.6200 -0.00000 + 32 7.6764 -0.00000 + 33 8.3271 -0.00000 + 34 8.4475 -0.00000 + 35 8.8588 -0.00000 + 36 8.9052 -0.00000 + 37 9.2587 -0.00000 + 38 9.2890 -0.00000 + 39 9.6393 -0.00000 + 40 9.9874 0.00000 + 41 10.0891 0.00000 + 42 10.5283 0.00000 + 43 10.7654 0.00000 + 44 11.1192 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2075 2.00000 + 2 1.3496 2.00000 + 3 1.5400 2.00000 + 4 1.6857 2.00000 + 5 2.2713 2.00000 + 6 2.4218 2.00000 + 7 2.7180 2.00000 + 8 2.8538 2.00000 + 9 3.0687 2.00000 + 10 3.1905 2.00000 + 11 3.2804 2.00000 + 12 3.3922 2.00000 + 13 3.4507 2.00000 + 14 3.5062 2.00000 + 15 3.6847 2.00000 + 16 3.7045 2.00000 + 17 3.7933 2.00002 + 18 3.8805 2.00029 + 19 3.9267 2.00096 + 20 3.9317 2.00108 + 21 5.4066 -0.00000 + 22 5.6791 -0.00000 + 23 5.6866 -0.00000 + 24 5.7662 -0.00000 + 25 6.0507 -0.00000 + 26 6.3731 -0.00000 + 27 6.5994 -0.00000 + 28 6.7809 -0.00000 + 29 7.3039 -0.00000 + 30 7.4604 -0.00000 + 31 7.8056 -0.00000 + 32 7.8979 -0.00000 + 33 8.1615 -0.00000 + 34 8.1750 -0.00000 + 35 8.9589 -0.00000 + 36 9.0243 -0.00000 + 37 9.1705 -0.00000 + 38 9.3249 -0.00000 + 39 9.6076 -0.00000 + 40 10.0506 0.00000 + 41 10.3338 0.00000 + 42 10.5197 0.00000 + 43 11.1179 0.00000 + 44 11.2313 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1043 2.00000 + 2 1.2116 2.00000 + 3 2.1372 2.00000 + 4 2.1943 2.00000 + 5 2.2391 2.00000 + 6 2.2928 2.00000 + 7 2.4282 2.00000 + 8 2.6302 2.00000 + 9 2.7512 2.00000 + 10 2.7572 2.00000 + 11 3.3248 2.00000 + 12 3.4384 2.00000 + 13 3.4655 2.00000 + 14 3.4983 2.00000 + 15 3.6364 2.00000 + 16 3.6412 2.00000 + 17 3.6835 2.00000 + 18 3.7703 2.00001 + 19 3.8075 2.00003 + 20 3.8360 2.00008 + 21 5.9339 -0.00000 + 22 6.0689 -0.00000 + 23 6.0882 -0.00000 + 24 6.2108 -0.00000 + 25 6.3526 -0.00000 + 26 6.3624 -0.00000 + 27 6.9630 -0.00000 + 28 7.1299 -0.00000 + 29 7.2365 -0.00000 + 30 7.3976 -0.00000 + 31 7.7269 -0.00000 + 32 8.0428 -0.00000 + 33 8.1030 -0.00000 + 34 8.3725 -0.00000 + 35 8.4350 -0.00000 + 36 9.0078 -0.00000 + 37 9.1237 -0.00000 + 38 9.1879 -0.00000 + 39 9.3981 -0.00000 + 40 9.5564 -0.00000 + 41 9.9239 0.00000 + 42 10.0663 0.00000 + 43 10.7351 0.00000 + 44 10.9318 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1231 2.00000 + 2 1.2308 2.00000 + 3 1.8601 2.00000 + 4 1.9707 2.00000 + 5 2.4198 2.00000 + 6 2.5252 2.00000 + 7 2.6241 2.00000 + 8 2.6737 2.00000 + 9 2.7652 2.00000 + 10 2.7930 2.00000 + 11 3.1522 2.00000 + 12 3.3039 2.00000 + 13 3.3870 2.00000 + 14 3.5134 2.00000 + 15 3.6159 2.00000 + 16 3.6969 2.00000 + 17 3.7473 2.00000 + 18 3.8218 2.00005 + 19 3.8484 2.00012 + 20 3.9634 2.00226 + 21 5.8744 -0.00000 + 22 5.9615 -0.00000 + 23 6.0136 -0.00000 + 24 6.1436 -0.00000 + 25 6.1472 -0.00000 + 26 6.3557 -0.00000 + 27 6.9260 -0.00000 + 28 7.1599 -0.00000 + 29 7.1914 -0.00000 + 30 7.4166 -0.00000 + 31 7.7047 -0.00000 + 32 8.0476 -0.00000 + 33 8.1410 -0.00000 + 34 8.5163 -0.00000 + 35 8.5727 -0.00000 + 36 8.9800 -0.00000 + 37 9.0902 -0.00000 + 38 9.1931 -0.00000 + 39 9.4015 -0.00000 + 40 9.5891 -0.00000 + 41 10.0009 0.00000 + 42 10.1772 0.00000 + 43 10.7417 0.00000 + 44 10.9567 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1804 2.00000 + 2 1.2890 2.00000 + 3 1.6140 2.00000 + 4 1.7256 2.00000 + 5 2.4901 2.00000 + 6 2.7052 2.00000 + 7 2.8140 2.00000 + 8 2.8324 2.00000 + 9 2.9387 2.00000 + 10 2.9841 2.00000 + 11 3.0502 2.00000 + 12 3.1148 2.00000 + 13 3.2113 2.00000 + 14 3.3170 2.00000 + 15 3.7447 2.00000 + 16 3.7455 2.00000 + 17 3.8308 2.00007 + 18 3.8782 2.00027 + 19 3.9457 2.00151 + 20 4.0405 2.01067 + 21 5.6173 -0.00000 + 22 5.7908 -0.00000 + 23 5.7949 -0.00000 + 24 5.8718 -0.00000 + 25 6.1377 -0.00000 + 26 6.3253 -0.00000 + 27 6.7553 -0.00000 + 28 6.9314 -0.00000 + 29 7.3834 -0.00000 + 30 7.5760 -0.00000 + 31 7.7687 -0.00000 + 32 8.0928 -0.00000 + 33 8.1030 -0.00000 + 34 8.5268 -0.00000 + 35 8.6824 -0.00000 + 36 8.9539 -0.00000 + 37 9.0225 -0.00000 + 38 9.2189 -0.00000 + 39 9.5046 -0.00000 + 40 9.7665 -0.00000 + 41 10.1880 0.00000 + 42 10.4242 0.00000 + 43 10.7269 0.00000 + 44 11.0011 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2786 2.00000 + 2 1.3884 2.00000 + 3 1.4216 2.00000 + 4 1.5327 2.00000 + 5 2.6004 2.00000 + 6 2.7484 2.00000 + 7 2.8067 2.00000 + 8 2.9117 2.00000 + 9 2.9493 2.00000 + 10 2.9570 2.00000 + 11 3.0539 2.00000 + 12 3.1360 2.00000 + 13 3.4070 2.00000 + 14 3.4516 2.00000 + 15 3.7300 2.00000 + 16 3.7557 2.00001 + 17 3.8329 2.00008 + 18 3.8782 2.00027 + 19 3.9440 2.00145 + 20 3.9567 2.00195 + 21 5.4842 -0.00000 + 22 5.6090 -0.00000 + 23 5.6515 -0.00000 + 24 5.6891 -0.00000 + 25 6.2488 -0.00000 + 26 6.4264 -0.00000 + 27 6.5259 -0.00000 + 28 6.6523 -0.00000 + 29 7.5445 -0.00000 + 30 7.7618 -0.00000 + 31 7.7933 -0.00000 + 32 8.0442 -0.00000 + 33 8.1903 -0.00000 + 34 8.4651 -0.00000 + 35 8.6197 -0.00000 + 36 8.8485 -0.00000 + 37 9.0633 -0.00000 + 38 9.2673 -0.00000 + 39 9.5386 -0.00000 + 40 9.8211 -0.00000 + 41 10.4419 0.00000 + 42 10.6354 0.00000 + 43 10.7330 0.00000 + 44 10.9434 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0796 2.00000 + 2 1.6470 2.00000 + 3 1.8919 2.00000 + 4 2.1203 2.00000 + 5 2.1412 2.00000 + 6 2.1668 2.00000 + 7 2.6450 2.00000 + 8 2.7501 2.00000 + 9 2.7885 2.00000 + 10 2.8588 2.00000 + 11 2.9757 2.00000 + 12 3.0607 2.00000 + 13 3.1442 2.00000 + 14 3.1879 2.00000 + 15 3.4147 2.00000 + 16 3.6161 2.00000 + 17 3.7458 2.00000 + 18 3.8208 2.00005 + 19 3.8899 2.00037 + 20 4.2415 2.06656 + 21 6.0938 -0.00000 + 22 6.1849 -0.00000 + 23 6.2656 -0.00000 + 24 6.6126 -0.00000 + 25 6.8955 -0.00000 + 26 7.0003 -0.00000 + 27 7.0172 -0.00000 + 28 7.0726 -0.00000 + 29 7.2683 -0.00000 + 30 7.3105 -0.00000 + 31 7.3695 -0.00000 + 32 7.3863 -0.00000 + 33 8.1574 -0.00000 + 34 8.5875 -0.00000 + 35 8.6039 -0.00000 + 36 9.1254 -0.00000 + 37 9.2492 -0.00000 + 38 9.5749 -0.00000 + 39 9.6533 -0.00000 + 40 9.7262 -0.00000 + 41 9.8384 -0.00000 + 42 10.0563 0.00000 + 43 10.2163 0.00000 + 44 10.3378 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.0983 2.00000 + 2 1.6670 2.00000 + 3 1.8356 2.00000 + 4 1.9120 2.00000 + 5 2.1615 2.00000 + 6 2.4064 2.00000 + 7 2.5106 2.00000 + 8 2.6394 2.00000 + 9 2.8087 2.00000 + 10 2.8896 2.00000 + 11 3.0294 2.00000 + 12 3.0815 2.00000 + 13 3.2246 2.00000 + 14 3.4145 2.00000 + 15 3.4597 2.00000 + 16 3.4771 2.00000 + 17 3.7209 2.00000 + 18 3.9026 2.00052 + 19 3.9215 2.00084 + 20 4.2448 2.06507 + 21 5.9681 -0.00000 + 22 6.1234 -0.00000 + 23 6.1259 -0.00000 + 24 6.5165 -0.00000 + 25 6.6598 -0.00000 + 26 6.9249 -0.00000 + 27 6.9698 -0.00000 + 28 7.0938 -0.00000 + 29 7.1979 -0.00000 + 30 7.2713 -0.00000 + 31 7.3526 -0.00000 + 32 7.5555 -0.00000 + 33 8.3038 -0.00000 + 34 8.5441 -0.00000 + 35 8.7448 -0.00000 + 36 9.0415 -0.00000 + 37 9.2353 -0.00000 + 38 9.4703 -0.00000 + 39 9.7560 -0.00000 + 40 9.7862 -0.00000 + 41 9.9778 0.00000 + 42 10.2251 0.00000 + 43 10.4160 0.00000 + 44 10.5692 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1552 2.00000 + 2 1.5883 2.00000 + 3 1.7273 2.00000 + 4 1.9726 2.00000 + 5 2.1666 2.00000 + 6 2.2240 2.00000 + 7 2.4094 2.00000 + 8 2.6609 2.00000 + 9 2.8445 2.00000 + 10 2.9484 2.00000 + 11 3.1370 2.00000 + 12 3.2601 2.00000 + 13 3.3573 2.00000 + 14 3.5035 2.00000 + 15 3.5183 2.00000 + 16 3.5771 2.00000 + 17 3.7507 2.00001 + 18 3.8677 2.00020 + 19 4.0178 2.00702 + 20 4.2374 2.06812 + 21 5.6113 -0.00000 + 22 5.9695 -0.00000 + 23 5.9972 -0.00000 + 24 6.2151 -0.00000 + 25 6.4308 -0.00000 + 26 6.6945 -0.00000 + 27 6.8703 -0.00000 + 28 6.8715 -0.00000 + 29 7.2229 -0.00000 + 30 7.2833 -0.00000 + 31 7.4814 -0.00000 + 32 7.7683 -0.00000 + 33 8.3096 -0.00000 + 34 8.3163 -0.00000 + 35 9.0270 -0.00000 + 36 9.1050 -0.00000 + 37 9.3127 -0.00000 + 38 9.4948 -0.00000 + 39 9.8353 -0.00000 + 40 10.0146 0.00000 + 41 10.2273 0.00000 + 42 10.5043 0.00000 + 43 10.7123 0.00000 + 44 10.9528 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2531 2.00000 + 2 1.3957 2.00000 + 3 1.8294 2.00000 + 4 1.9752 2.00000 + 5 2.0753 2.00000 + 6 2.2193 2.00000 + 7 2.3276 2.00000 + 8 2.4727 2.00000 + 9 2.9429 2.00000 + 10 3.0683 2.00000 + 11 3.2556 2.00000 + 12 3.3598 2.00000 + 13 3.4563 2.00000 + 14 3.6157 2.00000 + 15 3.6393 2.00000 + 16 3.6735 2.00000 + 17 3.7593 2.00001 + 18 3.8509 2.00013 + 19 4.0009 2.00503 + 20 4.1700 2.05779 + 21 5.5237 -0.00000 + 22 5.7538 -0.00000 + 23 5.8237 -0.00000 + 24 5.8938 -0.00000 + 25 6.4923 -0.00000 + 26 6.5521 -0.00000 + 27 6.6211 -0.00000 + 28 6.7643 -0.00000 + 29 7.2614 -0.00000 + 30 7.3096 -0.00000 + 31 7.7091 -0.00000 + 32 7.9132 -0.00000 + 33 8.0522 -0.00000 + 34 8.0810 -0.00000 + 35 9.2932 -0.00000 + 36 9.3469 -0.00000 + 37 9.4136 -0.00000 + 38 9.5303 -0.00000 + 39 9.8918 -0.00000 + 40 10.2150 0.00000 + 41 10.2730 0.00000 + 42 10.3501 0.00000 + 43 11.0779 0.00000 + 44 11.2392 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1148 2.00000 + 2 1.4495 2.00000 + 3 2.1537 2.00000 + 4 2.1811 2.00000 + 5 2.1844 2.00000 + 6 2.2048 2.00000 + 7 2.4681 2.00000 + 8 2.5619 2.00000 + 9 2.5761 2.00000 + 10 3.0519 2.00000 + 11 3.1762 2.00000 + 12 3.2007 2.00000 + 13 3.2392 2.00000 + 14 3.2877 2.00000 + 15 3.3305 2.00000 + 16 3.4950 2.00000 + 17 3.6113 2.00000 + 18 3.8068 2.00003 + 19 3.8617 2.00017 + 20 4.1418 2.04492 + 21 6.0558 -0.00000 + 22 6.1132 -0.00000 + 23 6.3083 -0.00000 + 24 6.3302 -0.00000 + 25 6.8665 -0.00000 + 26 6.8738 -0.00000 + 27 7.0041 -0.00000 + 28 7.3144 -0.00000 + 29 7.3552 -0.00000 + 30 7.5489 -0.00000 + 31 7.6084 -0.00000 + 32 7.6319 -0.00000 + 33 8.1957 -0.00000 + 34 8.3912 -0.00000 + 35 8.5704 -0.00000 + 36 9.0671 -0.00000 + 37 9.3911 -0.00000 + 38 9.4017 -0.00000 + 39 9.6244 -0.00000 + 40 9.6632 -0.00000 + 41 9.9028 -0.00000 + 42 10.1535 0.00000 + 43 10.2173 0.00000 + 44 10.6026 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1336 2.00000 + 2 1.4691 2.00000 + 3 1.8720 2.00000 + 4 2.1830 2.00000 + 5 2.2122 2.00000 + 6 2.2261 2.00000 + 7 2.5422 2.00000 + 8 2.5992 2.00000 + 9 2.8527 2.00000 + 10 2.8681 2.00000 + 11 2.9921 2.00000 + 12 3.2116 2.00000 + 13 3.2939 2.00000 + 14 3.3801 2.00000 + 15 3.3888 2.00000 + 16 3.5442 2.00000 + 17 3.7120 2.00000 + 18 3.8177 2.00005 + 19 3.8689 2.00021 + 20 4.1492 2.04835 + 21 5.9390 -0.00000 + 22 6.0047 -0.00000 + 23 6.1972 -0.00000 + 24 6.3364 -0.00000 + 25 6.5429 -0.00000 + 26 6.7915 -0.00000 + 27 7.0096 -0.00000 + 28 7.2512 -0.00000 + 29 7.3359 -0.00000 + 30 7.5522 -0.00000 + 31 7.6482 -0.00000 + 32 7.6679 -0.00000 + 33 8.3893 -0.00000 + 34 8.4542 -0.00000 + 35 8.6324 -0.00000 + 36 9.0316 -0.00000 + 37 9.2872 -0.00000 + 38 9.3801 -0.00000 + 39 9.6797 -0.00000 + 40 9.7696 -0.00000 + 41 10.0015 0.00000 + 42 10.3077 0.00000 + 43 10.4155 0.00000 + 44 10.6736 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1908 2.00000 + 2 1.5286 2.00000 + 3 1.6249 2.00000 + 4 1.9683 2.00000 + 5 2.2462 2.00000 + 6 2.2865 2.00000 + 7 2.6485 2.00000 + 8 2.6543 2.00000 + 9 2.7547 2.00000 + 10 2.9564 2.00000 + 11 3.0734 2.00000 + 12 3.2314 2.00000 + 13 3.3036 2.00000 + 14 3.4281 2.00000 + 15 3.6154 2.00000 + 16 3.6377 2.00000 + 17 3.7518 2.00001 + 18 3.8042 2.00003 + 19 3.9839 2.00354 + 20 4.1563 2.05166 + 21 5.5829 -0.00000 + 22 5.8692 -0.00000 + 23 5.9983 -0.00000 + 24 6.0804 -0.00000 + 25 6.3714 -0.00000 + 26 6.5927 -0.00000 + 27 6.9599 -0.00000 + 28 6.9813 -0.00000 + 29 7.3903 -0.00000 + 30 7.5255 -0.00000 + 31 7.7356 -0.00000 + 32 7.8029 -0.00000 + 33 8.3262 -0.00000 + 34 8.4730 -0.00000 + 35 8.8563 -0.00000 + 36 9.1046 -0.00000 + 37 9.3497 -0.00000 + 38 9.4878 -0.00000 + 39 9.7109 -0.00000 + 40 9.9343 0.00000 + 41 10.2570 0.00000 + 42 10.4311 0.00000 + 43 10.7236 0.00000 + 44 10.9093 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2890 2.00000 + 2 1.4321 2.00000 + 3 1.6296 2.00000 + 4 1.7753 2.00000 + 5 2.3376 2.00000 + 6 2.3972 2.00000 + 7 2.4745 2.00000 + 8 2.5614 2.00000 + 9 2.7522 2.00000 + 10 2.8968 2.00000 + 11 3.3371 2.00000 + 12 3.4225 2.00000 + 13 3.5002 2.00000 + 14 3.5558 2.00000 + 15 3.5599 2.00000 + 16 3.6530 2.00000 + 17 3.7110 2.00000 + 18 3.8743 2.00025 + 19 3.9982 2.00476 + 20 4.1178 2.03429 + 21 5.4520 -0.00000 + 22 5.7306 -0.00000 + 23 5.7521 -0.00000 + 24 5.7737 -0.00000 + 25 6.4382 -0.00000 + 26 6.5335 -0.00000 + 27 6.6706 -0.00000 + 28 6.9182 -0.00000 + 29 7.4105 -0.00000 + 30 7.5438 -0.00000 + 31 7.8594 -0.00000 + 32 7.9235 -0.00000 + 33 8.1168 -0.00000 + 34 8.3100 -0.00000 + 35 9.1723 -0.00000 + 36 9.2713 -0.00000 + 37 9.4074 -0.00000 + 38 9.5995 -0.00000 + 39 9.6662 -0.00000 + 40 10.1178 0.00000 + 41 10.3791 0.00000 + 42 10.3866 0.00000 + 43 10.8319 0.00000 + 44 11.0334 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1865 2.00000 + 2 1.2971 2.00000 + 3 2.2215 2.00000 + 4 2.2700 2.00000 + 5 2.2807 2.00000 + 6 2.3276 2.00000 + 7 2.3854 2.00000 + 8 2.4025 2.00000 + 9 2.5345 2.00000 + 10 2.8753 2.00000 + 11 3.1892 2.00000 + 12 3.3060 2.00000 + 13 3.3208 2.00000 + 14 3.4434 2.00000 + 15 3.4506 2.00000 + 16 3.5118 2.00000 + 17 3.6068 2.00000 + 18 3.7223 2.00000 + 19 3.7266 2.00000 + 20 3.9422 2.00139 + 21 5.9997 -0.00000 + 22 6.0850 -0.00000 + 23 6.2705 -0.00000 + 24 6.4786 -0.00000 + 25 6.5475 -0.00000 + 26 6.6799 -0.00000 + 27 7.1484 -0.00000 + 28 7.2817 -0.00000 + 29 7.5537 -0.00000 + 30 7.6531 -0.00000 + 31 7.9907 -0.00000 + 32 8.0470 -0.00000 + 33 8.1713 -0.00000 + 34 8.3953 -0.00000 + 35 8.5060 -0.00000 + 36 9.0992 -0.00000 + 37 9.1711 -0.00000 + 38 9.2410 -0.00000 + 39 9.5302 -0.00000 + 40 9.6378 -0.00000 + 41 9.7796 -0.00000 + 42 9.9313 0.00000 + 43 10.6796 0.00000 + 44 10.9001 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2055 2.00000 + 2 1.3163 2.00000 + 3 1.9457 2.00000 + 4 2.0580 2.00000 + 5 2.2918 2.00000 + 6 2.4223 2.00000 + 7 2.5300 2.00000 + 8 2.6096 2.00000 + 9 2.7320 2.00000 + 10 2.9006 2.00000 + 11 2.9942 2.00000 + 12 3.1340 2.00000 + 13 3.2434 2.00000 + 14 3.5076 2.00000 + 15 3.5188 2.00000 + 16 3.6281 2.00000 + 17 3.6918 2.00000 + 18 3.7098 2.00000 + 19 3.8304 2.00007 + 20 3.9579 2.00200 + 21 5.9462 -0.00000 + 22 6.0007 -0.00000 + 23 6.0891 -0.00000 + 24 6.3014 -0.00000 + 25 6.4544 -0.00000 + 26 6.6134 -0.00000 + 27 7.1251 -0.00000 + 28 7.2257 -0.00000 + 29 7.5501 -0.00000 + 30 7.6752 -0.00000 + 31 7.9388 -0.00000 + 32 8.1138 -0.00000 + 33 8.2304 -0.00000 + 34 8.4546 -0.00000 + 35 8.6822 -0.00000 + 36 9.0671 -0.00000 + 37 9.1350 -0.00000 + 38 9.2745 -0.00000 + 39 9.5579 -0.00000 + 40 9.7306 -0.00000 + 41 9.8808 -0.00000 + 42 10.0849 0.00000 + 43 10.6681 0.00000 + 44 10.8688 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2633 2.00000 + 2 1.3748 2.00000 + 3 1.6991 2.00000 + 4 1.8129 2.00000 + 5 2.3510 2.00000 + 6 2.4826 2.00000 + 7 2.5975 2.00000 + 8 2.7783 2.00000 + 9 2.8854 2.00000 + 10 2.9548 2.00000 + 11 3.0363 2.00000 + 12 3.0607 2.00000 + 13 3.1242 2.00000 + 14 3.3586 2.00000 + 15 3.7078 2.00000 + 16 3.7110 2.00000 + 17 3.7818 2.00002 + 18 3.8589 2.00016 + 19 3.9375 2.00124 + 20 3.9969 2.00465 + 21 5.6603 -0.00000 + 22 5.7910 -0.00000 + 23 5.8807 -0.00000 + 24 5.8845 -0.00000 + 25 6.4471 -0.00000 + 26 6.5157 -0.00000 + 27 7.0053 -0.00000 + 28 7.0080 -0.00000 + 29 7.6051 -0.00000 + 30 7.7672 -0.00000 + 31 7.9286 -0.00000 + 32 8.1440 -0.00000 + 33 8.2222 -0.00000 + 34 8.5529 -0.00000 + 35 8.7953 -0.00000 + 36 9.1558 -0.00000 + 37 9.1636 -0.00000 + 38 9.3516 -0.00000 + 39 9.7292 -0.00000 + 40 9.9611 0.00000 + 41 10.0301 0.00000 + 42 10.3454 0.00000 + 43 10.6221 0.00000 + 44 10.9156 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3622 2.00000 + 2 1.4748 2.00000 + 3 1.5060 2.00000 + 4 1.6196 2.00000 + 5 2.4498 2.00000 + 6 2.5822 2.00000 + 7 2.5872 2.00000 + 8 2.7157 2.00000 + 9 2.7266 2.00000 + 10 2.8603 2.00000 + 11 3.0608 2.00000 + 12 3.2013 2.00000 + 13 3.4510 2.00000 + 14 3.5013 2.00000 + 15 3.7263 2.00000 + 16 3.7374 2.00000 + 17 3.7744 2.00001 + 18 3.9276 2.00098 + 19 3.9455 2.00150 + 20 4.0179 2.00703 + 21 5.4633 -0.00000 + 22 5.5859 -0.00000 + 23 5.6670 -0.00000 + 24 5.6831 -0.00000 + 25 6.4856 -0.00000 + 26 6.5238 -0.00000 + 27 6.7560 -0.00000 + 28 6.8679 -0.00000 + 29 7.6613 -0.00000 + 30 7.8574 -0.00000 + 31 7.8689 -0.00000 + 32 8.0705 -0.00000 + 33 8.2901 -0.00000 + 34 8.6706 -0.00000 + 35 8.8211 -0.00000 + 36 9.0680 -0.00000 + 37 9.3245 -0.00000 + 38 9.4429 -0.00000 + 39 9.8164 -0.00000 + 40 10.0785 0.00000 + 41 10.2495 0.00000 + 42 10.4965 0.00000 + 43 10.6231 0.00000 + 44 10.8380 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.1999 2.00000 + 2 1.7885 2.00000 + 3 1.8323 2.00000 + 4 2.0403 2.00000 + 5 2.2397 2.00000 + 6 2.2893 2.00000 + 7 2.4942 2.00000 + 8 2.7378 2.00000 + 9 2.7667 2.00000 + 10 2.8552 2.00000 + 11 2.8615 2.00000 + 12 2.9067 2.00000 + 13 3.0793 2.00000 + 14 3.1049 2.00000 + 15 3.4177 2.00000 + 16 3.4276 2.00000 + 17 3.6034 2.00000 + 18 3.6163 2.00000 + 19 3.6735 2.00000 + 20 4.3647 1.73855 + 21 6.1191 -0.00000 + 22 6.4643 -0.00000 + 23 6.5228 -0.00000 + 24 7.0682 -0.00000 + 25 7.1588 -0.00000 + 26 7.2347 -0.00000 + 27 7.2367 -0.00000 + 28 7.3127 -0.00000 + 29 7.4334 -0.00000 + 30 7.5291 -0.00000 + 31 7.5811 -0.00000 + 32 7.8726 -0.00000 + 33 8.1353 -0.00000 + 34 8.2010 -0.00000 + 35 8.5855 -0.00000 + 36 9.2071 -0.00000 + 37 9.3537 -0.00000 + 38 9.3725 -0.00000 + 39 9.4803 -0.00000 + 40 9.5248 -0.00000 + 41 9.6635 -0.00000 + 42 9.7287 -0.00000 + 43 10.0144 0.00000 + 44 10.6822 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2188 2.00000 + 2 1.8071 2.00000 + 3 1.8531 2.00000 + 4 1.9602 2.00000 + 5 2.0607 2.00000 + 6 2.4989 2.00000 + 7 2.5173 2.00000 + 8 2.6016 2.00000 + 9 2.6334 2.00000 + 10 2.7943 2.00000 + 11 2.7979 2.00000 + 12 3.1231 2.00000 + 13 3.1892 2.00000 + 14 3.2113 2.00000 + 15 3.3903 2.00000 + 16 3.4300 2.00000 + 17 3.6059 2.00000 + 18 3.7293 2.00000 + 19 3.7819 2.00002 + 20 4.3654 1.73467 + 21 6.0581 -0.00000 + 22 6.1816 -0.00000 + 23 6.4022 -0.00000 + 24 6.8082 -0.00000 + 25 6.8942 -0.00000 + 26 7.1342 -0.00000 + 27 7.2623 -0.00000 + 28 7.2713 -0.00000 + 29 7.3998 -0.00000 + 30 7.6125 -0.00000 + 31 7.6188 -0.00000 + 32 7.8451 -0.00000 + 33 8.3125 -0.00000 + 34 8.4410 -0.00000 + 35 8.6500 -0.00000 + 36 9.0626 -0.00000 + 37 9.1922 -0.00000 + 38 9.4168 -0.00000 + 39 9.5477 -0.00000 + 40 9.6819 -0.00000 + 41 9.8911 -0.00000 + 42 9.8913 -0.00000 + 43 10.2715 0.00000 + 44 10.6316 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2765 2.00000 + 2 1.7128 2.00000 + 3 1.8638 2.00000 + 4 1.9153 2.00000 + 5 2.1215 2.00000 + 6 2.2882 2.00000 + 7 2.3637 2.00000 + 8 2.5616 2.00000 + 9 2.5667 2.00000 + 10 2.8270 2.00000 + 11 2.9706 2.00000 + 12 3.0670 2.00000 + 13 3.2613 2.00000 + 14 3.4315 2.00000 + 15 3.5101 2.00000 + 16 3.6806 2.00000 + 17 3.7118 2.00000 + 18 3.8199 2.00005 + 19 3.9336 2.00113 + 20 4.3458 1.83349 + 21 5.7380 -0.00000 + 22 5.9066 -0.00000 + 23 6.1057 -0.00000 + 24 6.2965 -0.00000 + 25 6.8114 -0.00000 + 26 6.8236 -0.00000 + 27 6.8925 -0.00000 + 28 7.2283 -0.00000 + 29 7.4811 -0.00000 + 30 7.7011 -0.00000 + 31 7.7435 -0.00000 + 32 7.8905 -0.00000 + 33 8.2162 -0.00000 + 34 8.4277 -0.00000 + 35 9.0577 -0.00000 + 36 9.1667 -0.00000 + 37 9.3512 -0.00000 + 38 9.4271 -0.00000 + 39 9.6099 -0.00000 + 40 9.9599 0.00000 + 41 10.2136 0.00000 + 42 10.2622 0.00000 + 43 10.4348 0.00000 + 44 10.7658 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3754 2.00000 + 2 1.5193 2.00000 + 3 1.9604 2.00000 + 4 2.0181 2.00000 + 5 2.1013 2.00000 + 6 2.1679 2.00000 + 7 2.2315 2.00000 + 8 2.3770 2.00000 + 9 2.6570 2.00000 + 10 2.7927 2.00000 + 11 2.9420 2.00000 + 12 3.0762 2.00000 + 13 3.5013 2.00000 + 14 3.6631 2.00000 + 15 3.6974 2.00000 + 16 3.7325 2.00000 + 17 3.8286 2.00007 + 18 3.8946 2.00042 + 19 4.0203 2.00737 + 20 4.2462 2.06437 + 21 5.5657 -0.00000 + 22 5.7721 -0.00000 + 23 5.7931 -0.00000 + 24 5.9151 -0.00000 + 25 6.6228 -0.00000 + 26 6.6530 -0.00000 + 27 6.8531 -0.00000 + 28 7.1162 -0.00000 + 29 7.5313 -0.00000 + 30 7.6453 -0.00000 + 31 7.8478 -0.00000 + 32 7.9933 -0.00000 + 33 8.0185 -0.00000 + 34 8.3347 -0.00000 + 35 9.2801 -0.00000 + 36 9.4147 -0.00000 + 37 9.4315 -0.00000 + 38 9.5709 -0.00000 + 39 9.7330 -0.00000 + 40 10.1742 0.00000 + 41 10.1800 0.00000 + 42 10.3766 0.00000 + 43 10.8239 0.00000 + 44 11.1213 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2367 2.00000 + 2 1.5846 2.00000 + 3 1.8748 2.00000 + 4 2.2497 2.00000 + 5 2.2958 2.00000 + 6 2.3285 2.00000 + 7 2.3364 2.00000 + 8 2.5914 2.00000 + 9 2.6886 2.00000 + 10 2.8976 2.00000 + 11 2.9424 2.00000 + 12 3.0755 2.00000 + 13 3.2484 2.00000 + 14 3.2725 2.00000 + 15 3.2745 2.00000 + 16 3.3271 2.00000 + 17 3.4580 2.00000 + 18 3.6763 2.00000 + 19 3.6906 2.00000 + 20 4.1563 2.05166 + 21 6.1324 -0.00000 + 22 6.3745 -0.00000 + 23 6.5069 -0.00000 + 24 6.7967 -0.00000 + 25 6.9850 -0.00000 + 26 7.1044 -0.00000 + 27 7.3881 -0.00000 + 28 7.5280 -0.00000 + 29 7.5569 -0.00000 + 30 7.5996 -0.00000 + 31 7.6399 -0.00000 + 32 8.1014 -0.00000 + 33 8.1935 -0.00000 + 34 8.2028 -0.00000 + 35 8.7888 -0.00000 + 36 9.0593 -0.00000 + 37 9.2984 -0.00000 + 38 9.4147 -0.00000 + 39 9.4823 -0.00000 + 40 9.6110 -0.00000 + 41 9.9063 -0.00000 + 42 10.0468 0.00000 + 43 10.0588 0.00000 + 44 10.7301 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2557 2.00000 + 2 1.6042 2.00000 + 3 1.8945 2.00000 + 4 1.9980 2.00000 + 5 2.2855 2.00000 + 6 2.3346 2.00000 + 7 2.3662 2.00000 + 8 2.6356 2.00000 + 9 2.6627 2.00000 + 10 2.9764 2.00000 + 11 3.0015 2.00000 + 12 3.0497 2.00000 + 13 3.1131 2.00000 + 14 3.2570 2.00000 + 15 3.3912 2.00000 + 16 3.5404 2.00000 + 17 3.5641 2.00000 + 18 3.6334 2.00000 + 19 3.7364 2.00000 + 20 4.1638 2.05503 + 21 6.0562 -0.00000 + 22 6.1111 -0.00000 + 23 6.4142 -0.00000 + 24 6.6203 -0.00000 + 25 6.7701 -0.00000 + 26 7.0536 -0.00000 + 27 7.2866 -0.00000 + 28 7.3716 -0.00000 + 29 7.5532 -0.00000 + 30 7.7091 -0.00000 + 31 7.7575 -0.00000 + 32 8.1687 -0.00000 + 33 8.3115 -0.00000 + 34 8.3994 -0.00000 + 35 8.7121 -0.00000 + 36 9.0869 -0.00000 + 37 9.1599 -0.00000 + 38 9.5434 -0.00000 + 39 9.5611 -0.00000 + 40 9.6455 -0.00000 + 41 10.0477 0.00000 + 42 10.1937 0.00000 + 43 10.2200 0.00000 + 44 10.7052 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3137 2.00000 + 2 1.6636 2.00000 + 3 1.7509 2.00000 + 4 1.9541 2.00000 + 5 2.1027 2.00000 + 6 2.3458 2.00000 + 7 2.3758 2.00000 + 8 2.4411 2.00000 + 9 2.7773 2.00000 + 10 2.8412 2.00000 + 11 3.0309 2.00000 + 12 3.1967 2.00000 + 13 3.3312 2.00000 + 14 3.4197 2.00000 + 15 3.5183 2.00000 + 16 3.5530 2.00000 + 17 3.6964 2.00000 + 18 3.7692 2.00001 + 19 3.8615 2.00017 + 20 4.1717 2.05851 + 21 5.6811 -0.00000 + 22 5.8574 -0.00000 + 23 6.0854 -0.00000 + 24 6.0952 -0.00000 + 25 6.7883 -0.00000 + 26 6.8691 -0.00000 + 27 7.0084 -0.00000 + 28 7.4677 -0.00000 + 29 7.5208 -0.00000 + 30 7.7125 -0.00000 + 31 7.8313 -0.00000 + 32 8.1109 -0.00000 + 33 8.2643 -0.00000 + 34 8.6048 -0.00000 + 35 8.9402 -0.00000 + 36 9.1806 -0.00000 + 37 9.3032 -0.00000 + 38 9.6162 -0.00000 + 39 9.6510 -0.00000 + 40 9.7959 -0.00000 + 41 10.1973 0.00000 + 42 10.3687 0.00000 + 43 10.5234 0.00000 + 44 10.7990 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4129 2.00000 + 2 1.5572 2.00000 + 3 1.7644 2.00000 + 4 1.9095 2.00000 + 5 2.0566 2.00000 + 6 2.2006 2.00000 + 7 2.4463 2.00000 + 8 2.5257 2.00000 + 9 2.5936 2.00000 + 10 2.6663 2.00000 + 11 3.2019 2.00000 + 12 3.3078 2.00000 + 13 3.5019 2.00000 + 14 3.5883 2.00000 + 15 3.6177 2.00000 + 16 3.6631 2.00000 + 17 3.7121 2.00000 + 18 3.8707 2.00022 + 19 3.9851 2.00363 + 20 4.1330 2.04093 + 21 5.4771 -0.00000 + 22 5.6701 -0.00000 + 23 5.7247 -0.00000 + 24 5.7295 -0.00000 + 25 6.7503 -0.00000 + 26 6.8204 -0.00000 + 27 6.8441 -0.00000 + 28 7.4907 -0.00000 + 29 7.5648 -0.00000 + 30 7.6543 -0.00000 + 31 7.9095 -0.00000 + 32 8.0494 -0.00000 + 33 8.0505 -0.00000 + 34 8.6265 -0.00000 + 35 9.2484 -0.00000 + 36 9.3660 -0.00000 + 37 9.5015 -0.00000 + 38 9.6275 -0.00000 + 39 9.6610 -0.00000 + 40 9.9629 0.00000 + 41 10.2570 0.00000 + 42 10.3943 0.00000 + 43 10.6536 0.00000 + 44 10.8206 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3115 2.00000 + 2 1.4265 2.00000 + 3 1.9603 2.00000 + 4 2.0898 2.00000 + 5 2.3494 2.00000 + 6 2.4067 2.00000 + 7 2.4541 2.00000 + 8 2.5174 2.00000 + 9 2.6867 2.00000 + 10 2.9823 2.00000 + 11 3.0104 2.00000 + 12 3.0395 2.00000 + 13 3.1026 2.00000 + 14 3.2014 2.00000 + 15 3.4407 2.00000 + 16 3.4752 2.00000 + 17 3.5290 2.00000 + 18 3.6462 2.00000 + 19 3.6627 2.00000 + 20 3.8281 2.00007 + 21 6.2197 -0.00000 + 22 6.3307 -0.00000 + 23 6.5642 -0.00000 + 24 6.6198 -0.00000 + 25 6.7351 -0.00000 + 26 6.7684 -0.00000 + 27 7.4868 -0.00000 + 28 7.5415 -0.00000 + 29 7.7821 -0.00000 + 30 7.8068 -0.00000 + 31 7.8910 -0.00000 + 32 7.9881 -0.00000 + 33 8.5105 -0.00000 + 34 8.5153 -0.00000 + 35 8.7004 -0.00000 + 36 9.1316 -0.00000 + 37 9.1729 -0.00000 + 38 9.2796 -0.00000 + 39 9.5336 -0.00000 + 40 9.6726 -0.00000 + 41 9.7673 -0.00000 + 42 10.0582 0.00000 + 43 10.5531 0.00000 + 44 10.7635 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3307 2.00000 + 2 1.4459 2.00000 + 3 1.9802 2.00000 + 4 2.0734 2.00000 + 5 2.1113 2.00000 + 6 2.1896 2.00000 + 7 2.6612 2.00000 + 8 2.7257 2.00000 + 9 2.7488 2.00000 + 10 2.8463 2.00000 + 11 2.8589 2.00000 + 12 3.0790 2.00000 + 13 3.2681 2.00000 + 14 3.3800 2.00000 + 15 3.3898 2.00000 + 16 3.4873 2.00000 + 17 3.6018 2.00000 + 18 3.6575 2.00000 + 19 3.6897 2.00000 + 20 3.8431 2.00010 + 21 6.1148 -0.00000 + 22 6.1443 -0.00000 + 23 6.2950 -0.00000 + 24 6.3741 -0.00000 + 25 6.7693 -0.00000 + 26 6.8749 -0.00000 + 27 7.3630 -0.00000 + 28 7.3746 -0.00000 + 29 7.7659 -0.00000 + 30 7.8542 -0.00000 + 31 7.9804 -0.00000 + 32 8.1580 -0.00000 + 33 8.4624 -0.00000 + 34 8.6291 -0.00000 + 35 8.7192 -0.00000 + 36 9.1688 -0.00000 + 37 9.2464 -0.00000 + 38 9.2730 -0.00000 + 39 9.5971 -0.00000 + 40 9.7889 -0.00000 + 41 9.8593 -0.00000 + 42 10.1215 0.00000 + 43 10.5491 0.00000 + 44 10.7094 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3891 2.00000 + 2 1.5049 2.00000 + 3 1.8277 2.00000 + 4 1.9443 2.00000 + 5 2.0411 2.00000 + 6 2.1710 2.00000 + 7 2.4768 2.00000 + 8 2.6088 2.00000 + 9 2.7645 2.00000 + 10 3.0721 2.00000 + 11 3.1336 2.00000 + 12 3.1759 2.00000 + 13 3.2324 2.00000 + 14 3.4056 2.00000 + 15 3.5561 2.00000 + 16 3.6158 2.00000 + 17 3.6408 2.00000 + 18 3.7768 2.00001 + 19 3.7829 2.00002 + 20 3.8871 2.00035 + 21 5.7116 -0.00000 + 22 5.8271 -0.00000 + 23 5.9130 -0.00000 + 24 5.9743 -0.00000 + 25 6.8263 -0.00000 + 26 6.8564 -0.00000 + 27 7.1720 -0.00000 + 28 7.3273 -0.00000 + 29 7.7658 -0.00000 + 30 7.8709 -0.00000 + 31 7.9714 -0.00000 + 32 8.2192 -0.00000 + 33 8.4476 -0.00000 + 34 8.6929 -0.00000 + 35 8.9002 -0.00000 + 36 9.2574 -0.00000 + 37 9.3432 -0.00000 + 38 9.4198 -0.00000 + 39 9.7107 -0.00000 + 40 9.9268 0.00000 + 41 10.0286 0.00000 + 42 10.3130 0.00000 + 43 10.5240 0.00000 + 44 10.8190 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4889 2.00000 + 2 1.6054 2.00000 + 3 1.6339 2.00000 + 4 1.7510 2.00000 + 5 2.1424 2.00000 + 6 2.2727 2.00000 + 7 2.2885 2.00000 + 8 2.4205 2.00000 + 9 2.8586 2.00000 + 10 2.9884 2.00000 + 11 3.1972 2.00000 + 12 3.3010 2.00000 + 13 3.4644 2.00000 + 14 3.5530 2.00000 + 15 3.5806 2.00000 + 16 3.6869 2.00000 + 17 3.7040 2.00000 + 18 3.8668 2.00020 + 19 3.8794 2.00028 + 20 3.9465 2.00154 + 21 5.4505 -0.00000 + 22 5.5321 -0.00000 + 23 5.6139 -0.00000 + 24 5.6475 -0.00000 + 25 6.8236 -0.00000 + 26 6.8513 -0.00000 + 27 7.0723 -0.00000 + 28 7.3339 -0.00000 + 29 7.8039 -0.00000 + 30 7.8921 -0.00000 + 31 7.9243 -0.00000 + 32 8.0578 -0.00000 + 33 8.4479 -0.00000 + 34 8.9156 -0.00000 + 35 8.9608 -0.00000 + 36 9.1924 -0.00000 + 37 9.4950 -0.00000 + 38 9.5572 -0.00000 + 39 9.7568 -0.00000 + 40 9.9224 -0.00000 + 41 10.1953 0.00000 + 42 10.4841 0.00000 + 43 10.5953 0.00000 + 44 10.8496 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3637 2.00000 + 2 1.5736 2.00000 + 3 1.9765 2.00000 + 4 2.2050 2.00000 + 5 2.2334 2.00000 + 6 2.3955 2.00000 + 7 2.4453 2.00000 + 8 2.5198 2.00000 + 9 2.6227 2.00000 + 10 2.6485 2.00000 + 11 2.9670 2.00000 + 12 3.0371 2.00000 + 13 3.1772 2.00000 + 14 3.1977 2.00000 + 15 3.2249 2.00000 + 16 3.2415 2.00000 + 17 3.3863 2.00000 + 18 3.4104 2.00000 + 19 3.9153 2.00072 + 20 4.1897 2.06539 + 21 6.3706 -0.00000 + 22 6.5851 -0.00000 + 23 6.8340 -0.00000 + 24 7.1217 -0.00000 + 25 7.2199 -0.00000 + 26 7.2388 -0.00000 + 27 7.2421 -0.00000 + 28 7.3888 -0.00000 + 29 7.7443 -0.00000 + 30 7.7829 -0.00000 + 31 7.7955 -0.00000 + 32 8.0531 -0.00000 + 33 8.2126 -0.00000 + 34 8.4389 -0.00000 + 35 8.7136 -0.00000 + 36 9.0743 -0.00000 + 37 9.1601 -0.00000 + 38 9.3634 -0.00000 + 39 9.4742 -0.00000 + 40 9.4772 -0.00000 + 41 9.5037 -0.00000 + 42 9.6444 -0.00000 + 43 9.6558 -0.00000 + 44 9.9269 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3829 2.00000 + 2 1.5930 2.00000 + 3 1.9962 2.00000 + 4 2.1213 2.00000 + 5 2.2368 2.00000 + 6 2.2466 2.00000 + 7 2.3491 2.00000 + 8 2.4976 2.00000 + 9 2.7189 2.00000 + 10 2.7942 2.00000 + 11 2.9201 2.00000 + 12 2.9478 2.00000 + 13 3.0351 2.00000 + 14 3.1817 2.00000 + 15 3.3072 2.00000 + 16 3.4770 2.00000 + 17 3.4787 2.00000 + 18 3.6081 2.00000 + 19 3.9402 2.00133 + 20 4.2003 2.06844 + 21 6.2247 -0.00000 + 22 6.2947 -0.00000 + 23 6.6270 -0.00000 + 24 6.7738 -0.00000 + 25 7.0826 -0.00000 + 26 7.1074 -0.00000 + 27 7.2834 -0.00000 + 28 7.3406 -0.00000 + 29 7.7182 -0.00000 + 30 7.7400 -0.00000 + 31 8.0459 -0.00000 + 32 8.2773 -0.00000 + 33 8.3180 -0.00000 + 34 8.6010 -0.00000 + 35 8.6966 -0.00000 + 36 8.9902 -0.00000 + 37 9.0287 -0.00000 + 38 9.3301 -0.00000 + 39 9.3809 -0.00000 + 40 9.6368 -0.00000 + 41 9.7033 -0.00000 + 42 9.7630 -0.00000 + 43 9.9457 0.00000 + 44 10.1287 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4413 2.00000 + 2 1.6518 2.00000 + 3 1.8797 2.00000 + 4 2.0484 2.00000 + 5 2.0984 2.00000 + 6 2.2917 2.00000 + 7 2.3206 2.00000 + 8 2.4914 2.00000 + 9 2.5564 2.00000 + 10 2.7154 2.00000 + 11 2.7389 2.00000 + 12 2.9589 2.00000 + 13 3.2221 2.00000 + 14 3.3587 2.00000 + 15 3.5907 2.00000 + 16 3.6985 2.00000 + 17 3.7284 2.00000 + 18 3.7760 2.00001 + 19 4.0079 2.00579 + 20 4.2158 2.07081 + 21 5.8379 -0.00000 + 22 5.8982 -0.00000 + 23 6.1731 -0.00000 + 24 6.2439 -0.00000 + 25 6.9539 -0.00000 + 26 7.0084 -0.00000 + 27 7.0825 -0.00000 + 28 7.1829 -0.00000 + 29 7.7409 -0.00000 + 30 7.7703 -0.00000 + 31 8.1415 -0.00000 + 32 8.1788 -0.00000 + 33 8.4541 -0.00000 + 34 8.8400 -0.00000 + 35 8.9988 -0.00000 + 36 9.0021 -0.00000 + 37 9.1407 -0.00000 + 38 9.3631 -0.00000 + 39 9.3650 -0.00000 + 40 9.7043 -0.00000 + 41 10.0293 0.00000 + 42 10.0725 0.00000 + 43 10.3594 0.00000 + 44 10.5614 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5412 2.00000 + 2 1.6861 2.00000 + 3 1.7520 2.00000 + 4 1.8962 2.00000 + 5 2.1600 2.00000 + 6 2.3041 2.00000 + 7 2.3897 2.00000 + 8 2.4192 2.00000 + 9 2.5308 2.00000 + 10 2.5607 2.00000 + 11 2.6586 2.00000 + 12 2.7959 2.00000 + 13 3.5863 2.00000 + 14 3.6499 2.00000 + 15 3.7395 2.00000 + 16 3.7639 2.00001 + 17 3.9045 2.00055 + 18 3.9723 2.00276 + 19 4.0175 2.00698 + 20 4.1663 2.05616 + 21 5.6033 -0.00000 + 22 5.6832 -0.00000 + 23 5.7738 -0.00000 + 24 5.8250 -0.00000 + 25 6.8539 -0.00000 + 26 6.8979 -0.00000 + 27 6.9634 -0.00000 + 28 7.0795 -0.00000 + 29 7.8019 -0.00000 + 30 7.8455 -0.00000 + 31 7.9612 -0.00000 + 32 7.9815 -0.00000 + 33 8.6135 -0.00000 + 34 8.8841 -0.00000 + 35 9.1757 -0.00000 + 36 9.1896 -0.00000 + 37 9.3322 -0.00000 + 38 9.3497 -0.00000 + 39 9.4519 -0.00000 + 40 9.6423 -0.00000 + 41 10.3332 0.00000 + 42 10.5509 0.00000 + 43 10.6139 0.00000 + 44 10.9298 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4024 2.00000 + 2 1.6143 2.00000 + 3 1.7656 2.00000 + 4 1.9924 2.00000 + 5 2.4456 2.00000 + 6 2.4858 2.00000 + 7 2.5182 2.00000 + 8 2.6530 2.00000 + 9 2.7094 2.00000 + 10 2.8104 2.00000 + 11 2.8140 2.00000 + 12 2.8578 2.00000 + 13 3.0109 2.00000 + 14 3.0541 2.00000 + 15 3.3810 2.00000 + 16 3.4291 2.00000 + 17 3.5214 2.00000 + 18 3.5486 2.00000 + 19 3.6812 2.00000 + 20 3.9458 2.00152 + 21 6.4092 -0.00000 + 22 6.5605 -0.00000 + 23 6.6228 -0.00000 + 24 6.8413 -0.00000 + 25 7.2613 -0.00000 + 26 7.2942 -0.00000 + 27 7.4836 -0.00000 + 28 7.5418 -0.00000 + 29 7.6275 -0.00000 + 30 7.6304 -0.00000 + 31 7.7803 -0.00000 + 32 7.9860 -0.00000 + 33 8.3582 -0.00000 + 34 8.7021 -0.00000 + 35 8.8378 -0.00000 + 36 9.0575 -0.00000 + 37 9.2223 -0.00000 + 38 9.2418 -0.00000 + 39 9.5226 -0.00000 + 40 9.7080 -0.00000 + 41 9.8109 -0.00000 + 42 9.8403 -0.00000 + 43 9.8474 -0.00000 + 44 10.1709 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4217 2.00000 + 2 1.6338 2.00000 + 3 1.7855 2.00000 + 4 2.0116 2.00000 + 5 2.1686 2.00000 + 6 2.3693 2.00000 + 7 2.5233 2.00000 + 8 2.5770 2.00000 + 9 2.7290 2.00000 + 10 2.7739 2.00000 + 11 2.9012 2.00000 + 12 3.0135 2.00000 + 13 3.1442 2.00000 + 14 3.2304 2.00000 + 15 3.3085 2.00000 + 16 3.4048 2.00000 + 17 3.5948 2.00000 + 18 3.6555 2.00000 + 19 3.7152 2.00000 + 20 3.9614 2.00217 + 21 6.2265 -0.00000 + 22 6.2348 -0.00000 + 23 6.5364 -0.00000 + 24 6.6048 -0.00000 + 25 7.0847 -0.00000 + 26 7.0966 -0.00000 + 27 7.4738 -0.00000 + 28 7.5084 -0.00000 + 29 7.7365 -0.00000 + 30 7.8361 -0.00000 + 31 7.9255 -0.00000 + 32 8.0801 -0.00000 + 33 8.4075 -0.00000 + 34 8.6681 -0.00000 + 35 8.8385 -0.00000 + 36 9.0697 -0.00000 + 37 9.1495 -0.00000 + 38 9.3001 -0.00000 + 39 9.6326 -0.00000 + 40 9.7332 -0.00000 + 41 9.7631 -0.00000 + 42 9.9713 0.00000 + 43 10.1603 0.00000 + 44 10.3088 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4804 2.00000 + 2 1.6928 2.00000 + 3 1.8456 2.00000 + 4 1.9192 2.00000 + 5 2.0750 2.00000 + 6 2.1317 2.00000 + 7 2.2886 2.00000 + 8 2.5118 2.00000 + 9 2.6248 2.00000 + 10 2.8584 2.00000 + 11 3.0028 2.00000 + 12 3.1716 2.00000 + 13 3.2930 2.00000 + 14 3.3855 2.00000 + 15 3.4942 2.00000 + 16 3.5778 2.00000 + 17 3.7202 2.00000 + 18 3.7489 2.00001 + 19 3.8276 2.00006 + 20 4.0018 2.00512 + 21 5.7796 -0.00000 + 22 5.8542 -0.00000 + 23 6.0794 -0.00000 + 24 6.0850 -0.00000 + 25 7.0729 -0.00000 + 26 7.0925 -0.00000 + 27 7.2544 -0.00000 + 28 7.4132 -0.00000 + 29 7.7839 -0.00000 + 30 7.8418 -0.00000 + 31 8.1072 -0.00000 + 32 8.2035 -0.00000 + 33 8.3994 -0.00000 + 34 8.7618 -0.00000 + 35 8.9471 -0.00000 + 36 9.1341 -0.00000 + 37 9.2120 -0.00000 + 38 9.3810 -0.00000 + 39 9.6751 -0.00000 + 40 9.8691 -0.00000 + 41 9.8996 -0.00000 + 42 10.1029 0.00000 + 43 10.5010 0.00000 + 44 10.7142 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5806 2.00000 + 2 1.7259 2.00000 + 3 1.7930 2.00000 + 4 1.9308 2.00000 + 5 1.9562 2.00000 + 6 2.0965 2.00000 + 7 2.1755 2.00000 + 8 2.3227 2.00000 + 9 2.7178 2.00000 + 10 2.8483 2.00000 + 11 2.9498 2.00000 + 12 3.0695 2.00000 + 13 3.5871 2.00000 + 14 3.6407 2.00000 + 15 3.6796 2.00000 + 16 3.7053 2.00000 + 17 3.7814 2.00002 + 18 3.8953 2.00043 + 19 3.9012 2.00050 + 20 4.0194 2.00724 + 21 5.5067 -0.00000 + 22 5.5756 -0.00000 + 23 5.6662 -0.00000 + 24 5.6746 -0.00000 + 25 7.0647 -0.00000 + 26 7.1130 -0.00000 + 27 7.1210 -0.00000 + 28 7.3636 -0.00000 + 29 7.7973 -0.00000 + 30 7.8679 -0.00000 + 31 8.0381 -0.00000 + 32 8.0528 -0.00000 + 33 8.4277 -0.00000 + 34 8.9866 -0.00000 + 35 9.0570 -0.00000 + 36 9.2981 -0.00000 + 37 9.3362 -0.00000 + 38 9.4855 -0.00000 + 39 9.5302 -0.00000 + 40 9.7616 -0.00000 + 41 10.1182 0.00000 + 42 10.3345 0.00000 + 43 10.6358 0.00000 + 44 10.8804 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4808 2.00000 + 2 1.6011 2.00000 + 3 1.6966 2.00000 + 4 1.8221 2.00000 + 5 2.5197 2.00000 + 6 2.5658 2.00000 + 7 2.6200 2.00000 + 8 2.6727 2.00000 + 9 2.7325 2.00000 + 10 2.7796 2.00000 + 11 2.8574 2.00000 + 12 2.8861 2.00000 + 13 2.9595 2.00000 + 14 3.1878 2.00000 + 15 3.3187 2.00000 + 16 3.5089 2.00000 + 17 3.5634 2.00000 + 18 3.6010 2.00000 + 19 3.6023 2.00000 + 20 3.6036 2.00000 + 21 6.4572 -0.00000 + 22 6.4976 -0.00000 + 23 6.5524 -0.00000 + 24 6.6351 -0.00000 + 25 7.0897 -0.00000 + 26 7.1153 -0.00000 + 27 7.4509 -0.00000 + 28 7.5134 -0.00000 + 29 7.9203 -0.00000 + 30 7.9406 -0.00000 + 31 7.9665 -0.00000 + 32 7.9981 -0.00000 + 33 8.5069 -0.00000 + 34 8.6942 -0.00000 + 35 8.8087 -0.00000 + 36 8.9388 -0.00000 + 37 9.2527 -0.00000 + 38 9.3883 -0.00000 + 39 9.4237 -0.00000 + 40 9.5376 -0.00000 + 41 10.2102 0.00000 + 42 10.3380 0.00000 + 43 10.3885 0.00000 + 44 10.5460 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5003 2.00000 + 2 1.6207 2.00000 + 3 1.7164 2.00000 + 4 1.8419 2.00000 + 5 2.2467 2.00000 + 6 2.3643 2.00000 + 7 2.4606 2.00000 + 8 2.5827 2.00000 + 9 2.8842 2.00000 + 10 2.8931 2.00000 + 11 3.0040 2.00000 + 12 3.1320 2.00000 + 13 3.1351 2.00000 + 14 3.2348 2.00000 + 15 3.3691 2.00000 + 16 3.4309 2.00000 + 17 3.5643 2.00000 + 18 3.6103 2.00000 + 19 3.6110 2.00000 + 20 3.6343 2.00000 + 21 6.2449 -0.00000 + 22 6.2544 -0.00000 + 23 6.3765 -0.00000 + 24 6.3974 -0.00000 + 25 7.1165 -0.00000 + 26 7.1532 -0.00000 + 27 7.4303 -0.00000 + 28 7.4758 -0.00000 + 29 7.9398 -0.00000 + 30 7.9512 -0.00000 + 31 8.0091 -0.00000 + 32 8.0620 -0.00000 + 33 8.6198 -0.00000 + 34 8.6637 -0.00000 + 35 8.8268 -0.00000 + 36 9.0579 -0.00000 + 37 9.2865 -0.00000 + 38 9.3503 -0.00000 + 39 9.5163 -0.00000 + 40 9.6031 -0.00000 + 41 10.2172 0.00000 + 42 10.3304 0.00000 + 43 10.4838 0.00000 + 44 10.6544 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5594 2.00000 + 2 1.6802 2.00000 + 3 1.7762 2.00000 + 4 1.9014 2.00000 + 5 2.0020 2.00000 + 6 2.1217 2.00000 + 7 2.2194 2.00000 + 8 2.3447 2.00000 + 9 2.9601 2.00000 + 10 3.1424 2.00000 + 11 3.2434 2.00000 + 12 3.2558 2.00000 + 13 3.3581 2.00000 + 14 3.3971 2.00000 + 15 3.4838 2.00000 + 16 3.4993 2.00000 + 17 3.5602 2.00000 + 18 3.6530 2.00000 + 19 3.6618 2.00000 + 20 3.7020 2.00000 + 21 5.7887 -0.00000 + 22 5.8511 -0.00000 + 23 5.9120 -0.00000 + 24 5.9543 -0.00000 + 25 7.1880 -0.00000 + 26 7.2017 -0.00000 + 27 7.4069 -0.00000 + 28 7.4816 -0.00000 + 29 7.8865 -0.00000 + 30 7.9211 -0.00000 + 31 7.9988 -0.00000 + 32 8.1665 -0.00000 + 33 8.7072 -0.00000 + 34 8.7350 -0.00000 + 35 8.9429 -0.00000 + 36 9.1636 -0.00000 + 37 9.3420 -0.00000 + 38 9.3623 -0.00000 + 39 9.5935 -0.00000 + 40 9.6514 -0.00000 + 41 10.3089 0.00000 + 42 10.4390 0.00000 + 43 10.6147 0.00000 + 44 10.8175 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6602 2.00000 + 2 1.7811 2.00000 + 3 1.8061 2.00000 + 4 1.8759 2.00000 + 5 1.9304 2.00000 + 6 2.0049 2.00000 + 7 2.0260 2.00000 + 8 2.1524 2.00000 + 9 3.0450 2.00000 + 10 3.1529 2.00000 + 11 3.2442 2.00000 + 12 3.2972 2.00000 + 13 3.4572 2.00000 + 14 3.4946 2.00000 + 15 3.5445 2.00000 + 16 3.6183 2.00000 + 17 3.7157 2.00000 + 18 3.7940 2.00002 + 19 3.8224 2.00006 + 20 3.8301 2.00007 + 21 5.4647 -0.00000 + 22 5.5139 -0.00000 + 23 5.5323 -0.00000 + 24 5.5685 -0.00000 + 25 7.2159 -0.00000 + 26 7.2456 -0.00000 + 27 7.3985 -0.00000 + 28 7.5334 -0.00000 + 29 7.8651 -0.00000 + 30 7.9209 -0.00000 + 31 7.9522 -0.00000 + 32 8.1007 -0.00000 + 33 8.6499 -0.00000 + 34 8.9217 -0.00000 + 35 9.0945 -0.00000 + 36 9.1379 -0.00000 + 37 9.3910 -0.00000 + 38 9.4411 -0.00000 + 39 9.5336 -0.00000 + 40 9.5983 -0.00000 + 41 10.4064 0.00000 + 42 10.5745 0.00000 + 43 10.7155 0.00000 + 44 10.9046 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.972 -0.014 0.044 0.015 + -0.004 -0.014 -0.240 -0.001 0.002 + 0.012 0.044 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.390 -0.037 0.038 -0.112 -0.039 + -0.037 0.001 -0.002 0.003 0.002 + 0.038 -0.002 0.221 -0.007 0.011 + -0.112 0.003 -0.007 0.139 0.002 + -0.039 0.002 0.011 0.002 0.209 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1647: real time 0.1647 + FORLOC: cpu time 0.0099: real time 0.0099 + FORNL : cpu time 13.4355: real time 13.4368 + STRESS: cpu time 5.4483: real time 5.4488 + FORCOR: cpu time 0.0306: real time 0.0306 + FORHAR: cpu time 0.0215: real time 0.0215 + MIXING: cpu time 0.0049: real time 0.0049 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.67185 14.67185 14.67185 + Ewald -143.47708 -148.58496 -130.82142 0.00000 0.00000 -0.00000 + Hartree 1.18517 0.69109 1.05960 -0.00000 -0.00000 0.00000 + E(xc) -108.54461 -108.98475 -107.80364 0.00000 0.00000 -0.00000 + Local 7.66848 2.24583 11.56348 0.00000 0.00000 -0.00000 + n-local 130.54094 131.17589 128.16160 0.01937 0.07449 -0.21268 + augment 7.40044 7.55004 7.08065 -0.00000 -0.00000 0.00000 + Kinetic 215.57192 225.90838 200.80164 0.07456 -1.13538 -0.89854 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 125.01712 124.67337 124.71377 0.00000 0.00000 0.00000 + in kB 701.12243 699.19465 699.42120 0.00000 0.00000 0.00000 + external pressure = -0.09 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.68 + direct lattice vectors reciprocal lattice vectors + 6.887867809 0.000000000 0.000000000 0.145182810 0.000000000 0.000000000 + 0.000000000 8.169175765 0.000000000 0.000000000 0.122411370 0.000000000 + 0.000000000 0.000000000 5.077186918 0.000000000 0.000000000 0.196959461 + + length of vectors + 6.887867809 8.169175765 5.077186918 0.145182810 0.122411370 0.196959461 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.280E-01 0.969E-01 -.265E+00 -.446E+00 0.356E+00 -.115E+01 0.472E+00 -.453E+00 0.142E+01 0.442E-06 -.613E-07 0.904E-06 + 0.280E-01 -.969E-01 -.265E+00 0.446E+00 -.356E+00 -.115E+01 -.472E+00 0.453E+00 0.142E+01 -.442E-06 0.614E-07 0.904E-06 + -.280E-01 -.969E-01 -.265E+00 -.446E+00 -.356E+00 -.115E+01 0.472E+00 0.453E+00 0.142E+01 0.442E-06 0.614E-07 0.904E-06 + 0.280E-01 0.969E-01 -.265E+00 0.446E+00 0.356E+00 -.115E+01 -.472E+00 -.453E+00 0.142E+01 -.442E-06 -.614E-07 0.904E-06 + -.280E-01 0.969E-01 -.265E+00 -.446E+00 0.356E+00 -.115E+01 0.472E+00 -.453E+00 0.142E+01 0.442E-06 -.614E-07 0.904E-06 + 0.280E-01 -.969E-01 -.265E+00 0.446E+00 -.356E+00 -.115E+01 -.472E+00 0.453E+00 0.142E+01 -.442E-06 0.614E-07 0.904E-06 + -.280E-01 -.969E-01 -.265E+00 -.446E+00 -.356E+00 -.115E+01 0.472E+00 0.453E+00 0.142E+01 0.442E-06 0.614E-07 0.904E-06 + 0.280E-01 0.969E-01 -.265E+00 0.446E+00 0.356E+00 -.115E+01 -.472E+00 -.453E+00 0.142E+01 -.442E-06 -.613E-07 0.904E-06 + -.295E-01 -.378E-01 0.132E+00 -.294E-01 -.231E+00 0.711E+00 0.740E-01 0.270E+00 -.849E+00 0.518E-06 0.699E-06 0.238E-07 + 0.295E-01 0.378E-01 0.132E+00 0.294E-01 0.231E+00 0.711E+00 -.740E-01 -.270E+00 -.849E+00 -.518E-06 -.699E-06 0.238E-07 + -.295E-01 0.378E-01 0.132E+00 -.294E-01 0.231E+00 0.711E+00 0.740E-01 -.270E+00 -.849E+00 0.518E-06 -.699E-06 0.238E-07 + 0.295E-01 -.378E-01 0.132E+00 0.294E-01 -.231E+00 0.711E+00 -.740E-01 0.270E+00 -.849E+00 -.518E-06 0.699E-06 0.238E-07 + -.295E-01 -.378E-01 0.132E+00 -.294E-01 -.231E+00 0.711E+00 0.740E-01 0.270E+00 -.849E+00 0.518E-06 0.699E-06 0.238E-07 + 0.295E-01 0.378E-01 0.132E+00 0.294E-01 0.231E+00 0.711E+00 -.740E-01 -.270E+00 -.849E+00 -.518E-06 -.699E-06 0.238E-07 + -.295E-01 0.378E-01 0.132E+00 -.294E-01 0.231E+00 0.711E+00 0.740E-01 -.270E+00 -.849E+00 0.518E-06 -.699E-06 0.238E-07 + 0.295E-01 -.378E-01 0.132E+00 0.294E-01 -.231E+00 0.711E+00 -.740E-01 0.270E+00 -.849E+00 -.518E-06 0.699E-06 0.238E-07 + -.275E+00 -.163E+00 0.302E-01 -.651E+00 -.265E-01 0.566E-01 0.917E+00 0.194E+00 -.104E+00 0.120E-07 -.331E-06 -.117E-05 + 0.275E+00 0.163E+00 0.302E-01 0.651E+00 0.265E-01 0.566E-01 -.917E+00 -.194E+00 -.104E+00 -.120E-07 0.332E-06 -.117E-05 + -.275E+00 0.163E+00 0.302E-01 -.651E+00 0.265E-01 0.566E-01 0.917E+00 -.194E+00 -.104E+00 0.120E-07 0.332E-06 -.117E-05 + 0.275E+00 -.163E+00 0.302E-01 0.651E+00 -.265E-01 0.566E-01 -.917E+00 0.194E+00 -.104E+00 -.120E-07 -.332E-06 -.117E-05 + -.275E+00 -.163E+00 0.302E-01 -.651E+00 -.265E-01 0.566E-01 0.917E+00 0.194E+00 -.104E+00 0.120E-07 -.332E-06 -.117E-05 + 0.275E+00 0.163E+00 0.302E-01 0.651E+00 0.265E-01 0.566E-01 -.917E+00 -.194E+00 -.104E+00 -.120E-07 0.332E-06 -.117E-05 + -.275E+00 0.163E+00 0.302E-01 -.651E+00 0.265E-01 0.566E-01 0.917E+00 -.194E+00 -.104E+00 0.120E-07 0.332E-06 -.117E-05 + 0.275E+00 -.163E+00 0.302E-01 0.651E+00 -.265E-01 0.566E-01 -.917E+00 0.194E+00 -.104E+00 -.120E-07 -.331E-06 -.117E-05 + -.567E-01 -.717E-01 0.122E-01 -.197E+00 0.696E-01 0.416E-01 0.252E+00 0.576E-02 -.482E-01 -.647E-08 0.232E-06 0.105E-06 + 0.567E-01 0.717E-01 0.122E-01 0.197E+00 -.696E-01 0.416E-01 -.252E+00 -.576E-02 -.482E-01 0.647E-08 -.232E-06 0.105E-06 + -.567E-01 0.717E-01 0.122E-01 -.197E+00 -.696E-01 0.416E-01 0.252E+00 -.576E-02 -.482E-01 -.634E-08 -.232E-06 0.105E-06 + 0.567E-01 -.717E-01 0.122E-01 0.197E+00 0.696E-01 0.416E-01 -.252E+00 0.576E-02 -.482E-01 0.634E-08 0.232E-06 0.105E-06 + -.567E-01 -.717E-01 0.122E-01 -.197E+00 0.696E-01 0.416E-01 0.252E+00 0.576E-02 -.482E-01 -.647E-08 0.232E-06 0.105E-06 + 0.567E-01 0.717E-01 0.122E-01 0.197E+00 -.696E-01 0.416E-01 -.252E+00 -.576E-02 -.482E-01 0.647E-08 -.232E-06 0.105E-06 + -.567E-01 0.717E-01 0.122E-01 -.197E+00 -.696E-01 0.416E-01 0.252E+00 -.576E-02 -.482E-01 -.634E-08 -.232E-06 0.105E-06 + 0.567E-01 -.717E-01 0.122E-01 0.197E+00 0.696E-01 0.416E-01 -.252E+00 0.576E-02 -.482E-01 0.634E-08 0.232E-06 0.105E-06 + 0.454E-01 0.161E+00 0.981E-01 0.208E+00 -.143E+00 0.338E+00 -.249E+00 -.900E-02 -.427E+00 -.102E-05 0.354E-06 0.139E-06 + -.454E-01 -.161E+00 0.981E-01 -.208E+00 0.143E+00 0.338E+00 0.249E+00 0.900E-02 -.427E+00 0.102E-05 -.354E-06 0.139E-06 + 0.454E-01 -.161E+00 0.981E-01 0.208E+00 0.143E+00 0.338E+00 -.249E+00 0.900E-02 -.427E+00 -.102E-05 -.355E-06 0.139E-06 + -.454E-01 0.161E+00 0.981E-01 -.208E+00 -.143E+00 0.338E+00 0.249E+00 -.900E-02 -.427E+00 0.102E-05 0.354E-06 0.139E-06 + 0.454E-01 0.161E+00 0.981E-01 0.208E+00 -.143E+00 0.338E+00 -.249E+00 -.900E-02 -.427E+00 -.102E-05 0.354E-06 0.139E-06 + -.454E-01 -.161E+00 0.981E-01 -.208E+00 0.143E+00 0.338E+00 0.249E+00 0.900E-02 -.427E+00 0.102E-05 -.355E-06 0.139E-06 + 0.454E-01 -.161E+00 0.981E-01 0.208E+00 0.143E+00 0.338E+00 -.249E+00 0.900E-02 -.427E+00 -.102E-05 -.354E-06 0.139E-06 + -.454E-01 0.161E+00 0.981E-01 -.208E+00 -.143E+00 0.338E+00 0.249E+00 -.900E-02 -.427E+00 0.102E-05 0.354E-06 0.139E-06 + ----------------------------------------------------------------------------------------------- + -.287E-04 0.240E-04 0.645E-01 -.691E-14 0.708E-14 0.899E-14 0.278E-16 0.260E-16 -.654E-01 0.631E-12 0.157E-12 0.354E-07 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64089 0.95053 -0.00214 -0.002526 -0.000161 0.008466 + 6.24697 7.21864 -0.00214 0.002526 0.000161 0.008466 + 4.08483 3.13405 -0.00214 -0.002526 0.000161 0.008466 + 2.80304 5.03512 -0.00214 0.002526 -0.000161 0.008466 + 0.64089 5.03512 2.53645 -0.002526 -0.000161 0.008466 + 6.24697 3.13405 2.53645 0.002526 0.000161 0.008466 + 4.08483 7.21864 2.53645 -0.002526 0.000161 0.008466 + 2.80304 0.95053 2.53645 0.002526 -0.000161 0.008466 + 5.94523 7.37697 1.59306 0.015138 0.001425 -0.006380 + 0.94264 0.79221 1.59306 -0.015138 -0.001425 -0.006380 + 2.50130 4.87680 1.59306 0.015138 -0.001425 -0.006380 + 4.38657 3.29238 1.59306 -0.015138 0.001425 -0.006380 + 5.94523 3.29238 4.13166 0.015138 0.001425 -0.006380 + 0.94264 4.87680 4.13166 -0.015138 -0.001425 -0.006380 + 2.50130 0.79221 4.13166 0.015138 -0.001425 -0.006380 + 4.38657 7.37697 4.13166 -0.015138 0.001425 -0.006380 + 6.66526 0.95566 3.01669 -0.009743 0.004258 -0.016830 + 0.22261 7.21352 3.01669 0.009743 -0.004258 -0.016830 + 3.22132 3.12893 3.01669 -0.009743 -0.004258 -0.016830 + 3.66654 5.04025 3.01669 0.009743 0.004258 -0.016830 + 6.66526 5.04025 0.47810 -0.009743 0.004258 -0.016830 + 0.22261 3.12893 0.47810 0.009743 -0.004258 -0.016830 + 3.22132 7.21352 0.47810 -0.009743 -0.004258 -0.016830 + 3.66654 0.95566 0.47810 0.009743 0.004258 -0.016830 + 2.41733 2.18976 0.89549 -0.000973 0.003679 0.005681 + 4.47054 5.97941 0.89549 0.000973 -0.003679 0.005681 + 5.86126 1.89483 0.89549 -0.000973 -0.003679 0.005681 + 1.02660 6.27435 0.89549 0.000973 0.003679 0.005681 + 2.41733 6.27435 3.43409 -0.000973 0.003679 0.005681 + 4.47054 1.89483 3.43409 0.000973 -0.003679 0.005681 + 5.86126 5.97941 3.43409 -0.000973 -0.003679 0.005681 + 1.02660 2.18976 3.43409 0.000973 0.003679 0.005681 + 2.00040 7.44720 1.91355 0.004404 0.009108 0.009063 + 4.88747 0.72197 1.91355 -0.004404 -0.009108 0.009063 + 5.44433 4.80656 1.91355 0.004404 -0.009108 0.009063 + 1.44354 3.36262 1.91355 -0.004404 0.009108 0.009063 + 2.00040 3.36262 4.45214 0.004404 0.009108 0.009063 + 4.88747 4.80656 4.45214 -0.004404 -0.009108 0.009063 + 5.44433 0.72197 4.45214 0.004404 -0.009108 0.009063 + 1.44354 7.44720 4.45214 -0.004404 0.009108 0.009063 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.000884 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.90364003 eV + + energy without entropy= -16.91381981 energy(sigma->0) = -16.90703329 + enthalpy is TOTEN = 107.91333521 eV P V= 124.81697524 + + d Force = 0.4648302E-03[-0.117E-03, 0.105E-02] d Energy = 0.6003765E-03-0.136E-03 + d Force = 0.5001552E-01[ 0.492E-01, 0.509E-01] d Ewald = 0.2794771E-02 0.472E-01 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0277: real time 0.0277 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0070: real time 0.0070 + FEWALD executed in parallel + FEWALD: cpu time 0.0017: real time 0.0027 + GENKIN: cpu time 0.0262: real time 0.0262 + ORTHCH: cpu time 0.5248: real time 0.5250 + LOOP+: cpu time 48.2121: real time 48.2235 + + +----------------------------------------- Iteration 7( 1) --------------------------------------- + + + POTLOK: cpu time 0.0227: real time 0.0227 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 4.9861: real time 4.9867 + DOS: cpu time 0.0075: real time 0.0076 + CHARGE: cpu time 0.1738: real time 0.1738 + MIXING: cpu time 0.0030: real time 0.0030 + -------------------------------------------- + LOOP: cpu time 5.2016: real time 5.2071 + + eigenvalue-minimisations : 5928 + total energy-change (2. order) :-0.3377922E-02 (-0.3806644E-03) + number of electron 40.0000003 magnetization + augmentation part 0.9507771 magnetization + + free energy = -0.169070179487E+02 energy without entropy= -0.169171540457E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 7( 2) --------------------------------------- + + + POTLOK: cpu time 0.0221: real time 0.0221 + SETDIJ: cpu time 0.0057: real time 0.0057 + EDDAV: cpu time 5.3556: real time 5.3561 + DOS: cpu time 0.0075: real time 0.0075 + CHARGE: cpu time 0.1733: real time 0.1733 + MIXING: cpu time 0.0036: real time 0.0036 + -------------------------------------------- + LOOP: cpu time 5.5693: real time 5.5699 + + eigenvalue-minimisations : 6544 + total energy-change (2. order) : 0.4681567E-05 (-0.7328600E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9507988 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8155 + 1.8155 + + free energy = -0.169070132671E+02 energy without entropy= -0.169171388889E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 7( 3) --------------------------------------- + + + POTLOK: cpu time 0.0212: real time 0.0212 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 5.3701: real time 5.3707 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1680: real time 0.1680 + MIXING: cpu time 0.0039: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 5.5769: real time 5.5775 + + eigenvalue-minimisations : 6456 + total energy-change (2. order) : 0.1587421E-05 (-0.5009890E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9508030 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8326 + 1.2633 2.4020 + + free energy = -0.169070116797E+02 energy without entropy= -0.169171297989E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 7( 4) --------------------------------------- + + + POTLOK: cpu time 0.0213: real time 0.0213 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.6441: real time 3.6445 + DOS: cpu time 0.0071: real time 0.0071 + CHARGE: cpu time 0.1749: real time 0.1749 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 3.8581: real time 3.8585 + + eigenvalue-minimisations : 3332 + total energy-change (2. order) :-0.3373837E-06 (-0.8181730E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9508041 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8625 + 1.0336 2.6770 1.8769 + + free energy = -0.169070120171E+02 energy without entropy= -0.169171287629E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 7( 5) --------------------------------------- + + + POTLOK: cpu time 0.0217: real time 0.0217 + SETDIJ: cpu time 0.0058: real time 0.0058 + EDDAV: cpu time 3.5251: real time 3.5255 + DOS: cpu time 0.0084: real time 0.0084 + CHARGE: cpu time 0.1681: real time 0.1681 + MIXING: cpu time 0.0044: real time 0.0044 + -------------------------------------------- + LOOP: cpu time 3.7345: real time 3.7349 + + eigenvalue-minimisations : 3048 + total energy-change (2. order) :-0.2189313E-07 (-0.1234927E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9508044 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7738 + 2.8528 1.9551 0.9612 1.3261 + + free energy = -0.169070120389E+02 energy without entropy= -0.169171292633E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 7( 6) --------------------------------------- + + + POTLOK: cpu time 0.0207: real time 0.0207 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.4741: real time 3.4745 + DOS: cpu time 0.0073: real time 0.0073 + -------------------------------------------- + LOOP: cpu time 3.5090: real time 3.5094 + + eigenvalue-minimisations : 2924 + total energy-change (2. order) :-0.9348469E-09 (-0.1122310E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9508044 magnetization + + free energy = -0.169070120399E+02 energy without entropy= -0.169171292816E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9618 2 -25.9618 3 -25.9618 4 -25.9618 5 -25.9618 + 6 -25.9618 7 -25.9618 8 -25.9618 9 -25.8893 10 -25.8893 + 11 -25.8893 12 -25.8893 13 -25.8893 14 -25.8893 15 -25.8893 + 16 -25.8893 17 -25.9211 18 -25.9211 19 -25.9211 20 -25.9211 + 21 -25.9211 22 -25.9211 23 -25.9211 24 -25.9211 25 -25.8429 + 26 -25.8429 27 -25.8429 28 -25.8429 29 -25.8429 30 -25.8429 + 31 -25.8429 32 -25.8429 33 -26.0263 34 -26.0263 35 -26.0263 + 36 -26.0263 37 -26.0263 38 -26.0263 39 -26.0263 40 -26.0263 + + + + E-fermi : 4.4658 XC(G=0): -9.5548 alpha+bet :-20.5634 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9615 2.00000 + 2 1.5058 2.00000 + 3 1.7422 2.00000 + 4 1.9976 2.00000 + 5 2.0381 2.00000 + 6 2.5148 2.00000 + 7 2.6202 2.00000 + 8 2.7689 2.00000 + 9 2.8689 2.00000 + 10 2.9212 2.00000 + 11 3.2132 2.00000 + 12 3.2735 2.00000 + 13 3.3954 2.00000 + 14 3.4271 2.00000 + 15 3.5162 2.00000 + 16 3.6221 2.00000 + 17 3.8433 2.00010 + 18 4.1870 2.06399 + 19 4.2131 2.07048 + 20 4.3893 1.59795 + 21 5.5257 -0.00000 + 22 5.7295 -0.00000 + 23 5.9218 -0.00000 + 24 6.0936 -0.00000 + 25 6.2116 -0.00000 + 26 6.2888 -0.00000 + 27 6.5494 -0.00000 + 28 7.1275 -0.00000 + 29 7.1298 -0.00000 + 30 7.2525 -0.00000 + 31 7.3724 -0.00000 + 32 7.4319 -0.00000 + 33 8.0652 -0.00000 + 34 8.1458 -0.00000 + 35 8.8139 -0.00000 + 36 8.9498 -0.00000 + 37 9.2234 -0.00000 + 38 9.4331 -0.00000 + 39 9.8075 -0.00000 + 40 9.8389 -0.00000 + 41 10.0966 0.00000 + 42 10.2992 0.00000 + 43 10.5479 0.00000 + 44 10.8115 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9799 2.00000 + 2 1.5260 2.00000 + 3 1.7101 2.00000 + 4 1.7630 2.00000 + 5 2.2744 2.00000 + 6 2.3895 2.00000 + 7 2.5259 2.00000 + 8 2.8669 2.00000 + 9 2.9625 2.00000 + 10 3.1468 2.00000 + 11 3.2410 2.00000 + 12 3.2870 2.00000 + 13 3.3707 2.00000 + 14 3.4315 2.00000 + 15 3.5456 2.00000 + 16 3.6259 2.00000 + 17 3.7791 2.00001 + 18 4.0608 2.01475 + 19 4.2342 2.06940 + 20 4.4351 1.25615 + 21 5.4178 -0.00000 + 22 5.5815 -0.00000 + 23 5.8849 -0.00000 + 24 5.9921 -0.00000 + 25 6.1443 -0.00000 + 26 6.5283 -0.00000 + 27 6.6224 -0.00000 + 28 6.8279 -0.00000 + 29 7.1096 -0.00000 + 30 7.2414 -0.00000 + 31 7.2979 -0.00000 + 32 7.3905 -0.00000 + 33 8.3315 -0.00000 + 34 8.3812 -0.00000 + 35 8.8283 -0.00000 + 36 8.8783 -0.00000 + 37 9.2461 -0.00000 + 38 9.4211 -0.00000 + 39 9.7498 -0.00000 + 40 9.9210 -0.00000 + 41 10.0646 0.00000 + 42 10.1660 0.00000 + 43 10.8461 0.00000 + 44 10.9286 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0359 2.00000 + 2 1.4641 2.00000 + 3 1.5869 2.00000 + 4 1.8257 2.00000 + 5 2.0335 2.00000 + 6 2.2821 2.00000 + 7 2.8222 2.00000 + 8 2.9644 2.00000 + 9 3.2378 2.00000 + 10 3.2659 2.00000 + 11 3.3185 2.00000 + 12 3.3314 2.00000 + 13 3.4296 2.00000 + 14 3.5246 2.00000 + 15 3.5741 2.00000 + 16 3.6241 2.00000 + 17 3.7292 2.00000 + 18 3.8463 2.00011 + 19 4.1586 2.05208 + 20 4.3418 1.85752 + 21 5.3244 -0.00000 + 22 5.4256 -0.00000 + 23 5.7749 -0.00000 + 24 5.8430 -0.00000 + 25 5.8838 -0.00000 + 26 6.2363 -0.00000 + 27 6.7694 -0.00000 + 28 7.0269 -0.00000 + 29 7.1121 -0.00000 + 30 7.2200 -0.00000 + 31 7.2610 -0.00000 + 32 7.5450 -0.00000 + 33 8.4738 -0.00000 + 34 8.4995 -0.00000 + 35 8.7537 -0.00000 + 36 8.8985 -0.00000 + 37 9.2056 -0.00000 + 38 9.3229 -0.00000 + 39 9.7975 -0.00000 + 40 9.8755 -0.00000 + 41 10.1530 0.00000 + 42 10.3541 0.00000 + 43 11.0105 0.00000 + 44 11.1368 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1324 2.00000 + 2 1.2733 2.00000 + 3 1.6901 2.00000 + 4 1.8368 2.00000 + 5 1.9343 2.00000 + 6 2.0844 2.00000 + 7 3.0503 2.00000 + 8 3.1549 2.00000 + 9 3.2990 2.00000 + 10 3.3900 2.00000 + 11 3.4301 2.00000 + 12 3.4456 2.00000 + 13 3.5027 2.00000 + 14 3.5132 2.00000 + 15 3.6377 2.00000 + 16 3.6518 2.00000 + 17 3.7151 2.00000 + 18 3.7707 2.00001 + 19 3.9159 2.00071 + 20 4.1128 2.03164 + 21 5.3530 -0.00000 + 22 5.4748 -0.00000 + 23 5.6362 -0.00000 + 24 5.6513 -0.00000 + 25 5.7609 -0.00000 + 26 5.7757 -0.00000 + 27 6.9657 -0.00000 + 28 7.1217 -0.00000 + 29 7.1515 -0.00000 + 30 7.1618 -0.00000 + 31 7.6163 -0.00000 + 32 7.8588 -0.00000 + 33 8.1328 -0.00000 + 34 8.2127 -0.00000 + 35 8.8834 -0.00000 + 36 8.9464 -0.00000 + 37 9.1017 -0.00000 + 38 9.1832 -0.00000 + 39 9.7968 -0.00000 + 40 9.8703 -0.00000 + 41 10.4488 0.00000 + 42 10.5452 0.00000 + 43 11.2331 0.00000 + 44 11.3405 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9950 2.00000 + 2 1.3156 2.00000 + 3 2.0219 2.00000 + 4 2.0294 2.00000 + 5 2.0749 2.00000 + 6 2.3372 2.00000 + 7 2.4301 2.00000 + 8 2.9385 2.00000 + 9 3.0108 2.00000 + 10 3.0530 2.00000 + 11 3.1392 2.00000 + 12 3.2035 2.00000 + 13 3.4003 2.00000 + 14 3.4928 2.00000 + 15 3.5074 2.00000 + 16 3.6926 2.00000 + 17 3.7552 2.00001 + 18 4.0148 2.00646 + 19 4.0368 2.00973 + 20 4.2314 2.06998 + 21 5.6724 -0.00000 + 22 5.8083 -0.00000 + 23 5.9708 -0.00000 + 24 6.2125 -0.00000 + 25 6.3124 -0.00000 + 26 6.4294 -0.00000 + 27 6.5088 -0.00000 + 28 6.7765 -0.00000 + 29 7.2771 -0.00000 + 30 7.3238 -0.00000 + 31 7.3998 -0.00000 + 32 7.6342 -0.00000 + 33 8.0198 -0.00000 + 34 8.1682 -0.00000 + 35 8.8875 -0.00000 + 36 9.0388 -0.00000 + 37 9.0726 -0.00000 + 38 9.2159 -0.00000 + 39 9.5315 -0.00000 + 40 9.8611 -0.00000 + 41 9.9086 -0.00000 + 42 10.3860 0.00000 + 43 10.4879 0.00000 + 44 10.9175 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0135 2.00000 + 2 1.3351 2.00000 + 3 1.7452 2.00000 + 4 2.0353 2.00000 + 5 2.0907 2.00000 + 6 2.4210 2.00000 + 7 2.7288 2.00000 + 8 2.8127 2.00000 + 9 2.9717 2.00000 + 10 3.0387 2.00000 + 11 3.2200 2.00000 + 12 3.3517 2.00000 + 13 3.3952 2.00000 + 14 3.5015 2.00000 + 15 3.5291 2.00000 + 16 3.6966 2.00000 + 17 3.7069 2.00000 + 18 3.8310 2.00007 + 19 4.1140 2.03211 + 20 4.2769 2.03666 + 21 5.5542 -0.00000 + 22 5.7359 -0.00000 + 23 5.9348 -0.00000 + 24 6.0613 -0.00000 + 25 6.2322 -0.00000 + 26 6.4901 -0.00000 + 27 6.6352 -0.00000 + 28 6.7138 -0.00000 + 29 7.1615 -0.00000 + 30 7.3128 -0.00000 + 31 7.3313 -0.00000 + 32 7.6100 -0.00000 + 33 8.2620 -0.00000 + 34 8.3475 -0.00000 + 35 8.8875 -0.00000 + 36 8.9976 -0.00000 + 37 9.0198 -0.00000 + 38 9.2237 -0.00000 + 39 9.6146 -0.00000 + 40 9.8139 -0.00000 + 41 9.9278 0.00000 + 42 10.4473 0.00000 + 43 10.5079 0.00000 + 44 11.0349 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0699 2.00000 + 2 1.3944 2.00000 + 3 1.4992 2.00000 + 4 1.8339 2.00000 + 5 2.1136 2.00000 + 6 2.5749 2.00000 + 7 2.8435 2.00000 + 8 2.9913 2.00000 + 9 3.1238 2.00000 + 10 3.1361 2.00000 + 11 3.2676 2.00000 + 12 3.3047 2.00000 + 13 3.4722 2.00000 + 14 3.5323 2.00000 + 15 3.6128 2.00000 + 16 3.6183 2.00000 + 17 3.6770 2.00000 + 18 3.7295 2.00000 + 19 4.0518 2.01268 + 20 4.2335 2.06957 + 21 5.3961 -0.00000 + 22 5.6617 -0.00000 + 23 5.7665 -0.00000 + 24 5.8246 -0.00000 + 25 6.1095 -0.00000 + 26 6.1951 -0.00000 + 27 6.6153 -0.00000 + 28 7.0648 -0.00000 + 29 7.1124 -0.00000 + 30 7.3593 -0.00000 + 31 7.4897 -0.00000 + 32 7.5504 -0.00000 + 33 8.3501 -0.00000 + 34 8.5104 -0.00000 + 35 8.7874 -0.00000 + 36 8.8801 -0.00000 + 37 9.0404 -0.00000 + 38 9.1592 -0.00000 + 39 9.6299 -0.00000 + 40 9.7939 -0.00000 + 41 10.1402 0.00000 + 42 10.5684 0.00000 + 43 10.7123 0.00000 + 44 11.2211 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1668 2.00000 + 2 1.3082 2.00000 + 3 1.4953 2.00000 + 4 1.6408 2.00000 + 5 2.2229 2.00000 + 6 2.3770 2.00000 + 7 3.0866 2.00000 + 8 3.1955 2.00000 + 9 3.2128 2.00000 + 10 3.3123 2.00000 + 11 3.3755 2.00000 + 12 3.4093 2.00000 + 13 3.4336 2.00000 + 14 3.4436 2.00000 + 15 3.5503 2.00000 + 16 3.6269 2.00000 + 17 3.7481 2.00000 + 18 3.7721 2.00001 + 19 3.8486 2.00011 + 20 4.0083 2.00568 + 21 5.4149 -0.00000 + 22 5.6074 -0.00000 + 23 5.6085 -0.00000 + 24 5.7852 -0.00000 + 25 5.7901 -0.00000 + 26 5.9709 -0.00000 + 27 6.7830 -0.00000 + 28 6.9516 -0.00000 + 29 7.3350 -0.00000 + 30 7.4417 -0.00000 + 31 7.7209 -0.00000 + 32 7.8003 -0.00000 + 33 8.1461 -0.00000 + 34 8.1830 -0.00000 + 35 8.8335 -0.00000 + 36 8.8879 -0.00000 + 37 8.9662 -0.00000 + 38 9.0528 -0.00000 + 39 9.6064 -0.00000 + 40 9.7719 -0.00000 + 41 10.4235 0.00000 + 42 10.5978 0.00000 + 43 11.1543 0.00000 + 44 11.3542 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0634 2.00000 + 2 1.1692 2.00000 + 3 2.0947 2.00000 + 4 2.1484 2.00000 + 5 2.1963 2.00000 + 6 2.2433 2.00000 + 7 2.3761 2.00000 + 8 2.6980 2.00000 + 9 3.0142 2.00000 + 10 3.1067 2.00000 + 11 3.3429 2.00000 + 12 3.4323 2.00000 + 13 3.4387 2.00000 + 14 3.4749 2.00000 + 15 3.5993 2.00000 + 16 3.6004 2.00000 + 17 3.7437 2.00000 + 18 3.7816 2.00001 + 19 3.8292 2.00006 + 20 4.0195 2.00707 + 21 5.9234 -0.00000 + 22 5.9409 -0.00000 + 23 6.0861 -0.00000 + 24 6.1427 -0.00000 + 25 6.2053 -0.00000 + 26 6.4195 -0.00000 + 27 6.6293 -0.00000 + 28 6.9247 -0.00000 + 29 6.9808 -0.00000 + 30 7.2581 -0.00000 + 31 7.6021 -0.00000 + 32 7.8588 -0.00000 + 33 8.1846 -0.00000 + 34 8.3681 -0.00000 + 35 8.5142 -0.00000 + 36 9.0106 -0.00000 + 37 9.0819 -0.00000 + 38 9.1449 -0.00000 + 39 9.3053 -0.00000 + 40 9.5909 -0.00000 + 41 9.9385 0.00000 + 42 10.0530 0.00000 + 43 10.7519 0.00000 + 44 10.9300 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0822 2.00000 + 2 1.1883 2.00000 + 3 1.8165 2.00000 + 4 1.9262 2.00000 + 5 2.3648 2.00000 + 6 2.4808 2.00000 + 7 2.6026 2.00000 + 8 2.7287 2.00000 + 9 3.0335 2.00000 + 10 3.1252 2.00000 + 11 3.1434 2.00000 + 12 3.4357 2.00000 + 13 3.4866 2.00000 + 14 3.4892 2.00000 + 15 3.5009 2.00000 + 16 3.6156 2.00000 + 17 3.6887 2.00000 + 18 3.8387 2.00009 + 19 3.9154 2.00070 + 20 4.0487 2.01202 + 21 5.7522 -0.00000 + 22 5.9242 -0.00000 + 23 5.9565 -0.00000 + 24 6.1153 -0.00000 + 25 6.2416 -0.00000 + 26 6.3621 -0.00000 + 27 6.5611 -0.00000 + 28 6.9059 -0.00000 + 29 6.9961 -0.00000 + 30 7.2105 -0.00000 + 31 7.6283 -0.00000 + 32 7.9891 -0.00000 + 33 8.1804 -0.00000 + 34 8.4858 -0.00000 + 35 8.5637 -0.00000 + 36 8.9900 -0.00000 + 37 9.0181 -0.00000 + 38 9.2488 -0.00000 + 39 9.2670 -0.00000 + 40 9.5536 -0.00000 + 41 10.0002 0.00000 + 42 10.1215 0.00000 + 43 10.7693 0.00000 + 44 10.9789 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1391 2.00000 + 2 1.2462 2.00000 + 3 1.5709 2.00000 + 4 1.6816 2.00000 + 5 2.4377 2.00000 + 6 2.7679 2.00000 + 7 2.9100 2.00000 + 8 2.9318 2.00000 + 9 2.9830 2.00000 + 10 3.1077 2.00000 + 11 3.1796 2.00000 + 12 3.2718 2.00000 + 13 3.3751 2.00000 + 14 3.4597 2.00000 + 15 3.5288 2.00000 + 16 3.6011 2.00000 + 17 3.7403 2.00000 + 18 3.8932 2.00039 + 19 3.9003 2.00047 + 20 4.0771 2.01912 + 21 5.5262 -0.00000 + 22 5.6535 -0.00000 + 23 5.8843 -0.00000 + 24 6.0511 -0.00000 + 25 6.0702 -0.00000 + 26 6.3520 -0.00000 + 27 6.4260 -0.00000 + 28 6.7679 -0.00000 + 29 7.2590 -0.00000 + 30 7.3886 -0.00000 + 31 7.7242 -0.00000 + 32 8.0587 -0.00000 + 33 8.0980 -0.00000 + 34 8.4853 -0.00000 + 35 8.5893 -0.00000 + 36 8.8665 -0.00000 + 37 8.9571 -0.00000 + 38 9.2793 -0.00000 + 39 9.2858 -0.00000 + 40 9.5574 -0.00000 + 41 10.2241 0.00000 + 42 10.4085 0.00000 + 43 10.7698 0.00000 + 44 11.0254 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2369 2.00000 + 2 1.3453 2.00000 + 3 1.3793 2.00000 + 4 1.4891 2.00000 + 5 2.5531 2.00000 + 6 2.7117 2.00000 + 7 2.9033 2.00000 + 8 3.0689 2.00000 + 9 3.1536 2.00000 + 10 3.2389 2.00000 + 11 3.2691 2.00000 + 12 3.3588 2.00000 + 13 3.3851 2.00000 + 14 3.4160 2.00000 + 15 3.6050 2.00000 + 16 3.6783 2.00000 + 17 3.6794 2.00000 + 18 3.7701 2.00001 + 19 3.8266 2.00006 + 20 3.8959 2.00042 + 21 5.5046 -0.00000 + 22 5.5660 -0.00000 + 23 5.6860 -0.00000 + 24 5.7593 -0.00000 + 25 6.1297 -0.00000 + 26 6.2787 -0.00000 + 27 6.4801 -0.00000 + 28 6.6318 -0.00000 + 29 7.5654 -0.00000 + 30 7.7020 -0.00000 + 31 7.8039 -0.00000 + 32 8.0106 -0.00000 + 33 8.0269 -0.00000 + 34 8.3202 -0.00000 + 35 8.4309 -0.00000 + 36 8.6264 -0.00000 + 37 9.0278 -0.00000 + 38 9.2561 -0.00000 + 39 9.3158 -0.00000 + 40 9.5351 -0.00000 + 41 10.5163 0.00000 + 42 10.6992 0.00000 + 43 10.7705 0.00000 + 44 10.9676 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0006 2.00000 + 2 1.5530 2.00000 + 3 1.7924 2.00000 + 4 2.0383 2.00000 + 5 2.0807 2.00000 + 6 2.4864 2.00000 + 7 2.5792 2.00000 + 8 2.6637 2.00000 + 9 2.8085 2.00000 + 10 2.9057 2.00000 + 11 3.0757 2.00000 + 12 3.2839 2.00000 + 13 3.3073 2.00000 + 14 3.3385 2.00000 + 15 3.4466 2.00000 + 16 3.7614 2.00001 + 17 3.8587 2.00015 + 18 4.0069 2.00553 + 19 4.0464 2.01154 + 20 4.1712 2.05768 + 21 5.7538 -0.00000 + 22 5.9568 -0.00000 + 23 6.1799 -0.00000 + 24 6.4559 -0.00000 + 25 6.4925 -0.00000 + 26 6.5700 -0.00000 + 27 6.5946 -0.00000 + 28 6.7552 -0.00000 + 29 7.1625 -0.00000 + 30 7.2646 -0.00000 + 31 7.3699 -0.00000 + 32 7.4041 -0.00000 + 33 8.1531 -0.00000 + 34 8.4598 -0.00000 + 35 8.9303 -0.00000 + 36 9.0489 -0.00000 + 37 9.0544 -0.00000 + 38 9.5653 -0.00000 + 39 9.8008 -0.00000 + 40 9.8242 -0.00000 + 41 10.0024 0.00000 + 42 10.0182 0.00000 + 43 10.3998 0.00000 + 44 10.4518 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0191 2.00000 + 2 1.5731 2.00000 + 3 1.7517 2.00000 + 4 1.8130 2.00000 + 5 2.3175 2.00000 + 6 2.4302 2.00000 + 7 2.5186 2.00000 + 8 2.5697 2.00000 + 9 2.9495 2.00000 + 10 3.0919 2.00000 + 11 3.1439 2.00000 + 12 3.1915 2.00000 + 13 3.3035 2.00000 + 14 3.3721 2.00000 + 15 3.5863 2.00000 + 16 3.6575 2.00000 + 17 3.8716 2.00022 + 18 3.9614 2.00210 + 19 4.0870 2.02219 + 20 4.1555 2.05064 + 21 5.6995 -0.00000 + 22 5.8037 -0.00000 + 23 6.1147 -0.00000 + 24 6.3423 -0.00000 + 25 6.3839 -0.00000 + 26 6.4770 -0.00000 + 27 6.7084 -0.00000 + 28 6.7724 -0.00000 + 29 7.1598 -0.00000 + 30 7.2415 -0.00000 + 31 7.2676 -0.00000 + 32 7.4445 -0.00000 + 33 8.3127 -0.00000 + 34 8.5352 -0.00000 + 35 8.9151 -0.00000 + 36 9.0160 -0.00000 + 37 9.0689 -0.00000 + 38 9.5848 -0.00000 + 39 9.8179 -0.00000 + 40 9.8890 -0.00000 + 41 9.8989 -0.00000 + 42 10.1006 0.00000 + 43 10.6372 0.00000 + 44 10.7104 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0754 2.00000 + 2 1.5052 2.00000 + 3 1.6338 2.00000 + 4 1.8752 2.00000 + 5 2.0782 2.00000 + 6 2.3254 2.00000 + 7 2.5793 2.00000 + 8 2.8586 2.00000 + 9 2.9698 2.00000 + 10 3.1403 2.00000 + 11 3.2868 2.00000 + 12 3.3556 2.00000 + 13 3.4480 2.00000 + 14 3.4764 2.00000 + 15 3.5341 2.00000 + 16 3.7428 2.00000 + 17 3.8091 2.00004 + 18 3.9031 2.00051 + 19 4.0069 2.00552 + 20 4.1181 2.03382 + 21 5.4577 -0.00000 + 22 5.7633 -0.00000 + 23 5.9853 -0.00000 + 24 5.9905 -0.00000 + 25 6.1251 -0.00000 + 26 6.2912 -0.00000 + 27 6.7103 -0.00000 + 28 7.0405 -0.00000 + 29 7.0431 -0.00000 + 30 7.1666 -0.00000 + 31 7.3085 -0.00000 + 32 7.6855 -0.00000 + 33 8.3527 -0.00000 + 34 8.4267 -0.00000 + 35 8.9468 -0.00000 + 36 9.0495 -0.00000 + 37 9.0848 -0.00000 + 38 9.4845 -0.00000 + 39 9.8850 -0.00000 + 40 10.0872 0.00000 + 41 10.1130 0.00000 + 42 10.3117 0.00000 + 43 10.9686 0.00000 + 44 11.1161 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1723 2.00000 + 2 1.3139 2.00000 + 3 1.7366 2.00000 + 4 1.8831 2.00000 + 5 1.9819 2.00000 + 6 2.1305 2.00000 + 7 2.6748 2.00000 + 8 2.8066 2.00000 + 9 3.2086 2.00000 + 10 3.3066 2.00000 + 11 3.3455 2.00000 + 12 3.5018 2.00000 + 13 3.5568 2.00000 + 14 3.6293 2.00000 + 15 3.6380 2.00000 + 16 3.6466 2.00000 + 17 3.7971 2.00002 + 18 3.8636 2.00018 + 19 3.8732 2.00023 + 20 3.9223 2.00083 + 21 5.4354 -0.00000 + 22 5.6549 -0.00000 + 23 5.7296 -0.00000 + 24 5.7921 -0.00000 + 25 5.9840 -0.00000 + 26 6.1823 -0.00000 + 27 6.7410 -0.00000 + 28 6.8728 -0.00000 + 29 7.1486 -0.00000 + 30 7.1974 -0.00000 + 31 7.6112 -0.00000 + 32 7.9458 -0.00000 + 33 8.0308 -0.00000 + 34 8.1862 -0.00000 + 35 9.0789 -0.00000 + 36 9.1406 -0.00000 + 37 9.1824 -0.00000 + 38 9.3468 -0.00000 + 39 9.8976 -0.00000 + 40 10.0779 0.00000 + 41 10.3650 0.00000 + 42 10.4648 0.00000 + 43 11.2182 0.00000 + 44 11.3259 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0347 2.00000 + 2 1.3602 2.00000 + 3 2.0706 2.00000 + 4 2.0756 2.00000 + 5 2.1180 2.00000 + 6 2.3768 2.00000 + 7 2.4740 2.00000 + 8 2.5513 2.00000 + 9 2.9066 2.00000 + 10 3.0642 2.00000 + 11 3.0771 2.00000 + 12 3.1656 2.00000 + 13 3.3555 2.00000 + 14 3.5044 2.00000 + 15 3.5116 2.00000 + 16 3.6697 2.00000 + 17 3.8472 2.00011 + 18 3.8802 2.00028 + 19 3.9376 2.00121 + 20 4.0435 2.01097 + 21 5.8372 -0.00000 + 22 6.0117 -0.00000 + 23 6.0586 -0.00000 + 24 6.3253 -0.00000 + 25 6.4899 -0.00000 + 26 6.6048 -0.00000 + 27 6.6701 -0.00000 + 28 6.7887 -0.00000 + 29 7.3676 -0.00000 + 30 7.3950 -0.00000 + 31 7.4736 -0.00000 + 32 7.6331 -0.00000 + 33 8.1810 -0.00000 + 34 8.3026 -0.00000 + 35 8.7416 -0.00000 + 36 8.9254 -0.00000 + 37 9.2065 -0.00000 + 38 9.4174 -0.00000 + 39 9.6184 -0.00000 + 40 9.7148 -0.00000 + 41 9.8189 -0.00000 + 42 10.3298 0.00000 + 43 10.3688 0.00000 + 44 10.9182 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0533 2.00000 + 2 1.3797 2.00000 + 3 1.7872 2.00000 + 4 2.0875 2.00000 + 5 2.1353 2.00000 + 6 2.4624 2.00000 + 7 2.5618 2.00000 + 8 2.7823 2.00000 + 9 2.8473 2.00000 + 10 2.9256 2.00000 + 11 3.1042 2.00000 + 12 3.2033 2.00000 + 13 3.4011 2.00000 + 14 3.4965 2.00000 + 15 3.5905 2.00000 + 16 3.6447 2.00000 + 17 3.7964 2.00002 + 18 3.8636 2.00018 + 19 3.9752 2.00285 + 20 4.0998 2.02662 + 21 5.7346 -0.00000 + 22 5.9579 -0.00000 + 23 5.9710 -0.00000 + 24 6.2218 -0.00000 + 25 6.3069 -0.00000 + 26 6.5946 -0.00000 + 27 6.6427 -0.00000 + 28 6.9037 -0.00000 + 29 7.2430 -0.00000 + 30 7.3815 -0.00000 + 31 7.4988 -0.00000 + 32 7.6224 -0.00000 + 33 8.3564 -0.00000 + 34 8.3588 -0.00000 + 35 8.8321 -0.00000 + 36 8.9025 -0.00000 + 37 9.1859 -0.00000 + 38 9.3932 -0.00000 + 39 9.6144 -0.00000 + 40 9.7317 -0.00000 + 41 9.8958 -0.00000 + 42 10.4018 0.00000 + 43 10.5342 0.00000 + 44 10.9482 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1100 2.00000 + 2 1.4390 2.00000 + 3 1.5408 2.00000 + 4 1.8785 2.00000 + 5 2.1650 2.00000 + 6 2.6087 2.00000 + 7 2.6283 2.00000 + 8 2.8810 2.00000 + 9 2.9828 2.00000 + 10 3.0183 2.00000 + 11 3.1582 2.00000 + 12 3.1848 2.00000 + 13 3.3644 2.00000 + 14 3.6040 2.00000 + 15 3.6194 2.00000 + 16 3.6448 2.00000 + 17 3.7917 2.00002 + 18 3.9060 2.00055 + 19 3.9473 2.00152 + 20 4.1109 2.03088 + 21 5.4797 -0.00000 + 22 5.8299 -0.00000 + 23 5.9110 -0.00000 + 24 5.9640 -0.00000 + 25 6.0250 -0.00000 + 26 6.5216 -0.00000 + 27 6.5358 -0.00000 + 28 7.0164 -0.00000 + 29 7.1663 -0.00000 + 30 7.4117 -0.00000 + 31 7.6213 -0.00000 + 32 7.6753 -0.00000 + 33 8.3245 -0.00000 + 34 8.4442 -0.00000 + 35 8.8569 -0.00000 + 36 8.9030 -0.00000 + 37 9.2581 -0.00000 + 38 9.2881 -0.00000 + 39 9.6400 -0.00000 + 40 9.9864 0.00000 + 41 10.0856 0.00000 + 42 10.5252 0.00000 + 43 10.7650 0.00000 + 44 11.1211 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2073 2.00000 + 2 1.3492 2.00000 + 3 1.5400 2.00000 + 4 1.6855 2.00000 + 5 2.2719 2.00000 + 6 2.4222 2.00000 + 7 2.7187 2.00000 + 8 2.8544 2.00000 + 9 3.0693 2.00000 + 10 3.1912 2.00000 + 11 3.2804 2.00000 + 12 3.3909 2.00000 + 13 3.4518 2.00000 + 14 3.5044 2.00000 + 15 3.6838 2.00000 + 16 3.7061 2.00000 + 17 3.7920 2.00002 + 18 3.8815 2.00029 + 19 3.9269 2.00093 + 20 3.9316 2.00104 + 21 5.4064 -0.00000 + 22 5.6799 -0.00000 + 23 5.6847 -0.00000 + 24 5.7651 -0.00000 + 25 6.0498 -0.00000 + 26 6.3737 -0.00000 + 27 6.5976 -0.00000 + 28 6.7794 -0.00000 + 29 7.3036 -0.00000 + 30 7.4607 -0.00000 + 31 7.8059 -0.00000 + 32 7.8963 -0.00000 + 33 8.1597 -0.00000 + 34 8.1739 -0.00000 + 35 8.9567 -0.00000 + 36 9.0215 -0.00000 + 37 9.1682 -0.00000 + 38 9.3244 -0.00000 + 39 9.6105 -0.00000 + 40 10.0506 0.00000 + 41 10.3291 0.00000 + 42 10.5151 0.00000 + 43 11.1182 0.00000 + 44 11.2355 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1043 2.00000 + 2 1.2117 2.00000 + 3 2.1365 2.00000 + 4 2.1923 2.00000 + 5 2.2384 2.00000 + 6 2.2911 2.00000 + 7 2.4293 2.00000 + 8 2.6310 2.00000 + 9 2.7519 2.00000 + 10 2.7589 2.00000 + 11 3.3245 2.00000 + 12 3.4382 2.00000 + 13 3.4662 2.00000 + 14 3.4990 2.00000 + 15 3.6376 2.00000 + 16 3.6421 2.00000 + 17 3.6837 2.00000 + 18 3.7708 2.00001 + 19 3.8091 2.00004 + 20 3.8365 2.00008 + 21 5.9345 -0.00000 + 22 6.0699 -0.00000 + 23 6.0871 -0.00000 + 24 6.2064 -0.00000 + 25 6.3511 -0.00000 + 26 6.3586 -0.00000 + 27 6.9622 -0.00000 + 28 7.1309 -0.00000 + 29 7.2318 -0.00000 + 30 7.3976 -0.00000 + 31 7.7241 -0.00000 + 32 8.0412 -0.00000 + 33 8.1007 -0.00000 + 34 8.3693 -0.00000 + 35 8.4352 -0.00000 + 36 9.0083 -0.00000 + 37 9.1260 -0.00000 + 38 9.1894 -0.00000 + 39 9.3976 -0.00000 + 40 9.5551 -0.00000 + 41 9.9216 -0.00000 + 42 10.0625 0.00000 + 43 10.7319 0.00000 + 44 10.9271 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1231 2.00000 + 2 1.2308 2.00000 + 3 1.8593 2.00000 + 4 1.9698 2.00000 + 5 2.4208 2.00000 + 6 2.5235 2.00000 + 7 2.6237 2.00000 + 8 2.6735 2.00000 + 9 2.7662 2.00000 + 10 2.7945 2.00000 + 11 3.1523 2.00000 + 12 3.3043 2.00000 + 13 3.3877 2.00000 + 14 3.5137 2.00000 + 15 3.6160 2.00000 + 16 3.6984 2.00000 + 17 3.7486 2.00000 + 18 3.8227 2.00005 + 19 3.8492 2.00012 + 20 3.9631 2.00218 + 21 5.8738 -0.00000 + 22 5.9599 -0.00000 + 23 6.0144 -0.00000 + 24 6.1405 -0.00000 + 25 6.1444 -0.00000 + 26 6.3531 -0.00000 + 27 6.9258 -0.00000 + 28 7.1572 -0.00000 + 29 7.1918 -0.00000 + 30 7.4161 -0.00000 + 31 7.7031 -0.00000 + 32 8.0464 -0.00000 + 33 8.1407 -0.00000 + 34 8.5132 -0.00000 + 35 8.5703 -0.00000 + 36 8.9796 -0.00000 + 37 9.0911 -0.00000 + 38 9.1936 -0.00000 + 39 9.4017 -0.00000 + 40 9.5892 -0.00000 + 41 9.9982 0.00000 + 42 10.1736 0.00000 + 43 10.7382 0.00000 + 44 10.9525 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1803 2.00000 + 2 1.2889 2.00000 + 3 1.6134 2.00000 + 4 1.7251 2.00000 + 5 2.4912 2.00000 + 6 2.7060 2.00000 + 7 2.8149 2.00000 + 8 2.8330 2.00000 + 9 2.9391 2.00000 + 10 2.9827 2.00000 + 11 3.0482 2.00000 + 12 3.1153 2.00000 + 13 3.2119 2.00000 + 14 3.3175 2.00000 + 15 3.7457 2.00000 + 16 3.7465 2.00000 + 17 3.8326 2.00007 + 18 3.8786 2.00027 + 19 3.9452 2.00145 + 20 4.0398 2.01028 + 21 5.6148 -0.00000 + 22 5.7881 -0.00000 + 23 5.7952 -0.00000 + 24 5.8718 -0.00000 + 25 6.1363 -0.00000 + 26 6.3236 -0.00000 + 27 6.7554 -0.00000 + 28 6.9302 -0.00000 + 29 7.3829 -0.00000 + 30 7.5749 -0.00000 + 31 7.7680 -0.00000 + 32 8.0932 -0.00000 + 33 8.1014 -0.00000 + 34 8.5254 -0.00000 + 35 8.6812 -0.00000 + 36 8.9526 -0.00000 + 37 9.0220 -0.00000 + 38 9.2200 -0.00000 + 39 9.5047 -0.00000 + 40 9.7666 -0.00000 + 41 10.1840 0.00000 + 42 10.4204 0.00000 + 43 10.7230 0.00000 + 44 10.9989 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2784 2.00000 + 2 1.3883 2.00000 + 3 1.4213 2.00000 + 4 1.5323 2.00000 + 5 2.6013 2.00000 + 6 2.7491 2.00000 + 7 2.8074 2.00000 + 8 2.9125 2.00000 + 9 2.9497 2.00000 + 10 2.9581 2.00000 + 11 3.0545 2.00000 + 12 3.1366 2.00000 + 13 3.4046 2.00000 + 14 3.4493 2.00000 + 15 3.7288 2.00000 + 16 3.7547 2.00001 + 17 3.8342 2.00008 + 18 3.8799 2.00028 + 19 3.9439 2.00140 + 20 3.9569 2.00189 + 21 5.4835 -0.00000 + 22 5.6076 -0.00000 + 23 5.6513 -0.00000 + 24 5.6885 -0.00000 + 25 6.2478 -0.00000 + 26 6.4251 -0.00000 + 27 6.5257 -0.00000 + 28 6.6512 -0.00000 + 29 7.5434 -0.00000 + 30 7.7603 -0.00000 + 31 7.7926 -0.00000 + 32 8.0426 -0.00000 + 33 8.1910 -0.00000 + 34 8.4650 -0.00000 + 35 8.6190 -0.00000 + 36 8.8481 -0.00000 + 37 9.0617 -0.00000 + 38 9.2679 -0.00000 + 39 9.5394 -0.00000 + 40 9.8219 -0.00000 + 41 10.4372 0.00000 + 42 10.6313 0.00000 + 43 10.7295 0.00000 + 44 10.9431 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0796 2.00000 + 2 1.6474 2.00000 + 3 1.8924 2.00000 + 4 2.1199 2.00000 + 5 2.1419 2.00000 + 6 2.1648 2.00000 + 7 2.6445 2.00000 + 8 2.7490 2.00000 + 9 2.7890 2.00000 + 10 2.8585 2.00000 + 11 2.9749 2.00000 + 12 3.0622 2.00000 + 13 3.1436 2.00000 + 14 3.1888 2.00000 + 15 3.4171 2.00000 + 16 3.6170 2.00000 + 17 3.7457 2.00000 + 18 3.8206 2.00005 + 19 3.8901 2.00036 + 20 4.2436 2.06627 + 21 6.0919 -0.00000 + 22 6.1857 -0.00000 + 23 6.2607 -0.00000 + 24 6.6149 -0.00000 + 25 6.8978 -0.00000 + 26 6.9984 -0.00000 + 27 7.0158 -0.00000 + 28 7.0736 -0.00000 + 29 7.2667 -0.00000 + 30 7.3132 -0.00000 + 31 7.3608 -0.00000 + 32 7.3842 -0.00000 + 33 8.1527 -0.00000 + 34 8.5847 -0.00000 + 35 8.6037 -0.00000 + 36 9.1250 -0.00000 + 37 9.2491 -0.00000 + 38 9.5699 -0.00000 + 39 9.6526 -0.00000 + 40 9.7185 -0.00000 + 41 9.8377 -0.00000 + 42 10.0591 0.00000 + 43 10.2166 0.00000 + 44 10.3402 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.0983 2.00000 + 2 1.6673 2.00000 + 3 1.8349 2.00000 + 4 1.9125 2.00000 + 5 2.1622 2.00000 + 6 2.4059 2.00000 + 7 2.5090 2.00000 + 8 2.6392 2.00000 + 9 2.8091 2.00000 + 10 2.8896 2.00000 + 11 3.0282 2.00000 + 12 3.0830 2.00000 + 13 3.2239 2.00000 + 14 3.4158 2.00000 + 15 3.4596 2.00000 + 16 3.4787 2.00000 + 17 3.7210 2.00000 + 18 3.9026 2.00050 + 19 3.9218 2.00082 + 20 4.2467 2.06480 + 21 5.9638 -0.00000 + 22 6.1215 -0.00000 + 23 6.1263 -0.00000 + 24 6.5181 -0.00000 + 25 6.6593 -0.00000 + 26 6.9254 -0.00000 + 27 6.9673 -0.00000 + 28 7.0955 -0.00000 + 29 7.1912 -0.00000 + 30 7.2704 -0.00000 + 31 7.3547 -0.00000 + 32 7.5552 -0.00000 + 33 8.2981 -0.00000 + 34 8.5422 -0.00000 + 35 8.7424 -0.00000 + 36 9.0408 -0.00000 + 37 9.2357 -0.00000 + 38 9.4676 -0.00000 + 39 9.7511 -0.00000 + 40 9.7851 -0.00000 + 41 9.9768 0.00000 + 42 10.2269 0.00000 + 43 10.4169 0.00000 + 44 10.5695 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1552 2.00000 + 2 1.5878 2.00000 + 3 1.7276 2.00000 + 4 1.9731 2.00000 + 5 2.1664 2.00000 + 6 2.2247 2.00000 + 7 2.4094 2.00000 + 8 2.6611 2.00000 + 9 2.8445 2.00000 + 10 2.9469 2.00000 + 11 3.1384 2.00000 + 12 3.2604 2.00000 + 13 3.3558 2.00000 + 14 3.5024 2.00000 + 15 3.5203 2.00000 + 16 3.5775 2.00000 + 17 3.7504 2.00001 + 18 3.8682 2.00020 + 19 4.0170 2.00674 + 20 4.2388 2.06810 + 21 5.6079 -0.00000 + 22 5.9692 -0.00000 + 23 5.9975 -0.00000 + 24 6.2142 -0.00000 + 25 6.4305 -0.00000 + 26 6.6923 -0.00000 + 27 6.8660 -0.00000 + 28 6.8716 -0.00000 + 29 7.2255 -0.00000 + 30 7.2831 -0.00000 + 31 7.4829 -0.00000 + 32 7.7682 -0.00000 + 33 8.3064 -0.00000 + 34 8.3140 -0.00000 + 35 9.0245 -0.00000 + 36 9.1024 -0.00000 + 37 9.3126 -0.00000 + 38 9.4937 -0.00000 + 39 9.8343 -0.00000 + 40 10.0128 0.00000 + 41 10.2254 0.00000 + 42 10.5033 0.00000 + 43 10.7146 0.00000 + 44 10.9535 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2529 2.00000 + 2 1.3954 2.00000 + 3 1.8296 2.00000 + 4 1.9751 2.00000 + 5 2.0757 2.00000 + 6 2.2195 2.00000 + 7 2.3281 2.00000 + 8 2.4731 2.00000 + 9 2.9433 2.00000 + 10 3.0687 2.00000 + 11 3.2566 2.00000 + 12 3.3602 2.00000 + 13 3.4546 2.00000 + 14 3.6141 2.00000 + 15 3.6406 2.00000 + 16 3.6722 2.00000 + 17 3.7599 2.00001 + 18 3.8493 2.00012 + 19 4.0008 2.00489 + 20 4.1707 2.05746 + 21 5.5228 -0.00000 + 22 5.7542 -0.00000 + 23 5.8229 -0.00000 + 24 5.8929 -0.00000 + 25 6.4911 -0.00000 + 26 6.5501 -0.00000 + 27 6.6183 -0.00000 + 28 6.7645 -0.00000 + 29 7.2627 -0.00000 + 30 7.3106 -0.00000 + 31 7.7097 -0.00000 + 32 7.9127 -0.00000 + 33 8.0517 -0.00000 + 34 8.0796 -0.00000 + 35 9.2907 -0.00000 + 36 9.3440 -0.00000 + 37 9.4125 -0.00000 + 38 9.5281 -0.00000 + 39 9.8942 -0.00000 + 40 10.2122 0.00000 + 41 10.2732 0.00000 + 42 10.3475 0.00000 + 43 11.0804 0.00000 + 44 11.2412 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1149 2.00000 + 2 1.4498 2.00000 + 3 2.1533 2.00000 + 4 2.1818 2.00000 + 5 2.1851 2.00000 + 6 2.2029 2.00000 + 7 2.4676 2.00000 + 8 2.5606 2.00000 + 9 2.5767 2.00000 + 10 3.0518 2.00000 + 11 3.1760 2.00000 + 12 3.2028 2.00000 + 13 3.2386 2.00000 + 14 3.2881 2.00000 + 15 3.3320 2.00000 + 16 3.4954 2.00000 + 17 3.6114 2.00000 + 18 3.8068 2.00003 + 19 3.8618 2.00017 + 20 4.1437 2.04519 + 21 6.0567 -0.00000 + 22 6.1111 -0.00000 + 23 6.3101 -0.00000 + 24 6.3250 -0.00000 + 25 6.8660 -0.00000 + 26 6.8695 -0.00000 + 27 7.0062 -0.00000 + 28 7.3112 -0.00000 + 29 7.3503 -0.00000 + 30 7.5477 -0.00000 + 31 7.6093 -0.00000 + 32 7.6341 -0.00000 + 33 8.1912 -0.00000 + 34 8.3881 -0.00000 + 35 8.5708 -0.00000 + 36 9.0666 -0.00000 + 37 9.3860 -0.00000 + 38 9.4015 -0.00000 + 39 9.6208 -0.00000 + 40 9.6629 -0.00000 + 41 9.9063 -0.00000 + 42 10.1521 0.00000 + 43 10.2170 0.00000 + 44 10.6045 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1336 2.00000 + 2 1.4693 2.00000 + 3 1.8713 2.00000 + 4 2.1829 2.00000 + 5 2.2129 2.00000 + 6 2.2265 2.00000 + 7 2.5408 2.00000 + 8 2.5996 2.00000 + 9 2.8525 2.00000 + 10 2.8671 2.00000 + 11 2.9919 2.00000 + 12 3.2133 2.00000 + 13 3.2950 2.00000 + 14 3.3813 2.00000 + 15 3.3887 2.00000 + 16 3.5438 2.00000 + 17 3.7122 2.00000 + 18 3.8179 2.00005 + 19 3.8688 2.00020 + 20 4.1510 2.04855 + 21 5.9350 -0.00000 + 22 6.0054 -0.00000 + 23 6.1982 -0.00000 + 24 6.3342 -0.00000 + 25 6.5402 -0.00000 + 26 6.7892 -0.00000 + 27 7.0108 -0.00000 + 28 7.2470 -0.00000 + 29 7.3346 -0.00000 + 30 7.5536 -0.00000 + 31 7.6476 -0.00000 + 32 7.6699 -0.00000 + 33 8.3838 -0.00000 + 34 8.4528 -0.00000 + 35 8.6303 -0.00000 + 36 9.0310 -0.00000 + 37 9.2840 -0.00000 + 38 9.3806 -0.00000 + 39 9.6777 -0.00000 + 40 9.7689 -0.00000 + 41 10.0042 0.00000 + 42 10.3067 0.00000 + 43 10.4133 0.00000 + 44 10.6755 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1908 2.00000 + 2 1.5287 2.00000 + 3 1.6244 2.00000 + 4 1.9679 2.00000 + 5 2.2469 2.00000 + 6 2.2872 2.00000 + 7 2.6489 2.00000 + 8 2.6550 2.00000 + 9 2.7547 2.00000 + 10 2.9547 2.00000 + 11 3.0735 2.00000 + 12 3.2297 2.00000 + 13 3.3055 2.00000 + 14 3.4296 2.00000 + 15 3.6148 2.00000 + 16 3.6382 2.00000 + 17 3.7517 2.00001 + 18 3.8040 2.00003 + 19 3.9834 2.00340 + 20 4.1577 2.05167 + 21 5.5793 -0.00000 + 22 5.8693 -0.00000 + 23 5.9994 -0.00000 + 24 6.0779 -0.00000 + 25 6.3693 -0.00000 + 26 6.5911 -0.00000 + 27 6.9565 -0.00000 + 28 6.9820 -0.00000 + 29 7.3906 -0.00000 + 30 7.5268 -0.00000 + 31 7.7371 -0.00000 + 32 7.8026 -0.00000 + 33 8.3242 -0.00000 + 34 8.4702 -0.00000 + 35 8.8549 -0.00000 + 36 9.1025 -0.00000 + 37 9.3478 -0.00000 + 38 9.4879 -0.00000 + 39 9.7119 -0.00000 + 40 9.9328 0.00000 + 41 10.2572 0.00000 + 42 10.4285 0.00000 + 43 10.7240 0.00000 + 44 10.9101 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2889 2.00000 + 2 1.4318 2.00000 + 3 1.6296 2.00000 + 4 1.7751 2.00000 + 5 2.3383 2.00000 + 6 2.3978 2.00000 + 7 2.4750 2.00000 + 8 2.5616 2.00000 + 9 2.7529 2.00000 + 10 2.8972 2.00000 + 11 3.3368 2.00000 + 12 3.4228 2.00000 + 13 3.5010 2.00000 + 14 3.5570 2.00000 + 15 3.5580 2.00000 + 16 3.6521 2.00000 + 17 3.7096 2.00000 + 18 3.8730 2.00023 + 19 3.9985 2.00466 + 20 4.1186 2.03401 + 21 5.4507 -0.00000 + 22 5.7299 -0.00000 + 23 5.7523 -0.00000 + 24 5.7723 -0.00000 + 25 6.4360 -0.00000 + 26 6.5317 -0.00000 + 27 6.6682 -0.00000 + 28 6.9190 -0.00000 + 29 7.4115 -0.00000 + 30 7.5446 -0.00000 + 31 7.8601 -0.00000 + 32 7.9228 -0.00000 + 33 8.1155 -0.00000 + 34 8.3099 -0.00000 + 35 9.1711 -0.00000 + 36 9.2689 -0.00000 + 37 9.4060 -0.00000 + 38 9.5997 -0.00000 + 39 9.6682 -0.00000 + 40 10.1148 0.00000 + 41 10.3779 0.00000 + 42 10.3833 0.00000 + 43 10.8344 0.00000 + 44 11.0351 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1866 2.00000 + 2 1.2972 2.00000 + 3 2.2209 2.00000 + 4 2.2705 2.00000 + 5 2.2789 2.00000 + 6 2.3272 2.00000 + 7 2.3838 2.00000 + 8 2.4032 2.00000 + 9 2.5357 2.00000 + 10 2.8770 2.00000 + 11 3.1893 2.00000 + 12 3.3063 2.00000 + 13 3.3211 2.00000 + 14 3.4431 2.00000 + 15 3.4508 2.00000 + 16 3.5118 2.00000 + 17 3.6079 2.00000 + 18 3.7225 2.00000 + 19 3.7267 2.00000 + 20 3.9439 2.00140 + 21 6.0007 -0.00000 + 22 6.0860 -0.00000 + 23 6.2693 -0.00000 + 24 6.4729 -0.00000 + 25 6.5465 -0.00000 + 26 6.6742 -0.00000 + 27 7.1495 -0.00000 + 28 7.2806 -0.00000 + 29 7.5506 -0.00000 + 30 7.6509 -0.00000 + 31 7.9885 -0.00000 + 32 8.0485 -0.00000 + 33 8.1675 -0.00000 + 34 8.3964 -0.00000 + 35 8.5058 -0.00000 + 36 9.0982 -0.00000 + 37 9.1724 -0.00000 + 38 9.2379 -0.00000 + 39 9.5302 -0.00000 + 40 9.6395 -0.00000 + 41 9.7794 -0.00000 + 42 9.9295 0.00000 + 43 10.6776 0.00000 + 44 10.8971 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2056 2.00000 + 2 1.3165 2.00000 + 3 1.9450 2.00000 + 4 2.0573 2.00000 + 5 2.2925 2.00000 + 6 2.4230 2.00000 + 7 2.5310 2.00000 + 8 2.6080 2.00000 + 9 2.7307 2.00000 + 10 2.9022 2.00000 + 11 2.9944 2.00000 + 12 3.1343 2.00000 + 13 3.2433 2.00000 + 14 3.5079 2.00000 + 15 3.5190 2.00000 + 16 3.6289 2.00000 + 17 3.6915 2.00000 + 18 3.7107 2.00000 + 19 3.8300 2.00007 + 20 3.9594 2.00201 + 21 5.9469 -0.00000 + 22 5.9998 -0.00000 + 23 6.0874 -0.00000 + 24 6.2981 -0.00000 + 25 6.4513 -0.00000 + 26 6.6107 -0.00000 + 27 7.1254 -0.00000 + 28 7.2239 -0.00000 + 29 7.5481 -0.00000 + 30 7.6738 -0.00000 + 31 7.9402 -0.00000 + 32 8.1139 -0.00000 + 33 8.2299 -0.00000 + 34 8.4531 -0.00000 + 35 8.6796 -0.00000 + 36 9.0660 -0.00000 + 37 9.1332 -0.00000 + 38 9.2746 -0.00000 + 39 9.5587 -0.00000 + 40 9.7321 -0.00000 + 41 9.8802 -0.00000 + 42 10.0833 0.00000 + 43 10.6658 0.00000 + 44 10.8672 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2633 2.00000 + 2 1.3749 2.00000 + 3 1.6986 2.00000 + 4 1.8125 2.00000 + 5 2.3517 2.00000 + 6 2.4833 2.00000 + 7 2.5986 2.00000 + 8 2.7787 2.00000 + 9 2.8863 2.00000 + 10 2.9546 2.00000 + 11 3.0365 2.00000 + 12 3.0599 2.00000 + 13 3.1223 2.00000 + 14 3.3592 2.00000 + 15 3.7091 2.00000 + 16 3.7106 2.00000 + 17 3.7817 2.00001 + 18 3.8592 2.00016 + 19 3.9371 2.00119 + 20 3.9978 2.00460 + 21 5.6570 -0.00000 + 22 5.7905 -0.00000 + 23 5.8811 -0.00000 + 24 5.8820 -0.00000 + 25 6.4451 -0.00000 + 26 6.5140 -0.00000 + 27 7.0033 -0.00000 + 28 7.0075 -0.00000 + 29 7.6046 -0.00000 + 30 7.7666 -0.00000 + 31 7.9298 -0.00000 + 32 8.1450 -0.00000 + 33 8.2217 -0.00000 + 34 8.5526 -0.00000 + 35 8.7940 -0.00000 + 36 9.1540 -0.00000 + 37 9.1628 -0.00000 + 38 9.3515 -0.00000 + 39 9.7294 -0.00000 + 40 9.9612 0.00000 + 41 10.0291 0.00000 + 42 10.3445 0.00000 + 43 10.6195 0.00000 + 44 10.9151 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3621 2.00000 + 2 1.4747 2.00000 + 3 1.5058 2.00000 + 4 1.6193 2.00000 + 5 2.4504 2.00000 + 6 2.5828 2.00000 + 7 2.5878 2.00000 + 8 2.7165 2.00000 + 9 2.7271 2.00000 + 10 2.8608 2.00000 + 11 3.0619 2.00000 + 12 3.2022 2.00000 + 13 3.4487 2.00000 + 14 3.4992 2.00000 + 15 3.7251 2.00000 + 16 3.7358 2.00000 + 17 3.7758 2.00001 + 18 3.9273 2.00094 + 19 3.9468 2.00150 + 20 4.0181 2.00688 + 21 5.4616 -0.00000 + 22 5.5843 -0.00000 + 23 5.6662 -0.00000 + 24 5.6827 -0.00000 + 25 6.4833 -0.00000 + 26 6.5217 -0.00000 + 27 6.7547 -0.00000 + 28 6.8679 -0.00000 + 29 7.6617 -0.00000 + 30 7.8569 -0.00000 + 31 7.8691 -0.00000 + 32 8.0697 -0.00000 + 33 8.2918 -0.00000 + 34 8.6706 -0.00000 + 35 8.8222 -0.00000 + 36 9.0686 -0.00000 + 37 9.3223 -0.00000 + 38 9.4411 -0.00000 + 39 9.8169 -0.00000 + 40 10.0782 0.00000 + 41 10.2481 0.00000 + 42 10.4940 0.00000 + 43 10.6233 0.00000 + 44 10.8395 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.2000 2.00000 + 2 1.7890 2.00000 + 3 1.8328 2.00000 + 4 2.0410 2.00000 + 5 2.2395 2.00000 + 6 2.2876 2.00000 + 7 2.4948 2.00000 + 8 2.7378 2.00000 + 9 2.7677 2.00000 + 10 2.8546 2.00000 + 11 2.8603 2.00000 + 12 2.9071 2.00000 + 13 3.0781 2.00000 + 14 3.1045 2.00000 + 15 3.4173 2.00000 + 16 3.4278 2.00000 + 17 3.6033 2.00000 + 18 3.6163 2.00000 + 19 3.6759 2.00000 + 20 4.3672 1.73224 + 21 6.1189 -0.00000 + 22 6.4625 -0.00000 + 23 6.5179 -0.00000 + 24 7.0667 -0.00000 + 25 7.1595 -0.00000 + 26 7.2283 -0.00000 + 27 7.2380 -0.00000 + 28 7.3110 -0.00000 + 29 7.4308 -0.00000 + 30 7.5332 -0.00000 + 31 7.5802 -0.00000 + 32 7.8745 -0.00000 + 33 8.1330 -0.00000 + 34 8.1993 -0.00000 + 35 8.5848 -0.00000 + 36 9.2027 -0.00000 + 37 9.3532 -0.00000 + 38 9.3719 -0.00000 + 39 9.4795 -0.00000 + 40 9.5183 -0.00000 + 41 9.6632 -0.00000 + 42 9.7313 -0.00000 + 43 10.0148 0.00000 + 44 10.6847 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2189 2.00000 + 2 1.8076 2.00000 + 3 1.8536 2.00000 + 4 1.9596 2.00000 + 5 2.0613 2.00000 + 6 2.4994 2.00000 + 7 2.5172 2.00000 + 8 2.6014 2.00000 + 9 2.6323 2.00000 + 10 2.7951 2.00000 + 11 2.7975 2.00000 + 12 3.1224 2.00000 + 13 3.1892 2.00000 + 14 3.2106 2.00000 + 15 3.3893 2.00000 + 16 3.4300 2.00000 + 17 3.6068 2.00000 + 18 3.7297 2.00000 + 19 3.7826 2.00002 + 20 4.3677 1.72951 + 21 6.0577 -0.00000 + 22 6.1767 -0.00000 + 23 6.4009 -0.00000 + 24 6.8073 -0.00000 + 25 6.8941 -0.00000 + 26 7.1284 -0.00000 + 27 7.2603 -0.00000 + 28 7.2706 -0.00000 + 29 7.4018 -0.00000 + 30 7.6124 -0.00000 + 31 7.6217 -0.00000 + 32 7.8467 -0.00000 + 33 8.3085 -0.00000 + 34 8.4388 -0.00000 + 35 8.6484 -0.00000 + 36 9.0633 -0.00000 + 37 9.1903 -0.00000 + 38 9.4167 -0.00000 + 39 9.5444 -0.00000 + 40 9.6810 -0.00000 + 41 9.8901 -0.00000 + 42 9.8924 -0.00000 + 43 10.2714 0.00000 + 44 10.6335 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2766 2.00000 + 2 1.7124 2.00000 + 3 1.8642 2.00000 + 4 1.9158 2.00000 + 5 2.1221 2.00000 + 6 2.2882 2.00000 + 7 2.3636 2.00000 + 8 2.5621 2.00000 + 9 2.5667 2.00000 + 10 2.8279 2.00000 + 11 2.9707 2.00000 + 12 3.0656 2.00000 + 13 3.2611 2.00000 + 14 3.4303 2.00000 + 15 3.5090 2.00000 + 16 3.6820 2.00000 + 17 3.7107 2.00000 + 18 3.8200 2.00005 + 19 3.9335 2.00109 + 20 4.3475 1.83235 + 21 5.7340 -0.00000 + 22 5.9058 -0.00000 + 23 6.1052 -0.00000 + 24 6.2954 -0.00000 + 25 6.8106 -0.00000 + 26 6.8197 -0.00000 + 27 6.8919 -0.00000 + 28 7.2272 -0.00000 + 29 7.4834 -0.00000 + 30 7.7027 -0.00000 + 31 7.7431 -0.00000 + 32 7.8922 -0.00000 + 33 8.2139 -0.00000 + 34 8.4255 -0.00000 + 35 9.0574 -0.00000 + 36 9.1660 -0.00000 + 37 9.3503 -0.00000 + 38 9.4272 -0.00000 + 39 9.6095 -0.00000 + 40 9.9587 0.00000 + 41 10.2119 0.00000 + 42 10.2642 0.00000 + 43 10.4361 0.00000 + 44 10.7659 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3754 2.00000 + 2 1.5191 2.00000 + 3 1.9607 2.00000 + 4 2.0185 2.00000 + 5 2.1015 2.00000 + 6 2.1680 2.00000 + 7 2.2318 2.00000 + 8 2.3772 2.00000 + 9 2.6574 2.00000 + 10 2.7930 2.00000 + 11 2.9428 2.00000 + 12 3.0769 2.00000 + 13 3.4990 2.00000 + 14 3.6616 2.00000 + 15 3.6960 2.00000 + 16 3.7326 2.00000 + 17 3.8293 2.00006 + 18 3.8940 2.00040 + 19 4.0198 2.00710 + 20 4.2467 2.06482 + 21 5.5637 -0.00000 + 22 5.7713 -0.00000 + 23 5.7921 -0.00000 + 24 5.9140 -0.00000 + 25 6.6210 -0.00000 + 26 6.6519 -0.00000 + 27 6.8517 -0.00000 + 28 7.1153 -0.00000 + 29 7.5332 -0.00000 + 30 7.6469 -0.00000 + 31 7.8470 -0.00000 + 32 7.9919 -0.00000 + 33 8.0197 -0.00000 + 34 8.3355 -0.00000 + 35 9.2790 -0.00000 + 36 9.4146 -0.00000 + 37 9.4311 -0.00000 + 38 9.5697 -0.00000 + 39 9.7348 -0.00000 + 40 10.1726 0.00000 + 41 10.1822 0.00000 + 42 10.3749 0.00000 + 43 10.8239 0.00000 + 44 11.1213 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2368 2.00000 + 2 1.5849 2.00000 + 3 1.8753 2.00000 + 4 2.2503 2.00000 + 5 2.2954 2.00000 + 6 2.3269 2.00000 + 7 2.3372 2.00000 + 8 2.5911 2.00000 + 9 2.6874 2.00000 + 10 2.8971 2.00000 + 11 2.9426 2.00000 + 12 3.0766 2.00000 + 13 3.2484 2.00000 + 14 3.2717 2.00000 + 15 3.2745 2.00000 + 16 3.3268 2.00000 + 17 3.4600 2.00000 + 18 3.6763 2.00000 + 19 3.6903 2.00000 + 20 4.1585 2.05202 + 21 6.1323 -0.00000 + 22 6.3726 -0.00000 + 23 6.5023 -0.00000 + 24 6.7975 -0.00000 + 25 6.9792 -0.00000 + 26 7.1044 -0.00000 + 27 7.3887 -0.00000 + 28 7.5261 -0.00000 + 29 7.5520 -0.00000 + 30 7.5992 -0.00000 + 31 7.6420 -0.00000 + 32 8.0989 -0.00000 + 33 8.1915 -0.00000 + 34 8.2061 -0.00000 + 35 8.7884 -0.00000 + 36 9.0547 -0.00000 + 37 9.2977 -0.00000 + 38 9.4150 -0.00000 + 39 9.4787 -0.00000 + 40 9.6102 -0.00000 + 41 9.9069 -0.00000 + 42 10.0471 0.00000 + 43 10.0626 0.00000 + 44 10.7315 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2558 2.00000 + 2 1.6045 2.00000 + 3 1.8951 2.00000 + 4 1.9974 2.00000 + 5 2.2861 2.00000 + 6 2.3344 2.00000 + 7 2.3669 2.00000 + 8 2.6356 2.00000 + 9 2.6614 2.00000 + 10 2.9752 2.00000 + 11 3.0015 2.00000 + 12 3.0495 2.00000 + 13 3.1141 2.00000 + 14 3.2565 2.00000 + 15 3.3927 2.00000 + 16 3.5397 2.00000 + 17 3.5643 2.00000 + 18 3.6333 2.00000 + 19 3.7365 2.00000 + 20 4.1658 2.05532 + 21 6.0559 -0.00000 + 22 6.1067 -0.00000 + 23 6.4133 -0.00000 + 24 6.6170 -0.00000 + 25 6.7689 -0.00000 + 26 7.0513 -0.00000 + 27 7.2853 -0.00000 + 28 7.3715 -0.00000 + 29 7.5536 -0.00000 + 30 7.7100 -0.00000 + 31 7.7570 -0.00000 + 32 8.1706 -0.00000 + 33 8.3092 -0.00000 + 34 8.3959 -0.00000 + 35 8.7103 -0.00000 + 36 9.0851 -0.00000 + 37 9.1604 -0.00000 + 38 9.5435 -0.00000 + 39 9.5592 -0.00000 + 40 9.6453 -0.00000 + 41 10.0502 0.00000 + 42 10.1928 0.00000 + 43 10.2206 0.00000 + 44 10.7065 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3137 2.00000 + 2 1.6638 2.00000 + 3 1.7505 2.00000 + 4 1.9546 2.00000 + 5 2.1025 2.00000 + 6 2.3463 2.00000 + 7 2.3763 2.00000 + 8 2.4415 2.00000 + 9 2.7775 2.00000 + 10 2.8413 2.00000 + 11 3.0299 2.00000 + 12 3.1970 2.00000 + 13 3.3297 2.00000 + 14 3.4208 2.00000 + 15 3.5187 2.00000 + 16 3.5522 2.00000 + 17 3.6964 2.00000 + 18 3.7684 2.00001 + 19 3.8611 2.00016 + 20 4.1733 2.05859 + 21 5.6771 -0.00000 + 22 5.8565 -0.00000 + 23 6.0847 -0.00000 + 24 6.0924 -0.00000 + 25 6.7868 -0.00000 + 26 6.8676 -0.00000 + 27 7.0071 -0.00000 + 28 7.4683 -0.00000 + 29 7.5217 -0.00000 + 30 7.7142 -0.00000 + 31 7.8308 -0.00000 + 32 8.1119 -0.00000 + 33 8.2624 -0.00000 + 34 8.6026 -0.00000 + 35 8.9397 -0.00000 + 36 9.1806 -0.00000 + 37 9.3018 -0.00000 + 38 9.6169 -0.00000 + 39 9.6517 -0.00000 + 40 9.7953 -0.00000 + 41 10.2001 0.00000 + 42 10.3664 0.00000 + 43 10.5251 0.00000 + 44 10.7979 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4128 2.00000 + 2 1.5570 2.00000 + 3 1.7646 2.00000 + 4 1.9095 2.00000 + 5 2.0570 2.00000 + 6 2.2009 2.00000 + 7 2.4468 2.00000 + 8 2.5263 2.00000 + 9 2.5939 2.00000 + 10 2.6666 2.00000 + 11 3.2026 2.00000 + 12 3.3087 2.00000 + 13 3.5009 2.00000 + 14 3.5886 2.00000 + 15 3.6160 2.00000 + 16 3.6630 2.00000 + 17 3.7106 2.00000 + 18 3.8694 2.00021 + 19 3.9849 2.00352 + 20 4.1337 2.04063 + 21 5.4747 -0.00000 + 22 5.6687 -0.00000 + 23 5.7226 -0.00000 + 24 5.7281 -0.00000 + 25 6.7488 -0.00000 + 26 6.8198 -0.00000 + 27 6.8424 -0.00000 + 28 7.4918 -0.00000 + 29 7.5657 -0.00000 + 30 7.6560 -0.00000 + 31 7.9087 -0.00000 + 32 8.0493 -0.00000 + 33 8.0499 -0.00000 + 34 8.6269 -0.00000 + 35 9.2487 -0.00000 + 36 9.3650 -0.00000 + 37 9.5032 -0.00000 + 38 9.6261 -0.00000 + 39 9.6615 -0.00000 + 40 9.9619 0.00000 + 41 10.2602 0.00000 + 42 10.3922 0.00000 + 43 10.6551 0.00000 + 44 10.8183 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3116 2.00000 + 2 1.4267 2.00000 + 3 1.9609 2.00000 + 4 2.0905 2.00000 + 5 2.3490 2.00000 + 6 2.4051 2.00000 + 7 2.4537 2.00000 + 8 2.5161 2.00000 + 9 2.6879 2.00000 + 10 2.9818 2.00000 + 11 3.0115 2.00000 + 12 3.0397 2.00000 + 13 3.1023 2.00000 + 14 3.2020 2.00000 + 15 3.4422 2.00000 + 16 3.4749 2.00000 + 17 3.5288 2.00000 + 18 3.6460 2.00000 + 19 3.6625 2.00000 + 20 3.8298 2.00007 + 21 6.2198 -0.00000 + 22 6.3299 -0.00000 + 23 6.5594 -0.00000 + 24 6.6199 -0.00000 + 25 6.7298 -0.00000 + 26 6.7679 -0.00000 + 27 7.4866 -0.00000 + 28 7.5406 -0.00000 + 29 7.7774 -0.00000 + 30 7.8044 -0.00000 + 31 7.8896 -0.00000 + 32 7.9852 -0.00000 + 33 8.5139 -0.00000 + 34 8.5159 -0.00000 + 35 8.7016 -0.00000 + 36 9.1323 -0.00000 + 37 9.1695 -0.00000 + 38 9.2778 -0.00000 + 39 9.5344 -0.00000 + 40 9.6731 -0.00000 + 41 9.7674 -0.00000 + 42 10.0606 0.00000 + 43 10.5519 0.00000 + 44 10.7606 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3308 2.00000 + 2 1.4461 2.00000 + 3 1.9807 2.00000 + 4 2.0729 2.00000 + 5 2.1118 2.00000 + 6 2.1890 2.00000 + 7 2.6621 2.00000 + 8 2.7246 2.00000 + 9 2.7488 2.00000 + 10 2.8460 2.00000 + 11 2.8578 2.00000 + 12 3.0806 2.00000 + 13 3.2680 2.00000 + 14 3.3798 2.00000 + 15 3.3904 2.00000 + 16 3.4880 2.00000 + 17 3.6018 2.00000 + 18 3.6571 2.00000 + 19 3.6894 2.00000 + 20 3.8446 2.00010 + 21 6.1144 -0.00000 + 22 6.1409 -0.00000 + 23 6.2939 -0.00000 + 24 6.3704 -0.00000 + 25 6.7678 -0.00000 + 26 6.8730 -0.00000 + 27 7.3621 -0.00000 + 28 7.3740 -0.00000 + 29 7.7650 -0.00000 + 30 7.8531 -0.00000 + 31 7.9791 -0.00000 + 32 8.1553 -0.00000 + 33 8.4648 -0.00000 + 34 8.6300 -0.00000 + 35 8.7177 -0.00000 + 36 9.1676 -0.00000 + 37 9.2459 -0.00000 + 38 9.2723 -0.00000 + 39 9.5976 -0.00000 + 40 9.7895 -0.00000 + 41 9.8596 -0.00000 + 42 10.1236 0.00000 + 43 10.5478 0.00000 + 44 10.7081 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3892 2.00000 + 2 1.5050 2.00000 + 3 1.8273 2.00000 + 4 1.9440 2.00000 + 5 2.0416 2.00000 + 6 2.1715 2.00000 + 7 2.4770 2.00000 + 8 2.6090 2.00000 + 9 2.7655 2.00000 + 10 3.0717 2.00000 + 11 3.1339 2.00000 + 12 3.1760 2.00000 + 13 3.2308 2.00000 + 14 3.4064 2.00000 + 15 3.5567 2.00000 + 16 3.6151 2.00000 + 17 3.6404 2.00000 + 18 3.7766 2.00001 + 19 3.7824 2.00002 + 20 3.8882 2.00035 + 21 5.7077 -0.00000 + 22 5.8249 -0.00000 + 23 5.9106 -0.00000 + 24 5.9731 -0.00000 + 25 6.8248 -0.00000 + 26 6.8549 -0.00000 + 27 7.1716 -0.00000 + 28 7.3277 -0.00000 + 29 7.7656 -0.00000 + 30 7.8702 -0.00000 + 31 7.9720 -0.00000 + 32 8.2186 -0.00000 + 33 8.4491 -0.00000 + 34 8.6930 -0.00000 + 35 8.8986 -0.00000 + 36 9.2575 -0.00000 + 37 9.3427 -0.00000 + 38 9.4189 -0.00000 + 39 9.7108 -0.00000 + 40 9.9279 0.00000 + 41 10.0301 0.00000 + 42 10.3148 0.00000 + 43 10.5224 0.00000 + 44 10.8181 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4889 2.00000 + 2 1.6054 2.00000 + 3 1.6337 2.00000 + 4 1.7508 2.00000 + 5 2.1428 2.00000 + 6 2.2731 2.00000 + 7 2.2888 2.00000 + 8 2.4208 2.00000 + 9 2.8594 2.00000 + 10 2.9890 2.00000 + 11 3.1983 2.00000 + 12 3.3021 2.00000 + 13 3.4633 2.00000 + 14 3.5512 2.00000 + 15 3.5806 2.00000 + 16 3.6864 2.00000 + 17 3.7027 2.00000 + 18 3.8658 2.00019 + 19 3.8801 2.00028 + 20 3.9467 2.00150 + 21 5.4477 -0.00000 + 22 5.5294 -0.00000 + 23 5.6120 -0.00000 + 24 5.6457 -0.00000 + 25 6.8220 -0.00000 + 26 6.8496 -0.00000 + 27 7.0726 -0.00000 + 28 7.3350 -0.00000 + 29 7.8041 -0.00000 + 30 7.8930 -0.00000 + 31 7.9237 -0.00000 + 32 8.0576 -0.00000 + 33 8.4491 -0.00000 + 34 8.9152 -0.00000 + 35 8.9620 -0.00000 + 36 9.1930 -0.00000 + 37 9.4938 -0.00000 + 38 9.5554 -0.00000 + 39 9.7567 -0.00000 + 40 9.9235 -0.00000 + 41 10.1973 0.00000 + 42 10.4829 0.00000 + 43 10.5972 0.00000 + 44 10.8513 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3639 2.00000 + 2 1.5740 2.00000 + 3 1.9771 2.00000 + 4 2.2056 2.00000 + 5 2.2341 2.00000 + 6 2.3958 2.00000 + 7 2.4441 2.00000 + 8 2.5199 2.00000 + 9 2.6220 2.00000 + 10 2.6482 2.00000 + 11 2.9663 2.00000 + 12 3.0365 2.00000 + 13 3.1766 2.00000 + 14 3.1969 2.00000 + 15 3.2246 2.00000 + 16 3.2412 2.00000 + 17 3.3858 2.00000 + 18 3.4101 2.00000 + 19 3.9180 2.00075 + 20 4.1924 2.06583 + 21 6.3689 -0.00000 + 22 6.5812 -0.00000 + 23 6.8319 -0.00000 + 24 7.1172 -0.00000 + 25 7.2206 -0.00000 + 26 7.2363 -0.00000 + 27 7.2395 -0.00000 + 28 7.3846 -0.00000 + 29 7.7461 -0.00000 + 30 7.7857 -0.00000 + 31 7.7969 -0.00000 + 32 8.0539 -0.00000 + 33 8.2122 -0.00000 + 34 8.4375 -0.00000 + 35 8.7157 -0.00000 + 36 9.0720 -0.00000 + 37 9.1586 -0.00000 + 38 9.3601 -0.00000 + 39 9.4756 -0.00000 + 40 9.4775 -0.00000 + 41 9.5013 -0.00000 + 42 9.6439 -0.00000 + 43 9.6558 -0.00000 + 44 9.9277 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3831 2.00000 + 2 1.5934 2.00000 + 3 1.9967 2.00000 + 4 2.1211 2.00000 + 5 2.2372 2.00000 + 6 2.2474 2.00000 + 7 2.3488 2.00000 + 8 2.4984 2.00000 + 9 2.7186 2.00000 + 10 2.7933 2.00000 + 11 2.9200 2.00000 + 12 2.9474 2.00000 + 13 3.0341 2.00000 + 14 3.1814 2.00000 + 15 3.3063 2.00000 + 16 3.4763 2.00000 + 17 3.4778 2.00000 + 18 3.6076 2.00000 + 19 3.9428 2.00136 + 20 4.2028 2.06871 + 21 6.2224 -0.00000 + 22 6.2902 -0.00000 + 23 6.6260 -0.00000 + 24 6.7728 -0.00000 + 25 7.0810 -0.00000 + 26 7.1032 -0.00000 + 27 7.2819 -0.00000 + 28 7.3409 -0.00000 + 29 7.7203 -0.00000 + 30 7.7401 -0.00000 + 31 8.0471 -0.00000 + 32 8.2758 -0.00000 + 33 8.3162 -0.00000 + 34 8.6000 -0.00000 + 35 8.6979 -0.00000 + 36 8.9903 -0.00000 + 37 9.0296 -0.00000 + 38 9.3292 -0.00000 + 39 9.3807 -0.00000 + 40 9.6380 -0.00000 + 41 9.7022 -0.00000 + 42 9.7628 -0.00000 + 43 9.9441 0.00000 + 44 10.1279 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4415 2.00000 + 2 1.6522 2.00000 + 3 1.8795 2.00000 + 4 2.0490 2.00000 + 5 2.0983 2.00000 + 6 2.2922 2.00000 + 7 2.3211 2.00000 + 8 2.4913 2.00000 + 9 2.5571 2.00000 + 10 2.7155 2.00000 + 11 2.7390 2.00000 + 12 2.9593 2.00000 + 13 3.2202 2.00000 + 14 3.3574 2.00000 + 15 3.5895 2.00000 + 16 3.6977 2.00000 + 17 3.7275 2.00000 + 18 3.7756 2.00001 + 19 4.0097 2.00584 + 20 4.2177 2.07084 + 21 5.8340 -0.00000 + 22 5.8954 -0.00000 + 23 6.1723 -0.00000 + 24 6.2429 -0.00000 + 25 6.9515 -0.00000 + 26 7.0079 -0.00000 + 27 7.0830 -0.00000 + 28 7.1818 -0.00000 + 29 7.7423 -0.00000 + 30 7.7700 -0.00000 + 31 8.1403 -0.00000 + 32 8.1766 -0.00000 + 33 8.4555 -0.00000 + 34 8.8399 -0.00000 + 35 8.9988 -0.00000 + 36 9.0041 -0.00000 + 37 9.1426 -0.00000 + 38 9.3630 -0.00000 + 39 9.3653 -0.00000 + 40 9.7065 -0.00000 + 41 10.0287 0.00000 + 42 10.0724 0.00000 + 43 10.3579 0.00000 + 44 10.5605 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5413 2.00000 + 2 1.6861 2.00000 + 3 1.7523 2.00000 + 4 1.8964 2.00000 + 5 2.1602 2.00000 + 6 2.3042 2.00000 + 7 2.3901 2.00000 + 8 2.4196 2.00000 + 9 2.5310 2.00000 + 10 2.5610 2.00000 + 11 2.6592 2.00000 + 12 2.7963 2.00000 + 13 3.5844 2.00000 + 14 3.6484 2.00000 + 15 3.7380 2.00000 + 16 3.7627 2.00001 + 17 3.9045 2.00053 + 18 3.9717 2.00264 + 19 4.0182 2.00688 + 20 4.1670 2.05585 + 21 5.6009 -0.00000 + 22 5.6812 -0.00000 + 23 5.7725 -0.00000 + 24 5.8237 -0.00000 + 25 6.8532 -0.00000 + 26 6.8976 -0.00000 + 27 6.9628 -0.00000 + 28 7.0788 -0.00000 + 29 7.8026 -0.00000 + 30 7.8448 -0.00000 + 31 7.9611 -0.00000 + 32 7.9802 -0.00000 + 33 8.6152 -0.00000 + 34 8.8856 -0.00000 + 35 9.1764 -0.00000 + 36 9.1902 -0.00000 + 37 9.3328 -0.00000 + 38 9.3513 -0.00000 + 39 9.4527 -0.00000 + 40 9.6447 -0.00000 + 41 10.3328 0.00000 + 42 10.5517 0.00000 + 43 10.6133 0.00000 + 44 10.9304 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4026 2.00000 + 2 1.6147 2.00000 + 3 1.7660 2.00000 + 4 1.9929 2.00000 + 5 2.4454 2.00000 + 6 2.4846 2.00000 + 7 2.5191 2.00000 + 8 2.6527 2.00000 + 9 2.7091 2.00000 + 10 2.8094 2.00000 + 11 2.8149 2.00000 + 12 2.8572 2.00000 + 13 3.0104 2.00000 + 14 3.0536 2.00000 + 15 3.3805 2.00000 + 16 3.4289 2.00000 + 17 3.5211 2.00000 + 18 3.5485 2.00000 + 19 3.6833 2.00000 + 20 3.9481 2.00155 + 21 6.4076 -0.00000 + 22 6.5570 -0.00000 + 23 6.6203 -0.00000 + 24 6.8374 -0.00000 + 25 7.2592 -0.00000 + 26 7.2945 -0.00000 + 27 7.4836 -0.00000 + 28 7.5377 -0.00000 + 29 7.6282 -0.00000 + 30 7.6320 -0.00000 + 31 7.7781 -0.00000 + 32 7.9859 -0.00000 + 33 8.3572 -0.00000 + 34 8.6980 -0.00000 + 35 8.8408 -0.00000 + 36 9.0586 -0.00000 + 37 9.2219 -0.00000 + 38 9.2422 -0.00000 + 39 9.5221 -0.00000 + 40 9.7084 -0.00000 + 41 9.8085 -0.00000 + 42 9.8425 -0.00000 + 43 9.8482 -0.00000 + 44 10.1694 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4219 2.00000 + 2 1.6341 2.00000 + 3 1.7859 2.00000 + 4 2.0122 2.00000 + 5 2.1681 2.00000 + 6 2.3692 2.00000 + 7 2.5230 2.00000 + 8 2.5777 2.00000 + 9 2.7292 2.00000 + 10 2.7736 2.00000 + 11 2.9009 2.00000 + 12 3.0127 2.00000 + 13 3.1435 2.00000 + 14 3.2298 2.00000 + 15 3.3081 2.00000 + 16 3.4045 2.00000 + 17 3.5942 2.00000 + 18 3.6554 2.00000 + 19 3.7171 2.00000 + 20 3.9635 2.00220 + 21 6.2242 -0.00000 + 22 6.2308 -0.00000 + 23 6.5344 -0.00000 + 24 6.6017 -0.00000 + 25 7.0829 -0.00000 + 26 7.0952 -0.00000 + 27 7.4745 -0.00000 + 28 7.5097 -0.00000 + 29 7.7374 -0.00000 + 30 7.8345 -0.00000 + 31 7.9241 -0.00000 + 32 8.0792 -0.00000 + 33 8.4049 -0.00000 + 34 8.6647 -0.00000 + 35 8.8411 -0.00000 + 36 9.0717 -0.00000 + 37 9.1509 -0.00000 + 38 9.3002 -0.00000 + 39 9.6322 -0.00000 + 40 9.7333 -0.00000 + 41 9.7643 -0.00000 + 42 9.9720 0.00000 + 43 10.1587 0.00000 + 44 10.3074 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4806 2.00000 + 2 1.6931 2.00000 + 3 1.8460 2.00000 + 4 1.9191 2.00000 + 5 2.0754 2.00000 + 6 2.1317 2.00000 + 7 2.2884 2.00000 + 8 2.5118 2.00000 + 9 2.6256 2.00000 + 10 2.8592 2.00000 + 11 3.0031 2.00000 + 12 3.1717 2.00000 + 13 3.2917 2.00000 + 14 3.3843 2.00000 + 15 3.4929 2.00000 + 16 3.5773 2.00000 + 17 3.7203 2.00000 + 18 3.7484 2.00000 + 19 3.8285 2.00006 + 20 4.0034 2.00515 + 21 5.7757 -0.00000 + 22 5.8515 -0.00000 + 23 6.0769 -0.00000 + 24 6.0831 -0.00000 + 25 7.0720 -0.00000 + 26 7.0916 -0.00000 + 27 7.2550 -0.00000 + 28 7.4140 -0.00000 + 29 7.7848 -0.00000 + 30 7.8411 -0.00000 + 31 8.1074 -0.00000 + 32 8.2019 -0.00000 + 33 8.3980 -0.00000 + 34 8.7609 -0.00000 + 35 8.9475 -0.00000 + 36 9.1363 -0.00000 + 37 9.2144 -0.00000 + 38 9.3812 -0.00000 + 39 9.6750 -0.00000 + 40 9.8695 -0.00000 + 41 9.9006 -0.00000 + 42 10.1054 0.00000 + 43 10.4993 0.00000 + 44 10.7128 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5807 2.00000 + 2 1.7259 2.00000 + 3 1.7933 2.00000 + 4 1.9312 2.00000 + 5 1.9562 2.00000 + 6 2.0965 2.00000 + 7 2.1758 2.00000 + 8 2.3228 2.00000 + 9 2.7185 2.00000 + 10 2.8487 2.00000 + 11 2.9505 2.00000 + 12 3.0701 2.00000 + 13 3.5857 2.00000 + 14 3.6393 2.00000 + 15 3.6792 2.00000 + 16 3.7039 2.00000 + 17 3.7813 2.00001 + 18 3.8950 2.00041 + 19 3.9009 2.00048 + 20 4.0200 2.00713 + 21 5.5039 -0.00000 + 22 5.5731 -0.00000 + 23 5.6637 -0.00000 + 24 5.6724 -0.00000 + 25 7.0644 -0.00000 + 26 7.1134 -0.00000 + 27 7.1205 -0.00000 + 28 7.3639 -0.00000 + 29 7.7981 -0.00000 + 30 7.8670 -0.00000 + 31 8.0382 -0.00000 + 32 8.0519 -0.00000 + 33 8.4287 -0.00000 + 34 8.9875 -0.00000 + 35 9.0575 -0.00000 + 36 9.2990 -0.00000 + 37 9.3394 -0.00000 + 38 9.4837 -0.00000 + 39 9.5306 -0.00000 + 40 9.7630 -0.00000 + 41 10.1195 0.00000 + 42 10.3374 0.00000 + 43 10.6345 0.00000 + 44 10.8785 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4811 2.00000 + 2 1.6014 2.00000 + 3 1.6970 2.00000 + 4 1.8225 2.00000 + 5 2.5194 2.00000 + 6 2.5647 2.00000 + 7 2.6199 2.00000 + 8 2.6723 2.00000 + 9 2.7318 2.00000 + 10 2.7785 2.00000 + 11 2.8570 2.00000 + 12 2.8853 2.00000 + 13 2.9607 2.00000 + 14 3.1892 2.00000 + 15 3.3205 2.00000 + 16 3.5095 2.00000 + 17 3.5632 2.00000 + 18 3.6007 2.00000 + 19 3.6021 2.00000 + 20 3.6043 2.00000 + 21 6.4554 -0.00000 + 22 6.4955 -0.00000 + 23 6.5491 -0.00000 + 24 6.6316 -0.00000 + 25 7.0896 -0.00000 + 26 7.1147 -0.00000 + 27 7.4498 -0.00000 + 28 7.5109 -0.00000 + 29 7.9185 -0.00000 + 30 7.9366 -0.00000 + 31 7.9654 -0.00000 + 32 7.9964 -0.00000 + 33 8.5078 -0.00000 + 34 8.6938 -0.00000 + 35 8.8118 -0.00000 + 36 8.9404 -0.00000 + 37 9.2527 -0.00000 + 38 9.3891 -0.00000 + 39 9.4233 -0.00000 + 40 9.5383 -0.00000 + 41 10.2085 0.00000 + 42 10.3395 0.00000 + 43 10.3882 0.00000 + 44 10.5423 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5006 2.00000 + 2 1.6210 2.00000 + 3 1.7168 2.00000 + 4 1.8424 2.00000 + 5 2.2463 2.00000 + 6 2.3640 2.00000 + 7 2.4604 2.00000 + 8 2.5825 2.00000 + 9 2.8831 2.00000 + 10 2.8937 2.00000 + 11 3.0030 2.00000 + 12 3.1320 2.00000 + 13 3.1347 2.00000 + 14 3.2357 2.00000 + 15 3.3703 2.00000 + 16 3.4310 2.00000 + 17 3.5641 2.00000 + 18 3.6101 2.00000 + 19 3.6123 2.00000 + 20 3.6339 2.00000 + 21 6.2412 -0.00000 + 22 6.2521 -0.00000 + 23 6.3740 -0.00000 + 24 6.3937 -0.00000 + 25 7.1163 -0.00000 + 26 7.1525 -0.00000 + 27 7.4303 -0.00000 + 28 7.4751 -0.00000 + 29 7.9387 -0.00000 + 30 7.9503 -0.00000 + 31 8.0073 -0.00000 + 32 8.0592 -0.00000 + 33 8.6189 -0.00000 + 34 8.6643 -0.00000 + 35 8.8296 -0.00000 + 36 9.0588 -0.00000 + 37 9.2867 -0.00000 + 38 9.3516 -0.00000 + 39 9.5160 -0.00000 + 40 9.6040 -0.00000 + 41 10.2167 0.00000 + 42 10.3310 0.00000 + 43 10.4825 0.00000 + 44 10.6516 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5597 2.00000 + 2 1.6804 2.00000 + 3 1.7766 2.00000 + 4 1.9018 2.00000 + 5 2.0018 2.00000 + 6 2.1215 2.00000 + 7 2.2194 2.00000 + 8 2.3447 2.00000 + 9 2.9611 2.00000 + 10 3.1426 2.00000 + 11 3.2437 2.00000 + 12 3.2566 2.00000 + 13 3.3569 2.00000 + 14 3.3971 2.00000 + 15 3.4836 2.00000 + 16 3.4983 2.00000 + 17 3.5599 2.00000 + 18 3.6526 2.00000 + 19 3.6620 2.00000 + 20 3.7025 2.00000 + 21 5.7849 -0.00000 + 22 5.8484 -0.00000 + 23 5.9085 -0.00000 + 24 5.9517 -0.00000 + 25 7.1878 -0.00000 + 26 7.2013 -0.00000 + 27 7.4074 -0.00000 + 28 7.4825 -0.00000 + 29 7.8858 -0.00000 + 30 7.9207 -0.00000 + 31 7.9987 -0.00000 + 32 8.1656 -0.00000 + 33 8.7071 -0.00000 + 34 8.7349 -0.00000 + 35 8.9427 -0.00000 + 36 9.1648 -0.00000 + 37 9.3439 -0.00000 + 38 9.3623 -0.00000 + 39 9.5932 -0.00000 + 40 9.6525 -0.00000 + 41 10.3106 0.00000 + 42 10.4405 0.00000 + 43 10.6132 0.00000 + 44 10.8166 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6603 2.00000 + 2 1.7812 2.00000 + 3 1.8061 2.00000 + 4 1.8763 2.00000 + 5 1.9304 2.00000 + 6 2.0052 2.00000 + 7 2.0261 2.00000 + 8 2.1525 2.00000 + 9 3.0459 2.00000 + 10 3.1536 2.00000 + 11 3.2451 2.00000 + 12 3.2984 2.00000 + 13 3.4569 2.00000 + 14 3.4945 2.00000 + 15 3.5438 2.00000 + 16 3.6179 2.00000 + 17 3.7145 2.00000 + 18 3.7933 2.00002 + 19 3.8213 2.00005 + 20 3.8296 2.00007 + 21 5.4614 -0.00000 + 22 5.5109 -0.00000 + 23 5.5293 -0.00000 + 24 5.5657 -0.00000 + 25 7.2155 -0.00000 + 26 7.2452 -0.00000 + 27 7.3998 -0.00000 + 28 7.5345 -0.00000 + 29 7.8642 -0.00000 + 30 7.9210 -0.00000 + 31 7.9527 -0.00000 + 32 8.1008 -0.00000 + 33 8.6504 -0.00000 + 34 8.9215 -0.00000 + 35 9.0933 -0.00000 + 36 9.1390 -0.00000 + 37 9.3926 -0.00000 + 38 9.4407 -0.00000 + 39 9.5338 -0.00000 + 40 9.5995 -0.00000 + 41 10.4093 0.00000 + 42 10.5774 0.00000 + 43 10.7153 0.00000 + 44 10.9058 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.014 0.044 0.015 + -0.004 -0.014 -0.240 -0.001 0.002 + 0.012 0.044 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.390 -0.037 0.038 -0.111 -0.040 + -0.037 0.001 -0.002 0.003 0.002 + 0.038 -0.002 0.221 -0.007 0.011 + -0.111 0.003 -0.007 0.139 0.002 + -0.040 0.002 0.011 0.002 0.209 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1641: real time 0.1641 + FORLOC: cpu time 0.0093: real time 0.0093 + FORNL : cpu time 13.3614: real time 13.3637 + STRESS: cpu time 5.1058: real time 5.1063 + FORCOR: cpu time 0.0288: real time 0.0288 + FORHAR: cpu time 0.0206: real time 0.0206 + MIXING: cpu time 0.0045: real time 0.0045 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.67152 14.67152 14.67152 + Ewald -143.49331 -148.60624 -130.79184 0.00000 0.00000 -0.00000 + Hartree 1.18520 0.69054 1.05883 -0.00000 -0.00000 0.00000 + E(xc) -108.54126 -108.98734 -107.80161 0.00000 0.00000 -0.00000 + Local 7.67659 2.22292 11.57316 0.00000 0.00000 -0.00000 + n-local 130.57318 131.20302 128.17263 0.01946 0.07459 -0.21216 + augment 7.40002 7.55134 7.08039 -0.00000 -0.00000 0.00000 + Kinetic 215.49437 225.98518 200.78942 0.07419 -1.13861 -0.90100 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 124.96631 124.73093 124.75249 0.00000 0.00000 0.00000 + in kB 700.82145 699.50141 699.62234 0.00000 0.00000 0.00000 + external pressure = -0.02 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.69 + direct lattice vectors reciprocal lattice vectors + 6.891162190 0.000000000 0.000000000 0.145113404 0.000000000 0.000000000 + 0.000000000 8.166632104 0.000000000 0.000000000 0.122449498 0.000000000 + 0.000000000 0.000000000 5.076456596 0.000000000 0.000000000 0.196987797 + + length of vectors + 6.891162190 8.166632104 5.076456596 0.145113404 0.122449498 0.196987797 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.339E-01 0.992E-01 -.261E+00 -.441E+00 0.357E+00 -.115E+01 0.477E+00 -.457E+00 0.142E+01 0.141E-06 -.518E-06 -.869E-06 + 0.339E-01 -.992E-01 -.261E+00 0.441E+00 -.357E+00 -.115E+01 -.477E+00 0.457E+00 0.142E+01 -.141E-06 0.518E-06 -.869E-06 + -.339E-01 -.992E-01 -.261E+00 -.441E+00 -.357E+00 -.115E+01 0.477E+00 0.457E+00 0.142E+01 0.141E-06 0.518E-06 -.869E-06 + 0.339E-01 0.992E-01 -.261E+00 0.441E+00 0.357E+00 -.115E+01 -.477E+00 -.457E+00 0.142E+01 -.141E-06 -.518E-06 -.869E-06 + -.339E-01 0.992E-01 -.261E+00 -.441E+00 0.357E+00 -.115E+01 0.477E+00 -.457E+00 0.142E+01 0.141E-06 -.518E-06 -.869E-06 + 0.339E-01 -.992E-01 -.261E+00 0.441E+00 -.357E+00 -.115E+01 -.477E+00 0.457E+00 0.142E+01 -.141E-06 0.518E-06 -.869E-06 + -.339E-01 -.992E-01 -.261E+00 -.441E+00 -.357E+00 -.115E+01 0.477E+00 0.457E+00 0.142E+01 0.141E-06 0.518E-06 -.869E-06 + 0.339E-01 0.992E-01 -.261E+00 0.441E+00 0.357E+00 -.115E+01 -.477E+00 -.457E+00 0.142E+01 -.141E-06 -.518E-06 -.869E-06 + -.222E-01 -.358E-01 0.131E+00 -.408E-01 -.231E+00 0.713E+00 0.681E-01 0.266E+00 -.849E+00 -.622E-06 0.134E-06 0.337E-06 + 0.222E-01 0.358E-01 0.131E+00 0.408E-01 0.231E+00 0.713E+00 -.681E-01 -.266E+00 -.849E+00 0.622E-06 -.134E-06 0.337E-06 + -.222E-01 0.358E-01 0.131E+00 -.408E-01 0.231E+00 0.713E+00 0.681E-01 -.266E+00 -.849E+00 -.623E-06 -.134E-06 0.337E-06 + 0.222E-01 -.358E-01 0.131E+00 0.408E-01 -.231E+00 0.713E+00 -.681E-01 0.266E+00 -.849E+00 0.623E-06 0.134E-06 0.337E-06 + -.222E-01 -.358E-01 0.131E+00 -.408E-01 -.231E+00 0.713E+00 0.681E-01 0.266E+00 -.849E+00 -.622E-06 0.134E-06 0.336E-06 + 0.222E-01 0.358E-01 0.131E+00 0.408E-01 0.231E+00 0.713E+00 -.681E-01 -.266E+00 -.849E+00 0.622E-06 -.134E-06 0.336E-06 + -.222E-01 0.358E-01 0.131E+00 -.408E-01 0.231E+00 0.713E+00 0.681E-01 -.266E+00 -.849E+00 -.623E-06 -.134E-06 0.336E-06 + 0.222E-01 -.358E-01 0.131E+00 0.408E-01 -.231E+00 0.713E+00 -.681E-01 0.266E+00 -.849E+00 0.623E-06 0.134E-06 0.336E-06 + -.279E+00 -.158E+00 0.266E-01 -.647E+00 -.251E-01 0.651E-01 0.923E+00 0.188E+00 -.101E+00 0.265E-06 -.747E-06 0.750E-06 + 0.279E+00 0.158E+00 0.266E-01 0.647E+00 0.251E-01 0.651E-01 -.923E+00 -.188E+00 -.101E+00 -.265E-06 0.747E-06 0.750E-06 + -.279E+00 0.158E+00 0.266E-01 -.647E+00 0.251E-01 0.651E-01 0.923E+00 -.188E+00 -.101E+00 0.265E-06 0.747E-06 0.750E-06 + 0.279E+00 -.158E+00 0.266E-01 0.647E+00 -.251E-01 0.651E-01 -.923E+00 0.188E+00 -.101E+00 -.265E-06 -.747E-06 0.750E-06 + -.279E+00 -.158E+00 0.266E-01 -.647E+00 -.251E-01 0.651E-01 0.923E+00 0.188E+00 -.101E+00 0.265E-06 -.747E-06 0.750E-06 + 0.279E+00 0.158E+00 0.266E-01 0.647E+00 0.251E-01 0.651E-01 -.923E+00 -.188E+00 -.101E+00 -.265E-06 0.747E-06 0.750E-06 + -.279E+00 0.158E+00 0.266E-01 -.647E+00 0.251E-01 0.651E-01 0.923E+00 -.188E+00 -.101E+00 0.265E-06 0.747E-06 0.750E-06 + 0.279E+00 -.158E+00 0.266E-01 0.647E+00 -.251E-01 0.651E-01 -.923E+00 0.188E+00 -.101E+00 -.265E-06 -.747E-06 0.750E-06 + -.531E-01 -.656E-01 0.128E-01 -.196E+00 0.598E-01 0.394E-01 0.247E+00 0.163E-02 -.492E-01 0.738E-07 -.617E-06 -.147E-07 + 0.531E-01 0.656E-01 0.128E-01 0.196E+00 -.598E-01 0.394E-01 -.247E+00 -.163E-02 -.492E-01 -.738E-07 0.617E-06 -.147E-07 + -.531E-01 0.656E-01 0.128E-01 -.196E+00 -.598E-01 0.394E-01 0.247E+00 -.163E-02 -.492E-01 0.738E-07 0.617E-06 -.147E-07 + 0.531E-01 -.656E-01 0.128E-01 0.196E+00 0.598E-01 0.394E-01 -.247E+00 0.163E-02 -.492E-01 -.738E-07 -.617E-06 -.147E-07 + -.531E-01 -.656E-01 0.128E-01 -.196E+00 0.598E-01 0.394E-01 0.247E+00 0.163E-02 -.492E-01 0.738E-07 -.617E-06 -.147E-07 + 0.531E-01 0.656E-01 0.128E-01 0.196E+00 -.598E-01 0.394E-01 -.247E+00 -.163E-02 -.492E-01 -.738E-07 0.617E-06 -.147E-07 + -.531E-01 0.656E-01 0.128E-01 -.196E+00 -.598E-01 0.394E-01 0.247E+00 -.163E-02 -.492E-01 0.738E-07 0.617E-06 -.147E-07 + 0.531E-01 -.656E-01 0.128E-01 0.196E+00 0.598E-01 0.394E-01 -.247E+00 0.163E-02 -.492E-01 -.738E-07 -.617E-06 -.147E-07 + 0.432E-01 0.157E+00 0.990E-01 0.211E+00 -.139E+00 0.334E+00 -.247E+00 -.593E-02 -.427E+00 0.617E-06 0.767E-06 -.191E-06 + -.432E-01 -.157E+00 0.990E-01 -.211E+00 0.139E+00 0.334E+00 0.247E+00 0.593E-02 -.427E+00 -.617E-06 -.767E-06 -.191E-06 + 0.432E-01 -.157E+00 0.990E-01 0.211E+00 0.139E+00 0.334E+00 -.247E+00 0.593E-02 -.427E+00 0.617E-06 -.767E-06 -.191E-06 + -.432E-01 0.157E+00 0.990E-01 -.211E+00 -.139E+00 0.334E+00 0.247E+00 -.593E-02 -.427E+00 -.617E-06 0.767E-06 -.191E-06 + 0.432E-01 0.157E+00 0.990E-01 0.211E+00 -.139E+00 0.334E+00 -.247E+00 -.593E-02 -.427E+00 0.617E-06 0.767E-06 -.191E-06 + -.432E-01 -.157E+00 0.990E-01 -.211E+00 0.139E+00 0.334E+00 0.247E+00 0.593E-02 -.427E+00 -.617E-06 -.767E-06 -.191E-06 + 0.432E-01 -.157E+00 0.990E-01 0.211E+00 0.139E+00 0.334E+00 -.247E+00 0.593E-02 -.427E+00 0.617E-06 -.767E-06 -.191E-06 + -.432E-01 0.157E+00 0.990E-01 -.211E+00 -.139E+00 0.334E+00 0.247E+00 -.593E-02 -.427E+00 -.617E-06 0.767E-06 -.191E-06 + ----------------------------------------------------------------------------------------------- + -.287E-04 0.240E-04 0.680E-01 -.777E-15 -.111E-14 0.333E-14 0.139E-15 -.226E-15 -.689E-01 0.820E-13 -.493E-12 0.926E-07 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64081 0.95039 -0.00237 0.002194 -0.000492 0.004955 + 6.25036 7.21624 -0.00237 -0.002194 0.000492 0.004955 + 4.08639 3.13292 -0.00237 0.002194 0.000492 0.004955 + 2.80478 5.03371 -0.00237 -0.002194 -0.000492 0.004955 + 0.64081 5.03371 2.53586 0.002194 -0.000492 0.004955 + 6.25036 3.13292 2.53586 -0.002194 0.000492 0.004955 + 4.08639 7.21624 2.53586 0.002194 0.000492 0.004955 + 2.80478 0.95039 2.53586 -0.002194 -0.000492 0.004955 + 5.94913 7.37461 1.59277 0.005173 -0.001582 -0.004768 + 0.94204 0.79202 1.59277 -0.005173 0.001582 -0.004768 + 2.50354 4.87534 1.59277 0.005173 0.001582 -0.004768 + 4.38762 3.29129 1.59277 -0.005173 -0.001582 -0.004768 + 5.94913 3.29129 4.13100 0.005173 -0.001582 -0.004768 + 0.94204 4.87534 4.13100 -0.005173 0.001582 -0.004768 + 2.50354 0.79202 4.13100 0.005173 0.001582 -0.004768 + 4.38762 7.37461 4.13100 -0.005173 -0.001582 -0.004768 + 6.66743 0.95564 3.01520 -0.003399 0.004525 -0.008990 + 0.22373 7.21100 3.01520 0.003399 -0.004525 -0.008990 + 3.22185 3.12768 3.01520 -0.003399 -0.004525 -0.008990 + 3.66931 5.03895 3.01520 0.003399 0.004525 -0.008990 + 6.66743 5.03895 0.47697 -0.003399 0.004525 -0.008990 + 0.22373 3.12768 0.47697 0.003399 -0.004525 -0.008990 + 3.22185 7.21100 0.47697 -0.003399 -0.004525 -0.008990 + 3.66931 0.95564 0.47697 0.003399 0.004525 -0.008990 + 2.41807 2.18928 0.89606 -0.002013 -0.004248 0.003140 + 4.47309 5.97735 0.89606 0.002013 0.004248 0.003140 + 5.86365 1.89404 0.89606 -0.002013 0.004248 0.003140 + 1.02751 6.27260 0.89606 0.002013 -0.004248 0.003140 + 2.41807 6.27260 3.43429 -0.002013 -0.004248 0.003140 + 4.47309 1.89404 3.43429 0.002013 0.004248 0.003140 + 5.86365 5.97735 3.43429 -0.002013 0.004248 0.003140 + 1.02751 2.18928 3.43429 0.002013 -0.004248 0.003140 + 2.00201 7.44528 1.91392 0.007778 0.011456 0.005663 + 4.88915 0.72136 1.91392 -0.007778 -0.011456 0.005663 + 5.44760 4.80467 1.91392 0.007778 -0.011456 0.005663 + 1.44357 3.36196 1.91392 -0.007778 0.011456 0.005663 + 2.00201 3.36196 4.45215 0.007778 0.011456 0.005663 + 4.88915 4.80467 4.45215 -0.007778 -0.011456 0.005663 + 5.44760 0.72136 4.45215 0.007778 -0.011456 0.005663 + 1.44357 7.44528 4.45215 -0.007778 0.011456 0.005663 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.000854 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.90701204 eV + + energy without entropy= -16.91712928 energy(sigma->0) = -16.91038445 + enthalpy is TOTEN = 107.91282123 eV P V= 124.81983327 + + d Force = 0.3808944E-03[ 0.268E-03, 0.494E-03] d Energy = 0.5139779E-03-0.133E-03 + d Force = 0.1145774E-01[ 0.113E-01, 0.116E-01] d Ewald = 0.7938155E-02 0.352E-02 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0275: real time 0.0281 + + +-------------------------------------------------------------------------------------------------------- + + + Conjugate gradient step on ions: + trial-energy change: -0.000514 1 .order -0.000512 -0.000649 -0.000375 + (g-gl).g = 0.554E-03 g.g = 0.556E-03 gl.gl = 0.197E-02 + g(Force) = 0.453E-03 g(Stress)= 0.103E-03 ortho = 0.125E-05 + gamma = 0.28131 + trial = 1.16644 + opt step = 2.76829 (harmonic = 2.76829) maximal distance =0.00249349 + next E = 107.912565 (d E = -0.00077) + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0064: real time 0.0064 + FEWALD executed in parallel + FEWALD: cpu time 0.0016: real time 0.0026 + GENKIN: cpu time 0.0236: real time 0.0236 + ORTHCH: cpu time 0.5333: real time 0.5334 + LOOP+: cpu time 46.8310: real time 46.8452 + + +----------------------------------------- Iteration 8( 1) --------------------------------------- + + + POTLOK: cpu time 0.0209: real time 0.0209 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 5.0047: real time 5.0053 + DOS: cpu time 0.0075: real time 0.0075 + CHARGE: cpu time 0.1695: real time 0.1695 + MIXING: cpu time 0.0032: real time 0.0032 + -------------------------------------------- + LOOP: cpu time 5.2136: real time 5.2152 + + eigenvalue-minimisations : 5924 + total energy-change (2. order) :-0.4126556E-02 (-0.7178984E-03) + number of electron 40.0000003 magnetization + augmentation part 0.9508048 magnetization + + free energy = -0.169111385950E+02 energy without entropy= -0.169211950867E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 8( 2) --------------------------------------- + + + POTLOK: cpu time 0.0208: real time 0.0208 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 5.3981: real time 5.3986 + DOS: cpu time 0.0079: real time 0.0079 + CHARGE: cpu time 0.1693: real time 0.1694 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 5.6066: real time 5.6073 + + eigenvalue-minimisations : 6544 + total energy-change (2. order) : 0.9127986E-05 (-0.1383291E-04) + number of electron 40.0000003 magnetization + augmentation part 0.9508353 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8159 + 1.8159 + + free energy = -0.169111294670E+02 energy without entropy= -0.169211718029E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 8( 3) --------------------------------------- + + + POTLOK: cpu time 0.0214: real time 0.0214 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 5.4598: real time 5.4604 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1658: real time 0.1658 + MIXING: cpu time 0.0039: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 5.6650: real time 5.6656 + + eigenvalue-minimisations : 6588 + total energy-change (2. order) : 0.3280755E-05 (-0.9494073E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9508410 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8329 + 1.2633 2.4024 + + free energy = -0.169111261862E+02 energy without entropy= -0.169211583855E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 8( 4) --------------------------------------- + + + POTLOK: cpu time 0.0220: real time 0.0220 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 4.0878: real time 4.0883 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1702: real time 0.1703 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 4.2981: real time 4.2986 + + eigenvalue-minimisations : 4048 + total energy-change (2. order) :-0.5362223E-06 (-0.1658201E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9508430 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8804 + 1.0411 2.7115 1.8884 + + free energy = -0.169111267225E+02 energy without entropy= -0.169211570676E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 8( 5) --------------------------------------- + + + POTLOK: cpu time 0.0212: real time 0.0212 + SETDIJ: cpu time 0.0060: real time 0.0060 + EDDAV: cpu time 3.5342: real time 3.5345 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1757: real time 0.1757 + MIXING: cpu time 0.0043: real time 0.0043 + -------------------------------------------- + LOOP: cpu time 3.7495: real time 3.7499 + + eigenvalue-minimisations : 3068 + total energy-change (2. order) :-0.2050353E-07 (-0.1205818E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9508432 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8101 + 2.8107 0.9979 1.4632 1.9689 + + free energy = -0.169111267430E+02 energy without entropy= -0.169211577364E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 8( 6) --------------------------------------- + + + POTLOK: cpu time 0.0208: real time 0.0208 + SETDIJ: cpu time 0.0058: real time 0.0058 + EDDAV: cpu time 3.4947: real time 3.4951 + DOS: cpu time 0.0069: real time 0.0069 + -------------------------------------------- + LOOP: cpu time 3.5292: real time 3.5296 + + eigenvalue-minimisations : 2984 + total energy-change (2. order) : 0.2645152E-08 (-0.1517759E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9508432 magnetization + + free energy = -0.169111267403E+02 energy without entropy= -0.169211577551E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9633 2 -25.9633 3 -25.9633 4 -25.9633 5 -25.9633 + 6 -25.9633 7 -25.9633 8 -25.9633 9 -25.8887 10 -25.8887 + 11 -25.8887 12 -25.8887 13 -25.8887 14 -25.8887 15 -25.8887 + 16 -25.8887 17 -25.9196 18 -25.9196 19 -25.9196 20 -25.9196 + 21 -25.9196 22 -25.9196 23 -25.9196 24 -25.9196 25 -25.8388 + 26 -25.8388 27 -25.8388 28 -25.8388 29 -25.8388 30 -25.8388 + 31 -25.8388 32 -25.8388 33 -26.0267 34 -26.0267 35 -26.0267 + 36 -26.0267 37 -26.0267 38 -26.0267 39 -26.0267 40 -26.0267 + + + + E-fermi : 4.4677 XC(G=0): -9.5547 alpha+bet :-20.5627 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9614 2.00000 + 2 1.5062 2.00000 + 3 1.7428 2.00000 + 4 1.9968 2.00000 + 5 2.0351 2.00000 + 6 2.5139 2.00000 + 7 2.6185 2.00000 + 8 2.7678 2.00000 + 9 2.8678 2.00000 + 10 2.9221 2.00000 + 11 3.2169 2.00000 + 12 3.2729 2.00000 + 13 3.3977 2.00000 + 14 3.4287 2.00000 + 15 3.5211 2.00000 + 16 3.6244 2.00000 + 17 3.8454 2.00010 + 18 4.1869 2.06326 + 19 4.2135 2.07030 + 20 4.3901 1.60525 + 21 5.5227 -0.00000 + 22 5.7235 -0.00000 + 23 5.9213 -0.00000 + 24 6.0983 -0.00000 + 25 6.2153 -0.00000 + 26 6.2851 -0.00000 + 27 6.5469 -0.00000 + 28 7.1239 -0.00000 + 29 7.1288 -0.00000 + 30 7.2550 -0.00000 + 31 7.3725 -0.00000 + 32 7.4178 -0.00000 + 33 8.0629 -0.00000 + 34 8.1363 -0.00000 + 35 8.8152 -0.00000 + 36 8.9484 -0.00000 + 37 9.2293 -0.00000 + 38 9.4230 -0.00000 + 39 9.8011 -0.00000 + 40 9.8362 -0.00000 + 41 10.0934 0.00000 + 42 10.2988 0.00000 + 43 10.5468 0.00000 + 44 10.8091 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9797 2.00000 + 2 1.5263 2.00000 + 3 1.7088 2.00000 + 4 1.7636 2.00000 + 5 2.2736 2.00000 + 6 2.3869 2.00000 + 7 2.5254 2.00000 + 8 2.8660 2.00000 + 9 2.9624 2.00000 + 10 3.1451 2.00000 + 11 3.2446 2.00000 + 12 3.2864 2.00000 + 13 3.3722 2.00000 + 14 3.4337 2.00000 + 15 3.5505 2.00000 + 16 3.6282 2.00000 + 17 3.7803 2.00001 + 18 4.0618 2.01452 + 19 4.2344 2.06978 + 20 4.4354 1.26927 + 21 5.4165 -0.00000 + 22 5.5758 -0.00000 + 23 5.8858 -0.00000 + 24 5.9950 -0.00000 + 25 6.1412 -0.00000 + 26 6.5306 -0.00000 + 27 6.6190 -0.00000 + 28 6.8223 -0.00000 + 29 7.1058 -0.00000 + 30 7.2437 -0.00000 + 31 7.2959 -0.00000 + 32 7.3900 -0.00000 + 33 8.3214 -0.00000 + 34 8.3738 -0.00000 + 35 8.8287 -0.00000 + 36 8.8770 -0.00000 + 37 9.2508 -0.00000 + 38 9.4175 -0.00000 + 39 9.7424 -0.00000 + 40 9.9179 -0.00000 + 41 10.0608 0.00000 + 42 10.1625 0.00000 + 43 10.8446 0.00000 + 44 10.9303 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0357 2.00000 + 2 1.4632 2.00000 + 3 1.5872 2.00000 + 4 1.8261 2.00000 + 5 2.0331 2.00000 + 6 2.2820 2.00000 + 7 2.8190 2.00000 + 8 2.9651 2.00000 + 9 3.2366 2.00000 + 10 3.2665 2.00000 + 11 3.3201 2.00000 + 12 3.3327 2.00000 + 13 3.4295 2.00000 + 14 3.5251 2.00000 + 15 3.5776 2.00000 + 16 3.6256 2.00000 + 17 3.7306 2.00000 + 18 3.8480 2.00011 + 19 4.1572 2.05053 + 20 4.3423 1.86353 + 21 5.3227 -0.00000 + 22 5.4247 -0.00000 + 23 5.7771 -0.00000 + 24 5.8401 -0.00000 + 25 5.8850 -0.00000 + 26 6.2309 -0.00000 + 27 6.7661 -0.00000 + 28 7.0268 -0.00000 + 29 7.1111 -0.00000 + 30 7.2216 -0.00000 + 31 7.2621 -0.00000 + 32 7.5421 -0.00000 + 33 8.4667 -0.00000 + 34 8.4938 -0.00000 + 35 8.7486 -0.00000 + 36 8.8976 -0.00000 + 37 9.2037 -0.00000 + 38 9.3229 -0.00000 + 39 9.7953 -0.00000 + 40 9.8737 -0.00000 + 41 10.1486 0.00000 + 42 10.3495 0.00000 + 43 11.0131 0.00000 + 44 11.1423 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1320 2.00000 + 2 1.2727 2.00000 + 3 1.6901 2.00000 + 4 1.8364 2.00000 + 5 1.9349 2.00000 + 6 2.0846 2.00000 + 7 3.0509 2.00000 + 8 3.1554 2.00000 + 9 3.2956 2.00000 + 10 3.3901 2.00000 + 11 3.4318 2.00000 + 12 3.4475 2.00000 + 13 3.5045 2.00000 + 14 3.5152 2.00000 + 15 3.6399 2.00000 + 16 3.6499 2.00000 + 17 3.7125 2.00000 + 18 3.7688 2.00001 + 19 3.9168 2.00069 + 20 4.1146 2.03156 + 21 5.3539 -0.00000 + 22 5.4758 -0.00000 + 23 5.6331 -0.00000 + 24 5.6524 -0.00000 + 25 5.7614 -0.00000 + 26 5.7718 -0.00000 + 27 6.9635 -0.00000 + 28 7.1216 -0.00000 + 29 7.1513 -0.00000 + 30 7.1627 -0.00000 + 31 7.6150 -0.00000 + 32 7.8549 -0.00000 + 33 8.1301 -0.00000 + 34 8.2075 -0.00000 + 35 8.8789 -0.00000 + 36 8.9434 -0.00000 + 37 9.0986 -0.00000 + 38 9.1794 -0.00000 + 39 9.7999 -0.00000 + 40 9.8731 -0.00000 + 41 10.4423 0.00000 + 42 10.5386 0.00000 + 43 11.2353 0.00000 + 44 11.3463 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9949 2.00000 + 2 1.3158 2.00000 + 3 2.0228 2.00000 + 4 2.0286 2.00000 + 5 2.0719 2.00000 + 6 2.3362 2.00000 + 7 2.4281 2.00000 + 8 2.9393 2.00000 + 9 3.0139 2.00000 + 10 3.0521 2.00000 + 11 3.1384 2.00000 + 12 3.2035 2.00000 + 13 3.4028 2.00000 + 14 3.4943 2.00000 + 15 3.5116 2.00000 + 16 3.6948 2.00000 + 17 3.7567 2.00001 + 18 4.0150 2.00623 + 19 4.0372 2.00947 + 20 4.2325 2.07013 + 21 5.6692 -0.00000 + 22 5.8031 -0.00000 + 23 5.9714 -0.00000 + 24 6.2082 -0.00000 + 25 6.3165 -0.00000 + 26 6.4267 -0.00000 + 27 6.5098 -0.00000 + 28 6.7774 -0.00000 + 29 7.2794 -0.00000 + 30 7.3181 -0.00000 + 31 7.3872 -0.00000 + 32 7.6373 -0.00000 + 33 8.0156 -0.00000 + 34 8.1598 -0.00000 + 35 8.8891 -0.00000 + 36 9.0366 -0.00000 + 37 9.0713 -0.00000 + 38 9.2217 -0.00000 + 39 9.5247 -0.00000 + 40 9.8574 -0.00000 + 41 9.9063 -0.00000 + 42 10.3837 0.00000 + 43 10.4889 0.00000 + 44 10.9137 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0134 2.00000 + 2 1.3353 2.00000 + 3 1.7439 2.00000 + 4 2.0352 2.00000 + 5 2.0907 2.00000 + 6 2.4184 2.00000 + 7 2.7269 2.00000 + 8 2.8123 2.00000 + 9 2.9724 2.00000 + 10 3.0417 2.00000 + 11 3.2199 2.00000 + 12 3.3507 2.00000 + 13 3.3975 2.00000 + 14 3.5029 2.00000 + 15 3.5334 2.00000 + 16 3.6986 2.00000 + 17 3.7079 2.00000 + 18 3.8316 2.00007 + 19 4.1150 2.03174 + 20 4.2769 2.03932 + 21 5.5518 -0.00000 + 22 5.7308 -0.00000 + 23 5.9358 -0.00000 + 24 6.0576 -0.00000 + 25 6.2352 -0.00000 + 26 6.4861 -0.00000 + 27 6.6339 -0.00000 + 28 6.7148 -0.00000 + 29 7.1594 -0.00000 + 30 7.3091 -0.00000 + 31 7.3292 -0.00000 + 32 7.6126 -0.00000 + 33 8.2553 -0.00000 + 34 8.3390 -0.00000 + 35 8.8875 -0.00000 + 36 8.9958 -0.00000 + 37 9.0191 -0.00000 + 38 9.2265 -0.00000 + 39 9.6118 -0.00000 + 40 9.8109 -0.00000 + 41 9.9234 -0.00000 + 42 10.4444 0.00000 + 43 10.5081 0.00000 + 44 11.0303 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0697 2.00000 + 2 1.3944 2.00000 + 3 1.4984 2.00000 + 4 1.8331 2.00000 + 5 2.1146 2.00000 + 6 2.5750 2.00000 + 7 2.8405 2.00000 + 8 2.9915 2.00000 + 9 3.1265 2.00000 + 10 3.1342 2.00000 + 11 3.2675 2.00000 + 12 3.3053 2.00000 + 13 3.4743 2.00000 + 14 3.5348 2.00000 + 15 3.6142 2.00000 + 16 3.6199 2.00000 + 17 3.6790 2.00000 + 18 3.7287 2.00000 + 19 4.0527 2.01244 + 20 4.2323 2.07017 + 21 5.3938 -0.00000 + 22 5.6599 -0.00000 + 23 5.7628 -0.00000 + 24 5.8260 -0.00000 + 25 6.1119 -0.00000 + 26 6.1918 -0.00000 + 27 6.6125 -0.00000 + 28 7.0660 -0.00000 + 29 7.1115 -0.00000 + 30 7.3582 -0.00000 + 31 7.4869 -0.00000 + 32 7.5520 -0.00000 + 33 8.3438 -0.00000 + 34 8.5049 -0.00000 + 35 8.7850 -0.00000 + 36 8.8782 -0.00000 + 37 9.0397 -0.00000 + 38 9.1585 -0.00000 + 39 9.6299 -0.00000 + 40 9.7943 -0.00000 + 41 10.1338 0.00000 + 42 10.5635 0.00000 + 43 10.7107 0.00000 + 44 11.2231 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1664 2.00000 + 2 1.3076 2.00000 + 3 1.4952 2.00000 + 4 1.6404 2.00000 + 5 2.2237 2.00000 + 6 2.3775 2.00000 + 7 3.0873 2.00000 + 8 3.1959 2.00000 + 9 3.2138 2.00000 + 10 3.3124 2.00000 + 11 3.3737 2.00000 + 12 3.4108 2.00000 + 13 3.4337 2.00000 + 14 3.4443 2.00000 + 15 3.5520 2.00000 + 16 3.6270 2.00000 + 17 3.7481 2.00000 + 18 3.7694 2.00001 + 19 3.8490 2.00011 + 20 4.0095 2.00560 + 21 5.4146 -0.00000 + 22 5.6043 -0.00000 + 23 5.6079 -0.00000 + 24 5.7823 -0.00000 + 25 5.7917 -0.00000 + 26 5.9726 -0.00000 + 27 6.7815 -0.00000 + 28 6.9521 -0.00000 + 29 7.3339 -0.00000 + 30 7.4420 -0.00000 + 31 7.7199 -0.00000 + 32 7.7963 -0.00000 + 33 8.1409 -0.00000 + 34 8.1803 -0.00000 + 35 8.8311 -0.00000 + 36 8.8851 -0.00000 + 37 8.9634 -0.00000 + 38 9.0516 -0.00000 + 39 9.6096 -0.00000 + 40 9.7741 -0.00000 + 41 10.4155 0.00000 + 42 10.5904 0.00000 + 43 11.1525 0.00000 + 44 11.3598 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0634 2.00000 + 2 1.1693 2.00000 + 3 2.0938 2.00000 + 4 2.1455 2.00000 + 5 2.1953 2.00000 + 6 2.2409 2.00000 + 7 2.3777 2.00000 + 8 2.7004 2.00000 + 9 3.0149 2.00000 + 10 3.1071 2.00000 + 11 3.3422 2.00000 + 12 3.4353 2.00000 + 13 3.4384 2.00000 + 14 3.4786 2.00000 + 15 3.6005 2.00000 + 16 3.6009 2.00000 + 17 3.7438 2.00000 + 18 3.7825 2.00001 + 19 3.8311 2.00006 + 20 4.0210 2.00700 + 21 5.9199 -0.00000 + 22 5.9359 -0.00000 + 23 6.0813 -0.00000 + 24 6.1440 -0.00000 + 25 6.2019 -0.00000 + 26 6.4209 -0.00000 + 27 6.6334 -0.00000 + 28 6.9214 -0.00000 + 29 6.9844 -0.00000 + 30 7.2492 -0.00000 + 31 7.5964 -0.00000 + 32 7.8535 -0.00000 + 33 8.1804 -0.00000 + 34 8.3702 -0.00000 + 35 8.5110 -0.00000 + 36 9.0131 -0.00000 + 37 9.0855 -0.00000 + 38 9.1492 -0.00000 + 39 9.3038 -0.00000 + 40 9.5887 -0.00000 + 41 9.9334 0.00000 + 42 10.0467 0.00000 + 43 10.7465 0.00000 + 44 10.9215 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0821 2.00000 + 2 1.1883 2.00000 + 3 1.8153 2.00000 + 4 1.9250 2.00000 + 5 2.3661 2.00000 + 6 2.4783 2.00000 + 7 2.6006 2.00000 + 8 2.7310 2.00000 + 9 3.0341 2.00000 + 10 3.1256 2.00000 + 11 3.1433 2.00000 + 12 3.4383 2.00000 + 13 3.4872 2.00000 + 14 3.4925 2.00000 + 15 3.5017 2.00000 + 16 3.6166 2.00000 + 17 3.6892 2.00000 + 18 3.8400 2.00008 + 19 3.9165 2.00068 + 20 4.0490 2.01168 + 21 5.7484 -0.00000 + 22 5.9200 -0.00000 + 23 5.9524 -0.00000 + 24 6.1160 -0.00000 + 25 6.2373 -0.00000 + 26 6.3628 -0.00000 + 27 6.5641 -0.00000 + 28 6.9079 -0.00000 + 29 6.9942 -0.00000 + 30 7.2060 -0.00000 + 31 7.6248 -0.00000 + 32 7.9845 -0.00000 + 33 8.1797 -0.00000 + 34 8.4834 -0.00000 + 35 8.5597 -0.00000 + 36 8.9922 -0.00000 + 37 9.0190 -0.00000 + 38 9.2528 -0.00000 + 39 9.2663 -0.00000 + 40 9.5520 -0.00000 + 41 9.9945 0.00000 + 42 10.1149 0.00000 + 43 10.7635 0.00000 + 44 10.9710 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1390 2.00000 + 2 1.2461 2.00000 + 3 1.5701 2.00000 + 4 1.6808 2.00000 + 5 2.4391 2.00000 + 6 2.7691 2.00000 + 7 2.9104 2.00000 + 8 2.9298 2.00000 + 9 2.9810 2.00000 + 10 3.1075 2.00000 + 11 3.1798 2.00000 + 12 3.2726 2.00000 + 13 3.3758 2.00000 + 14 3.4610 2.00000 + 15 3.5314 2.00000 + 16 3.6037 2.00000 + 17 3.7426 2.00000 + 18 3.8952 2.00039 + 19 3.8986 2.00043 + 20 4.0753 2.01804 + 21 5.5228 -0.00000 + 22 5.6496 -0.00000 + 23 5.8830 -0.00000 + 24 6.0508 -0.00000 + 25 6.0687 -0.00000 + 26 6.3501 -0.00000 + 27 6.4286 -0.00000 + 28 6.7698 -0.00000 + 29 7.2569 -0.00000 + 30 7.3857 -0.00000 + 31 7.7224 -0.00000 + 32 8.0583 -0.00000 + 33 8.0940 -0.00000 + 34 8.4823 -0.00000 + 35 8.5865 -0.00000 + 36 8.8660 -0.00000 + 37 8.9571 -0.00000 + 38 9.2796 -0.00000 + 39 9.2891 -0.00000 + 40 9.5578 -0.00000 + 41 10.2163 0.00000 + 42 10.4010 0.00000 + 43 10.7634 0.00000 + 44 11.0204 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2366 2.00000 + 2 1.3451 2.00000 + 3 1.3787 2.00000 + 4 1.4886 2.00000 + 5 2.5543 2.00000 + 6 2.7126 2.00000 + 7 2.9049 2.00000 + 8 3.0702 2.00000 + 9 3.1541 2.00000 + 10 3.2393 2.00000 + 11 3.2694 2.00000 + 12 3.3592 2.00000 + 13 3.3818 2.00000 + 14 3.4137 2.00000 + 15 3.6070 2.00000 + 16 3.6800 2.00000 + 17 3.6815 2.00000 + 18 3.7707 2.00001 + 19 3.8242 2.00005 + 20 3.8951 2.00039 + 21 5.5029 -0.00000 + 22 5.5634 -0.00000 + 23 5.6850 -0.00000 + 24 5.7576 -0.00000 + 25 6.1304 -0.00000 + 26 6.2805 -0.00000 + 27 6.4797 -0.00000 + 28 6.6330 -0.00000 + 29 7.5623 -0.00000 + 30 7.6980 -0.00000 + 31 7.8015 -0.00000 + 32 8.0100 -0.00000 + 33 8.0222 -0.00000 + 34 8.3186 -0.00000 + 35 8.4294 -0.00000 + 36 8.6251 -0.00000 + 37 9.0282 -0.00000 + 38 9.2573 -0.00000 + 39 9.3188 -0.00000 + 40 9.5374 -0.00000 + 41 10.5078 0.00000 + 42 10.6919 0.00000 + 43 10.7641 0.00000 + 44 10.9637 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 1.0006 2.00000 + 2 1.5534 2.00000 + 3 1.7930 2.00000 + 4 2.0375 2.00000 + 5 2.0779 2.00000 + 6 2.4869 2.00000 + 7 2.5789 2.00000 + 8 2.6620 2.00000 + 9 2.8076 2.00000 + 10 2.9045 2.00000 + 11 3.0759 2.00000 + 12 3.2875 2.00000 + 13 3.3078 2.00000 + 14 3.3417 2.00000 + 15 3.4483 2.00000 + 16 3.7634 2.00001 + 17 3.8612 2.00016 + 18 4.0066 2.00528 + 19 4.0464 2.01116 + 20 4.1718 2.05711 + 21 5.7510 -0.00000 + 22 5.9504 -0.00000 + 23 6.1821 -0.00000 + 24 6.4581 -0.00000 + 25 6.4965 -0.00000 + 26 6.5670 -0.00000 + 27 6.5964 -0.00000 + 28 6.7537 -0.00000 + 29 7.1569 -0.00000 + 30 7.2674 -0.00000 + 31 7.3683 -0.00000 + 32 7.3907 -0.00000 + 33 8.1446 -0.00000 + 34 8.4586 -0.00000 + 35 8.9309 -0.00000 + 36 9.0480 -0.00000 + 37 9.0487 -0.00000 + 38 9.5704 -0.00000 + 39 9.7986 -0.00000 + 40 9.8140 -0.00000 + 41 10.0005 0.00000 + 42 10.0141 0.00000 + 43 10.3994 0.00000 + 44 10.4528 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0190 2.00000 + 2 1.5735 2.00000 + 3 1.7504 2.00000 + 4 1.8136 2.00000 + 5 2.3167 2.00000 + 6 2.4277 2.00000 + 7 2.5195 2.00000 + 8 2.5694 2.00000 + 9 2.9477 2.00000 + 10 3.0921 2.00000 + 11 3.1428 2.00000 + 12 3.1920 2.00000 + 13 3.3069 2.00000 + 14 3.3755 2.00000 + 15 3.5875 2.00000 + 16 3.6586 2.00000 + 17 3.8739 2.00022 + 18 3.9620 2.00204 + 19 4.0872 2.02162 + 20 4.1558 2.04990 + 21 5.6957 -0.00000 + 22 5.7997 -0.00000 + 23 6.1174 -0.00000 + 24 6.3404 -0.00000 + 25 6.3849 -0.00000 + 26 6.4764 -0.00000 + 27 6.7116 -0.00000 + 28 6.7693 -0.00000 + 29 7.1565 -0.00000 + 30 7.2333 -0.00000 + 31 7.2700 -0.00000 + 32 7.4429 -0.00000 + 33 8.3035 -0.00000 + 34 8.5316 -0.00000 + 35 8.9140 -0.00000 + 36 9.0160 -0.00000 + 37 9.0654 -0.00000 + 38 9.5864 -0.00000 + 39 9.8101 -0.00000 + 40 9.8865 -0.00000 + 41 9.8971 -0.00000 + 42 10.0983 0.00000 + 43 10.6383 0.00000 + 44 10.7104 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0753 2.00000 + 2 1.5043 2.00000 + 3 1.6341 2.00000 + 4 1.8756 2.00000 + 5 2.0779 2.00000 + 6 2.3253 2.00000 + 7 2.5804 2.00000 + 8 2.8555 2.00000 + 9 2.9705 2.00000 + 10 3.1405 2.00000 + 11 3.2848 2.00000 + 12 3.3585 2.00000 + 13 3.4514 2.00000 + 14 3.4748 2.00000 + 15 3.5347 2.00000 + 16 3.7438 2.00000 + 17 3.8105 2.00003 + 18 3.9048 2.00051 + 19 4.0073 2.00536 + 20 4.1169 2.03252 + 21 5.4545 -0.00000 + 22 5.7636 -0.00000 + 23 5.9831 -0.00000 + 24 5.9921 -0.00000 + 25 6.1223 -0.00000 + 26 6.2917 -0.00000 + 27 6.7070 -0.00000 + 28 7.0373 -0.00000 + 29 7.0446 -0.00000 + 30 7.1658 -0.00000 + 31 7.3100 -0.00000 + 32 7.6840 -0.00000 + 33 8.3475 -0.00000 + 34 8.4227 -0.00000 + 35 8.9425 -0.00000 + 36 9.0466 -0.00000 + 37 9.0837 -0.00000 + 38 9.4828 -0.00000 + 39 9.8834 -0.00000 + 40 10.0856 0.00000 + 41 10.1093 0.00000 + 42 10.3080 0.00000 + 43 10.9720 0.00000 + 44 11.1168 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1720 2.00000 + 2 1.3133 2.00000 + 3 1.7367 2.00000 + 4 1.8828 2.00000 + 5 1.9825 2.00000 + 6 2.1308 2.00000 + 7 2.6758 2.00000 + 8 2.8075 2.00000 + 9 3.2088 2.00000 + 10 3.3066 2.00000 + 11 3.3431 2.00000 + 12 3.5043 2.00000 + 13 3.5550 2.00000 + 14 3.6316 2.00000 + 15 3.6367 2.00000 + 16 3.6484 2.00000 + 17 3.7952 2.00002 + 18 3.8639 2.00017 + 19 3.8729 2.00022 + 20 3.9230 2.00080 + 21 5.4357 -0.00000 + 22 5.6568 -0.00000 + 23 5.7272 -0.00000 + 24 5.7894 -0.00000 + 25 5.9834 -0.00000 + 26 6.1828 -0.00000 + 27 6.7381 -0.00000 + 28 6.8705 -0.00000 + 29 7.1491 -0.00000 + 30 7.1981 -0.00000 + 31 7.6109 -0.00000 + 32 7.9442 -0.00000 + 33 8.0286 -0.00000 + 34 8.1838 -0.00000 + 35 9.0749 -0.00000 + 36 9.1361 -0.00000 + 37 9.1797 -0.00000 + 38 9.3421 -0.00000 + 39 9.9013 -0.00000 + 40 10.0793 0.00000 + 41 10.3594 0.00000 + 42 10.4594 0.00000 + 43 11.2228 0.00000 + 44 11.3301 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0347 2.00000 + 2 1.3604 2.00000 + 3 2.0698 2.00000 + 4 2.0765 2.00000 + 5 2.1152 2.00000 + 6 2.3758 2.00000 + 7 2.4721 2.00000 + 8 2.5524 2.00000 + 9 2.9075 2.00000 + 10 3.0634 2.00000 + 11 3.0802 2.00000 + 12 3.1649 2.00000 + 13 3.3562 2.00000 + 14 3.5072 2.00000 + 15 3.5131 2.00000 + 16 3.6710 2.00000 + 17 3.8496 2.00011 + 18 3.8803 2.00026 + 19 3.9377 2.00115 + 20 4.0441 2.01072 + 21 5.8346 -0.00000 + 22 6.0135 -0.00000 + 23 6.0522 -0.00000 + 24 6.3270 -0.00000 + 25 6.4857 -0.00000 + 26 6.6027 -0.00000 + 27 6.6725 -0.00000 + 28 6.7906 -0.00000 + 29 7.3566 -0.00000 + 30 7.3901 -0.00000 + 31 7.4725 -0.00000 + 32 7.6360 -0.00000 + 33 8.1732 -0.00000 + 34 8.3016 -0.00000 + 35 8.7380 -0.00000 + 36 8.9258 -0.00000 + 37 9.2061 -0.00000 + 38 9.4222 -0.00000 + 39 9.6132 -0.00000 + 40 9.7105 -0.00000 + 41 9.8165 -0.00000 + 42 10.3283 0.00000 + 43 10.3664 0.00000 + 44 10.9195 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0532 2.00000 + 2 1.3799 2.00000 + 3 1.7859 2.00000 + 4 2.0874 2.00000 + 5 2.1355 2.00000 + 6 2.4599 2.00000 + 7 2.5629 2.00000 + 8 2.7804 2.00000 + 9 2.8469 2.00000 + 10 2.9265 2.00000 + 11 3.1072 2.00000 + 12 3.2037 2.00000 + 13 3.4006 2.00000 + 14 3.4989 2.00000 + 15 3.5918 2.00000 + 16 3.6459 2.00000 + 17 3.7967 2.00002 + 18 3.8658 2.00018 + 19 3.9761 2.00279 + 20 4.0997 2.02587 + 21 5.7307 -0.00000 + 22 5.9570 -0.00000 + 23 5.9695 -0.00000 + 24 6.2219 -0.00000 + 25 6.3041 -0.00000 + 26 6.5910 -0.00000 + 27 6.6442 -0.00000 + 28 6.9058 -0.00000 + 29 7.2362 -0.00000 + 30 7.3786 -0.00000 + 31 7.4978 -0.00000 + 32 7.6251 -0.00000 + 33 8.3505 -0.00000 + 34 8.3539 -0.00000 + 35 8.8286 -0.00000 + 36 8.9017 -0.00000 + 37 9.1860 -0.00000 + 38 9.3938 -0.00000 + 39 9.6118 -0.00000 + 40 9.7303 -0.00000 + 41 9.8929 -0.00000 + 42 10.3996 0.00000 + 43 10.5322 0.00000 + 44 10.9492 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1098 2.00000 + 2 1.4391 2.00000 + 3 1.5400 2.00000 + 4 1.8778 2.00000 + 5 2.1660 2.00000 + 6 2.6092 2.00000 + 7 2.6290 2.00000 + 8 2.8781 2.00000 + 9 2.9835 2.00000 + 10 3.0189 2.00000 + 11 3.1557 2.00000 + 12 3.1873 2.00000 + 13 3.3653 2.00000 + 14 3.6060 2.00000 + 15 3.6185 2.00000 + 16 3.6462 2.00000 + 17 3.7930 2.00002 + 18 3.9073 2.00054 + 19 3.9476 2.00146 + 20 4.1100 2.02975 + 21 5.4763 -0.00000 + 22 5.8316 -0.00000 + 23 5.9080 -0.00000 + 24 5.9622 -0.00000 + 25 6.0238 -0.00000 + 26 6.5227 -0.00000 + 27 6.5328 -0.00000 + 28 7.0135 -0.00000 + 29 7.1667 -0.00000 + 30 7.4113 -0.00000 + 31 7.6232 -0.00000 + 32 7.6737 -0.00000 + 33 8.3210 -0.00000 + 34 8.4397 -0.00000 + 35 8.8544 -0.00000 + 36 8.9000 -0.00000 + 37 9.2574 -0.00000 + 38 9.2869 -0.00000 + 39 9.6409 -0.00000 + 40 9.9852 0.00000 + 41 10.0809 0.00000 + 42 10.5208 0.00000 + 43 10.7644 0.00000 + 44 11.1237 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2070 2.00000 + 2 1.3487 2.00000 + 3 1.5399 2.00000 + 4 1.6852 2.00000 + 5 2.2727 2.00000 + 6 2.4227 2.00000 + 7 2.7197 2.00000 + 8 2.8552 2.00000 + 9 3.0703 2.00000 + 10 3.1921 2.00000 + 11 3.2804 2.00000 + 12 3.3893 2.00000 + 13 3.4534 2.00000 + 14 3.5019 2.00000 + 15 3.6825 2.00000 + 16 3.7082 2.00000 + 17 3.7902 2.00002 + 18 3.8828 2.00028 + 19 3.9271 2.00089 + 20 3.9316 2.00099 + 21 5.4062 -0.00000 + 22 5.6809 -0.00000 + 23 5.6821 -0.00000 + 24 5.7635 -0.00000 + 25 6.0484 -0.00000 + 26 6.3746 -0.00000 + 27 6.5952 -0.00000 + 28 6.7773 -0.00000 + 29 7.3032 -0.00000 + 30 7.4610 -0.00000 + 31 7.8065 -0.00000 + 32 7.8942 -0.00000 + 33 8.1572 -0.00000 + 34 8.1725 -0.00000 + 35 8.9537 -0.00000 + 36 9.0178 -0.00000 + 37 9.1651 -0.00000 + 38 9.3238 -0.00000 + 39 9.6144 -0.00000 + 40 10.0507 0.00000 + 41 10.3227 0.00000 + 42 10.5088 0.00000 + 43 11.1184 0.00000 + 44 11.2413 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1043 2.00000 + 2 1.2118 2.00000 + 3 2.1357 2.00000 + 4 2.1896 2.00000 + 5 2.2375 2.00000 + 6 2.2888 2.00000 + 7 2.4310 2.00000 + 8 2.6321 2.00000 + 9 2.7530 2.00000 + 10 2.7614 2.00000 + 11 3.3241 2.00000 + 12 3.4380 2.00000 + 13 3.4672 2.00000 + 14 3.4999 2.00000 + 15 3.6394 2.00000 + 16 3.6433 2.00000 + 17 3.6838 2.00000 + 18 3.7714 2.00001 + 19 3.8113 2.00004 + 20 3.8374 2.00008 + 21 5.9352 -0.00000 + 22 6.0713 -0.00000 + 23 6.0856 -0.00000 + 24 6.2002 -0.00000 + 25 6.3491 -0.00000 + 26 6.3532 -0.00000 + 27 6.9610 -0.00000 + 28 7.1322 -0.00000 + 29 7.2254 -0.00000 + 30 7.3976 -0.00000 + 31 7.7203 -0.00000 + 32 8.0391 -0.00000 + 33 8.0974 -0.00000 + 34 8.3650 -0.00000 + 35 8.4356 -0.00000 + 36 9.0089 -0.00000 + 37 9.1290 -0.00000 + 38 9.1914 -0.00000 + 39 9.3971 -0.00000 + 40 9.5534 -0.00000 + 41 9.9185 -0.00000 + 42 10.0573 0.00000 + 43 10.7274 0.00000 + 44 10.9206 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1231 2.00000 + 2 1.2309 2.00000 + 3 1.8581 2.00000 + 4 1.9687 2.00000 + 5 2.4221 2.00000 + 6 2.5211 2.00000 + 7 2.6231 2.00000 + 8 2.6732 2.00000 + 9 2.7675 2.00000 + 10 2.7964 2.00000 + 11 3.1524 2.00000 + 12 3.3047 2.00000 + 13 3.3886 2.00000 + 14 3.5141 2.00000 + 15 3.6163 2.00000 + 16 3.7004 2.00000 + 17 3.7503 2.00000 + 18 3.8239 2.00005 + 19 3.8503 2.00011 + 20 3.9628 2.00208 + 21 5.8728 -0.00000 + 22 5.9579 -0.00000 + 23 6.0154 -0.00000 + 24 6.1362 -0.00000 + 25 6.1406 -0.00000 + 26 6.3497 -0.00000 + 27 6.9256 -0.00000 + 28 7.1535 -0.00000 + 29 7.1923 -0.00000 + 30 7.4155 -0.00000 + 31 7.7010 -0.00000 + 32 8.0447 -0.00000 + 33 8.1401 -0.00000 + 34 8.5088 -0.00000 + 35 8.5673 -0.00000 + 36 8.9790 -0.00000 + 37 9.0923 -0.00000 + 38 9.1943 -0.00000 + 39 9.4020 -0.00000 + 40 9.5895 -0.00000 + 41 9.9946 0.00000 + 42 10.1687 0.00000 + 43 10.7332 0.00000 + 44 10.9469 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1802 2.00000 + 2 1.2889 2.00000 + 3 1.6126 2.00000 + 4 1.7243 2.00000 + 5 2.4926 2.00000 + 6 2.7069 2.00000 + 7 2.8161 2.00000 + 8 2.8337 2.00000 + 9 2.9396 2.00000 + 10 2.9808 2.00000 + 11 3.0454 2.00000 + 12 3.1159 2.00000 + 13 3.2127 2.00000 + 14 3.3182 2.00000 + 15 3.7458 2.00000 + 16 3.7489 2.00000 + 17 3.8350 2.00007 + 18 3.8792 2.00026 + 19 3.9446 2.00136 + 20 4.0388 2.00976 + 21 5.6113 -0.00000 + 22 5.7843 -0.00000 + 23 5.7957 -0.00000 + 24 5.8717 -0.00000 + 25 6.1345 -0.00000 + 26 6.3212 -0.00000 + 27 6.7554 -0.00000 + 28 6.9285 -0.00000 + 29 7.3822 -0.00000 + 30 7.5734 -0.00000 + 31 7.7671 -0.00000 + 32 8.0937 -0.00000 + 33 8.0992 -0.00000 + 34 8.5235 -0.00000 + 35 8.6795 -0.00000 + 36 8.9508 -0.00000 + 37 9.0214 -0.00000 + 38 9.2214 -0.00000 + 39 9.5050 -0.00000 + 40 9.7667 -0.00000 + 41 10.1785 0.00000 + 42 10.4151 0.00000 + 43 10.7175 0.00000 + 44 10.9958 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2782 2.00000 + 2 1.3881 2.00000 + 3 1.4208 2.00000 + 4 1.5319 2.00000 + 5 2.6025 2.00000 + 6 2.7501 2.00000 + 7 2.8083 2.00000 + 8 2.9136 2.00000 + 9 2.9503 2.00000 + 10 2.9597 2.00000 + 11 3.0553 2.00000 + 12 3.1375 2.00000 + 13 3.4013 2.00000 + 14 3.4463 2.00000 + 15 3.7272 2.00000 + 16 3.7532 2.00001 + 17 3.8362 2.00008 + 18 3.8822 2.00028 + 19 3.9439 2.00134 + 20 3.9571 2.00182 + 21 5.4825 -0.00000 + 22 5.6055 -0.00000 + 23 5.6509 -0.00000 + 24 5.6877 -0.00000 + 25 6.2464 -0.00000 + 26 6.4233 -0.00000 + 27 6.5255 -0.00000 + 28 6.6497 -0.00000 + 29 7.5420 -0.00000 + 30 7.7582 -0.00000 + 31 7.7915 -0.00000 + 32 8.0405 -0.00000 + 33 8.1919 -0.00000 + 34 8.4649 -0.00000 + 35 8.6182 -0.00000 + 36 8.8477 -0.00000 + 37 9.0593 -0.00000 + 38 9.2689 -0.00000 + 39 9.5406 -0.00000 + 40 9.8229 -0.00000 + 41 10.4307 0.00000 + 42 10.6257 0.00000 + 43 10.7247 0.00000 + 44 10.9425 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0797 2.00000 + 2 1.6479 2.00000 + 3 1.8931 2.00000 + 4 2.1192 2.00000 + 5 2.1428 2.00000 + 6 2.1622 2.00000 + 7 2.6437 2.00000 + 8 2.7474 2.00000 + 9 2.7897 2.00000 + 10 2.8580 2.00000 + 11 2.9737 2.00000 + 12 3.0642 2.00000 + 13 3.1428 2.00000 + 14 3.1899 2.00000 + 15 3.4204 2.00000 + 16 3.6183 2.00000 + 17 3.7456 2.00000 + 18 3.8204 2.00005 + 19 3.8902 2.00035 + 20 4.2465 2.06585 + 21 6.0892 -0.00000 + 22 6.1867 -0.00000 + 23 6.2540 -0.00000 + 24 6.6179 -0.00000 + 25 6.9010 -0.00000 + 26 6.9958 -0.00000 + 27 7.0136 -0.00000 + 28 7.0749 -0.00000 + 29 7.2646 -0.00000 + 30 7.3169 -0.00000 + 31 7.3489 -0.00000 + 32 7.3814 -0.00000 + 33 8.1463 -0.00000 + 34 8.5809 -0.00000 + 35 8.6033 -0.00000 + 36 9.1245 -0.00000 + 37 9.2489 -0.00000 + 38 9.5631 -0.00000 + 39 9.6518 -0.00000 + 40 9.7079 -0.00000 + 41 9.8368 -0.00000 + 42 10.0629 0.00000 + 43 10.2170 0.00000 + 44 10.3436 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.0983 2.00000 + 2 1.6678 2.00000 + 3 1.8338 2.00000 + 4 1.9132 2.00000 + 5 2.1630 2.00000 + 6 2.4053 2.00000 + 7 2.5068 2.00000 + 8 2.6389 2.00000 + 9 2.8098 2.00000 + 10 2.8895 2.00000 + 11 3.0267 2.00000 + 12 3.0851 2.00000 + 13 3.2229 2.00000 + 14 3.4175 2.00000 + 15 3.4594 2.00000 + 16 3.4808 2.00000 + 17 3.7212 2.00000 + 18 3.9025 2.00048 + 19 3.9222 2.00079 + 20 4.2494 2.06442 + 21 5.9579 -0.00000 + 22 6.1190 -0.00000 + 23 6.1270 -0.00000 + 24 6.5202 -0.00000 + 25 6.6586 -0.00000 + 26 6.9261 -0.00000 + 27 6.9637 -0.00000 + 28 7.0979 -0.00000 + 29 7.1821 -0.00000 + 30 7.2692 -0.00000 + 31 7.3577 -0.00000 + 32 7.5548 -0.00000 + 33 8.2903 -0.00000 + 34 8.5396 -0.00000 + 35 8.7391 -0.00000 + 36 9.0400 -0.00000 + 37 9.2362 -0.00000 + 38 9.4638 -0.00000 + 39 9.7442 -0.00000 + 40 9.7836 -0.00000 + 41 9.9753 0.00000 + 42 10.2294 0.00000 + 43 10.4181 0.00000 + 44 10.5700 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1551 2.00000 + 2 1.5870 2.00000 + 3 1.7280 2.00000 + 4 1.9736 2.00000 + 5 2.1661 2.00000 + 6 2.2256 2.00000 + 7 2.4095 2.00000 + 8 2.6615 2.00000 + 9 2.8445 2.00000 + 10 2.9449 2.00000 + 11 3.1402 2.00000 + 12 3.2608 2.00000 + 13 3.3538 2.00000 + 14 3.5010 2.00000 + 15 3.5231 2.00000 + 16 3.5781 2.00000 + 17 3.7500 2.00000 + 18 3.8688 2.00019 + 19 4.0160 2.00636 + 20 4.2408 2.06809 + 21 5.6033 -0.00000 + 22 5.9688 -0.00000 + 23 5.9979 -0.00000 + 24 6.2130 -0.00000 + 25 6.4300 -0.00000 + 26 6.6893 -0.00000 + 27 6.8600 -0.00000 + 28 6.8718 -0.00000 + 29 7.2290 -0.00000 + 30 7.2827 -0.00000 + 31 7.4850 -0.00000 + 32 7.7681 -0.00000 + 33 8.3021 -0.00000 + 34 8.3109 -0.00000 + 35 9.0212 -0.00000 + 36 9.0990 -0.00000 + 37 9.3125 -0.00000 + 38 9.4922 -0.00000 + 39 9.8329 -0.00000 + 40 10.0103 0.00000 + 41 10.2227 0.00000 + 42 10.5019 0.00000 + 43 10.7178 0.00000 + 44 10.9546 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2527 2.00000 + 2 1.3950 2.00000 + 3 1.8298 2.00000 + 4 1.9750 2.00000 + 5 2.0763 2.00000 + 6 2.2198 2.00000 + 7 2.3288 2.00000 + 8 2.4737 2.00000 + 9 2.9439 2.00000 + 10 3.0692 2.00000 + 11 3.2579 2.00000 + 12 3.3607 2.00000 + 13 3.4523 2.00000 + 14 3.6120 2.00000 + 15 3.6425 2.00000 + 16 3.6703 2.00000 + 17 3.7607 2.00001 + 18 3.8472 2.00010 + 19 4.0007 2.00469 + 20 4.1715 2.05699 + 21 5.5215 -0.00000 + 22 5.7548 -0.00000 + 23 5.8218 -0.00000 + 24 5.8917 -0.00000 + 25 6.4895 -0.00000 + 26 6.5473 -0.00000 + 27 6.6145 -0.00000 + 28 6.7647 -0.00000 + 29 7.2646 -0.00000 + 30 7.3119 -0.00000 + 31 7.7105 -0.00000 + 32 7.9121 -0.00000 + 33 8.0509 -0.00000 + 34 8.0778 -0.00000 + 35 9.2873 -0.00000 + 36 9.3400 -0.00000 + 37 9.4110 -0.00000 + 38 9.5251 -0.00000 + 39 9.8975 -0.00000 + 40 10.2084 0.00000 + 41 10.2735 0.00000 + 42 10.3438 0.00000 + 43 11.0839 0.00000 + 44 11.2438 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1149 2.00000 + 2 1.4501 2.00000 + 3 2.1526 2.00000 + 4 2.1828 2.00000 + 5 2.1860 2.00000 + 6 2.2003 2.00000 + 7 2.4669 2.00000 + 8 2.5588 2.00000 + 9 2.5777 2.00000 + 10 3.0517 2.00000 + 11 3.1758 2.00000 + 12 3.2057 2.00000 + 13 3.2378 2.00000 + 14 3.2886 2.00000 + 15 3.3339 2.00000 + 16 3.4961 2.00000 + 17 3.6115 2.00000 + 18 3.8069 2.00003 + 19 3.8619 2.00016 + 20 4.1464 2.04554 + 21 6.0578 -0.00000 + 22 6.1084 -0.00000 + 23 6.3126 -0.00000 + 24 6.3179 -0.00000 + 25 6.8635 -0.00000 + 26 6.8653 -0.00000 + 27 7.0090 -0.00000 + 28 7.3066 -0.00000 + 29 7.3437 -0.00000 + 30 7.5460 -0.00000 + 31 7.6108 -0.00000 + 32 7.6370 -0.00000 + 33 8.1850 -0.00000 + 34 8.3839 -0.00000 + 35 8.5713 -0.00000 + 36 9.0660 -0.00000 + 37 9.3791 -0.00000 + 38 9.4012 -0.00000 + 39 9.6157 -0.00000 + 40 9.6626 -0.00000 + 41 9.9111 -0.00000 + 42 10.1503 0.00000 + 43 10.2166 0.00000 + 44 10.6071 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1337 2.00000 + 2 1.4696 2.00000 + 3 1.8702 2.00000 + 4 2.1826 2.00000 + 5 2.2137 2.00000 + 6 2.2270 2.00000 + 7 2.5388 2.00000 + 8 2.6003 2.00000 + 9 2.8519 2.00000 + 10 2.8661 2.00000 + 11 2.9917 2.00000 + 12 3.2155 2.00000 + 13 3.2965 2.00000 + 14 3.3828 2.00000 + 15 3.3885 2.00000 + 16 3.5433 2.00000 + 17 3.7123 2.00000 + 18 3.8181 2.00004 + 19 3.8688 2.00019 + 20 4.1535 2.04883 + 21 5.9294 -0.00000 + 22 6.0062 -0.00000 + 23 6.1994 -0.00000 + 24 6.3312 -0.00000 + 25 6.5364 -0.00000 + 26 6.7861 -0.00000 + 27 7.0125 -0.00000 + 28 7.2413 -0.00000 + 29 7.3327 -0.00000 + 30 7.5557 -0.00000 + 31 7.6468 -0.00000 + 32 7.6726 -0.00000 + 33 8.3763 -0.00000 + 34 8.4508 -0.00000 + 35 8.6274 -0.00000 + 36 9.0300 -0.00000 + 37 9.2796 -0.00000 + 38 9.3814 -0.00000 + 39 9.6748 -0.00000 + 40 9.7680 -0.00000 + 41 10.0079 0.00000 + 42 10.3052 0.00000 + 43 10.4104 0.00000 + 44 10.6781 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1907 2.00000 + 2 1.5289 2.00000 + 3 1.6237 2.00000 + 4 1.9673 2.00000 + 5 2.2480 2.00000 + 6 2.2881 2.00000 + 7 2.6495 2.00000 + 8 2.6558 2.00000 + 9 2.7547 2.00000 + 10 2.9523 2.00000 + 11 3.0736 2.00000 + 12 3.2273 2.00000 + 13 3.3080 2.00000 + 14 3.4316 2.00000 + 15 3.6139 2.00000 + 16 3.6390 2.00000 + 17 3.7516 2.00001 + 18 3.8036 2.00003 + 19 3.9827 2.00322 + 20 4.1597 2.05167 + 21 5.5745 -0.00000 + 22 5.8695 -0.00000 + 23 6.0009 -0.00000 + 24 6.0743 -0.00000 + 25 6.3665 -0.00000 + 26 6.5890 -0.00000 + 27 6.9519 -0.00000 + 28 6.9829 -0.00000 + 29 7.3909 -0.00000 + 30 7.5287 -0.00000 + 31 7.7392 -0.00000 + 32 7.8021 -0.00000 + 33 8.3215 -0.00000 + 34 8.4663 -0.00000 + 35 8.8530 -0.00000 + 36 9.0997 -0.00000 + 37 9.3453 -0.00000 + 38 9.4882 -0.00000 + 39 9.7133 -0.00000 + 40 9.9307 0.00000 + 41 10.2575 0.00000 + 42 10.4249 0.00000 + 43 10.7243 0.00000 + 44 10.9113 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2887 2.00000 + 2 1.4314 2.00000 + 3 1.6297 2.00000 + 4 1.7749 2.00000 + 5 2.3392 2.00000 + 6 2.3986 2.00000 + 7 2.4757 2.00000 + 8 2.5619 2.00000 + 9 2.7537 2.00000 + 10 2.8978 2.00000 + 11 3.3363 2.00000 + 12 3.4233 2.00000 + 13 3.5022 2.00000 + 14 3.5554 2.00000 + 15 3.5587 2.00000 + 16 3.6508 2.00000 + 17 3.7076 2.00000 + 18 3.8712 2.00021 + 19 3.9989 2.00452 + 20 4.1196 2.03363 + 21 5.4488 -0.00000 + 22 5.7288 -0.00000 + 23 5.7525 -0.00000 + 24 5.7703 -0.00000 + 25 6.4331 -0.00000 + 26 6.5293 -0.00000 + 27 6.6648 -0.00000 + 28 6.9202 -0.00000 + 29 7.4129 -0.00000 + 30 7.5456 -0.00000 + 31 7.8610 -0.00000 + 32 7.9219 -0.00000 + 33 8.1138 -0.00000 + 34 8.3097 -0.00000 + 35 9.1694 -0.00000 + 36 9.2656 -0.00000 + 37 9.4038 -0.00000 + 38 9.6001 -0.00000 + 39 9.6711 -0.00000 + 40 10.1107 0.00000 + 41 10.3763 0.00000 + 42 10.3788 0.00000 + 43 10.8379 0.00000 + 44 11.0375 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1867 2.00000 + 2 1.2974 2.00000 + 3 2.2202 2.00000 + 4 2.2713 2.00000 + 5 2.2764 2.00000 + 6 2.3267 2.00000 + 7 2.3816 2.00000 + 8 2.4041 2.00000 + 9 2.5374 2.00000 + 10 2.8794 2.00000 + 11 3.1893 2.00000 + 12 3.3067 2.00000 + 13 3.3214 2.00000 + 14 3.4427 2.00000 + 15 3.4511 2.00000 + 16 3.5118 2.00000 + 17 3.6095 2.00000 + 18 3.7228 2.00000 + 19 3.7267 2.00000 + 20 3.9462 2.00141 + 21 6.0019 -0.00000 + 22 6.0873 -0.00000 + 23 6.2676 -0.00000 + 24 6.4651 -0.00000 + 25 6.5451 -0.00000 + 26 6.6664 -0.00000 + 27 7.1510 -0.00000 + 28 7.2791 -0.00000 + 29 7.5463 -0.00000 + 30 7.6479 -0.00000 + 31 7.9854 -0.00000 + 32 8.0506 -0.00000 + 33 8.1623 -0.00000 + 34 8.3980 -0.00000 + 35 8.5057 -0.00000 + 36 9.0969 -0.00000 + 37 9.1743 -0.00000 + 38 9.2337 -0.00000 + 39 9.5303 -0.00000 + 40 9.6418 -0.00000 + 41 9.7790 -0.00000 + 42 9.9270 -0.00000 + 43 10.6746 0.00000 + 44 10.8931 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2056 2.00000 + 2 1.3166 2.00000 + 3 1.9439 2.00000 + 4 2.0562 2.00000 + 5 2.2935 2.00000 + 6 2.4239 2.00000 + 7 2.5323 2.00000 + 8 2.6058 2.00000 + 9 2.7289 2.00000 + 10 2.9043 2.00000 + 11 2.9948 2.00000 + 12 3.1348 2.00000 + 13 3.2431 2.00000 + 14 3.5082 2.00000 + 15 3.5194 2.00000 + 16 3.6300 2.00000 + 17 3.6911 2.00000 + 18 3.7120 2.00000 + 19 3.8295 2.00006 + 20 3.9615 2.00201 + 21 5.9480 -0.00000 + 22 5.9984 -0.00000 + 23 6.0853 -0.00000 + 24 6.2934 -0.00000 + 25 6.4471 -0.00000 + 26 6.6069 -0.00000 + 27 7.1257 -0.00000 + 28 7.2215 -0.00000 + 29 7.5454 -0.00000 + 30 7.6719 -0.00000 + 31 7.9422 -0.00000 + 32 8.1138 -0.00000 + 33 8.2292 -0.00000 + 34 8.4509 -0.00000 + 35 8.6762 -0.00000 + 36 9.0646 -0.00000 + 37 9.1308 -0.00000 + 38 9.2748 -0.00000 + 39 9.5598 -0.00000 + 40 9.7342 -0.00000 + 41 9.8794 -0.00000 + 42 10.0812 0.00000 + 43 10.6625 0.00000 + 44 10.8650 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2633 2.00000 + 2 1.3750 2.00000 + 3 1.6980 2.00000 + 4 1.8118 2.00000 + 5 2.3526 2.00000 + 6 2.4842 2.00000 + 7 2.6000 2.00000 + 8 2.7792 2.00000 + 9 2.8876 2.00000 + 10 2.9541 2.00000 + 11 3.0367 2.00000 + 12 3.0588 2.00000 + 13 3.1198 2.00000 + 14 3.3600 2.00000 + 15 3.7100 2.00000 + 16 3.7108 2.00000 + 17 3.7815 2.00001 + 18 3.8596 2.00015 + 19 3.9366 2.00112 + 20 3.9991 2.00453 + 21 5.6524 -0.00000 + 22 5.7898 -0.00000 + 23 5.8786 -0.00000 + 24 5.8817 -0.00000 + 25 6.4424 -0.00000 + 26 6.5118 -0.00000 + 27 7.0006 -0.00000 + 28 7.0068 -0.00000 + 29 7.6039 -0.00000 + 30 7.7657 -0.00000 + 31 7.9315 -0.00000 + 32 8.1462 -0.00000 + 33 8.2210 -0.00000 + 34 8.5522 -0.00000 + 35 8.7923 -0.00000 + 36 9.1515 -0.00000 + 37 9.1618 -0.00000 + 38 9.3514 -0.00000 + 39 9.7296 -0.00000 + 40 9.9615 0.00000 + 41 10.0278 0.00000 + 42 10.3434 0.00000 + 43 10.6158 0.00000 + 44 10.9145 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3619 2.00000 + 2 1.4746 2.00000 + 3 1.5054 2.00000 + 4 1.6190 2.00000 + 5 2.4513 2.00000 + 6 2.5837 2.00000 + 7 2.5886 2.00000 + 8 2.7175 2.00000 + 9 2.7277 2.00000 + 10 2.8616 2.00000 + 11 3.0634 2.00000 + 12 3.2034 2.00000 + 13 3.4457 2.00000 + 14 3.4962 2.00000 + 15 3.7232 2.00000 + 16 3.7336 2.00000 + 17 3.7777 2.00001 + 18 3.9270 2.00089 + 19 3.9486 2.00150 + 20 4.0185 2.00668 + 21 5.4593 -0.00000 + 22 5.5821 -0.00000 + 23 5.6651 -0.00000 + 24 5.6822 -0.00000 + 25 6.4802 -0.00000 + 26 6.5190 -0.00000 + 27 6.7529 -0.00000 + 28 6.8678 -0.00000 + 29 7.6622 -0.00000 + 30 7.8564 -0.00000 + 31 7.8693 -0.00000 + 32 8.0686 -0.00000 + 33 8.2940 -0.00000 + 34 8.6705 -0.00000 + 35 8.8237 -0.00000 + 36 9.0694 -0.00000 + 37 9.3194 -0.00000 + 38 9.4388 -0.00000 + 39 9.8176 -0.00000 + 40 10.0778 0.00000 + 41 10.2460 0.00000 + 42 10.4906 0.00000 + 43 10.6235 0.00000 + 44 10.8416 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.2002 2.00000 + 2 1.7896 2.00000 + 3 1.8336 2.00000 + 4 2.0418 2.00000 + 5 2.2391 2.00000 + 6 2.2854 2.00000 + 7 2.4955 2.00000 + 8 2.7377 2.00000 + 9 2.7691 2.00000 + 10 2.8537 2.00000 + 11 2.8585 2.00000 + 12 2.9076 2.00000 + 13 3.0764 2.00000 + 14 3.1040 2.00000 + 15 3.4168 2.00000 + 16 3.4282 2.00000 + 17 3.6031 2.00000 + 18 3.6164 2.00000 + 19 3.6792 2.00000 + 20 4.3707 1.72361 + 21 6.1186 -0.00000 + 22 6.4600 -0.00000 + 23 6.5110 -0.00000 + 24 7.0643 -0.00000 + 25 7.1604 -0.00000 + 26 7.2193 -0.00000 + 27 7.2398 -0.00000 + 28 7.3090 -0.00000 + 29 7.4275 -0.00000 + 30 7.5388 -0.00000 + 31 7.5791 -0.00000 + 32 7.8772 -0.00000 + 33 8.1298 -0.00000 + 34 8.1970 -0.00000 + 35 8.5836 -0.00000 + 36 9.1967 -0.00000 + 37 9.3525 -0.00000 + 38 9.3712 -0.00000 + 39 9.4785 -0.00000 + 40 9.5095 -0.00000 + 41 9.6629 -0.00000 + 42 9.7349 -0.00000 + 43 10.0153 0.00000 + 44 10.6881 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2191 2.00000 + 2 1.8082 2.00000 + 3 1.8543 2.00000 + 4 1.9588 2.00000 + 5 2.0622 2.00000 + 6 2.5000 2.00000 + 7 2.5171 2.00000 + 8 2.6010 2.00000 + 9 2.6309 2.00000 + 10 2.7962 2.00000 + 11 2.7970 2.00000 + 12 3.1213 2.00000 + 13 3.1892 2.00000 + 14 3.2096 2.00000 + 15 3.3879 2.00000 + 16 3.4300 2.00000 + 17 3.6081 2.00000 + 18 3.7302 2.00000 + 19 3.7837 2.00001 + 20 4.3709 1.72250 + 21 6.0572 -0.00000 + 22 6.1700 -0.00000 + 23 6.3991 -0.00000 + 24 6.8059 -0.00000 + 25 6.8940 -0.00000 + 26 7.1204 -0.00000 + 27 7.2574 -0.00000 + 28 7.2696 -0.00000 + 29 7.4046 -0.00000 + 30 7.6122 -0.00000 + 31 7.6258 -0.00000 + 32 7.8489 -0.00000 + 33 8.3031 -0.00000 + 34 8.4357 -0.00000 + 35 8.6461 -0.00000 + 36 9.0644 -0.00000 + 37 9.1878 -0.00000 + 38 9.4166 -0.00000 + 39 9.5399 -0.00000 + 40 9.6797 -0.00000 + 41 9.8884 -0.00000 + 42 9.8943 -0.00000 + 43 10.2713 0.00000 + 44 10.6362 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2766 2.00000 + 2 1.7119 2.00000 + 3 1.8648 2.00000 + 4 1.9164 2.00000 + 5 2.1228 2.00000 + 6 2.2882 2.00000 + 7 2.3635 2.00000 + 8 2.5628 2.00000 + 9 2.5666 2.00000 + 10 2.8293 2.00000 + 11 2.9710 2.00000 + 12 3.0637 2.00000 + 13 3.2608 2.00000 + 14 3.4288 2.00000 + 15 3.5076 2.00000 + 16 3.6838 2.00000 + 17 3.7092 2.00000 + 18 3.8202 2.00005 + 19 3.9335 2.00104 + 20 4.3497 1.83091 + 21 5.7286 -0.00000 + 22 5.9048 -0.00000 + 23 6.1047 -0.00000 + 24 6.2939 -0.00000 + 25 6.8096 -0.00000 + 26 6.8144 -0.00000 + 27 6.8910 -0.00000 + 28 7.2255 -0.00000 + 29 7.4866 -0.00000 + 30 7.7050 -0.00000 + 31 7.7427 -0.00000 + 32 7.8944 -0.00000 + 33 8.2107 -0.00000 + 34 8.4226 -0.00000 + 35 9.0572 -0.00000 + 36 9.1650 -0.00000 + 37 9.3490 -0.00000 + 38 9.4273 -0.00000 + 39 9.6088 -0.00000 + 40 9.9570 0.00000 + 41 10.2094 0.00000 + 42 10.2668 0.00000 + 43 10.4379 0.00000 + 44 10.7661 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3753 2.00000 + 2 1.5189 2.00000 + 3 1.9613 2.00000 + 4 2.0190 2.00000 + 5 2.1019 2.00000 + 6 2.1682 2.00000 + 7 2.2323 2.00000 + 8 2.3774 2.00000 + 9 2.6580 2.00000 + 10 2.7934 2.00000 + 11 2.9440 2.00000 + 12 3.0779 2.00000 + 13 3.4957 2.00000 + 14 3.6596 2.00000 + 15 3.6940 2.00000 + 16 3.7328 2.00000 + 17 3.8302 2.00006 + 18 3.8932 2.00037 + 19 4.0190 2.00674 + 20 4.2474 2.06542 + 21 5.5611 -0.00000 + 22 5.7703 -0.00000 + 23 5.7909 -0.00000 + 24 5.9126 -0.00000 + 25 6.6184 -0.00000 + 26 6.6503 -0.00000 + 27 6.8498 -0.00000 + 28 7.1141 -0.00000 + 29 7.5358 -0.00000 + 30 7.6491 -0.00000 + 31 7.8460 -0.00000 + 32 7.9899 -0.00000 + 33 8.0213 -0.00000 + 34 8.3366 -0.00000 + 35 9.2774 -0.00000 + 36 9.4144 -0.00000 + 37 9.4306 -0.00000 + 38 9.5680 -0.00000 + 39 9.7373 -0.00000 + 40 10.1704 0.00000 + 41 10.1853 0.00000 + 42 10.3727 0.00000 + 43 10.8239 0.00000 + 44 11.1213 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2370 2.00000 + 2 1.5853 2.00000 + 3 1.8760 2.00000 + 4 2.2511 2.00000 + 5 2.2949 2.00000 + 6 2.3247 2.00000 + 7 2.3384 2.00000 + 8 2.5906 2.00000 + 9 2.6857 2.00000 + 10 2.8963 2.00000 + 11 2.9429 2.00000 + 12 3.0782 2.00000 + 13 3.2485 2.00000 + 14 3.2706 2.00000 + 15 3.2744 2.00000 + 16 3.3265 2.00000 + 17 3.4628 2.00000 + 18 3.6763 2.00000 + 19 3.6900 2.00000 + 20 4.1615 2.05251 + 21 6.1322 -0.00000 + 22 6.3700 -0.00000 + 23 6.4959 -0.00000 + 24 6.7985 -0.00000 + 25 6.9711 -0.00000 + 26 7.1044 -0.00000 + 27 7.3894 -0.00000 + 28 7.5235 -0.00000 + 29 7.5452 -0.00000 + 30 7.5987 -0.00000 + 31 7.6450 -0.00000 + 32 8.0955 -0.00000 + 33 8.1888 -0.00000 + 34 8.2107 -0.00000 + 35 8.7878 -0.00000 + 36 9.0487 -0.00000 + 37 9.2968 -0.00000 + 38 9.4154 -0.00000 + 39 9.4737 -0.00000 + 40 9.6090 -0.00000 + 41 9.9077 -0.00000 + 42 10.0474 0.00000 + 43 10.0678 0.00000 + 44 10.7335 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2560 2.00000 + 2 1.6049 2.00000 + 3 1.8958 2.00000 + 4 1.9966 2.00000 + 5 2.2869 2.00000 + 6 2.3340 2.00000 + 7 2.3679 2.00000 + 8 2.6355 2.00000 + 9 2.6595 2.00000 + 10 2.9735 2.00000 + 11 3.0016 2.00000 + 12 3.0493 2.00000 + 13 3.1155 2.00000 + 14 3.2559 2.00000 + 15 3.3948 2.00000 + 16 3.5387 2.00000 + 17 3.5646 2.00000 + 18 3.6332 2.00000 + 19 3.7366 2.00000 + 20 4.1686 2.05570 + 21 6.0554 -0.00000 + 22 6.1007 -0.00000 + 23 6.4120 -0.00000 + 24 6.6124 -0.00000 + 25 6.7673 -0.00000 + 26 7.0481 -0.00000 + 27 7.2836 -0.00000 + 28 7.3713 -0.00000 + 29 7.5542 -0.00000 + 30 7.7113 -0.00000 + 31 7.7564 -0.00000 + 32 8.1731 -0.00000 + 33 8.3060 -0.00000 + 34 8.3914 -0.00000 + 35 8.7077 -0.00000 + 36 9.0826 -0.00000 + 37 9.1613 -0.00000 + 38 9.5436 -0.00000 + 39 9.5567 -0.00000 + 40 9.6450 -0.00000 + 41 10.0535 0.00000 + 42 10.1915 0.00000 + 43 10.2216 0.00000 + 44 10.7084 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3138 2.00000 + 2 1.6641 2.00000 + 3 1.7500 2.00000 + 4 1.9553 2.00000 + 5 2.1021 2.00000 + 6 2.3471 2.00000 + 7 2.3770 2.00000 + 8 2.4421 2.00000 + 9 2.7779 2.00000 + 10 2.8414 2.00000 + 11 3.0283 2.00000 + 12 3.1976 2.00000 + 13 3.3276 2.00000 + 14 3.4224 2.00000 + 15 3.5192 2.00000 + 16 3.5511 2.00000 + 17 3.6965 2.00000 + 18 3.7674 2.00001 + 19 3.8606 2.00015 + 20 4.1755 2.05868 + 21 5.6715 -0.00000 + 22 5.8553 -0.00000 + 23 6.0837 -0.00000 + 24 6.0886 -0.00000 + 25 6.7847 -0.00000 + 26 6.8654 -0.00000 + 27 7.0054 -0.00000 + 28 7.4689 -0.00000 + 29 7.5232 -0.00000 + 30 7.7167 -0.00000 + 31 7.8301 -0.00000 + 32 8.1132 -0.00000 + 33 8.2598 -0.00000 + 34 8.5997 -0.00000 + 35 8.9389 -0.00000 + 36 9.1806 -0.00000 + 37 9.2998 -0.00000 + 38 9.6178 -0.00000 + 39 9.6528 -0.00000 + 40 9.7946 -0.00000 + 41 10.2040 0.00000 + 42 10.3633 0.00000 + 43 10.5272 0.00000 + 44 10.7964 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4128 2.00000 + 2 1.5568 2.00000 + 3 1.7647 2.00000 + 4 1.9094 2.00000 + 5 2.0576 2.00000 + 6 2.2014 2.00000 + 7 2.4475 2.00000 + 8 2.5271 2.00000 + 9 2.5943 2.00000 + 10 2.6671 2.00000 + 11 3.2036 2.00000 + 12 3.3098 2.00000 + 13 3.4995 2.00000 + 14 3.5890 2.00000 + 15 3.6136 2.00000 + 16 3.6630 2.00000 + 17 3.7087 2.00000 + 18 3.8676 2.00019 + 19 3.9848 2.00336 + 20 4.1348 2.04021 + 21 5.4714 -0.00000 + 22 5.6668 -0.00000 + 23 5.7197 -0.00000 + 24 5.7263 -0.00000 + 25 6.7468 -0.00000 + 26 6.8190 -0.00000 + 27 6.8401 -0.00000 + 28 7.4931 -0.00000 + 29 7.5670 -0.00000 + 30 7.6583 -0.00000 + 31 7.9077 -0.00000 + 32 8.0476 -0.00000 + 33 8.0507 -0.00000 + 34 8.6275 -0.00000 + 35 9.2491 -0.00000 + 36 9.3637 -0.00000 + 37 9.5053 -0.00000 + 38 9.6244 -0.00000 + 39 9.6622 -0.00000 + 40 9.9605 0.00000 + 41 10.2645 0.00000 + 42 10.3893 0.00000 + 43 10.6569 0.00000 + 44 10.8153 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3119 2.00000 + 2 1.4270 2.00000 + 3 1.9616 2.00000 + 4 2.0913 2.00000 + 5 2.3484 2.00000 + 6 2.4030 2.00000 + 7 2.4531 2.00000 + 8 2.5142 2.00000 + 9 2.6894 2.00000 + 10 2.9812 2.00000 + 11 3.0129 2.00000 + 12 3.0399 2.00000 + 13 3.1019 2.00000 + 14 3.2029 2.00000 + 15 3.4442 2.00000 + 16 3.4745 2.00000 + 17 3.5287 2.00000 + 18 3.6456 2.00000 + 19 3.6623 2.00000 + 20 3.8320 2.00007 + 21 6.2198 -0.00000 + 22 6.3287 -0.00000 + 23 6.5529 -0.00000 + 24 6.6199 -0.00000 + 25 6.7226 -0.00000 + 26 6.7672 -0.00000 + 27 7.4864 -0.00000 + 28 7.5394 -0.00000 + 29 7.7709 -0.00000 + 30 7.8011 -0.00000 + 31 7.8877 -0.00000 + 32 7.9813 -0.00000 + 33 8.5167 -0.00000 + 34 8.5186 -0.00000 + 35 8.7034 -0.00000 + 36 9.1332 -0.00000 + 37 9.1649 -0.00000 + 38 9.2755 -0.00000 + 39 9.5355 -0.00000 + 40 9.6737 -0.00000 + 41 9.7675 -0.00000 + 42 10.0638 0.00000 + 43 10.5502 0.00000 + 44 10.7565 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3310 2.00000 + 2 1.4464 2.00000 + 3 1.9815 2.00000 + 4 2.0722 2.00000 + 5 2.1124 2.00000 + 6 2.1882 2.00000 + 7 2.6633 2.00000 + 8 2.7230 2.00000 + 9 2.7487 2.00000 + 10 2.8456 2.00000 + 11 2.8565 2.00000 + 12 3.0827 2.00000 + 13 3.2679 2.00000 + 14 3.3795 2.00000 + 15 3.3911 2.00000 + 16 3.4890 2.00000 + 17 3.6018 2.00000 + 18 3.6566 2.00000 + 19 3.6890 2.00000 + 20 3.8468 2.00010 + 21 6.1138 -0.00000 + 22 6.1361 -0.00000 + 23 6.2924 -0.00000 + 24 6.3653 -0.00000 + 25 6.7657 -0.00000 + 26 6.8705 -0.00000 + 27 7.3609 -0.00000 + 28 7.3731 -0.00000 + 29 7.7637 -0.00000 + 30 7.8517 -0.00000 + 31 7.9773 -0.00000 + 32 8.1515 -0.00000 + 33 8.4681 -0.00000 + 34 8.6312 -0.00000 + 35 8.7159 -0.00000 + 36 9.1660 -0.00000 + 37 9.2452 -0.00000 + 38 9.2713 -0.00000 + 39 9.5984 -0.00000 + 40 9.7905 -0.00000 + 41 9.8601 -0.00000 + 42 10.1265 0.00000 + 43 10.5460 0.00000 + 44 10.7062 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3893 2.00000 + 2 1.5052 2.00000 + 3 1.8269 2.00000 + 4 1.9435 2.00000 + 5 2.0423 2.00000 + 6 2.1723 2.00000 + 7 2.4774 2.00000 + 8 2.6093 2.00000 + 9 2.7668 2.00000 + 10 3.0712 2.00000 + 11 3.1342 2.00000 + 12 3.1761 2.00000 + 13 3.2286 2.00000 + 14 3.4076 2.00000 + 15 3.5575 2.00000 + 16 3.6142 2.00000 + 17 3.6399 2.00000 + 18 3.7763 2.00001 + 19 3.7818 2.00001 + 20 3.8898 2.00034 + 21 5.7023 -0.00000 + 22 5.8219 -0.00000 + 23 5.9073 -0.00000 + 24 5.9716 -0.00000 + 25 6.8228 -0.00000 + 26 6.8529 -0.00000 + 27 7.1712 -0.00000 + 28 7.3282 -0.00000 + 29 7.7655 -0.00000 + 30 7.8692 -0.00000 + 31 7.9728 -0.00000 + 32 8.2176 -0.00000 + 33 8.4512 -0.00000 + 34 8.6931 -0.00000 + 35 8.8963 -0.00000 + 36 9.2576 -0.00000 + 37 9.3419 -0.00000 + 38 9.4177 -0.00000 + 39 9.7110 -0.00000 + 40 9.9294 0.00000 + 41 10.0321 0.00000 + 42 10.3172 0.00000 + 43 10.5200 0.00000 + 44 10.8168 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4889 2.00000 + 2 1.6055 2.00000 + 3 1.6335 2.00000 + 4 1.7507 2.00000 + 5 2.1434 2.00000 + 6 2.2738 2.00000 + 7 2.2893 2.00000 + 8 2.4212 2.00000 + 9 2.8606 2.00000 + 10 2.9899 2.00000 + 11 3.1998 2.00000 + 12 3.3035 2.00000 + 13 3.4617 2.00000 + 14 3.5487 2.00000 + 15 3.5805 2.00000 + 16 3.6859 2.00000 + 17 3.7009 2.00000 + 18 3.8645 2.00017 + 19 3.8811 2.00027 + 20 3.9469 2.00144 + 21 5.4438 -0.00000 + 22 5.5257 -0.00000 + 23 5.6094 -0.00000 + 24 5.6432 -0.00000 + 25 6.8198 -0.00000 + 26 6.8474 -0.00000 + 27 7.0731 -0.00000 + 28 7.3365 -0.00000 + 29 7.8044 -0.00000 + 30 7.8942 -0.00000 + 31 7.9229 -0.00000 + 32 8.0573 -0.00000 + 33 8.4507 -0.00000 + 34 8.9147 -0.00000 + 35 8.9636 -0.00000 + 36 9.1939 -0.00000 + 37 9.4923 -0.00000 + 38 9.5530 -0.00000 + 39 9.7566 -0.00000 + 40 9.9251 -0.00000 + 41 10.2001 0.00000 + 42 10.4812 0.00000 + 43 10.5996 0.00000 + 44 10.8536 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3643 2.00000 + 2 1.5745 2.00000 + 3 1.9778 2.00000 + 4 2.2066 2.00000 + 5 2.2352 2.00000 + 6 2.3962 2.00000 + 7 2.4424 2.00000 + 8 2.5201 2.00000 + 9 2.6211 2.00000 + 10 2.6478 2.00000 + 11 2.9653 2.00000 + 12 3.0357 2.00000 + 13 3.1757 2.00000 + 14 3.1957 2.00000 + 15 3.2243 2.00000 + 16 3.2407 2.00000 + 17 3.3851 2.00000 + 18 3.4098 2.00000 + 19 3.9218 2.00078 + 20 4.1961 2.06639 + 21 6.3664 -0.00000 + 22 6.5758 -0.00000 + 23 6.8290 -0.00000 + 24 7.1109 -0.00000 + 25 7.2214 -0.00000 + 26 7.2283 -0.00000 + 27 7.2405 -0.00000 + 28 7.3788 -0.00000 + 29 7.7486 -0.00000 + 30 7.7896 -0.00000 + 31 7.7989 -0.00000 + 32 8.0550 -0.00000 + 33 8.2116 -0.00000 + 34 8.4356 -0.00000 + 35 8.7185 -0.00000 + 36 9.0689 -0.00000 + 37 9.1567 -0.00000 + 38 9.3554 -0.00000 + 39 9.4776 -0.00000 + 40 9.4778 -0.00000 + 41 9.4979 -0.00000 + 42 9.6431 -0.00000 + 43 9.6559 -0.00000 + 44 9.9288 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3835 2.00000 + 2 1.5939 2.00000 + 3 1.9975 2.00000 + 4 2.1208 2.00000 + 5 2.2378 2.00000 + 6 2.2485 2.00000 + 7 2.3483 2.00000 + 8 2.4995 2.00000 + 9 2.7183 2.00000 + 10 2.7921 2.00000 + 11 2.9198 2.00000 + 12 2.9468 2.00000 + 13 3.0326 2.00000 + 14 3.1810 2.00000 + 15 3.3050 2.00000 + 16 3.4754 2.00000 + 17 3.4767 2.00000 + 18 3.6069 2.00000 + 19 3.9463 2.00142 + 20 4.2063 2.06906 + 21 6.2191 -0.00000 + 22 6.2841 -0.00000 + 23 6.6247 -0.00000 + 24 6.7713 -0.00000 + 25 7.0786 -0.00000 + 26 7.0974 -0.00000 + 27 7.2799 -0.00000 + 28 7.3414 -0.00000 + 29 7.7231 -0.00000 + 30 7.7402 -0.00000 + 31 8.0486 -0.00000 + 32 8.2737 -0.00000 + 33 8.3139 -0.00000 + 34 8.5986 -0.00000 + 35 8.6998 -0.00000 + 36 8.9906 -0.00000 + 37 9.0310 -0.00000 + 38 9.3280 -0.00000 + 39 9.3803 -0.00000 + 40 9.6397 -0.00000 + 41 9.7006 -0.00000 + 42 9.7625 -0.00000 + 43 9.9420 0.00000 + 44 10.1268 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4418 2.00000 + 2 1.6526 2.00000 + 3 1.8793 2.00000 + 4 2.0498 2.00000 + 5 2.0982 2.00000 + 6 2.2928 2.00000 + 7 2.3219 2.00000 + 8 2.4911 2.00000 + 9 2.5582 2.00000 + 10 2.7155 2.00000 + 11 2.7392 2.00000 + 12 2.9598 2.00000 + 13 3.2176 2.00000 + 14 3.3557 2.00000 + 15 3.5878 2.00000 + 16 3.6966 2.00000 + 17 3.7262 2.00000 + 18 3.7750 2.00001 + 19 4.0123 2.00591 + 20 4.2203 2.07087 + 21 5.8286 -0.00000 + 22 5.8916 -0.00000 + 23 6.1712 -0.00000 + 24 6.2415 -0.00000 + 25 6.9483 -0.00000 + 26 7.0072 -0.00000 + 27 7.0837 -0.00000 + 28 7.1803 -0.00000 + 29 7.7443 -0.00000 + 30 7.7695 -0.00000 + 31 8.1387 -0.00000 + 32 8.1735 -0.00000 + 33 8.4573 -0.00000 + 34 8.8399 -0.00000 + 35 8.9987 -0.00000 + 36 9.0069 -0.00000 + 37 9.1451 -0.00000 + 38 9.3629 -0.00000 + 39 9.3658 -0.00000 + 40 9.7096 -0.00000 + 41 10.0278 0.00000 + 42 10.0722 0.00000 + 43 10.3559 0.00000 + 44 10.5593 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5415 2.00000 + 2 1.6861 2.00000 + 3 1.7527 2.00000 + 4 1.8967 2.00000 + 5 2.1606 2.00000 + 6 2.3044 2.00000 + 7 2.3906 2.00000 + 8 2.4203 2.00000 + 9 2.5313 2.00000 + 10 2.5614 2.00000 + 11 2.6600 2.00000 + 12 2.7970 2.00000 + 13 3.5817 2.00000 + 14 3.6464 2.00000 + 15 3.7360 2.00000 + 16 3.7611 2.00001 + 17 3.9046 2.00050 + 18 3.9710 2.00249 + 19 4.0190 2.00674 + 20 4.1679 2.05539 + 21 5.5976 -0.00000 + 22 5.6784 -0.00000 + 23 5.7708 -0.00000 + 24 5.8219 -0.00000 + 25 6.8521 -0.00000 + 26 6.8973 -0.00000 + 27 6.9620 -0.00000 + 28 7.0778 -0.00000 + 29 7.8036 -0.00000 + 30 7.8439 -0.00000 + 31 7.9610 -0.00000 + 32 7.9785 -0.00000 + 33 8.6175 -0.00000 + 34 8.8875 -0.00000 + 35 9.1775 -0.00000 + 36 9.1910 -0.00000 + 37 9.3336 -0.00000 + 38 9.3534 -0.00000 + 39 9.4539 -0.00000 + 40 9.6479 -0.00000 + 41 10.3324 0.00000 + 42 10.5527 0.00000 + 43 10.6124 0.00000 + 44 10.9312 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4030 2.00000 + 2 1.6153 2.00000 + 3 1.7666 2.00000 + 4 1.9937 2.00000 + 5 2.4451 2.00000 + 6 2.4830 2.00000 + 7 2.5204 2.00000 + 8 2.6521 2.00000 + 9 2.7085 2.00000 + 10 2.8080 2.00000 + 11 2.8160 2.00000 + 12 2.8564 2.00000 + 13 3.0097 2.00000 + 14 3.0530 2.00000 + 15 3.3797 2.00000 + 16 3.4286 2.00000 + 17 3.5208 2.00000 + 18 3.5484 2.00000 + 19 3.6863 2.00000 + 20 3.9511 2.00159 + 21 6.4053 -0.00000 + 22 6.5521 -0.00000 + 23 6.6169 -0.00000 + 24 6.8319 -0.00000 + 25 7.2563 -0.00000 + 26 7.2948 -0.00000 + 27 7.4835 -0.00000 + 28 7.5321 -0.00000 + 29 7.6293 -0.00000 + 30 7.6340 -0.00000 + 31 7.7751 -0.00000 + 32 7.9858 -0.00000 + 33 8.3559 -0.00000 + 34 8.6922 -0.00000 + 35 8.8450 -0.00000 + 36 9.0603 -0.00000 + 37 9.2212 -0.00000 + 38 9.2428 -0.00000 + 39 9.5214 -0.00000 + 40 9.7089 -0.00000 + 41 9.8052 -0.00000 + 42 9.8456 -0.00000 + 43 9.8492 -0.00000 + 44 10.1673 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4223 2.00000 + 2 1.6347 2.00000 + 3 1.7865 2.00000 + 4 2.0129 2.00000 + 5 2.1675 2.00000 + 6 2.3692 2.00000 + 7 2.5225 2.00000 + 8 2.5787 2.00000 + 9 2.7294 2.00000 + 10 2.7732 2.00000 + 11 2.9005 2.00000 + 12 3.0118 2.00000 + 13 3.1425 2.00000 + 14 3.2290 2.00000 + 15 3.3076 2.00000 + 16 3.4039 2.00000 + 17 3.5935 2.00000 + 18 3.6553 2.00000 + 19 3.7197 2.00000 + 20 3.9664 2.00225 + 21 6.2210 -0.00000 + 22 6.2253 -0.00000 + 23 6.5316 -0.00000 + 24 6.5975 -0.00000 + 25 7.0804 -0.00000 + 26 7.0933 -0.00000 + 27 7.4756 -0.00000 + 28 7.5114 -0.00000 + 29 7.7387 -0.00000 + 30 7.8323 -0.00000 + 31 7.9222 -0.00000 + 32 8.0780 -0.00000 + 33 8.4014 -0.00000 + 34 8.6600 -0.00000 + 35 8.8446 -0.00000 + 36 9.0744 -0.00000 + 37 9.1530 -0.00000 + 38 9.3004 -0.00000 + 39 9.6317 -0.00000 + 40 9.7334 -0.00000 + 41 9.7659 -0.00000 + 42 9.9731 0.00000 + 43 10.1565 0.00000 + 44 10.3055 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4808 2.00000 + 2 1.6936 2.00000 + 3 1.8465 2.00000 + 4 1.9189 2.00000 + 5 2.0759 2.00000 + 6 2.1317 2.00000 + 7 2.2882 2.00000 + 8 2.5118 2.00000 + 9 2.6266 2.00000 + 10 2.8602 2.00000 + 11 3.0034 2.00000 + 12 3.1717 2.00000 + 13 3.2899 2.00000 + 14 3.3826 2.00000 + 15 3.4910 2.00000 + 16 3.5765 2.00000 + 17 3.7204 2.00000 + 18 3.7476 2.00000 + 19 3.8297 2.00006 + 20 4.0058 2.00519 + 21 5.7704 -0.00000 + 22 5.8476 -0.00000 + 23 6.0734 -0.00000 + 24 6.0804 -0.00000 + 25 7.0707 -0.00000 + 26 7.0903 -0.00000 + 27 7.2559 -0.00000 + 28 7.4151 -0.00000 + 29 7.7861 -0.00000 + 30 7.8402 -0.00000 + 31 8.1077 -0.00000 + 32 8.1998 -0.00000 + 33 8.3961 -0.00000 + 34 8.7597 -0.00000 + 35 8.9480 -0.00000 + 36 9.1393 -0.00000 + 37 9.2175 -0.00000 + 38 9.3814 -0.00000 + 39 9.6750 -0.00000 + 40 9.8702 -0.00000 + 41 9.9021 -0.00000 + 42 10.1088 0.00000 + 43 10.4968 0.00000 + 44 10.7109 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5809 2.00000 + 2 1.7259 2.00000 + 3 1.7937 2.00000 + 4 1.9318 2.00000 + 5 1.9562 2.00000 + 6 2.0965 2.00000 + 7 2.1763 2.00000 + 8 2.3231 2.00000 + 9 2.7194 2.00000 + 10 2.8494 2.00000 + 11 2.9515 2.00000 + 12 3.0708 2.00000 + 13 3.5837 2.00000 + 14 3.6374 2.00000 + 15 3.6787 2.00000 + 16 3.7020 2.00000 + 17 3.7813 2.00001 + 18 3.8947 2.00039 + 19 3.9004 2.00045 + 20 4.0209 2.00699 + 21 5.5000 -0.00000 + 22 5.5697 -0.00000 + 23 5.6604 -0.00000 + 24 5.6693 -0.00000 + 25 7.0638 -0.00000 + 26 7.1139 -0.00000 + 27 7.1198 -0.00000 + 28 7.3643 -0.00000 + 29 7.7992 -0.00000 + 30 7.8658 -0.00000 + 31 8.0382 -0.00000 + 32 8.0508 -0.00000 + 33 8.4301 -0.00000 + 34 8.9888 -0.00000 + 35 9.0582 -0.00000 + 36 9.3001 -0.00000 + 37 9.3438 -0.00000 + 38 9.4812 -0.00000 + 39 9.5312 -0.00000 + 40 9.7651 -0.00000 + 41 10.1212 0.00000 + 42 10.3415 0.00000 + 43 10.6325 0.00000 + 44 10.8758 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4815 2.00000 + 2 1.6019 2.00000 + 3 1.6976 2.00000 + 4 1.8232 2.00000 + 5 2.5191 2.00000 + 6 2.5632 2.00000 + 7 2.6196 2.00000 + 8 2.6717 2.00000 + 9 2.7310 2.00000 + 10 2.7770 2.00000 + 11 2.8565 2.00000 + 12 2.8843 2.00000 + 13 2.9623 2.00000 + 14 3.1911 2.00000 + 15 3.3230 2.00000 + 16 3.5103 2.00000 + 17 3.5630 2.00000 + 18 3.6002 2.00000 + 19 3.6018 2.00000 + 20 3.6054 2.00000 + 21 6.4530 -0.00000 + 22 6.4925 -0.00000 + 23 6.5446 -0.00000 + 24 6.6267 -0.00000 + 25 7.0894 -0.00000 + 26 7.1138 -0.00000 + 27 7.4482 -0.00000 + 28 7.5074 -0.00000 + 29 7.9159 -0.00000 + 30 7.9311 -0.00000 + 31 7.9639 -0.00000 + 32 7.9941 -0.00000 + 33 8.5091 -0.00000 + 34 8.6933 -0.00000 + 35 8.8160 -0.00000 + 36 8.9427 -0.00000 + 37 9.2529 -0.00000 + 38 9.3904 -0.00000 + 39 9.4228 -0.00000 + 40 9.5394 -0.00000 + 41 10.2061 0.00000 + 42 10.3416 0.00000 + 43 10.3876 0.00000 + 44 10.5372 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5010 2.00000 + 2 1.6215 2.00000 + 3 1.7173 2.00000 + 4 1.8430 2.00000 + 5 2.2457 2.00000 + 6 2.3634 2.00000 + 7 2.4601 2.00000 + 8 2.5824 2.00000 + 9 2.8815 2.00000 + 10 2.8946 2.00000 + 11 3.0017 2.00000 + 12 3.1320 2.00000 + 13 3.1343 2.00000 + 14 3.2371 2.00000 + 15 3.3721 2.00000 + 16 3.4311 2.00000 + 17 3.5637 2.00000 + 18 3.6098 2.00000 + 19 3.6142 2.00000 + 20 3.6335 2.00000 + 21 6.2362 -0.00000 + 22 6.2489 -0.00000 + 23 6.3707 -0.00000 + 24 6.3886 -0.00000 + 25 7.1161 -0.00000 + 26 7.1515 -0.00000 + 27 7.4302 -0.00000 + 28 7.4741 -0.00000 + 29 7.9373 -0.00000 + 30 7.9491 -0.00000 + 31 8.0048 -0.00000 + 32 8.0554 -0.00000 + 33 8.6177 -0.00000 + 34 8.6650 -0.00000 + 35 8.8334 -0.00000 + 36 9.0599 -0.00000 + 37 9.2870 -0.00000 + 38 9.3534 -0.00000 + 39 9.5157 -0.00000 + 40 9.6053 -0.00000 + 41 10.2160 0.00000 + 42 10.3319 0.00000 + 43 10.4807 0.00000 + 44 10.6478 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5600 2.00000 + 2 1.6808 2.00000 + 3 1.7771 2.00000 + 4 1.9024 2.00000 + 5 2.0014 2.00000 + 6 2.1213 2.00000 + 7 2.2193 2.00000 + 8 2.3447 2.00000 + 9 2.9625 2.00000 + 10 3.1428 2.00000 + 11 3.2441 2.00000 + 12 3.2577 2.00000 + 13 3.3554 2.00000 + 14 3.3971 2.00000 + 15 3.4832 2.00000 + 16 3.4968 2.00000 + 17 3.5595 2.00000 + 18 3.6522 2.00000 + 19 3.6623 2.00000 + 20 3.7033 2.00000 + 21 5.7796 -0.00000 + 22 5.8445 -0.00000 + 23 5.9037 -0.00000 + 24 5.9480 -0.00000 + 25 7.1876 -0.00000 + 26 7.2007 -0.00000 + 27 7.4081 -0.00000 + 28 7.4837 -0.00000 + 29 7.8848 -0.00000 + 30 7.9201 -0.00000 + 31 7.9987 -0.00000 + 32 8.1643 -0.00000 + 33 8.7070 -0.00000 + 34 8.7346 -0.00000 + 35 8.9426 -0.00000 + 36 9.1665 -0.00000 + 37 9.3465 -0.00000 + 38 9.3624 -0.00000 + 39 9.5930 -0.00000 + 40 9.6540 -0.00000 + 41 10.3129 0.00000 + 42 10.4426 0.00000 + 43 10.6111 0.00000 + 44 10.8152 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6605 2.00000 + 2 1.7815 2.00000 + 3 1.8061 2.00000 + 4 1.8767 2.00000 + 5 1.9304 2.00000 + 6 2.0056 2.00000 + 7 2.0263 2.00000 + 8 2.1527 2.00000 + 9 3.0471 2.00000 + 10 3.1546 2.00000 + 11 3.2464 2.00000 + 12 3.3000 2.00000 + 13 3.4566 2.00000 + 14 3.4945 2.00000 + 15 3.5427 2.00000 + 16 3.6173 2.00000 + 17 3.7127 2.00000 + 18 3.7924 2.00002 + 19 3.8197 2.00005 + 20 3.8291 2.00006 + 21 5.4570 -0.00000 + 22 5.5067 -0.00000 + 23 5.5252 -0.00000 + 24 5.5618 -0.00000 + 25 7.2150 -0.00000 + 26 7.2446 -0.00000 + 27 7.4014 -0.00000 + 28 7.5360 -0.00000 + 29 7.8629 -0.00000 + 30 7.9212 -0.00000 + 31 7.9534 -0.00000 + 32 8.1011 -0.00000 + 33 8.6510 -0.00000 + 34 8.9212 -0.00000 + 35 9.0916 -0.00000 + 36 9.1404 -0.00000 + 37 9.3948 -0.00000 + 38 9.4403 -0.00000 + 39 9.5341 -0.00000 + 40 9.6013 -0.00000 + 41 10.4133 0.00000 + 42 10.5815 0.00000 + 43 10.7149 0.00000 + 44 10.9074 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.015 0.044 0.015 + -0.004 -0.015 -0.240 -0.001 0.002 + 0.012 0.044 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.390 -0.037 0.039 -0.111 -0.040 + -0.037 0.001 -0.002 0.003 0.002 + 0.039 -0.002 0.221 -0.007 0.011 + -0.111 0.003 -0.007 0.139 0.002 + -0.040 0.002 0.011 0.002 0.209 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1649: real time 0.1649 + FORLOC: cpu time 0.0097: real time 0.0097 + FORNL : cpu time 13.4937: real time 13.4960 + STRESS: cpu time 4.7333: real time 4.7338 + FORCOR: cpu time 0.0303: real time 0.0313 + FORHAR: cpu time 0.0218: real time 0.0218 + MIXING: cpu time 0.0045: real time 0.0045 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.67106 14.67106 14.67106 + Ewald -143.51572 -148.63497 -130.75129 0.00000 0.00000 -0.00000 + Hartree 1.18525 0.68979 1.05780 -0.00000 -0.00000 0.00000 + E(xc) -108.53675 -108.99097 -107.79893 0.00000 0.00000 -0.00000 + Local 7.68751 2.19147 11.58632 0.00000 0.00000 -0.00000 + n-local 130.61761 131.24036 128.18791 0.01959 0.07473 -0.21146 + augment 7.39946 7.55313 7.08004 -0.00000 -0.00000 0.00000 + Kinetic 215.38851 226.09069 200.77282 0.07371 -1.14307 -0.90435 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 124.89694 124.81057 124.80574 0.00000 0.00000 0.00000 + in kB 700.41079 699.92642 699.89935 0.00000 0.00000 0.00000 + external pressure = 0.08 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.70 + direct lattice vectors reciprocal lattice vectors + 6.895686318 0.000000000 0.000000000 0.145018197 0.000000000 0.000000000 + 0.000000000 8.163138929 0.000000000 0.000000000 0.122501896 0.000000000 + 0.000000000 0.000000000 5.075453655 0.000000000 0.000000000 0.197026723 + + length of vectors + 6.895686318 8.163138929 5.075453655 0.145018197 0.122501896 0.197026723 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.421E-01 0.102E+00 -.255E+00 -.434E+00 0.358E+00 -.116E+01 0.485E+00 -.461E+00 0.141E+01 0.433E-06 -.535E-06 -.103E-05 + 0.421E-01 -.102E+00 -.255E+00 0.434E+00 -.358E+00 -.116E+01 -.485E+00 0.461E+00 0.141E+01 -.433E-06 0.535E-06 -.103E-05 + -.421E-01 -.102E+00 -.255E+00 -.434E+00 -.358E+00 -.116E+01 0.485E+00 0.461E+00 0.141E+01 0.433E-06 0.535E-06 -.103E-05 + 0.421E-01 0.102E+00 -.255E+00 0.434E+00 0.358E+00 -.116E+01 -.485E+00 -.461E+00 0.141E+01 -.433E-06 -.535E-06 -.103E-05 + -.421E-01 0.102E+00 -.255E+00 -.434E+00 0.358E+00 -.116E+01 0.485E+00 -.461E+00 0.141E+01 0.433E-06 -.535E-06 -.103E-05 + 0.421E-01 -.102E+00 -.255E+00 0.434E+00 -.358E+00 -.116E+01 -.485E+00 0.461E+00 0.141E+01 -.433E-06 0.535E-06 -.103E-05 + -.421E-01 -.102E+00 -.255E+00 -.434E+00 -.358E+00 -.116E+01 0.485E+00 0.461E+00 0.141E+01 0.433E-06 0.535E-06 -.103E-05 + 0.421E-01 0.102E+00 -.255E+00 0.434E+00 0.358E+00 -.116E+01 -.485E+00 -.461E+00 0.141E+01 -.433E-06 -.535E-06 -.103E-05 + -.121E-01 -.330E-01 0.129E+00 -.564E-01 -.232E+00 0.717E+00 0.600E-01 0.260E+00 -.848E+00 -.930E-06 0.122E-06 0.465E-06 + 0.121E-01 0.330E-01 0.129E+00 0.564E-01 0.232E+00 0.717E+00 -.600E-01 -.260E+00 -.848E+00 0.930E-06 -.122E-06 0.465E-06 + -.121E-01 0.330E-01 0.129E+00 -.564E-01 0.232E+00 0.717E+00 0.600E-01 -.260E+00 -.848E+00 -.930E-06 -.122E-06 0.465E-06 + 0.121E-01 -.330E-01 0.129E+00 0.564E-01 -.232E+00 0.717E+00 -.600E-01 0.260E+00 -.848E+00 0.930E-06 0.122E-06 0.465E-06 + -.121E-01 -.330E-01 0.129E+00 -.564E-01 -.232E+00 0.717E+00 0.600E-01 0.260E+00 -.848E+00 -.930E-06 0.122E-06 0.465E-06 + 0.121E-01 0.330E-01 0.129E+00 0.564E-01 0.232E+00 0.717E+00 -.600E-01 -.260E+00 -.848E+00 0.930E-06 -.122E-06 0.465E-06 + -.121E-01 0.330E-01 0.129E+00 -.564E-01 0.232E+00 0.717E+00 0.600E-01 -.260E+00 -.848E+00 -.930E-06 -.122E-06 0.465E-06 + 0.121E-01 -.330E-01 0.129E+00 0.564E-01 -.232E+00 0.717E+00 -.600E-01 0.260E+00 -.848E+00 0.930E-06 0.122E-06 0.465E-06 + -.286E+00 -.151E+00 0.216E-01 -.642E+00 -.234E-01 0.769E-01 0.933E+00 0.179E+00 -.967E-01 0.384E-06 -.942E-06 0.857E-06 + 0.286E+00 0.151E+00 0.216E-01 0.642E+00 0.234E-01 0.769E-01 -.933E+00 -.179E+00 -.967E-01 -.384E-06 0.942E-06 0.857E-06 + -.286E+00 0.151E+00 0.216E-01 -.642E+00 0.234E-01 0.769E-01 0.933E+00 -.179E+00 -.967E-01 0.384E-06 0.942E-06 0.857E-06 + 0.286E+00 -.151E+00 0.216E-01 0.642E+00 -.234E-01 0.769E-01 -.933E+00 0.179E+00 -.967E-01 -.384E-06 -.942E-06 0.857E-06 + -.286E+00 -.151E+00 0.216E-01 -.642E+00 -.234E-01 0.769E-01 0.933E+00 0.179E+00 -.967E-01 0.384E-06 -.942E-06 0.857E-06 + 0.286E+00 0.151E+00 0.216E-01 0.642E+00 0.234E-01 0.769E-01 -.933E+00 -.179E+00 -.967E-01 -.384E-06 0.942E-06 0.857E-06 + -.286E+00 0.151E+00 0.216E-01 -.642E+00 0.234E-01 0.769E-01 0.933E+00 -.179E+00 -.967E-01 0.384E-06 0.942E-06 0.857E-06 + 0.286E+00 -.151E+00 0.216E-01 0.642E+00 -.234E-01 0.769E-01 -.933E+00 0.179E+00 -.967E-01 -.384E-06 -.942E-06 0.857E-06 + -.481E-01 -.573E-01 0.137E-01 -.195E+00 0.462E-01 0.364E-01 0.239E+00 -.407E-02 -.505E-01 -.488E-07 -.899E-06 -.957E-08 + 0.481E-01 0.573E-01 0.137E-01 0.195E+00 -.462E-01 0.364E-01 -.239E+00 0.407E-02 -.505E-01 0.488E-07 0.899E-06 -.957E-08 + -.481E-01 0.573E-01 0.137E-01 -.195E+00 -.462E-01 0.364E-01 0.239E+00 0.407E-02 -.505E-01 -.488E-07 0.899E-06 -.957E-08 + 0.481E-01 -.573E-01 0.137E-01 0.195E+00 0.462E-01 0.364E-01 -.239E+00 -.407E-02 -.505E-01 0.487E-07 -.899E-06 -.957E-08 + -.481E-01 -.573E-01 0.137E-01 -.195E+00 0.462E-01 0.364E-01 0.239E+00 -.407E-02 -.505E-01 -.488E-07 -.899E-06 -.961E-08 + 0.481E-01 0.573E-01 0.137E-01 0.195E+00 -.462E-01 0.364E-01 -.239E+00 0.407E-02 -.505E-01 0.489E-07 0.899E-06 -.961E-08 + -.481E-01 0.573E-01 0.137E-01 -.195E+00 -.462E-01 0.364E-01 0.239E+00 0.407E-02 -.505E-01 -.488E-07 0.899E-06 -.961E-08 + 0.481E-01 -.573E-01 0.137E-01 0.195E+00 0.462E-01 0.364E-01 -.239E+00 -.407E-02 -.505E-01 0.487E-07 -.899E-06 -.961E-08 + 0.403E-01 0.151E+00 0.100E+00 0.215E+00 -.135E+00 0.329E+00 -.243E+00 -.170E-02 -.428E+00 0.613E-06 0.960E-06 -.265E-06 + -.403E-01 -.151E+00 0.100E+00 -.215E+00 0.135E+00 0.329E+00 0.243E+00 0.170E-02 -.428E+00 -.613E-06 -.960E-06 -.265E-06 + 0.403E-01 -.151E+00 0.100E+00 0.215E+00 0.135E+00 0.329E+00 -.243E+00 0.170E-02 -.428E+00 0.613E-06 -.960E-06 -.265E-06 + -.403E-01 0.151E+00 0.100E+00 -.215E+00 -.135E+00 0.329E+00 0.243E+00 -.170E-02 -.428E+00 -.613E-06 0.960E-06 -.265E-06 + 0.403E-01 0.151E+00 0.100E+00 0.215E+00 -.135E+00 0.329E+00 -.243E+00 -.170E-02 -.428E+00 0.613E-06 0.960E-06 -.265E-06 + -.403E-01 -.151E+00 0.100E+00 -.215E+00 0.135E+00 0.329E+00 0.243E+00 0.170E-02 -.428E+00 -.613E-06 -.960E-06 -.265E-06 + 0.403E-01 -.151E+00 0.100E+00 0.215E+00 0.135E+00 0.329E+00 -.243E+00 0.170E-02 -.428E+00 0.613E-06 -.960E-06 -.265E-06 + -.403E-01 0.151E+00 0.100E+00 -.215E+00 -.135E+00 0.329E+00 0.243E+00 -.170E-02 -.428E+00 -.613E-06 0.960E-06 -.265E-06 + ----------------------------------------------------------------------------------------------- + -.287E-04 0.240E-04 0.729E-01 -.139E-15 0.416E-14 0.111E-14 -.833E-16 0.187E-15 -.737E-01 0.811E-13 -.568E-12 0.123E-06 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64068 0.95020 -0.00267 0.008641 -0.000956 0.000165 + 6.25500 7.21294 -0.00267 -0.008641 0.000956 0.000165 + 4.08853 3.13137 -0.00267 0.008641 0.000956 0.000165 + 2.80716 5.03177 -0.00267 -0.008641 -0.000956 0.000165 + 0.64068 5.03177 2.53505 0.008641 -0.000956 0.000165 + 6.25500 3.13137 2.53505 -0.008641 0.000956 0.000165 + 4.08853 7.21294 2.53505 0.008641 0.000956 0.000165 + 2.80716 0.95020 2.53505 -0.008641 -0.000956 0.000165 + 5.95448 7.37137 1.59237 -0.008512 -0.005726 -0.002518 + 0.94121 0.79177 1.59237 0.008512 0.005726 -0.002518 + 2.50663 4.87334 1.59237 -0.008512 0.005726 -0.002518 + 4.38905 3.28980 1.59237 0.008512 -0.005726 -0.002518 + 5.95448 3.28980 4.13009 -0.008512 -0.005726 -0.002518 + 0.94121 4.87334 4.13009 0.008512 0.005726 -0.002518 + 2.50663 0.79177 4.13009 -0.008512 0.005726 -0.002518 + 4.38905 7.37137 4.13009 0.008512 -0.005726 -0.002518 + 6.67041 0.95561 3.01315 0.005279 0.004878 0.001777 + 0.22528 7.20753 3.01315 -0.005279 -0.004878 0.001777 + 3.22257 3.12596 3.01315 0.005279 -0.004878 0.001777 + 3.67312 5.03718 3.01315 -0.005279 0.004878 0.001777 + 6.67041 5.03718 0.47542 0.005279 0.004878 0.001777 + 0.22528 3.12596 0.47542 -0.005279 -0.004878 0.001777 + 3.22257 7.20753 0.47542 0.005279 -0.004878 0.001777 + 3.67312 0.95561 0.47542 -0.005279 0.004878 0.001777 + 2.41908 2.18862 0.89684 -0.003445 -0.015130 -0.000403 + 4.47660 5.97452 0.89684 0.003445 0.015130 -0.000403 + 5.86693 1.89295 0.89684 -0.003445 0.015130 -0.000403 + 1.02876 6.27019 0.89684 0.003445 -0.015130 -0.000403 + 2.41908 6.27019 3.43457 -0.003445 -0.015130 -0.000403 + 4.47660 1.89295 3.43457 0.003445 0.015130 -0.000403 + 5.86693 5.97452 3.43457 -0.003445 0.015130 -0.000403 + 1.02876 2.18862 3.43457 0.003445 -0.015130 -0.000403 + 2.00424 7.44263 1.91444 0.012408 0.014672 0.000980 + 4.89145 0.72051 1.91444 -0.012408 -0.014672 0.000980 + 5.45208 4.80208 1.91444 0.012408 -0.014672 0.000980 + 1.44361 3.36106 1.91444 -0.012408 0.014672 0.000980 + 2.00424 3.36106 4.45217 0.012408 0.014672 0.000980 + 4.89145 4.80208 4.45217 -0.012408 -0.014672 0.000980 + 5.45208 0.72051 4.45217 0.012408 -0.014672 0.000980 + 1.44361 7.44263 4.45217 -0.012408 0.014672 0.000980 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.000850 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.91112674 eV + + energy without entropy= -16.92115776 energy(sigma->0) = -16.91447041 + enthalpy is TOTEN = 107.91256110 eV P V= 124.82368784 + + d Force = 0.1553389E-03[-0.575E-04, 0.368E-03] d Energy = 0.2601303E-03-0.105E-03 + d Force = 0.1535926E-01[ 0.151E-01, 0.156E-01] d Ewald = 0.1059751E-01 0.476E-02 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0294: real time 0.0314 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0067: real time 0.0067 + FEWALD executed in parallel + FEWALD: cpu time 0.0017: real time 0.0027 + GENKIN: cpu time 0.0254: real time 0.0254 + ORTHCH: cpu time 0.5378: real time 0.5379 + LOOP+: cpu time 47.2192: real time 47.2303 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 0.0216: real time 0.0216 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 4.9347: real time 4.9352 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1648: real time 0.1648 + MIXING: cpu time 0.0029: real time 0.0029 + -------------------------------------------- + LOOP: cpu time 5.1393: real time 5.2498 + + eigenvalue-minimisations : 5728 + total energy-change (2. order) :-0.1314324E-01 (-0.5485479E-03) + number of electron 40.0000003 magnetization + augmentation part 0.9507348 magnetization + + free energy = -0.169242699810E+02 energy without entropy= -0.169341936922E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 0.0210: real time 0.0210 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 5.6062: real time 5.6069 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1681: real time 0.1681 + MIXING: cpu time 0.0044: real time 0.0044 + -------------------------------------------- + LOOP: cpu time 5.8141: real time 5.8147 + + eigenvalue-minimisations : 6784 + total energy-change (2. order) : 0.8021227E-06 (-0.9779296E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9507641 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8376 + 1.8376 + + free energy = -0.169242691788E+02 energy without entropy= -0.169341898293E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 0.0210: real time 0.0211 + SETDIJ: cpu time 0.0057: real time 0.0057 + EDDAV: cpu time 5.4112: real time 5.4118 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1653: real time 0.1653 + MIXING: cpu time 0.0046: real time 0.0046 + -------------------------------------------- + LOOP: cpu time 5.6161: real time 5.6168 + + eigenvalue-minimisations : 6432 + total energy-change (2. order) : 0.1384242E-05 (-0.4864102E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9507687 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8648 + 1.3340 2.3957 + + free energy = -0.169242677946E+02 energy without entropy= -0.169341863801E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 0.0216: real time 0.0216 + SETDIJ: cpu time 0.0061: real time 0.0061 + EDDAV: cpu time 3.7125: real time 3.7129 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1727: real time 0.1727 + MIXING: cpu time 0.0040: real time 0.0040 + -------------------------------------------- + LOOP: cpu time 3.9254: real time 3.9276 + + eigenvalue-minimisations : 3396 + total energy-change (2. order) :-0.7619576E-07 (-0.5611906E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9507687 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7921 + 1.0016 1.6441 2.7305 + + free energy = -0.169242678708E+02 energy without entropy= -0.169341863302E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 0.0216: real time 0.0216 + SETDIJ: cpu time 0.0058: real time 0.0058 + EDDAV: cpu time 3.5017: real time 3.5021 + DOS: cpu time 0.0069: real time 0.0069 + CHARGE: cpu time 0.2066: real time 0.2066 + MIXING: cpu time 0.0034: real time 0.0034 + -------------------------------------------- + LOOP: cpu time 3.7468: real time 3.7472 + + eigenvalue-minimisations : 3044 + total energy-change (2. order) :-0.5242896E-08 (-0.7713441E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9507692 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7927 + 2.8336 0.9760 1.4543 1.9068 + + free energy = -0.169242678760E+02 energy without entropy= -0.169341863772E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 0.0197: real time 0.0197 + SETDIJ: cpu time 0.0047: real time 0.0047 + EDDAV: cpu time 3.3904: real time 3.3908 + DOS: cpu time 0.0070: real time 0.0070 + -------------------------------------------- + LOOP: cpu time 3.4226: real time 3.4230 + + eigenvalue-minimisations : 2884 + total energy-change (2. order) :-0.7405220E-08 (-0.8220468E-09) + number of electron 40.0000003 magnetization + augmentation part 0.9507692 magnetization + + free energy = -0.169242678835E+02 energy without entropy= -0.169341863471E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9679 2 -25.9679 3 -25.9679 4 -25.9679 5 -25.9679 + 6 -25.9679 7 -25.9679 8 -25.9679 9 -25.8912 10 -25.8912 + 11 -25.8912 12 -25.8912 13 -25.8912 14 -25.8912 15 -25.8912 + 16 -25.8912 17 -25.9191 18 -25.9191 19 -25.9191 20 -25.9191 + 21 -25.9191 22 -25.9191 23 -25.9191 24 -25.9191 25 -25.8349 + 26 -25.8349 27 -25.8349 28 -25.8349 29 -25.8349 30 -25.8349 + 31 -25.8349 32 -25.8349 33 -26.0251 34 -26.0251 35 -26.0251 + 36 -26.0251 37 -26.0251 38 -26.0251 39 -26.0251 40 -26.0251 + + + + E-fermi : 4.4692 XC(G=0): -9.5544 alpha+bet :-20.5606 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9606 2.00000 + 2 1.5062 2.00000 + 3 1.7433 2.00000 + 4 1.9948 2.00000 + 5 2.0328 2.00000 + 6 2.5117 2.00000 + 7 2.6168 2.00000 + 8 2.7665 2.00000 + 9 2.8661 2.00000 + 10 2.9220 2.00000 + 11 3.2211 2.00000 + 12 3.2713 2.00000 + 13 3.3985 2.00000 + 14 3.4290 2.00000 + 15 3.5232 2.00000 + 16 3.6262 2.00000 + 17 3.8447 2.00009 + 18 4.1853 2.06207 + 19 4.2137 2.07011 + 20 4.3913 1.60744 + 21 5.5199 -0.00000 + 22 5.7161 -0.00000 + 23 5.9219 -0.00000 + 24 6.1021 -0.00000 + 25 6.2195 -0.00000 + 26 6.2804 -0.00000 + 27 6.5432 -0.00000 + 28 7.1228 -0.00000 + 29 7.1310 -0.00000 + 30 7.2531 -0.00000 + 31 7.3739 -0.00000 + 32 7.4058 -0.00000 + 33 8.0615 -0.00000 + 34 8.1313 -0.00000 + 35 8.8177 -0.00000 + 36 8.9498 -0.00000 + 37 9.2359 -0.00000 + 38 9.4159 -0.00000 + 39 9.7971 -0.00000 + 40 9.8332 -0.00000 + 41 10.0879 0.00000 + 42 10.2984 0.00000 + 43 10.5519 0.00000 + 44 10.8051 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9789 2.00000 + 2 1.5263 2.00000 + 3 1.7071 2.00000 + 4 1.7640 2.00000 + 5 2.2721 2.00000 + 6 2.3842 2.00000 + 7 2.5243 2.00000 + 8 2.8644 2.00000 + 9 2.9617 2.00000 + 10 3.1431 2.00000 + 11 3.2487 2.00000 + 12 3.2849 2.00000 + 13 3.3724 2.00000 + 14 3.4348 2.00000 + 15 3.5527 2.00000 + 16 3.6297 2.00000 + 17 3.7792 2.00001 + 18 4.0625 2.01432 + 19 4.2332 2.07027 + 20 4.4356 1.28047 + 21 5.4152 -0.00000 + 22 5.5695 -0.00000 + 23 5.8874 -0.00000 + 24 5.9978 -0.00000 + 25 6.1369 -0.00000 + 26 6.5330 -0.00000 + 27 6.6146 -0.00000 + 28 6.8168 -0.00000 + 29 7.1051 -0.00000 + 30 7.2419 -0.00000 + 31 7.2956 -0.00000 + 32 7.3912 -0.00000 + 33 8.3161 -0.00000 + 34 8.3693 -0.00000 + 35 8.8306 -0.00000 + 36 8.8783 -0.00000 + 37 9.2564 -0.00000 + 38 9.4165 -0.00000 + 39 9.7363 -0.00000 + 40 9.9146 -0.00000 + 41 10.0604 0.00000 + 42 10.1570 0.00000 + 43 10.8438 0.00000 + 44 10.9309 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0348 2.00000 + 2 1.4618 2.00000 + 3 1.5870 2.00000 + 4 1.8265 2.00000 + 5 2.0320 2.00000 + 6 2.2813 2.00000 + 7 2.8156 2.00000 + 8 2.9647 2.00000 + 9 3.2346 2.00000 + 10 3.2660 2.00000 + 11 3.3206 2.00000 + 12 3.3347 2.00000 + 13 3.4289 2.00000 + 14 3.5252 2.00000 + 15 3.5783 2.00000 + 16 3.6261 2.00000 + 17 3.7301 2.00000 + 18 3.8496 2.00011 + 19 4.1546 2.04861 + 20 4.3419 1.87173 + 21 5.3211 -0.00000 + 22 5.4238 -0.00000 + 23 5.7789 -0.00000 + 24 5.8356 -0.00000 + 25 5.8863 -0.00000 + 26 6.2252 -0.00000 + 27 6.7623 -0.00000 + 28 7.0274 -0.00000 + 29 7.1107 -0.00000 + 30 7.2206 -0.00000 + 31 7.2642 -0.00000 + 32 7.5419 -0.00000 + 33 8.4638 -0.00000 + 34 8.4914 -0.00000 + 35 8.7475 -0.00000 + 36 8.8986 -0.00000 + 37 9.2052 -0.00000 + 38 9.3252 -0.00000 + 39 9.7939 -0.00000 + 40 9.8725 -0.00000 + 41 10.1442 0.00000 + 42 10.3435 0.00000 + 43 11.0122 0.00000 + 44 11.1449 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1310 2.00000 + 2 1.2716 2.00000 + 3 1.6898 2.00000 + 4 1.8361 2.00000 + 5 1.9346 2.00000 + 6 2.0843 2.00000 + 7 3.0506 2.00000 + 8 3.1551 2.00000 + 9 3.2919 2.00000 + 10 3.3894 2.00000 + 11 3.4319 2.00000 + 12 3.4505 2.00000 + 13 3.5036 2.00000 + 14 3.5160 2.00000 + 15 3.6418 2.00000 + 16 3.6482 2.00000 + 17 3.7103 2.00000 + 18 3.7663 2.00001 + 19 3.9160 2.00065 + 20 4.1147 2.03100 + 21 5.3545 -0.00000 + 22 5.4771 -0.00000 + 23 5.6284 -0.00000 + 24 5.6529 -0.00000 + 25 5.7618 -0.00000 + 26 5.7667 -0.00000 + 27 6.9615 -0.00000 + 28 7.1209 -0.00000 + 29 7.1516 -0.00000 + 30 7.1617 -0.00000 + 31 7.6152 -0.00000 + 32 7.8542 -0.00000 + 33 8.1296 -0.00000 + 34 8.2061 -0.00000 + 35 8.8777 -0.00000 + 36 8.9432 -0.00000 + 37 9.0992 -0.00000 + 38 9.1795 -0.00000 + 39 9.8021 -0.00000 + 40 9.8751 -0.00000 + 41 10.4360 0.00000 + 42 10.5315 0.00000 + 43 11.2342 0.00000 + 44 11.3480 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9942 2.00000 + 2 1.3155 2.00000 + 3 2.0239 2.00000 + 4 2.0265 2.00000 + 5 2.0698 2.00000 + 6 2.3342 2.00000 + 7 2.4260 2.00000 + 8 2.9387 2.00000 + 9 3.0172 2.00000 + 10 3.0510 2.00000 + 11 3.1372 2.00000 + 12 3.2023 2.00000 + 13 3.4038 2.00000 + 14 3.4947 2.00000 + 15 3.5134 2.00000 + 16 3.6965 2.00000 + 17 3.7556 2.00001 + 18 4.0138 2.00591 + 19 4.0376 2.00927 + 20 4.2338 2.07018 + 21 5.6659 -0.00000 + 22 5.7963 -0.00000 + 23 5.9728 -0.00000 + 24 6.2029 -0.00000 + 25 6.3199 -0.00000 + 26 6.4227 -0.00000 + 27 6.5118 -0.00000 + 28 6.7789 -0.00000 + 29 7.2826 -0.00000 + 30 7.3169 -0.00000 + 31 7.3769 -0.00000 + 32 7.6360 -0.00000 + 33 8.0138 -0.00000 + 34 8.1555 -0.00000 + 35 8.8925 -0.00000 + 36 9.0385 -0.00000 + 37 9.0720 -0.00000 + 38 9.2281 -0.00000 + 39 9.5172 -0.00000 + 40 9.8529 -0.00000 + 41 9.9051 -0.00000 + 42 10.3796 0.00000 + 43 10.4884 0.00000 + 44 10.9130 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0126 2.00000 + 2 1.3349 2.00000 + 3 1.7422 2.00000 + 4 2.0365 2.00000 + 5 2.0889 2.00000 + 6 2.4158 2.00000 + 7 2.7243 2.00000 + 8 2.8115 2.00000 + 9 2.9722 2.00000 + 10 3.0449 2.00000 + 11 3.2188 2.00000 + 12 3.3488 2.00000 + 13 3.3982 2.00000 + 14 3.5037 2.00000 + 15 3.5353 2.00000 + 16 3.7000 2.00000 + 17 3.7067 2.00000 + 18 3.8317 2.00006 + 19 4.1152 2.03120 + 20 4.2767 2.04164 + 21 5.5488 -0.00000 + 22 5.7252 -0.00000 + 23 5.9371 -0.00000 + 24 6.0526 -0.00000 + 25 6.2381 -0.00000 + 26 6.4814 -0.00000 + 27 6.6326 -0.00000 + 28 6.7166 -0.00000 + 29 7.1583 -0.00000 + 30 7.3085 -0.00000 + 31 7.3291 -0.00000 + 32 7.6114 -0.00000 + 33 8.2519 -0.00000 + 34 8.3346 -0.00000 + 35 8.8896 -0.00000 + 36 8.9981 -0.00000 + 37 9.0204 -0.00000 + 38 9.2294 -0.00000 + 39 9.6082 -0.00000 + 40 9.8098 -0.00000 + 41 9.9186 -0.00000 + 42 10.4399 0.00000 + 43 10.5069 0.00000 + 44 11.0278 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0689 2.00000 + 2 1.3940 2.00000 + 3 1.4970 2.00000 + 4 1.8322 2.00000 + 5 2.1152 2.00000 + 6 2.5746 2.00000 + 7 2.8375 2.00000 + 8 2.9906 2.00000 + 9 3.1293 2.00000 + 10 3.1321 2.00000 + 11 3.2664 2.00000 + 12 3.3049 2.00000 + 13 3.4749 2.00000 + 14 3.5352 2.00000 + 15 3.6150 2.00000 + 16 3.6207 2.00000 + 17 3.6790 2.00000 + 18 3.7277 2.00000 + 19 4.0525 2.01208 + 20 4.2304 2.07061 + 21 5.3914 -0.00000 + 22 5.6580 -0.00000 + 23 5.7578 -0.00000 + 24 5.8272 -0.00000 + 25 6.1140 -0.00000 + 26 6.1880 -0.00000 + 27 6.6091 -0.00000 + 28 7.0677 -0.00000 + 29 7.1117 -0.00000 + 30 7.3582 -0.00000 + 31 7.4864 -0.00000 + 32 7.5512 -0.00000 + 33 8.3413 -0.00000 + 34 8.5021 -0.00000 + 35 8.7858 -0.00000 + 36 8.8801 -0.00000 + 37 9.0409 -0.00000 + 38 9.1592 -0.00000 + 39 9.6301 -0.00000 + 40 9.7948 -0.00000 + 41 10.1279 0.00000 + 42 10.5578 0.00000 + 43 10.7080 0.00000 + 44 11.2229 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1655 2.00000 + 2 1.3065 2.00000 + 3 1.4946 2.00000 + 4 1.6397 2.00000 + 5 2.2240 2.00000 + 6 2.3775 2.00000 + 7 3.0869 2.00000 + 8 3.1954 2.00000 + 9 3.2151 2.00000 + 10 3.3117 2.00000 + 11 3.3718 2.00000 + 12 3.4118 2.00000 + 13 3.4328 2.00000 + 14 3.4433 2.00000 + 15 3.5524 2.00000 + 16 3.6265 2.00000 + 17 3.7471 2.00000 + 18 3.7671 2.00001 + 19 3.8480 2.00010 + 20 4.0091 2.00539 + 21 5.4145 -0.00000 + 22 5.5999 -0.00000 + 23 5.6075 -0.00000 + 24 5.7784 -0.00000 + 25 5.7926 -0.00000 + 26 5.9735 -0.00000 + 27 6.7800 -0.00000 + 28 6.9527 -0.00000 + 29 7.3329 -0.00000 + 30 7.4410 -0.00000 + 31 7.7203 -0.00000 + 32 7.7952 -0.00000 + 33 8.1392 -0.00000 + 34 8.1797 -0.00000 + 35 8.8322 -0.00000 + 36 8.8851 -0.00000 + 37 8.9636 -0.00000 + 38 9.0526 -0.00000 + 39 9.6122 -0.00000 + 40 9.7762 -0.00000 + 41 10.4084 0.00000 + 42 10.5832 0.00000 + 43 11.1480 0.00000 + 44 11.3621 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0627 2.00000 + 2 1.1687 2.00000 + 3 2.0918 2.00000 + 4 2.1436 2.00000 + 5 2.1934 2.00000 + 6 2.2405 2.00000 + 7 2.3775 2.00000 + 8 2.7026 2.00000 + 9 3.0144 2.00000 + 10 3.1064 2.00000 + 11 3.3405 2.00000 + 12 3.4365 2.00000 + 13 3.4374 2.00000 + 14 3.4800 2.00000 + 15 3.5988 2.00000 + 16 3.6015 2.00000 + 17 3.7428 2.00000 + 18 3.7834 2.00001 + 19 3.8327 2.00006 + 20 4.0224 2.00699 + 21 5.9160 -0.00000 + 22 5.9292 -0.00000 + 23 6.0751 -0.00000 + 24 6.1456 -0.00000 + 25 6.1977 -0.00000 + 26 6.4227 -0.00000 + 27 6.6369 -0.00000 + 28 6.9200 -0.00000 + 29 6.9880 -0.00000 + 30 7.2427 -0.00000 + 31 7.5950 -0.00000 + 32 7.8519 -0.00000 + 33 8.1781 -0.00000 + 34 8.3698 -0.00000 + 35 8.5117 -0.00000 + 36 9.0174 -0.00000 + 37 9.0846 -0.00000 + 38 9.1545 -0.00000 + 39 9.3040 -0.00000 + 40 9.5882 -0.00000 + 41 9.9278 -0.00000 + 42 10.0407 0.00000 + 43 10.7416 0.00000 + 44 10.9160 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0814 2.00000 + 2 1.1877 2.00000 + 3 1.8136 2.00000 + 4 1.9235 2.00000 + 5 2.3676 2.00000 + 6 2.4762 2.00000 + 7 2.5979 2.00000 + 8 2.7328 2.00000 + 9 3.0336 2.00000 + 10 3.1248 2.00000 + 11 3.1427 2.00000 + 12 3.4392 2.00000 + 13 3.4867 2.00000 + 14 3.4938 2.00000 + 15 3.5008 2.00000 + 16 3.6159 2.00000 + 17 3.6894 2.00000 + 18 3.8409 2.00008 + 19 3.9171 2.00067 + 20 4.0490 2.01137 + 21 5.7435 -0.00000 + 22 5.9146 -0.00000 + 23 5.9481 -0.00000 + 24 6.1165 -0.00000 + 25 6.2329 -0.00000 + 26 6.3632 -0.00000 + 27 6.5669 -0.00000 + 28 6.9099 -0.00000 + 29 6.9939 -0.00000 + 30 7.2036 -0.00000 + 31 7.6245 -0.00000 + 32 7.9834 -0.00000 + 33 8.1781 -0.00000 + 34 8.4817 -0.00000 + 35 8.5594 -0.00000 + 36 8.9920 -0.00000 + 37 9.0219 -0.00000 + 38 9.2563 -0.00000 + 39 9.2675 -0.00000 + 40 9.5522 -0.00000 + 41 9.9887 0.00000 + 42 10.1089 0.00000 + 43 10.7580 0.00000 + 44 10.9650 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1382 2.00000 + 2 1.2455 2.00000 + 3 1.5688 2.00000 + 4 1.6796 2.00000 + 5 2.4404 2.00000 + 6 2.7707 2.00000 + 7 2.9104 2.00000 + 8 2.9271 2.00000 + 9 2.9782 2.00000 + 10 3.1068 2.00000 + 11 3.1790 2.00000 + 12 3.2730 2.00000 + 13 3.3754 2.00000 + 14 3.4609 2.00000 + 15 3.5322 2.00000 + 16 3.6043 2.00000 + 17 3.7438 2.00000 + 18 3.8962 2.00039 + 19 3.8969 2.00040 + 20 4.0732 2.01703 + 21 5.5188 -0.00000 + 22 5.6446 -0.00000 + 23 5.8821 -0.00000 + 24 6.0495 -0.00000 + 25 6.0671 -0.00000 + 26 6.3475 -0.00000 + 27 6.4309 -0.00000 + 28 6.7719 -0.00000 + 29 7.2564 -0.00000 + 30 7.3847 -0.00000 + 31 7.7225 -0.00000 + 32 8.0573 -0.00000 + 33 8.0930 -0.00000 + 34 8.4825 -0.00000 + 35 8.5847 -0.00000 + 36 8.8653 -0.00000 + 37 8.9596 -0.00000 + 38 9.2816 -0.00000 + 39 9.2923 -0.00000 + 40 9.5594 -0.00000 + 41 10.2095 0.00000 + 42 10.3946 0.00000 + 43 10.7569 0.00000 + 44 11.0151 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2357 2.00000 + 2 1.3443 2.00000 + 3 1.3777 2.00000 + 4 1.4877 2.00000 + 5 2.5553 2.00000 + 6 2.7131 2.00000 + 7 2.9066 2.00000 + 8 3.0714 2.00000 + 9 3.1536 2.00000 + 10 3.2384 2.00000 + 11 3.2686 2.00000 + 12 3.3582 2.00000 + 13 3.3787 2.00000 + 14 3.4113 2.00000 + 15 3.6076 2.00000 + 16 3.6803 2.00000 + 17 3.6820 2.00000 + 18 3.7703 2.00001 + 19 3.8217 2.00005 + 20 3.8935 2.00036 + 21 5.5009 -0.00000 + 22 5.5599 -0.00000 + 23 5.6840 -0.00000 + 24 5.7552 -0.00000 + 25 6.1304 -0.00000 + 26 6.2818 -0.00000 + 27 6.4789 -0.00000 + 28 6.6341 -0.00000 + 29 7.5608 -0.00000 + 30 7.6965 -0.00000 + 31 7.8000 -0.00000 + 32 8.0107 -0.00000 + 33 8.0201 -0.00000 + 34 8.3182 -0.00000 + 35 8.4305 -0.00000 + 36 8.6251 -0.00000 + 37 9.0302 -0.00000 + 38 9.2600 -0.00000 + 39 9.3220 -0.00000 + 40 9.5403 -0.00000 + 41 10.5004 0.00000 + 42 10.6850 0.00000 + 43 10.7577 0.00000 + 44 10.9587 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 0.9998 2.00000 + 2 1.5534 2.00000 + 3 1.7935 2.00000 + 4 2.0356 2.00000 + 5 2.0756 2.00000 + 6 2.4861 2.00000 + 7 2.5776 2.00000 + 8 2.6604 2.00000 + 9 2.8065 2.00000 + 10 2.9029 2.00000 + 11 3.0751 2.00000 + 12 3.2918 2.00000 + 13 3.3071 2.00000 + 14 3.3428 2.00000 + 15 3.4494 2.00000 + 16 3.7630 2.00001 + 17 3.8623 2.00015 + 18 4.0046 2.00492 + 19 4.0459 2.01076 + 20 4.1729 2.05691 + 21 5.7488 -0.00000 + 22 5.9426 -0.00000 + 23 6.1843 -0.00000 + 24 6.4602 -0.00000 + 25 6.5001 -0.00000 + 26 6.5629 -0.00000 + 27 6.5988 -0.00000 + 28 6.7506 -0.00000 + 29 7.1558 -0.00000 + 30 7.2664 -0.00000 + 31 7.3681 -0.00000 + 32 7.3796 -0.00000 + 33 8.1404 -0.00000 + 34 8.4590 -0.00000 + 35 8.9330 -0.00000 + 36 9.0449 -0.00000 + 37 9.0494 -0.00000 + 38 9.5751 -0.00000 + 39 9.7957 -0.00000 + 40 9.8066 -0.00000 + 41 9.9963 0.00000 + 42 10.0100 0.00000 + 43 10.4051 0.00000 + 44 10.4529 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0182 2.00000 + 2 1.5734 2.00000 + 3 1.7488 2.00000 + 4 1.8141 2.00000 + 5 2.3152 2.00000 + 6 2.4251 2.00000 + 7 2.5192 2.00000 + 8 2.5686 2.00000 + 9 2.9455 2.00000 + 10 3.0913 2.00000 + 11 3.1411 2.00000 + 12 3.1919 2.00000 + 13 3.3107 2.00000 + 14 3.3769 2.00000 + 15 3.5879 2.00000 + 16 3.6577 2.00000 + 17 3.8749 2.00022 + 18 3.9620 2.00197 + 19 4.0858 2.02069 + 20 4.1560 2.04927 + 21 5.6919 -0.00000 + 22 5.7957 -0.00000 + 23 6.1197 -0.00000 + 24 6.3374 -0.00000 + 25 6.3862 -0.00000 + 26 6.4760 -0.00000 + 27 6.7143 -0.00000 + 28 6.7649 -0.00000 + 29 7.1558 -0.00000 + 30 7.2270 -0.00000 + 31 7.2694 -0.00000 + 32 7.4432 -0.00000 + 33 8.2989 -0.00000 + 34 8.5309 -0.00000 + 35 8.9151 -0.00000 + 36 9.0177 -0.00000 + 37 9.0640 -0.00000 + 38 9.5885 -0.00000 + 39 9.8035 -0.00000 + 40 9.8833 -0.00000 + 41 9.8957 -0.00000 + 42 10.0940 0.00000 + 43 10.6391 0.00000 + 44 10.7136 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0744 2.00000 + 2 1.5030 2.00000 + 3 1.6340 2.00000 + 4 1.8760 2.00000 + 5 2.0768 2.00000 + 6 2.3247 2.00000 + 7 2.5803 2.00000 + 8 2.8523 2.00000 + 9 2.9703 2.00000 + 10 3.1397 2.00000 + 11 3.2824 2.00000 + 12 3.3617 2.00000 + 13 3.4523 2.00000 + 14 3.4732 2.00000 + 15 3.5344 2.00000 + 16 3.7435 2.00000 + 17 3.8114 2.00003 + 18 3.9056 2.00050 + 19 4.0071 2.00518 + 20 4.1144 2.03086 + 21 5.4512 -0.00000 + 22 5.7643 -0.00000 + 23 5.9797 -0.00000 + 24 5.9928 -0.00000 + 25 6.1190 -0.00000 + 26 6.2924 -0.00000 + 27 6.7034 -0.00000 + 28 7.0355 -0.00000 + 29 7.0453 -0.00000 + 30 7.1653 -0.00000 + 31 7.3107 -0.00000 + 32 7.6846 -0.00000 + 33 8.3452 -0.00000 + 34 8.4225 -0.00000 + 35 8.9416 -0.00000 + 36 9.0463 -0.00000 + 37 9.0847 -0.00000 + 38 9.4826 -0.00000 + 39 9.8815 -0.00000 + 40 10.0842 0.00000 + 41 10.1050 0.00000 + 42 10.3028 0.00000 + 43 10.9758 0.00000 + 44 11.1162 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1711 2.00000 + 2 1.3122 2.00000 + 3 1.7364 2.00000 + 4 1.8824 2.00000 + 5 1.9822 2.00000 + 6 2.1304 2.00000 + 7 2.6757 2.00000 + 8 2.8074 2.00000 + 9 3.2083 2.00000 + 10 3.3059 2.00000 + 11 3.3401 2.00000 + 12 3.5059 2.00000 + 13 3.5529 2.00000 + 14 3.6332 2.00000 + 15 3.6352 2.00000 + 16 3.6496 2.00000 + 17 3.7925 2.00002 + 18 3.8632 2.00016 + 19 3.8720 2.00020 + 20 3.9229 2.00077 + 21 5.4355 -0.00000 + 22 5.6579 -0.00000 + 23 5.7235 -0.00000 + 24 5.7856 -0.00000 + 25 5.9832 -0.00000 + 26 6.1830 -0.00000 + 27 6.7357 -0.00000 + 28 6.8691 -0.00000 + 29 7.1486 -0.00000 + 30 7.1980 -0.00000 + 31 7.6116 -0.00000 + 32 7.9453 -0.00000 + 33 8.0281 -0.00000 + 34 8.1846 -0.00000 + 35 9.0741 -0.00000 + 36 9.1345 -0.00000 + 37 9.1799 -0.00000 + 38 9.3402 -0.00000 + 39 9.9032 -0.00000 + 40 10.0800 0.00000 + 41 10.3532 0.00000 + 42 10.4529 0.00000 + 43 11.2258 0.00000 + 44 11.3305 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0339 2.00000 + 2 1.3601 2.00000 + 3 2.0678 2.00000 + 4 2.0776 2.00000 + 5 2.1130 2.00000 + 6 2.3739 2.00000 + 7 2.4699 2.00000 + 8 2.5524 2.00000 + 9 2.9072 2.00000 + 10 3.0622 2.00000 + 11 3.0836 2.00000 + 12 3.1636 2.00000 + 13 3.3557 2.00000 + 14 3.5080 2.00000 + 15 3.5142 2.00000 + 16 3.6700 2.00000 + 17 3.8507 2.00011 + 18 3.8788 2.00024 + 19 3.9375 2.00111 + 20 4.0449 2.01059 + 21 5.8324 -0.00000 + 22 6.0152 -0.00000 + 23 6.0443 -0.00000 + 24 6.3291 -0.00000 + 25 6.4805 -0.00000 + 26 6.5994 -0.00000 + 27 6.6752 -0.00000 + 28 6.7927 -0.00000 + 29 7.3479 -0.00000 + 30 7.3892 -0.00000 + 31 7.4732 -0.00000 + 32 7.6356 -0.00000 + 33 8.1691 -0.00000 + 34 8.3019 -0.00000 + 35 8.7374 -0.00000 + 36 8.9279 -0.00000 + 37 9.2075 -0.00000 + 38 9.4270 -0.00000 + 39 9.6078 -0.00000 + 40 9.7078 -0.00000 + 41 9.8129 -0.00000 + 42 10.3252 0.00000 + 43 10.3665 0.00000 + 44 10.9192 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0525 2.00000 + 2 1.3796 2.00000 + 3 1.7843 2.00000 + 4 2.0886 2.00000 + 5 2.1338 2.00000 + 6 2.4573 2.00000 + 7 2.5627 2.00000 + 8 2.7781 2.00000 + 9 2.8462 2.00000 + 10 2.9262 2.00000 + 11 3.1105 2.00000 + 12 3.2032 2.00000 + 13 3.3996 2.00000 + 14 3.4994 2.00000 + 15 3.5911 2.00000 + 16 3.6462 2.00000 + 17 3.7965 2.00002 + 18 3.8668 2.00017 + 19 3.9759 2.00269 + 20 4.0991 2.02513 + 21 5.7269 -0.00000 + 22 5.9543 -0.00000 + 23 5.9692 -0.00000 + 24 6.2216 -0.00000 + 25 6.3008 -0.00000 + 26 6.5866 -0.00000 + 27 6.6459 -0.00000 + 28 6.9079 -0.00000 + 29 7.2308 -0.00000 + 30 7.3781 -0.00000 + 31 7.4987 -0.00000 + 32 7.6250 -0.00000 + 33 8.3461 -0.00000 + 34 8.3536 -0.00000 + 35 8.8283 -0.00000 + 36 8.9030 -0.00000 + 37 9.1878 -0.00000 + 38 9.3948 -0.00000 + 39 9.6093 -0.00000 + 40 9.7291 -0.00000 + 41 9.8890 -0.00000 + 42 10.3960 0.00000 + 43 10.5313 0.00000 + 44 10.9496 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1090 2.00000 + 2 1.4387 2.00000 + 3 1.5387 2.00000 + 4 1.8769 2.00000 + 5 2.1666 2.00000 + 6 2.6092 2.00000 + 7 2.6286 2.00000 + 8 2.8753 2.00000 + 9 2.9832 2.00000 + 10 3.0186 2.00000 + 11 3.1531 2.00000 + 12 3.1901 2.00000 + 13 3.3646 2.00000 + 14 3.6061 2.00000 + 15 3.6173 2.00000 + 16 3.6474 2.00000 + 17 3.7928 2.00002 + 18 3.9077 2.00053 + 19 3.9470 2.00139 + 20 4.1081 2.02841 + 21 5.4733 -0.00000 + 22 5.8332 -0.00000 + 23 5.9039 -0.00000 + 24 5.9605 -0.00000 + 25 6.0224 -0.00000 + 26 6.5234 -0.00000 + 27 6.5296 -0.00000 + 28 7.0113 -0.00000 + 29 7.1673 -0.00000 + 30 7.4107 -0.00000 + 31 7.6243 -0.00000 + 32 7.6742 -0.00000 + 33 8.3204 -0.00000 + 34 8.4376 -0.00000 + 35 8.8548 -0.00000 + 36 8.8998 -0.00000 + 37 9.2588 -0.00000 + 38 9.2872 -0.00000 + 39 9.6408 -0.00000 + 40 9.9843 0.00000 + 41 10.0758 0.00000 + 42 10.5156 0.00000 + 43 10.7632 0.00000 + 44 11.1239 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2060 2.00000 + 2 1.3476 2.00000 + 3 1.5393 2.00000 + 4 1.6844 2.00000 + 5 2.2731 2.00000 + 6 2.4228 2.00000 + 7 2.7196 2.00000 + 8 2.8550 2.00000 + 9 3.0702 2.00000 + 10 3.1927 2.00000 + 11 3.2795 2.00000 + 12 3.3875 2.00000 + 13 3.4546 2.00000 + 14 3.4993 2.00000 + 15 3.6809 2.00000 + 16 3.7088 2.00000 + 17 3.7879 2.00002 + 18 3.8827 2.00027 + 19 3.9266 2.00085 + 20 3.9301 2.00092 + 21 5.4061 -0.00000 + 22 5.6786 -0.00000 + 23 5.6814 -0.00000 + 24 5.7612 -0.00000 + 25 6.0477 -0.00000 + 26 6.3745 -0.00000 + 27 6.5930 -0.00000 + 28 6.7757 -0.00000 + 29 7.3025 -0.00000 + 30 7.4610 -0.00000 + 31 7.8077 -0.00000 + 32 7.8946 -0.00000 + 33 8.1575 -0.00000 + 34 8.1724 -0.00000 + 35 8.9533 -0.00000 + 36 9.0170 -0.00000 + 37 9.1643 -0.00000 + 38 9.3256 -0.00000 + 39 9.6170 -0.00000 + 40 10.0514 0.00000 + 41 10.3160 0.00000 + 42 10.5020 0.00000 + 43 11.1155 0.00000 + 44 11.2424 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1036 2.00000 + 2 1.2113 2.00000 + 3 2.1337 2.00000 + 4 2.1877 2.00000 + 5 2.2356 2.00000 + 6 2.2882 2.00000 + 7 2.4310 2.00000 + 8 2.6320 2.00000 + 9 2.7528 2.00000 + 10 2.7636 2.00000 + 11 3.3230 2.00000 + 12 3.4369 2.00000 + 13 3.4667 2.00000 + 14 3.4997 2.00000 + 15 3.6383 2.00000 + 16 3.6443 2.00000 + 17 3.6827 2.00000 + 18 3.7723 2.00001 + 19 3.8123 2.00003 + 20 3.8382 2.00008 + 21 5.9365 -0.00000 + 22 6.0732 -0.00000 + 23 6.0834 -0.00000 + 24 6.1927 -0.00000 + 25 6.3460 -0.00000 + 26 6.3466 -0.00000 + 27 6.9612 -0.00000 + 28 7.1341 -0.00000 + 29 7.2210 -0.00000 + 30 7.3991 -0.00000 + 31 7.7195 -0.00000 + 32 8.0388 -0.00000 + 33 8.0960 -0.00000 + 34 8.3643 -0.00000 + 35 8.4342 -0.00000 + 36 9.0113 -0.00000 + 37 9.1284 -0.00000 + 38 9.1945 -0.00000 + 39 9.3982 -0.00000 + 40 9.5534 -0.00000 + 41 9.9144 -0.00000 + 42 10.0528 0.00000 + 43 10.7233 0.00000 + 44 10.9161 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1224 2.00000 + 2 1.2303 2.00000 + 3 1.8565 2.00000 + 4 1.9672 2.00000 + 5 2.4237 2.00000 + 6 2.5189 2.00000 + 7 2.6214 2.00000 + 8 2.6722 2.00000 + 9 2.7677 2.00000 + 10 2.7979 2.00000 + 11 3.1519 2.00000 + 12 3.3041 2.00000 + 13 3.3883 2.00000 + 14 3.5133 2.00000 + 15 3.6156 2.00000 + 16 3.7008 2.00000 + 17 3.7507 2.00000 + 18 3.8242 2.00005 + 19 3.8508 2.00011 + 20 3.9622 2.00198 + 21 5.8721 -0.00000 + 22 5.9555 -0.00000 + 23 6.0168 -0.00000 + 24 6.1310 -0.00000 + 25 6.1361 -0.00000 + 26 6.3455 -0.00000 + 27 6.9262 -0.00000 + 28 7.1511 -0.00000 + 29 7.1934 -0.00000 + 30 7.4163 -0.00000 + 31 7.7010 -0.00000 + 32 8.0450 -0.00000 + 33 8.1396 -0.00000 + 34 8.5079 -0.00000 + 35 8.5649 -0.00000 + 36 8.9803 -0.00000 + 37 9.0919 -0.00000 + 38 9.1954 -0.00000 + 39 9.4039 -0.00000 + 40 9.5906 -0.00000 + 41 9.9904 0.00000 + 42 10.1645 0.00000 + 43 10.7285 0.00000 + 44 10.9423 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1795 2.00000 + 2 1.2883 2.00000 + 3 1.6113 2.00000 + 4 1.7232 2.00000 + 5 2.4939 2.00000 + 6 2.7068 2.00000 + 7 2.8171 2.00000 + 8 2.8340 2.00000 + 9 2.9397 2.00000 + 10 2.9784 2.00000 + 11 3.0424 2.00000 + 12 3.1155 2.00000 + 13 3.2123 2.00000 + 14 3.3182 2.00000 + 15 3.7450 2.00000 + 16 3.7494 2.00000 + 17 3.8358 2.00007 + 18 3.8789 2.00024 + 19 3.9435 2.00128 + 20 4.0372 2.00921 + 21 5.6078 -0.00000 + 22 5.7800 -0.00000 + 23 5.7964 -0.00000 + 24 5.8719 -0.00000 + 25 6.1322 -0.00000 + 26 6.3185 -0.00000 + 27 6.7556 -0.00000 + 28 6.9272 -0.00000 + 29 7.3825 -0.00000 + 30 7.5737 -0.00000 + 31 7.7668 -0.00000 + 32 8.0947 -0.00000 + 33 8.0986 -0.00000 + 34 8.5244 -0.00000 + 35 8.6784 -0.00000 + 36 8.9514 -0.00000 + 37 9.0214 -0.00000 + 38 9.2225 -0.00000 + 39 9.5070 -0.00000 + 40 9.7679 -0.00000 + 41 10.1731 0.00000 + 42 10.4104 0.00000 + 43 10.7119 0.00000 + 44 10.9920 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2773 2.00000 + 2 1.3874 2.00000 + 3 1.4197 2.00000 + 4 1.5310 2.00000 + 5 2.6035 2.00000 + 6 2.7509 2.00000 + 7 2.8081 2.00000 + 8 2.9139 2.00000 + 9 2.9498 2.00000 + 10 2.9614 2.00000 + 11 3.0549 2.00000 + 12 3.1378 2.00000 + 13 3.3978 2.00000 + 14 3.4432 2.00000 + 15 3.7252 2.00000 + 16 3.7511 2.00000 + 17 3.8367 2.00007 + 18 3.8831 2.00027 + 19 3.9427 2.00125 + 20 3.9558 2.00171 + 21 5.4817 -0.00000 + 22 5.6031 -0.00000 + 23 5.6506 -0.00000 + 24 5.6867 -0.00000 + 25 6.2450 -0.00000 + 26 6.4213 -0.00000 + 27 6.5247 -0.00000 + 28 6.6483 -0.00000 + 29 7.5413 -0.00000 + 30 7.7579 -0.00000 + 31 7.7915 -0.00000 + 32 8.0404 -0.00000 + 33 8.1935 -0.00000 + 34 8.4654 -0.00000 + 35 8.6191 -0.00000 + 36 8.8481 -0.00000 + 37 9.0594 -0.00000 + 38 9.2705 -0.00000 + 39 9.5435 -0.00000 + 40 9.8250 -0.00000 + 41 10.4243 0.00000 + 42 10.6196 0.00000 + 43 10.7193 0.00000 + 44 10.9397 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0789 2.00000 + 2 1.6479 2.00000 + 3 1.8935 2.00000 + 4 2.1174 2.00000 + 5 2.1426 2.00000 + 6 2.1600 2.00000 + 7 2.6421 2.00000 + 8 2.7457 2.00000 + 9 2.7894 2.00000 + 10 2.8573 2.00000 + 11 2.9719 2.00000 + 12 3.0647 2.00000 + 13 3.1411 2.00000 + 14 3.1905 2.00000 + 15 3.4250 2.00000 + 16 3.6179 2.00000 + 17 3.7432 2.00000 + 18 3.8194 2.00004 + 19 3.8908 2.00034 + 20 4.2481 2.06583 + 21 6.0872 -0.00000 + 22 6.1883 -0.00000 + 23 6.2457 -0.00000 + 24 6.6207 -0.00000 + 25 6.9018 -0.00000 + 26 6.9922 -0.00000 + 27 7.0138 -0.00000 + 28 7.0737 -0.00000 + 29 7.2645 -0.00000 + 30 7.3192 -0.00000 + 31 7.3398 -0.00000 + 32 7.3802 -0.00000 + 33 8.1438 -0.00000 + 34 8.5787 -0.00000 + 35 8.6038 -0.00000 + 36 9.1258 -0.00000 + 37 9.2505 -0.00000 + 38 9.5569 -0.00000 + 39 9.6489 -0.00000 + 40 9.6998 -0.00000 + 41 9.8346 -0.00000 + 42 10.0656 0.00000 + 43 10.2225 0.00000 + 44 10.3464 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.0976 2.00000 + 2 1.6678 2.00000 + 3 1.8322 2.00000 + 4 1.9136 2.00000 + 5 2.1628 2.00000 + 6 2.4040 2.00000 + 7 2.5043 2.00000 + 8 2.6381 2.00000 + 9 2.8093 2.00000 + 10 2.8888 2.00000 + 11 3.0248 2.00000 + 12 3.0855 2.00000 + 13 3.2215 2.00000 + 14 3.4203 2.00000 + 15 3.4585 2.00000 + 16 3.4815 2.00000 + 17 3.7207 2.00000 + 18 3.9017 2.00045 + 19 3.9213 2.00074 + 20 4.2508 2.06448 + 21 5.9522 -0.00000 + 22 6.1168 -0.00000 + 23 6.1279 -0.00000 + 24 6.5214 -0.00000 + 25 6.6566 -0.00000 + 26 6.9262 -0.00000 + 27 6.9594 -0.00000 + 28 7.0998 -0.00000 + 29 7.1750 -0.00000 + 30 7.2689 -0.00000 + 31 7.3599 -0.00000 + 32 7.5554 -0.00000 + 33 8.2867 -0.00000 + 34 8.5392 -0.00000 + 35 8.7377 -0.00000 + 36 9.0407 -0.00000 + 37 9.2382 -0.00000 + 38 9.4600 -0.00000 + 39 9.7381 -0.00000 + 40 9.7808 -0.00000 + 41 9.9726 0.00000 + 42 10.2317 0.00000 + 43 10.4208 0.00000 + 44 10.5723 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1543 2.00000 + 2 1.5858 2.00000 + 3 1.7279 2.00000 + 4 1.9739 2.00000 + 5 2.1653 2.00000 + 6 2.2253 2.00000 + 7 2.4089 2.00000 + 8 2.6611 2.00000 + 9 2.8438 2.00000 + 10 2.9423 2.00000 + 11 3.1403 2.00000 + 12 3.2606 2.00000 + 13 3.3515 2.00000 + 14 3.4995 2.00000 + 15 3.5260 2.00000 + 16 3.5782 2.00000 + 17 3.7487 2.00000 + 18 3.8697 2.00019 + 19 4.0131 2.00583 + 20 4.2417 2.06831 + 21 5.5994 -0.00000 + 22 5.9683 -0.00000 + 23 5.9980 -0.00000 + 24 6.2106 -0.00000 + 25 6.4292 -0.00000 + 26 6.6864 -0.00000 + 27 6.8555 -0.00000 + 28 6.8720 -0.00000 + 29 7.2310 -0.00000 + 30 7.2826 -0.00000 + 31 7.4872 -0.00000 + 32 7.7696 -0.00000 + 33 8.2999 -0.00000 + 34 8.3107 -0.00000 + 35 9.0195 -0.00000 + 36 9.0982 -0.00000 + 37 9.3142 -0.00000 + 38 9.4902 -0.00000 + 39 9.8302 -0.00000 + 40 10.0065 0.00000 + 41 10.2186 0.00000 + 42 10.5020 0.00000 + 43 10.7186 0.00000 + 44 10.9576 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2518 2.00000 + 2 1.3940 2.00000 + 3 1.8295 2.00000 + 4 1.9746 2.00000 + 5 2.0762 2.00000 + 6 2.2197 2.00000 + 7 2.3285 2.00000 + 8 2.4733 2.00000 + 9 2.9435 2.00000 + 10 3.0686 2.00000 + 11 3.2584 2.00000 + 12 3.3601 2.00000 + 13 3.4495 2.00000 + 14 3.6096 2.00000 + 15 3.6447 2.00000 + 16 3.6684 2.00000 + 17 3.7615 2.00001 + 18 3.8443 2.00009 + 19 3.9995 2.00443 + 20 4.1714 2.05624 + 21 5.5201 -0.00000 + 22 5.7545 -0.00000 + 23 5.8201 -0.00000 + 24 5.8896 -0.00000 + 25 6.4887 -0.00000 + 26 6.5449 -0.00000 + 27 6.6117 -0.00000 + 28 6.7646 -0.00000 + 29 7.2655 -0.00000 + 30 7.3128 -0.00000 + 31 7.7118 -0.00000 + 32 7.9136 -0.00000 + 33 8.0510 -0.00000 + 34 8.0788 -0.00000 + 35 9.2866 -0.00000 + 36 9.3372 -0.00000 + 37 9.4118 -0.00000 + 38 9.5225 -0.00000 + 39 9.8983 -0.00000 + 40 10.2029 0.00000 + 41 10.2735 0.00000 + 42 10.3384 0.00000 + 43 11.0857 0.00000 + 44 11.2466 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1142 2.00000 + 2 1.4498 2.00000 + 3 2.1508 2.00000 + 4 2.1839 2.00000 + 5 2.1857 2.00000 + 6 2.1982 2.00000 + 7 2.4653 2.00000 + 8 2.5567 2.00000 + 9 2.5775 2.00000 + 10 3.0511 2.00000 + 11 3.1746 2.00000 + 12 3.2093 2.00000 + 13 3.2361 2.00000 + 14 3.2889 2.00000 + 15 3.3344 2.00000 + 16 3.4952 2.00000 + 17 3.6100 2.00000 + 18 3.8062 2.00003 + 19 3.8619 2.00015 + 20 4.1479 2.04549 + 21 6.0593 -0.00000 + 22 6.1060 -0.00000 + 23 6.3095 -0.00000 + 24 6.3151 -0.00000 + 25 6.8568 -0.00000 + 26 6.8629 -0.00000 + 27 7.0110 -0.00000 + 28 7.3054 -0.00000 + 29 7.3390 -0.00000 + 30 7.5460 -0.00000 + 31 7.6125 -0.00000 + 32 7.6382 -0.00000 + 33 8.1819 -0.00000 + 34 8.3822 -0.00000 + 35 8.5725 -0.00000 + 36 9.0672 -0.00000 + 37 9.3739 -0.00000 + 38 9.4028 -0.00000 + 39 9.6102 -0.00000 + 40 9.6604 -0.00000 + 41 9.9146 -0.00000 + 42 10.1525 0.00000 + 43 10.2149 0.00000 + 44 10.6087 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1329 2.00000 + 2 1.4693 2.00000 + 3 1.8687 2.00000 + 4 2.1831 2.00000 + 5 2.2139 2.00000 + 6 2.2257 2.00000 + 7 2.5365 2.00000 + 8 2.5999 2.00000 + 9 2.8511 2.00000 + 10 2.8641 2.00000 + 11 2.9909 2.00000 + 12 3.2186 2.00000 + 13 3.2963 2.00000 + 14 3.3829 2.00000 + 15 3.3876 2.00000 + 16 3.5422 2.00000 + 17 3.7116 2.00000 + 18 3.8174 2.00004 + 19 3.8683 2.00018 + 20 4.1548 2.04871 + 21 5.9244 -0.00000 + 22 6.0075 -0.00000 + 23 6.1997 -0.00000 + 24 6.3288 -0.00000 + 25 6.5316 -0.00000 + 26 6.7826 -0.00000 + 27 7.0135 -0.00000 + 28 7.2369 -0.00000 + 29 7.3323 -0.00000 + 30 7.5573 -0.00000 + 31 7.6475 -0.00000 + 32 7.6743 -0.00000 + 33 8.3723 -0.00000 + 34 8.4502 -0.00000 + 35 8.6268 -0.00000 + 36 9.0308 -0.00000 + 37 9.2763 -0.00000 + 38 9.3835 -0.00000 + 39 9.6710 -0.00000 + 40 9.7656 -0.00000 + 41 10.0104 0.00000 + 42 10.3027 0.00000 + 43 10.4112 0.00000 + 44 10.6797 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1900 2.00000 + 2 1.5285 2.00000 + 3 1.6224 2.00000 + 4 1.9664 2.00000 + 5 2.2481 2.00000 + 6 2.2884 2.00000 + 7 2.6492 2.00000 + 8 2.6556 2.00000 + 9 2.7542 2.00000 + 10 2.9498 2.00000 + 11 3.0730 2.00000 + 12 3.2247 2.00000 + 13 3.3102 2.00000 + 14 3.4321 2.00000 + 15 3.6125 2.00000 + 16 3.6393 2.00000 + 17 3.7510 2.00000 + 18 3.8023 2.00003 + 19 3.9806 2.00297 + 20 4.1605 2.05131 + 21 5.5705 -0.00000 + 22 5.8698 -0.00000 + 23 6.0017 -0.00000 + 24 6.0702 -0.00000 + 25 6.3646 -0.00000 + 26 6.5866 -0.00000 + 27 6.9484 -0.00000 + 28 6.9828 -0.00000 + 29 7.3912 -0.00000 + 30 7.5298 -0.00000 + 31 7.7416 -0.00000 + 32 7.8034 -0.00000 + 33 8.3210 -0.00000 + 34 8.4644 -0.00000 + 35 8.8525 -0.00000 + 36 9.0993 -0.00000 + 37 9.3436 -0.00000 + 38 9.4902 -0.00000 + 39 9.7127 -0.00000 + 40 9.9270 -0.00000 + 41 10.2578 0.00000 + 42 10.4203 0.00000 + 43 10.7246 0.00000 + 44 10.9119 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2878 2.00000 + 2 1.4304 2.00000 + 3 1.6291 2.00000 + 4 1.7742 2.00000 + 5 2.3393 2.00000 + 6 2.3990 2.00000 + 7 2.4755 2.00000 + 8 2.5616 2.00000 + 9 2.7536 2.00000 + 10 2.8974 2.00000 + 11 3.3355 2.00000 + 12 3.4235 2.00000 + 13 3.5035 2.00000 + 14 3.5528 2.00000 + 15 3.5585 2.00000 + 16 3.6493 2.00000 + 17 3.7055 2.00000 + 18 3.8682 2.00018 + 19 3.9980 2.00430 + 20 4.1194 2.03291 + 21 5.4474 -0.00000 + 22 5.7277 -0.00000 + 23 5.7524 -0.00000 + 24 5.7681 -0.00000 + 25 6.4316 -0.00000 + 26 6.5271 -0.00000 + 27 6.6622 -0.00000 + 28 6.9199 -0.00000 + 29 7.4134 -0.00000 + 30 7.5466 -0.00000 + 31 7.8628 -0.00000 + 32 7.9228 -0.00000 + 33 8.1146 -0.00000 + 34 8.3101 -0.00000 + 35 9.1685 -0.00000 + 36 9.2648 -0.00000 + 37 9.4025 -0.00000 + 38 9.6024 -0.00000 + 39 9.6721 -0.00000 + 40 10.1050 0.00000 + 41 10.3731 0.00000 + 42 10.3763 0.00000 + 43 10.8374 0.00000 + 44 11.0389 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1861 2.00000 + 2 1.2969 2.00000 + 3 2.2184 2.00000 + 4 2.2708 2.00000 + 5 2.2745 2.00000 + 6 2.3252 2.00000 + 7 2.3807 2.00000 + 8 2.4039 2.00000 + 9 2.5379 2.00000 + 10 2.8817 2.00000 + 11 3.1886 2.00000 + 12 3.3060 2.00000 + 13 3.3208 2.00000 + 14 3.4413 2.00000 + 15 3.4502 2.00000 + 16 3.5116 2.00000 + 17 3.6083 2.00000 + 18 3.7236 2.00000 + 19 3.7266 2.00000 + 20 3.9474 2.00140 + 21 6.0036 -0.00000 + 22 6.0890 -0.00000 + 23 6.2656 -0.00000 + 24 6.4564 -0.00000 + 25 6.5427 -0.00000 + 26 6.6579 -0.00000 + 27 7.1527 -0.00000 + 28 7.2785 -0.00000 + 29 7.5452 -0.00000 + 30 7.6475 -0.00000 + 31 7.9844 -0.00000 + 32 8.0522 -0.00000 + 33 8.1605 -0.00000 + 34 8.3994 -0.00000 + 35 8.5043 -0.00000 + 36 9.0974 -0.00000 + 37 9.1734 -0.00000 + 38 9.2315 -0.00000 + 39 9.5320 -0.00000 + 40 9.6446 -0.00000 + 41 9.7772 -0.00000 + 42 9.9254 -0.00000 + 43 10.6718 0.00000 + 44 10.8894 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2050 2.00000 + 2 1.3161 2.00000 + 3 1.9424 2.00000 + 4 2.0549 2.00000 + 5 2.2933 2.00000 + 6 2.4237 2.00000 + 7 2.5339 2.00000 + 8 2.6038 2.00000 + 9 2.7265 2.00000 + 10 2.9064 2.00000 + 11 2.9943 2.00000 + 12 3.1341 2.00000 + 13 3.2425 2.00000 + 14 3.5078 2.00000 + 15 3.5186 2.00000 + 16 3.6292 2.00000 + 17 3.6899 2.00000 + 18 3.7121 2.00000 + 19 3.8290 2.00006 + 20 3.9625 2.00199 + 21 5.9494 -0.00000 + 22 5.9975 -0.00000 + 23 6.0828 -0.00000 + 24 6.2882 -0.00000 + 25 6.4426 -0.00000 + 26 6.6027 -0.00000 + 27 7.1264 -0.00000 + 28 7.2201 -0.00000 + 29 7.5448 -0.00000 + 30 7.6721 -0.00000 + 31 7.9435 -0.00000 + 32 8.1145 -0.00000 + 33 8.2290 -0.00000 + 34 8.4508 -0.00000 + 35 8.6736 -0.00000 + 36 9.0648 -0.00000 + 37 9.1296 -0.00000 + 38 9.2735 -0.00000 + 39 9.5618 -0.00000 + 40 9.7363 -0.00000 + 41 9.8775 -0.00000 + 42 10.0799 0.00000 + 43 10.6592 0.00000 + 44 10.8623 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2625 2.00000 + 2 1.3744 2.00000 + 3 1.6968 2.00000 + 4 1.8107 2.00000 + 5 2.3524 2.00000 + 6 2.4840 2.00000 + 7 2.6015 2.00000 + 8 2.7787 2.00000 + 9 2.8890 2.00000 + 10 2.9530 2.00000 + 11 3.0366 2.00000 + 12 3.0571 2.00000 + 13 3.1171 2.00000 + 14 3.3602 2.00000 + 15 3.7087 2.00000 + 16 3.7110 2.00000 + 17 3.7805 2.00001 + 18 3.8587 2.00014 + 19 3.9352 2.00105 + 20 3.9994 2.00442 + 21 5.6486 -0.00000 + 22 5.7895 -0.00000 + 23 5.8751 -0.00000 + 24 5.8822 -0.00000 + 25 6.4400 -0.00000 + 26 6.5093 -0.00000 + 27 6.9986 -0.00000 + 28 7.0062 -0.00000 + 29 7.6041 -0.00000 + 30 7.7663 -0.00000 + 31 7.9323 -0.00000 + 32 8.1483 -0.00000 + 33 8.2209 -0.00000 + 34 8.5530 -0.00000 + 35 8.7914 -0.00000 + 36 9.1511 -0.00000 + 37 9.1616 -0.00000 + 38 9.3509 -0.00000 + 39 9.7309 -0.00000 + 40 9.9619 0.00000 + 41 10.0254 0.00000 + 42 10.3421 0.00000 + 43 10.6115 0.00000 + 44 10.9128 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3611 2.00000 + 2 1.4739 2.00000 + 3 1.5044 2.00000 + 4 1.6182 2.00000 + 5 2.4511 2.00000 + 6 2.5836 2.00000 + 7 2.5887 2.00000 + 8 2.7181 2.00000 + 9 2.7275 2.00000 + 10 2.8620 2.00000 + 11 3.0647 2.00000 + 12 3.2044 2.00000 + 13 3.4426 2.00000 + 14 3.4932 2.00000 + 15 3.7215 2.00000 + 16 3.7312 2.00000 + 17 3.7777 2.00001 + 18 3.9251 2.00082 + 19 3.9487 2.00145 + 20 4.0176 2.00636 + 21 5.4576 -0.00000 + 22 5.5802 -0.00000 + 23 5.6642 -0.00000 + 24 5.6818 -0.00000 + 25 6.4781 -0.00000 + 26 6.5166 -0.00000 + 27 6.7510 -0.00000 + 28 6.8668 -0.00000 + 29 7.6624 -0.00000 + 30 7.8567 -0.00000 + 31 7.8705 -0.00000 + 32 8.0695 -0.00000 + 33 8.2960 -0.00000 + 34 8.6712 -0.00000 + 35 8.8248 -0.00000 + 36 9.0702 -0.00000 + 37 9.3188 -0.00000 + 38 9.4383 -0.00000 + 39 9.8194 -0.00000 + 40 10.0781 0.00000 + 41 10.2424 0.00000 + 42 10.4859 0.00000 + 43 10.6219 0.00000 + 44 10.8414 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.1995 2.00000 + 2 1.7896 2.00000 + 3 1.8332 2.00000 + 4 2.0422 2.00000 + 5 2.2377 2.00000 + 6 2.2834 2.00000 + 7 2.4953 2.00000 + 8 2.7372 2.00000 + 9 2.7693 2.00000 + 10 2.8519 2.00000 + 11 2.8563 2.00000 + 12 2.9073 2.00000 + 13 3.0745 2.00000 + 14 3.1030 2.00000 + 15 3.4169 2.00000 + 16 3.4274 2.00000 + 17 3.6020 2.00000 + 18 3.6171 2.00000 + 19 3.6804 2.00000 + 20 4.3732 1.71833 + 21 6.1185 -0.00000 + 22 6.4579 -0.00000 + 23 6.5028 -0.00000 + 24 7.0645 -0.00000 + 25 7.1567 -0.00000 + 26 7.2121 -0.00000 + 27 7.2390 -0.00000 + 28 7.3089 -0.00000 + 29 7.4241 -0.00000 + 30 7.5457 -0.00000 + 31 7.5785 -0.00000 + 32 7.8788 -0.00000 + 33 8.1293 -0.00000 + 34 8.1964 -0.00000 + 35 8.5819 -0.00000 + 36 9.1925 -0.00000 + 37 9.3536 -0.00000 + 38 9.3688 -0.00000 + 39 9.4795 -0.00000 + 40 9.5028 -0.00000 + 41 9.6617 -0.00000 + 42 9.7381 -0.00000 + 43 10.0193 0.00000 + 44 10.6896 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2184 2.00000 + 2 1.8082 2.00000 + 3 1.8539 2.00000 + 4 1.9574 2.00000 + 5 2.0625 2.00000 + 6 2.4998 2.00000 + 7 2.5163 2.00000 + 8 2.6000 2.00000 + 9 2.6290 2.00000 + 10 2.7961 2.00000 + 11 2.7961 2.00000 + 12 3.1197 2.00000 + 13 3.1886 2.00000 + 14 3.2079 2.00000 + 15 3.3862 2.00000 + 16 3.4295 2.00000 + 17 3.6103 2.00000 + 18 3.7305 2.00000 + 19 3.7822 2.00001 + 20 4.3730 1.71902 + 21 6.0569 -0.00000 + 22 6.1640 -0.00000 + 23 6.3971 -0.00000 + 24 6.8028 -0.00000 + 25 6.8928 -0.00000 + 26 7.1147 -0.00000 + 27 7.2557 -0.00000 + 28 7.2692 -0.00000 + 29 7.4055 -0.00000 + 30 7.6118 -0.00000 + 31 7.6307 -0.00000 + 32 7.8506 -0.00000 + 33 8.3005 -0.00000 + 34 8.4336 -0.00000 + 35 8.6450 -0.00000 + 36 9.0653 -0.00000 + 37 9.1851 -0.00000 + 38 9.4176 -0.00000 + 39 9.5352 -0.00000 + 40 9.6782 -0.00000 + 41 9.8867 -0.00000 + 42 9.8964 -0.00000 + 43 10.2738 0.00000 + 44 10.6377 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2759 2.00000 + 2 1.7108 2.00000 + 3 1.8647 2.00000 + 4 1.9160 2.00000 + 5 2.1231 2.00000 + 6 2.2876 2.00000 + 7 2.3627 2.00000 + 8 2.5626 2.00000 + 9 2.5661 2.00000 + 10 2.8293 2.00000 + 11 2.9707 2.00000 + 12 3.0612 2.00000 + 13 3.2599 2.00000 + 14 3.4269 2.00000 + 15 3.5055 2.00000 + 16 3.6865 2.00000 + 17 3.7075 2.00000 + 18 3.8206 2.00005 + 19 3.9308 2.00094 + 20 4.3509 1.83257 + 21 5.7244 -0.00000 + 22 5.9042 -0.00000 + 23 6.1032 -0.00000 + 24 6.2910 -0.00000 + 25 6.8088 -0.00000 + 26 6.8105 -0.00000 + 27 6.8908 -0.00000 + 28 7.2248 -0.00000 + 29 7.4882 -0.00000 + 30 7.7066 -0.00000 + 31 7.7430 -0.00000 + 32 7.8969 -0.00000 + 33 8.2096 -0.00000 + 34 8.4208 -0.00000 + 35 9.0574 -0.00000 + 36 9.1640 -0.00000 + 37 9.3467 -0.00000 + 38 9.4280 -0.00000 + 39 9.6062 -0.00000 + 40 9.9549 0.00000 + 41 10.2066 0.00000 + 42 10.2685 0.00000 + 43 10.4381 0.00000 + 44 10.7695 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3745 2.00000 + 2 1.5179 2.00000 + 3 1.9610 2.00000 + 4 2.0187 2.00000 + 5 2.1014 2.00000 + 6 2.1678 2.00000 + 7 2.2320 2.00000 + 8 2.3771 2.00000 + 9 2.6577 2.00000 + 10 2.7927 2.00000 + 11 2.9445 2.00000 + 12 3.0781 2.00000 + 13 3.4918 2.00000 + 14 3.6574 2.00000 + 15 3.6916 2.00000 + 16 3.7332 2.00000 + 17 3.8315 2.00006 + 18 3.8913 2.00034 + 19 4.0176 2.00637 + 20 4.2471 2.06625 + 21 5.5588 -0.00000 + 22 5.7687 -0.00000 + 23 5.7897 -0.00000 + 24 5.9104 -0.00000 + 25 6.6165 -0.00000 + 26 6.6495 -0.00000 + 27 6.8490 -0.00000 + 28 7.1135 -0.00000 + 29 7.5374 -0.00000 + 30 7.6503 -0.00000 + 31 7.8464 -0.00000 + 32 7.9899 -0.00000 + 33 8.0231 -0.00000 + 34 8.3374 -0.00000 + 35 9.2765 -0.00000 + 36 9.4123 -0.00000 + 37 9.4304 -0.00000 + 38 9.5648 -0.00000 + 39 9.7383 -0.00000 + 40 10.1674 0.00000 + 41 10.1864 0.00000 + 42 10.3693 0.00000 + 43 10.8245 0.00000 + 44 11.1223 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2364 2.00000 + 2 1.5850 2.00000 + 3 1.8757 2.00000 + 4 2.2507 2.00000 + 5 2.2936 2.00000 + 6 2.3228 2.00000 + 7 2.3394 2.00000 + 8 2.5894 2.00000 + 9 2.6837 2.00000 + 10 2.8949 2.00000 + 11 2.9422 2.00000 + 12 3.0786 2.00000 + 13 3.2493 2.00000 + 14 3.2691 2.00000 + 15 3.2734 2.00000 + 16 3.3256 2.00000 + 17 3.4638 2.00000 + 18 3.6754 2.00000 + 19 3.6895 2.00000 + 20 4.1635 2.05273 + 21 6.1323 -0.00000 + 22 6.3677 -0.00000 + 23 6.4881 -0.00000 + 24 6.8003 -0.00000 + 25 6.9640 -0.00000 + 26 7.1025 -0.00000 + 27 7.3881 -0.00000 + 28 7.5213 -0.00000 + 29 7.5424 -0.00000 + 30 7.5995 -0.00000 + 31 7.6482 -0.00000 + 32 8.0945 -0.00000 + 33 8.1880 -0.00000 + 34 8.2135 -0.00000 + 35 8.7875 -0.00000 + 36 9.0439 -0.00000 + 37 9.2977 -0.00000 + 38 9.4141 -0.00000 + 39 9.4687 -0.00000 + 40 9.6099 -0.00000 + 41 9.9115 -0.00000 + 42 10.0468 0.00000 + 43 10.0711 0.00000 + 44 10.7324 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2553 2.00000 + 2 1.6046 2.00000 + 3 1.8954 2.00000 + 4 1.9952 2.00000 + 5 2.2867 2.00000 + 6 2.3339 2.00000 + 7 2.3678 2.00000 + 8 2.6346 2.00000 + 9 2.6575 2.00000 + 10 2.9715 2.00000 + 11 3.0009 2.00000 + 12 3.0487 2.00000 + 13 3.1158 2.00000 + 14 3.2543 2.00000 + 15 3.3973 2.00000 + 16 3.5374 2.00000 + 17 3.5633 2.00000 + 18 3.6327 2.00000 + 19 3.7358 2.00000 + 20 4.1704 2.05581 + 21 6.0553 -0.00000 + 22 6.0954 -0.00000 + 23 6.4097 -0.00000 + 24 6.6070 -0.00000 + 25 6.7669 -0.00000 + 26 7.0455 -0.00000 + 27 7.2827 -0.00000 + 28 7.3704 -0.00000 + 29 7.5547 -0.00000 + 30 7.7134 -0.00000 + 31 7.7563 -0.00000 + 32 8.1749 -0.00000 + 33 8.3043 -0.00000 + 34 8.3887 -0.00000 + 35 8.7065 -0.00000 + 36 9.0800 -0.00000 + 37 9.1625 -0.00000 + 38 9.5441 -0.00000 + 39 9.5532 -0.00000 + 40 9.6449 -0.00000 + 41 10.0559 0.00000 + 42 10.1897 0.00000 + 43 10.2247 0.00000 + 44 10.7082 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3131 2.00000 + 2 1.6638 2.00000 + 3 1.7489 2.00000 + 4 1.9550 2.00000 + 5 2.1012 2.00000 + 6 2.3468 2.00000 + 7 2.3774 2.00000 + 8 2.4418 2.00000 + 9 2.7775 2.00000 + 10 2.8412 2.00000 + 11 3.0267 2.00000 + 12 3.1969 2.00000 + 13 3.3252 2.00000 + 14 3.4236 2.00000 + 15 3.5196 2.00000 + 16 3.5490 2.00000 + 17 3.6968 2.00000 + 18 3.7660 2.00001 + 19 3.8581 2.00014 + 20 4.1765 2.05846 + 21 5.6672 -0.00000 + 22 5.8547 -0.00000 + 23 6.0822 -0.00000 + 24 6.0845 -0.00000 + 25 6.7840 -0.00000 + 26 6.8638 -0.00000 + 27 7.0044 -0.00000 + 28 7.4680 -0.00000 + 29 7.5246 -0.00000 + 30 7.7186 -0.00000 + 31 7.8305 -0.00000 + 32 8.1148 -0.00000 + 33 8.2588 -0.00000 + 34 8.5978 -0.00000 + 35 8.9380 -0.00000 + 36 9.1811 -0.00000 + 37 9.2974 -0.00000 + 38 9.6166 -0.00000 + 39 9.6542 -0.00000 + 40 9.7933 -0.00000 + 41 10.2060 0.00000 + 42 10.3595 0.00000 + 43 10.5297 0.00000 + 44 10.7960 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4120 2.00000 + 2 1.5558 2.00000 + 3 1.7643 2.00000 + 4 1.9088 2.00000 + 5 2.0571 2.00000 + 6 2.2010 2.00000 + 7 2.4472 2.00000 + 8 2.5274 2.00000 + 9 2.5938 2.00000 + 10 2.6672 2.00000 + 11 3.2039 2.00000 + 12 3.3102 2.00000 + 13 3.4976 2.00000 + 14 3.5890 2.00000 + 15 3.6112 2.00000 + 16 3.6631 2.00000 + 17 3.7064 2.00000 + 18 3.8644 2.00016 + 19 3.9836 2.00318 + 20 4.1345 2.03941 + 21 5.4689 -0.00000 + 22 5.6654 -0.00000 + 23 5.7170 -0.00000 + 24 5.7244 -0.00000 + 25 6.7455 -0.00000 + 26 6.8182 -0.00000 + 27 6.8394 -0.00000 + 28 7.4939 -0.00000 + 29 7.5670 -0.00000 + 30 7.6593 -0.00000 + 31 7.9082 -0.00000 + 32 8.0476 -0.00000 + 33 8.0525 -0.00000 + 34 8.6281 -0.00000 + 35 9.2482 -0.00000 + 36 9.3631 -0.00000 + 37 9.5049 -0.00000 + 38 9.6225 -0.00000 + 39 9.6619 -0.00000 + 40 9.9589 0.00000 + 41 10.2660 0.00000 + 42 10.3857 0.00000 + 43 10.6586 0.00000 + 44 10.8151 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3113 2.00000 + 2 1.4265 2.00000 + 3 1.9613 2.00000 + 4 2.0910 2.00000 + 5 2.3469 2.00000 + 6 2.4012 2.00000 + 7 2.4517 2.00000 + 8 2.5131 2.00000 + 9 2.6903 2.00000 + 10 2.9800 2.00000 + 11 3.0150 2.00000 + 12 3.0389 2.00000 + 13 3.1009 2.00000 + 14 3.2019 2.00000 + 15 3.4444 2.00000 + 16 3.4731 2.00000 + 17 3.5280 2.00000 + 18 3.6451 2.00000 + 19 3.6619 2.00000 + 20 3.8335 2.00007 + 21 6.2198 -0.00000 + 22 6.3272 -0.00000 + 23 6.5456 -0.00000 + 24 6.6206 -0.00000 + 25 6.7154 -0.00000 + 26 6.7660 -0.00000 + 27 7.4864 -0.00000 + 28 7.5385 -0.00000 + 29 7.7681 -0.00000 + 30 7.8002 -0.00000 + 31 7.8875 -0.00000 + 32 7.9801 -0.00000 + 33 8.5163 -0.00000 + 34 8.5214 -0.00000 + 35 8.7045 -0.00000 + 36 9.1322 -0.00000 + 37 9.1617 -0.00000 + 38 9.2748 -0.00000 + 39 9.5352 -0.00000 + 40 9.6747 -0.00000 + 41 9.7693 -0.00000 + 42 10.0668 0.00000 + 43 10.5487 0.00000 + 44 10.7526 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3305 2.00000 + 2 1.4459 2.00000 + 3 1.9812 2.00000 + 4 2.0710 2.00000 + 5 2.1120 2.00000 + 6 2.1870 2.00000 + 7 2.6648 2.00000 + 8 2.7216 2.00000 + 9 2.7478 2.00000 + 10 2.8446 2.00000 + 11 2.8543 2.00000 + 12 3.0843 2.00000 + 13 3.2674 2.00000 + 14 3.3779 2.00000 + 15 3.3910 2.00000 + 16 3.4878 2.00000 + 17 3.6015 2.00000 + 18 3.6555 2.00000 + 19 3.6885 2.00000 + 20 3.8481 2.00010 + 21 6.1134 -0.00000 + 22 6.1318 -0.00000 + 23 6.2903 -0.00000 + 24 6.3599 -0.00000 + 25 6.7643 -0.00000 + 26 6.8683 -0.00000 + 27 7.3604 -0.00000 + 28 7.3729 -0.00000 + 29 7.7637 -0.00000 + 30 7.8517 -0.00000 + 31 7.9768 -0.00000 + 32 8.1496 -0.00000 + 33 8.4699 -0.00000 + 34 8.6321 -0.00000 + 35 8.7140 -0.00000 + 36 9.1647 -0.00000 + 37 9.2456 -0.00000 + 38 9.2692 -0.00000 + 39 9.5980 -0.00000 + 40 9.7913 -0.00000 + 41 9.8618 -0.00000 + 42 10.1293 0.00000 + 43 10.5440 0.00000 + 44 10.7045 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3887 2.00000 + 2 1.5047 2.00000 + 3 1.8258 2.00000 + 4 1.9426 2.00000 + 5 2.0419 2.00000 + 6 2.1719 2.00000 + 7 2.4770 2.00000 + 8 2.6089 2.00000 + 9 2.7678 2.00000 + 10 3.0707 2.00000 + 11 3.1342 2.00000 + 12 3.1760 2.00000 + 13 3.2261 2.00000 + 14 3.4078 2.00000 + 15 3.5575 2.00000 + 16 3.6121 2.00000 + 17 3.6385 2.00000 + 18 3.7753 2.00001 + 19 3.7801 2.00001 + 20 3.8904 2.00033 + 21 5.6979 -0.00000 + 22 5.8194 -0.00000 + 23 5.9043 -0.00000 + 24 5.9701 -0.00000 + 25 6.8219 -0.00000 + 26 6.8515 -0.00000 + 27 7.1709 -0.00000 + 28 7.3281 -0.00000 + 29 7.7661 -0.00000 + 30 7.8697 -0.00000 + 31 7.9737 -0.00000 + 32 8.2175 -0.00000 + 33 8.4522 -0.00000 + 34 8.6927 -0.00000 + 35 8.8946 -0.00000 + 36 9.2566 -0.00000 + 37 9.3424 -0.00000 + 38 9.4169 -0.00000 + 39 9.7094 -0.00000 + 40 9.9295 0.00000 + 41 10.0347 0.00000 + 42 10.3195 0.00000 + 43 10.5171 0.00000 + 44 10.8162 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4881 2.00000 + 2 1.6049 2.00000 + 3 1.6326 2.00000 + 4 1.7499 2.00000 + 5 2.1431 2.00000 + 6 2.2735 2.00000 + 7 2.2889 2.00000 + 8 2.4208 2.00000 + 9 2.8614 2.00000 + 10 2.9904 2.00000 + 11 3.2011 2.00000 + 12 3.3047 2.00000 + 13 3.4601 2.00000 + 14 3.5463 2.00000 + 15 3.5801 2.00000 + 16 3.6837 2.00000 + 17 3.6990 2.00000 + 18 3.8617 2.00015 + 19 3.8802 2.00025 + 20 3.9457 2.00135 + 21 5.4410 -0.00000 + 22 5.5229 -0.00000 + 23 5.6076 -0.00000 + 24 5.6413 -0.00000 + 25 6.8187 -0.00000 + 26 6.8467 -0.00000 + 27 7.0728 -0.00000 + 28 7.3365 -0.00000 + 29 7.8053 -0.00000 + 30 7.8952 -0.00000 + 31 7.9237 -0.00000 + 32 8.0576 -0.00000 + 33 8.4514 -0.00000 + 34 8.9149 -0.00000 + 35 8.9636 -0.00000 + 36 9.1937 -0.00000 + 37 9.4921 -0.00000 + 38 9.5521 -0.00000 + 39 9.7543 -0.00000 + 40 9.9248 -0.00000 + 41 10.2028 0.00000 + 42 10.4786 0.00000 + 43 10.6008 0.00000 + 44 10.8559 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3637 2.00000 + 2 1.5740 2.00000 + 3 1.9778 2.00000 + 4 2.2066 2.00000 + 5 2.2356 2.00000 + 6 2.3957 2.00000 + 7 2.4407 2.00000 + 8 2.5194 2.00000 + 9 2.6201 2.00000 + 10 2.6465 2.00000 + 11 2.9634 2.00000 + 12 3.0345 2.00000 + 13 3.1744 2.00000 + 14 3.1947 2.00000 + 15 3.2232 2.00000 + 16 3.2395 2.00000 + 17 3.3846 2.00000 + 18 3.4087 2.00000 + 19 3.9248 2.00081 + 20 4.1992 2.06684 + 21 6.3638 -0.00000 + 22 6.5697 -0.00000 + 23 6.8267 -0.00000 + 24 7.1064 -0.00000 + 25 7.2186 -0.00000 + 26 7.2245 -0.00000 + 27 7.2386 -0.00000 + 28 7.3748 -0.00000 + 29 7.7507 -0.00000 + 30 7.7943 -0.00000 + 31 7.8009 -0.00000 + 32 8.0566 -0.00000 + 33 8.2116 -0.00000 + 34 8.4329 -0.00000 + 35 8.7200 -0.00000 + 36 9.0670 -0.00000 + 37 9.1545 -0.00000 + 38 9.3519 -0.00000 + 39 9.4776 -0.00000 + 40 9.4794 -0.00000 + 41 9.4967 -0.00000 + 42 9.6446 -0.00000 + 43 9.6558 -0.00000 + 44 9.9321 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3828 2.00000 + 2 1.5934 2.00000 + 3 1.9974 2.00000 + 4 2.1198 2.00000 + 5 2.2376 2.00000 + 6 2.2489 2.00000 + 7 2.3472 2.00000 + 8 2.4997 2.00000 + 9 2.7173 2.00000 + 10 2.7904 2.00000 + 11 2.9193 2.00000 + 12 2.9457 2.00000 + 13 3.0303 2.00000 + 14 3.1801 2.00000 + 15 3.3033 2.00000 + 16 3.4743 2.00000 + 17 3.4755 2.00000 + 18 3.6062 2.00000 + 19 3.9489 2.00145 + 20 4.2090 2.06929 + 21 6.2162 -0.00000 + 22 6.2788 -0.00000 + 23 6.6221 -0.00000 + 24 6.7679 -0.00000 + 25 7.0769 -0.00000 + 26 7.0939 -0.00000 + 27 7.2790 -0.00000 + 28 7.3431 -0.00000 + 29 7.7249 -0.00000 + 30 7.7391 -0.00000 + 31 8.0503 -0.00000 + 32 8.2719 -0.00000 + 33 8.3128 -0.00000 + 34 8.5977 -0.00000 + 35 8.7003 -0.00000 + 36 8.9907 -0.00000 + 37 9.0318 -0.00000 + 38 9.3260 -0.00000 + 39 9.3797 -0.00000 + 40 9.6408 -0.00000 + 41 9.7001 -0.00000 + 42 9.7619 -0.00000 + 43 9.9415 0.00000 + 44 10.1289 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4411 2.00000 + 2 1.6521 2.00000 + 3 1.8783 2.00000 + 4 2.0498 2.00000 + 5 2.0973 2.00000 + 6 2.2926 2.00000 + 7 2.3220 2.00000 + 8 2.4904 2.00000 + 9 2.5583 2.00000 + 10 2.7150 2.00000 + 11 2.7388 2.00000 + 12 2.9597 2.00000 + 13 3.2143 2.00000 + 14 3.3531 2.00000 + 15 3.5858 2.00000 + 16 3.6956 2.00000 + 17 3.7252 2.00000 + 18 3.7748 2.00001 + 19 4.0131 2.00583 + 20 4.2219 2.07087 + 21 5.8247 -0.00000 + 22 5.8889 -0.00000 + 23 6.1688 -0.00000 + 24 6.2387 -0.00000 + 25 6.9463 -0.00000 + 26 7.0073 -0.00000 + 27 7.0857 -0.00000 + 28 7.1798 -0.00000 + 29 7.7453 -0.00000 + 30 7.7687 -0.00000 + 31 8.1375 -0.00000 + 32 8.1716 -0.00000 + 33 8.4589 -0.00000 + 34 8.8385 -0.00000 + 35 8.9979 -0.00000 + 36 9.0091 -0.00000 + 37 9.1462 -0.00000 + 38 9.3610 -0.00000 + 39 9.3653 -0.00000 + 40 9.7108 -0.00000 + 41 10.0272 0.00000 + 42 10.0724 0.00000 + 43 10.3547 0.00000 + 44 10.5605 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5408 2.00000 + 2 1.6853 2.00000 + 3 1.7522 2.00000 + 4 1.8961 2.00000 + 5 2.1602 2.00000 + 6 2.3037 2.00000 + 7 2.3903 2.00000 + 8 2.4204 2.00000 + 9 2.5306 2.00000 + 10 2.5613 2.00000 + 11 2.6604 2.00000 + 12 2.7970 2.00000 + 13 3.5783 2.00000 + 14 3.6437 2.00000 + 15 3.7337 2.00000 + 16 3.7593 2.00001 + 17 3.9052 2.00049 + 18 3.9704 2.00238 + 19 4.0190 2.00654 + 20 4.1679 2.05472 + 21 5.5950 -0.00000 + 22 5.6761 -0.00000 + 23 5.7685 -0.00000 + 24 5.8195 -0.00000 + 25 6.8518 -0.00000 + 26 6.8980 -0.00000 + 27 6.9624 -0.00000 + 28 7.0779 -0.00000 + 29 7.8042 -0.00000 + 30 7.8434 -0.00000 + 31 7.9607 -0.00000 + 32 7.9777 -0.00000 + 33 8.6186 -0.00000 + 34 8.8885 -0.00000 + 35 9.1761 -0.00000 + 36 9.1905 -0.00000 + 37 9.3330 -0.00000 + 38 9.3527 -0.00000 + 39 9.4542 -0.00000 + 40 9.6497 -0.00000 + 41 10.3313 0.00000 + 42 10.5530 0.00000 + 43 10.6111 0.00000 + 44 10.9320 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4024 2.00000 + 2 1.6148 2.00000 + 3 1.7663 2.00000 + 4 1.9935 2.00000 + 5 2.4440 2.00000 + 6 2.4814 2.00000 + 7 2.5214 2.00000 + 8 2.6514 2.00000 + 9 2.7069 2.00000 + 10 2.8059 2.00000 + 11 2.8163 2.00000 + 12 2.8549 2.00000 + 13 3.0087 2.00000 + 14 3.0517 2.00000 + 15 3.3786 2.00000 + 16 3.4277 2.00000 + 17 3.5202 2.00000 + 18 3.5475 2.00000 + 19 3.6885 2.00000 + 20 3.9535 2.00162 + 21 6.4025 -0.00000 + 22 6.5460 -0.00000 + 23 6.6141 -0.00000 + 24 6.8275 -0.00000 + 25 7.2553 -0.00000 + 26 7.2934 -0.00000 + 27 7.4821 -0.00000 + 28 7.5284 -0.00000 + 29 7.6310 -0.00000 + 30 7.6365 -0.00000 + 31 7.7739 -0.00000 + 32 7.9867 -0.00000 + 33 8.3552 -0.00000 + 34 8.6875 -0.00000 + 35 8.8473 -0.00000 + 36 9.0610 -0.00000 + 37 9.2202 -0.00000 + 38 9.2424 -0.00000 + 39 9.5222 -0.00000 + 40 9.7106 -0.00000 + 41 9.8045 -0.00000 + 42 9.8478 -0.00000 + 43 9.8495 -0.00000 + 44 10.1660 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4217 2.00000 + 2 1.6342 2.00000 + 3 1.7862 2.00000 + 4 2.0127 2.00000 + 5 2.1663 2.00000 + 6 2.3684 2.00000 + 7 2.5221 2.00000 + 8 2.5786 2.00000 + 9 2.7297 2.00000 + 10 2.7718 2.00000 + 11 2.8993 2.00000 + 12 3.0103 2.00000 + 13 3.1407 2.00000 + 14 3.2278 2.00000 + 15 3.3067 2.00000 + 16 3.4028 2.00000 + 17 3.5925 2.00000 + 18 3.6554 2.00000 + 19 3.7207 2.00000 + 20 3.9685 2.00228 + 21 6.2181 -0.00000 + 22 6.2204 -0.00000 + 23 6.5281 -0.00000 + 24 6.5927 -0.00000 + 25 7.0795 -0.00000 + 26 7.0926 -0.00000 + 27 7.4777 -0.00000 + 28 7.5142 -0.00000 + 29 7.7382 -0.00000 + 30 7.8298 -0.00000 + 31 7.9214 -0.00000 + 32 8.0775 -0.00000 + 33 8.3991 -0.00000 + 34 8.6565 -0.00000 + 35 8.8462 -0.00000 + 36 9.0758 -0.00000 + 37 9.1542 -0.00000 + 38 9.2992 -0.00000 + 39 9.6319 -0.00000 + 40 9.7340 -0.00000 + 41 9.7672 -0.00000 + 42 9.9751 0.00000 + 43 10.1552 0.00000 + 44 10.3043 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4802 2.00000 + 2 1.6931 2.00000 + 3 1.8461 2.00000 + 4 1.9180 2.00000 + 5 2.0755 2.00000 + 6 2.1310 2.00000 + 7 2.2873 2.00000 + 8 2.5112 2.00000 + 9 2.6272 2.00000 + 10 2.8608 2.00000 + 11 3.0033 2.00000 + 12 3.1713 2.00000 + 13 3.2873 2.00000 + 14 3.3802 2.00000 + 15 3.4887 2.00000 + 16 3.5760 2.00000 + 17 3.7210 2.00000 + 18 3.7469 2.00000 + 19 3.8288 2.00006 + 20 4.0068 2.00514 + 21 5.7664 -0.00000 + 22 5.8448 -0.00000 + 23 6.0696 -0.00000 + 24 6.0774 -0.00000 + 25 7.0703 -0.00000 + 26 7.0901 -0.00000 + 27 7.2576 -0.00000 + 28 7.4171 -0.00000 + 29 7.7865 -0.00000 + 30 7.8397 -0.00000 + 31 8.1068 -0.00000 + 32 8.1980 -0.00000 + 33 8.3949 -0.00000 + 34 8.7579 -0.00000 + 35 8.9474 -0.00000 + 36 9.1413 -0.00000 + 37 9.2191 -0.00000 + 38 9.3800 -0.00000 + 39 9.6744 -0.00000 + 40 9.8699 -0.00000 + 41 9.9032 -0.00000 + 42 10.1115 0.00000 + 43 10.4951 0.00000 + 44 10.7106 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5802 2.00000 + 2 1.7251 2.00000 + 3 1.7932 2.00000 + 4 1.9316 2.00000 + 5 1.9554 2.00000 + 6 2.0958 2.00000 + 7 2.1759 2.00000 + 8 2.3225 2.00000 + 9 2.7197 2.00000 + 10 2.8495 2.00000 + 11 2.9520 2.00000 + 12 3.0710 2.00000 + 13 3.5811 2.00000 + 14 3.6352 2.00000 + 15 3.6782 2.00000 + 16 3.6997 2.00000 + 17 3.7813 2.00001 + 18 3.8940 2.00037 + 19 3.8984 2.00041 + 20 4.0205 2.00673 + 21 5.4971 -0.00000 + 22 5.5672 -0.00000 + 23 5.6574 -0.00000 + 24 5.6665 -0.00000 + 25 7.0641 -0.00000 + 26 7.1149 -0.00000 + 27 7.1203 -0.00000 + 28 7.3657 -0.00000 + 29 7.7997 -0.00000 + 30 7.8658 -0.00000 + 31 8.0371 -0.00000 + 32 8.0497 -0.00000 + 33 8.4308 -0.00000 + 34 8.9878 -0.00000 + 35 9.0589 -0.00000 + 36 9.2993 -0.00000 + 37 9.3453 -0.00000 + 38 9.4783 -0.00000 + 39 9.5302 -0.00000 + 40 9.7658 -0.00000 + 41 10.1224 0.00000 + 42 10.3440 0.00000 + 43 10.6314 0.00000 + 44 10.8764 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4810 2.00000 + 2 1.6015 2.00000 + 3 1.6972 2.00000 + 4 1.8228 2.00000 + 5 2.5180 2.00000 + 6 2.5617 2.00000 + 7 2.6189 2.00000 + 8 2.6715 2.00000 + 9 2.7294 2.00000 + 10 2.7750 2.00000 + 11 2.8556 2.00000 + 12 2.8828 2.00000 + 13 2.9624 2.00000 + 14 3.1917 2.00000 + 15 3.3243 2.00000 + 16 3.5095 2.00000 + 17 3.5623 2.00000 + 18 3.5996 2.00000 + 19 3.6010 2.00000 + 20 3.6067 2.00000 + 21 6.4498 -0.00000 + 22 6.4894 -0.00000 + 23 6.5392 -0.00000 + 24 6.6219 -0.00000 + 25 7.0898 -0.00000 + 26 7.1143 -0.00000 + 27 7.4483 -0.00000 + 28 7.5059 -0.00000 + 29 7.9147 -0.00000 + 30 7.9282 -0.00000 + 31 7.9627 -0.00000 + 32 7.9931 -0.00000 + 33 8.5093 -0.00000 + 34 8.6924 -0.00000 + 35 8.8184 -0.00000 + 36 8.9434 -0.00000 + 37 9.2525 -0.00000 + 38 9.3908 -0.00000 + 39 9.4226 -0.00000 + 40 9.5404 -0.00000 + 41 10.2061 0.00000 + 42 10.3434 0.00000 + 43 10.3873 0.00000 + 44 10.5338 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5004 2.00000 + 2 1.6210 2.00000 + 3 1.7169 2.00000 + 4 1.8427 2.00000 + 5 2.2446 2.00000 + 6 2.3624 2.00000 + 7 2.4593 2.00000 + 8 2.5816 2.00000 + 9 2.8798 2.00000 + 10 2.8955 2.00000 + 11 3.0001 2.00000 + 12 3.1321 2.00000 + 13 3.1326 2.00000 + 14 3.2371 2.00000 + 15 3.3721 2.00000 + 16 3.4302 2.00000 + 17 3.5632 2.00000 + 18 3.6091 2.00000 + 19 3.6152 2.00000 + 20 3.6330 2.00000 + 21 6.2315 -0.00000 + 22 6.2458 -0.00000 + 23 6.3671 -0.00000 + 24 6.3836 -0.00000 + 25 7.1168 -0.00000 + 26 7.1518 -0.00000 + 27 7.4313 -0.00000 + 28 7.4744 -0.00000 + 29 7.9364 -0.00000 + 30 7.9488 -0.00000 + 31 8.0034 -0.00000 + 32 8.0529 -0.00000 + 33 8.6159 -0.00000 + 34 8.6649 -0.00000 + 35 8.8354 -0.00000 + 36 9.0597 -0.00000 + 37 9.2867 -0.00000 + 38 9.3545 -0.00000 + 39 9.5152 -0.00000 + 40 9.6061 -0.00000 + 41 10.2169 0.00000 + 42 10.3331 0.00000 + 43 10.4796 0.00000 + 44 10.6459 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5594 2.00000 + 2 1.6803 2.00000 + 3 1.7766 2.00000 + 4 1.9021 2.00000 + 5 2.0004 2.00000 + 6 2.1204 2.00000 + 7 2.2186 2.00000 + 8 2.3440 2.00000 + 9 2.9636 2.00000 + 10 3.1430 2.00000 + 11 3.2444 2.00000 + 12 3.2587 2.00000 + 13 3.3535 2.00000 + 14 3.3961 2.00000 + 15 3.4815 2.00000 + 16 3.4940 2.00000 + 17 3.5595 2.00000 + 18 3.6502 2.00000 + 19 3.6627 2.00000 + 20 3.7026 2.00000 + 21 5.7755 -0.00000 + 22 5.8415 -0.00000 + 23 5.8995 -0.00000 + 24 5.9448 -0.00000 + 25 7.1883 -0.00000 + 26 7.2014 -0.00000 + 27 7.4093 -0.00000 + 28 7.4854 -0.00000 + 29 7.8847 -0.00000 + 30 7.9195 -0.00000 + 31 7.9986 -0.00000 + 32 8.1631 -0.00000 + 33 8.7056 -0.00000 + 34 8.7332 -0.00000 + 35 8.9416 -0.00000 + 36 9.1658 -0.00000 + 37 9.3482 -0.00000 + 38 9.3625 -0.00000 + 39 9.5922 -0.00000 + 40 9.6546 -0.00000 + 41 10.3150 0.00000 + 42 10.4441 0.00000 + 43 10.6098 0.00000 + 44 10.8157 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6599 2.00000 + 2 1.7810 2.00000 + 3 1.8053 2.00000 + 4 1.8764 2.00000 + 5 1.9295 2.00000 + 6 2.0051 2.00000 + 7 2.0256 2.00000 + 8 2.1521 2.00000 + 9 3.0479 2.00000 + 10 3.1552 2.00000 + 11 3.2472 2.00000 + 12 3.3012 2.00000 + 13 3.4564 2.00000 + 14 3.4943 2.00000 + 15 3.5419 2.00000 + 16 3.6166 2.00000 + 17 3.7098 2.00000 + 18 3.7900 2.00002 + 19 3.8166 2.00004 + 20 3.8270 2.00005 + 21 5.4538 -0.00000 + 22 5.5036 -0.00000 + 23 5.5222 -0.00000 + 24 5.5588 -0.00000 + 25 7.2157 -0.00000 + 26 7.2454 -0.00000 + 27 7.4028 -0.00000 + 28 7.5381 -0.00000 + 29 7.8630 -0.00000 + 30 7.9208 -0.00000 + 31 7.9534 -0.00000 + 32 8.1007 -0.00000 + 33 8.6499 -0.00000 + 34 8.9195 -0.00000 + 35 9.0899 -0.00000 + 36 9.1390 -0.00000 + 37 9.3953 -0.00000 + 38 9.4406 -0.00000 + 39 9.5339 -0.00000 + 40 9.6022 -0.00000 + 41 10.4161 0.00000 + 42 10.5834 0.00000 + 43 10.7146 0.00000 + 44 10.9097 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.973 -0.015 0.044 0.015 + -0.004 -0.015 -0.240 -0.001 0.002 + 0.012 0.044 -0.001 -0.249 -0.000 + 0.004 0.015 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.390 -0.037 0.039 -0.111 -0.040 + -0.037 0.001 -0.002 0.003 0.002 + 0.039 -0.002 0.221 -0.007 0.011 + -0.111 0.003 -0.007 0.139 0.002 + -0.040 0.002 0.011 0.002 0.209 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1971: real time 0.1971 + FORLOC: cpu time 0.0120: real time 0.0120 + FORNL : cpu time 13.9596: real time 13.9615 + STRESS: cpu time 4.6661: real time 4.6666 + FORCOR: cpu time 0.0289: real time 0.0308 + FORHAR: cpu time 0.0219: real time 0.0219 + MIXING: cpu time 0.0051: real time 0.0051 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.66956 14.66956 14.66956 + Ewald -143.53090 -148.60744 -130.75341 0.00000 0.00000 -0.00000 + Hartree 1.18521 0.68948 1.05764 -0.00000 -0.00000 0.00000 + E(xc) -108.52915 -108.98823 -107.79440 0.00000 0.00000 -0.00000 + Local 7.69430 2.19308 11.57443 0.00000 0.00000 -0.00000 + n-local 130.62824 131.23499 128.18376 0.01966 0.07501 -0.21151 + augment 7.39833 7.55321 7.07967 -0.00000 -0.00000 0.00000 + Kinetic 215.29409 226.14058 200.76942 0.07354 -1.14624 -0.90329 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 124.80969 124.88523 124.78666 0.00000 0.00000 0.00000 + in kB 699.84997 700.27355 699.72084 0.00000 0.00000 0.00000 + external pressure = -0.05 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.73 + direct lattice vectors reciprocal lattice vectors + 6.899471416 0.000000000 0.000000000 0.144938639 0.000000000 0.000000000 + 0.000000000 8.160776364 0.000000000 0.000000000 0.122537361 0.000000000 + 0.000000000 0.000000000 5.074656493 0.000000000 0.000000000 0.197057673 + + length of vectors + 6.899471416 8.160776364 5.074656493 0.144938639 0.122537361 0.197057673 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.414E-01 0.104E+00 -.257E+00 -.441E+00 0.362E+00 -.116E+01 0.485E+00 -.464E+00 0.141E+01 0.388E-07 -.383E-06 0.183E-06 + 0.414E-01 -.104E+00 -.257E+00 0.441E+00 -.362E+00 -.116E+01 -.485E+00 0.464E+00 0.141E+01 -.387E-07 0.383E-06 0.183E-06 + -.414E-01 -.104E+00 -.257E+00 -.441E+00 -.362E+00 -.116E+01 0.485E+00 0.464E+00 0.141E+01 0.388E-07 0.383E-06 0.183E-06 + 0.414E-01 0.104E+00 -.257E+00 0.441E+00 0.362E+00 -.116E+01 -.485E+00 -.464E+00 0.141E+01 -.388E-07 -.383E-06 0.183E-06 + -.414E-01 0.104E+00 -.257E+00 -.441E+00 0.362E+00 -.116E+01 0.485E+00 -.464E+00 0.141E+01 0.388E-07 -.383E-06 0.183E-06 + 0.414E-01 -.104E+00 -.257E+00 0.441E+00 -.362E+00 -.116E+01 -.485E+00 0.464E+00 0.141E+01 -.388E-07 0.383E-06 0.183E-06 + -.414E-01 -.104E+00 -.257E+00 -.441E+00 -.362E+00 -.116E+01 0.485E+00 0.464E+00 0.141E+01 0.388E-07 0.383E-06 0.183E-06 + 0.414E-01 0.104E+00 -.257E+00 0.441E+00 0.362E+00 -.116E+01 -.485E+00 -.464E+00 0.141E+01 -.388E-07 -.383E-06 0.183E-06 + -.181E-01 -.371E-01 0.129E+00 -.511E-01 -.227E+00 0.721E+00 0.669E-01 0.262E+00 -.850E+00 0.315E-06 0.749E-06 0.271E-06 + 0.181E-01 0.371E-01 0.129E+00 0.511E-01 0.227E+00 0.721E+00 -.669E-01 -.262E+00 -.850E+00 -.315E-06 -.749E-06 0.271E-06 + -.181E-01 0.371E-01 0.129E+00 -.511E-01 0.227E+00 0.721E+00 0.669E-01 -.262E+00 -.850E+00 0.315E-06 -.749E-06 0.271E-06 + 0.181E-01 -.371E-01 0.129E+00 0.511E-01 -.227E+00 0.721E+00 -.669E-01 0.262E+00 -.850E+00 -.315E-06 0.749E-06 0.271E-06 + -.181E-01 -.371E-01 0.129E+00 -.511E-01 -.227E+00 0.721E+00 0.669E-01 0.262E+00 -.850E+00 0.315E-06 0.749E-06 0.271E-06 + 0.181E-01 0.371E-01 0.129E+00 0.511E-01 0.227E+00 0.721E+00 -.669E-01 -.262E+00 -.850E+00 -.315E-06 -.749E-06 0.271E-06 + -.181E-01 0.371E-01 0.129E+00 -.511E-01 0.227E+00 0.721E+00 0.669E-01 -.262E+00 -.850E+00 0.315E-06 -.749E-06 0.271E-06 + 0.181E-01 -.371E-01 0.129E+00 0.511E-01 -.227E+00 0.721E+00 -.669E-01 0.262E+00 -.850E+00 -.315E-06 0.749E-06 0.271E-06 + -.283E+00 -.148E+00 0.262E-01 -.648E+00 -.255E-01 0.735E-01 0.933E+00 0.175E+00 -.997E-01 -.350E-06 -.609E-06 -.518E-06 + 0.283E+00 0.148E+00 0.262E-01 0.648E+00 0.255E-01 0.735E-01 -.933E+00 -.175E+00 -.997E-01 0.350E-06 0.609E-06 -.518E-06 + -.283E+00 0.148E+00 0.262E-01 -.648E+00 0.255E-01 0.735E-01 0.933E+00 -.175E+00 -.997E-01 -.350E-06 0.609E-06 -.518E-06 + 0.283E+00 -.148E+00 0.262E-01 0.648E+00 -.255E-01 0.735E-01 -.933E+00 0.175E+00 -.997E-01 0.350E-06 -.609E-06 -.518E-06 + -.283E+00 -.148E+00 0.262E-01 -.648E+00 -.255E-01 0.735E-01 0.933E+00 0.175E+00 -.997E-01 -.350E-06 -.609E-06 -.518E-06 + 0.283E+00 0.148E+00 0.262E-01 0.648E+00 0.255E-01 0.735E-01 -.933E+00 -.175E+00 -.997E-01 0.350E-06 0.609E-06 -.518E-06 + -.283E+00 0.148E+00 0.262E-01 -.648E+00 0.255E-01 0.735E-01 0.933E+00 -.175E+00 -.997E-01 -.350E-06 0.609E-06 -.518E-06 + 0.283E+00 -.148E+00 0.262E-01 0.648E+00 -.255E-01 0.735E-01 -.933E+00 0.175E+00 -.997E-01 0.350E-06 -.609E-06 -.518E-06 + -.490E-01 -.631E-01 0.127E-01 -.196E+00 0.585E-01 0.369E-01 0.242E+00 0.179E-04 -.508E-01 -.151E-06 0.553E-06 0.102E-06 + 0.490E-01 0.631E-01 0.127E-01 0.196E+00 -.585E-01 0.369E-01 -.242E+00 -.179E-04 -.508E-01 0.151E-06 -.553E-06 0.102E-06 + -.490E-01 0.631E-01 0.127E-01 -.196E+00 -.585E-01 0.369E-01 0.242E+00 -.179E-04 -.508E-01 -.151E-06 -.553E-06 0.102E-06 + 0.490E-01 -.631E-01 0.127E-01 0.196E+00 0.585E-01 0.369E-01 -.242E+00 0.179E-04 -.508E-01 0.151E-06 0.553E-06 0.102E-06 + -.490E-01 -.631E-01 0.127E-01 -.196E+00 0.585E-01 0.369E-01 0.242E+00 0.179E-04 -.508E-01 -.151E-06 0.553E-06 0.102E-06 + 0.490E-01 0.631E-01 0.127E-01 0.196E+00 -.585E-01 0.369E-01 -.242E+00 -.179E-04 -.508E-01 0.151E-06 -.553E-06 0.102E-06 + -.490E-01 0.631E-01 0.127E-01 -.196E+00 -.585E-01 0.369E-01 0.242E+00 -.179E-04 -.508E-01 -.151E-06 -.553E-06 0.102E-06 + 0.490E-01 -.631E-01 0.127E-01 0.196E+00 0.585E-01 0.369E-01 -.242E+00 0.179E-04 -.508E-01 0.151E-06 0.553E-06 0.102E-06 + 0.438E-01 0.151E+00 0.992E-01 0.207E+00 -.145E+00 0.324E+00 -.242E+00 -.955E-04 -.425E+00 -.584E-06 0.206E-06 -.530E-07 + -.438E-01 -.151E+00 0.992E-01 -.207E+00 0.145E+00 0.324E+00 0.242E+00 0.955E-04 -.425E+00 0.584E-06 -.206E-06 -.530E-07 + 0.438E-01 -.151E+00 0.992E-01 0.207E+00 0.145E+00 0.324E+00 -.242E+00 0.955E-04 -.425E+00 -.584E-06 -.206E-06 -.530E-07 + -.438E-01 0.151E+00 0.992E-01 -.207E+00 -.145E+00 0.324E+00 0.242E+00 -.955E-04 -.425E+00 0.584E-06 0.206E-06 -.530E-07 + 0.438E-01 0.151E+00 0.992E-01 0.207E+00 -.145E+00 0.324E+00 -.242E+00 -.955E-04 -.425E+00 -.584E-06 0.206E-06 -.530E-07 + -.438E-01 -.151E+00 0.992E-01 -.207E+00 0.145E+00 0.324E+00 0.242E+00 0.955E-04 -.425E+00 0.584E-06 -.206E-06 -.530E-07 + 0.438E-01 -.151E+00 0.992E-01 0.207E+00 0.145E+00 0.324E+00 -.242E+00 0.955E-04 -.425E+00 -.584E-06 -.206E-06 -.530E-07 + -.438E-01 0.151E+00 0.992E-01 -.207E+00 -.145E+00 0.324E+00 0.242E+00 -.955E-04 -.425E+00 0.584E-06 0.206E-06 -.530E-07 + ----------------------------------------------------------------------------------------------- + -.287E-04 0.240E-04 0.798E-01 0.361E-15 0.222E-15 -.350E-14 0.111E-15 0.291E-16 -.806E-01 -.329E-13 -.669E-13 -.124E-06 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64138 0.94998 -0.00285 0.002637 0.002022 0.001604 + 6.25809 7.21080 -0.00285 -0.002637 -0.002022 0.001604 + 4.09112 3.13041 -0.00285 0.002637 -0.002022 0.001604 + 2.80835 5.03037 -0.00285 -0.002637 0.002022 0.001604 + 0.64138 5.03037 2.53448 0.002637 0.002022 0.001604 + 6.25809 3.13041 2.53448 -0.002637 -0.002022 0.001604 + 4.09112 7.21080 2.53448 0.002637 -0.002022 0.001604 + 2.80835 0.94998 2.53448 -0.002637 0.002022 0.001604 + 5.95796 7.36874 1.59187 -0.002306 -0.002705 0.000500 + 0.94151 0.79204 1.59187 0.002306 0.002705 0.000500 + 2.50823 4.87243 1.59187 -0.002306 0.002705 0.000500 + 4.39124 3.28835 1.59187 0.002306 -0.002705 0.000500 + 5.95796 3.28835 4.12919 -0.002306 -0.002705 0.000500 + 0.94151 4.87243 4.12919 0.002306 0.002705 0.000500 + 2.50823 0.79204 4.12919 -0.002306 0.002705 0.000500 + 4.39124 7.36874 4.12919 0.002306 -0.002705 0.000500 + 6.67363 0.95595 3.01191 0.001774 0.001278 -0.000076 + 0.22584 7.20483 3.01191 -0.001774 -0.001278 -0.000076 + 3.22389 3.12444 3.01191 0.001774 -0.001278 -0.000076 + 3.67558 5.03633 3.01191 -0.001774 0.001278 -0.000076 + 6.67363 5.03633 0.47459 0.001774 0.001278 -0.000076 + 0.22584 3.12444 0.47459 -0.001774 -0.001278 -0.000076 + 3.22389 7.20483 0.47459 0.001774 -0.001278 -0.000076 + 3.67558 0.95595 0.47459 -0.001774 0.001278 -0.000076 + 2.41979 2.18696 0.89725 -0.003448 -0.004554 -0.001114 + 4.47969 5.97381 0.89725 0.003448 0.004554 -0.001114 + 5.86952 1.89343 0.89725 -0.003448 0.004554 -0.001114 + 1.02995 6.26735 0.89725 0.003448 -0.004554 -0.001114 + 2.41979 6.26735 3.43458 -0.003448 -0.004554 -0.001114 + 4.47969 1.89343 3.43458 0.003448 0.004554 -0.001114 + 5.86952 5.97381 3.43458 -0.003448 0.004554 -0.001114 + 1.02995 2.18696 3.43458 0.003448 -0.004554 -0.001114 + 2.00687 7.44196 1.91477 0.008581 0.006044 -0.000914 + 4.89260 0.71882 1.91477 -0.008581 -0.006044 -0.000914 + 5.45661 4.79921 1.91477 0.008581 -0.006044 -0.000914 + 1.44286 3.36157 1.91477 -0.008581 0.006044 -0.000914 + 2.00687 3.36157 4.45210 0.008581 0.006044 -0.000914 + 4.89260 4.79921 4.45210 -0.008581 -0.006044 -0.000914 + 5.45661 0.71882 4.45210 0.008581 -0.006044 -0.000914 + 1.44286 7.44196 4.45210 -0.008581 0.006044 -0.000914 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.000831 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.92426788 eV + + energy without entropy= -16.93418635 energy(sigma->0) = -16.92757404 + enthalpy is TOTEN = 107.91218036 eV P V= 124.83644825 + + d Force = 0.3675919E-03[ 0.234E-03, 0.501E-03] d Energy = 0.3807362E-03-0.131E-04 + d Force = 0.4969830E-02[ 0.480E-02, 0.514E-02] d Ewald =-0.1023302E-01 0.152E-01 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0281: real time 0.0281 + + +-------------------------------------------------------------------------------------------------------- + + + Conjugate gradient step on ions: + trial-energy change: -0.000381 1 .order -0.000381 -0.000548 -0.000213 + (g-gl).g = 0.404E-03 g.g = 0.404E-03 gl.gl = 0.556E-03 + g(Force) = 0.395E-03 g(Stress)= 0.848E-05 ortho =-0.940E-07 + gamma = 0.72737 + trial = 1.35779 + opt step = 2.22200 (harmonic = 2.22200) maximal distance =0.00251119 + next E = 107.912113 (d E = -0.00045) + + +-------------------------------------------------------------------------------------------------------- + + + WAVPRE: cpu time 0.0065: real time 0.0065 + FEWALD executed in parallel + FEWALD: cpu time 0.0029: real time 0.0029 + GENKIN: cpu time 0.0287: real time 0.0287 + ORTHCH: cpu time 0.5367: real time 0.5368 + LOOP+: cpu time 47.2558: real time 47.3772 + + +----------------------------------------- Iteration 10( 1) --------------------------------------- + + + POTLOK: cpu time 0.0221: real time 0.0221 + SETDIJ: cpu time 0.0056: real time 0.0056 + EDDAV: cpu time 4.9749: real time 4.9755 + DOS: cpu time 0.0076: real time 0.0076 + CHARGE: cpu time 0.1723: real time 0.1723 + MIXING: cpu time 0.0029: real time 0.0029 + -------------------------------------------- + LOOP: cpu time 5.1876: real time 5.1902 + + eigenvalue-minimisations : 5732 + total energy-change (2. order) :-0.8164327E-02 (-0.2222211E-03) + number of electron 40.0000003 magnetization + augmentation part 0.9507014 magnetization + + free energy = -0.169324322033E+02 energy without entropy= -0.169422826241E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 10( 2) --------------------------------------- + + + POTLOK: cpu time 0.0215: real time 0.0216 + SETDIJ: cpu time 0.0062: real time 0.0062 + EDDAV: cpu time 5.6060: real time 5.6084 + DOS: cpu time 0.0073: real time 0.0073 + CHARGE: cpu time 0.1695: real time 0.1695 + MIXING: cpu time 0.0038: real time 0.0038 + -------------------------------------------- + LOOP: cpu time 5.8154: real time 5.8195 + + eigenvalue-minimisations : 6784 + total energy-change (2. order) : 0.3667856E-06 (-0.3960459E-05) + number of electron 40.0000003 magnetization + augmentation part 0.9507194 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8377 + 1.8377 + + free energy = -0.169324318365E+02 energy without entropy= -0.169422803409E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 10( 3) --------------------------------------- + + + POTLOK: cpu time 0.0217: real time 0.0218 + SETDIJ: cpu time 0.0067: real time 0.0078 + EDDAV: cpu time 4.9343: real time 4.9357 + DOS: cpu time 0.0072: real time 0.0072 + CHARGE: cpu time 0.1693: real time 0.1693 + MIXING: cpu time 0.0039: real time 0.0039 + -------------------------------------------- + LOOP: cpu time 5.1443: real time 5.1474 + + eigenvalue-minimisations : 5548 + total energy-change (2. order) : 0.6156122E-06 (-0.1823161E-06) + number of electron 40.0000003 magnetization + augmentation part 0.9507209 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.8637 + 1.3143 2.4131 + + free energy = -0.169324312209E+02 energy without entropy= -0.169422784328E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 10( 4) --------------------------------------- + + + POTLOK: cpu time 0.0219: real time 0.0219 + SETDIJ: cpu time 0.0059: real time 0.0059 + EDDAV: cpu time 3.6275: real time 3.6279 + DOS: cpu time 0.0068: real time 0.0068 + CHARGE: cpu time 0.2163: real time 0.2163 + MIXING: cpu time 0.0034: real time 0.0034 + -------------------------------------------- + LOOP: cpu time 3.8829: real time 3.8833 + + eigenvalue-minimisations : 3156 + total energy-change (2. order) :-0.3281855E-07 (-0.3718773E-07) + number of electron 40.0000003 magnetization + augmentation part 0.9507217 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7886 + 0.9885 1.6750 2.7024 + + free energy = -0.169324312537E+02 energy without entropy= -0.169422783669E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 10( 5) --------------------------------------- + + + POTLOK: cpu time 0.0193: real time 0.0193 + SETDIJ: cpu time 0.0046: real time 0.0046 + EDDAV: cpu time 3.4024: real time 3.4028 + DOS: cpu time 0.0070: real time 0.0070 + CHARGE: cpu time 0.2087: real time 0.2087 + MIXING: cpu time 0.0037: real time 0.0037 + -------------------------------------------- + LOOP: cpu time 3.6467: real time 3.6471 + + eigenvalue-minimisations : 2928 + total energy-change (2. order) :-0.2638899E-08 (-0.5471545E-08) + number of electron 40.0000003 magnetization + augmentation part 0.9507221 magnetization + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.7628 + 2.8533 1.9088 0.9743 1.3148 + + free energy = -0.169324312564E+02 energy without entropy= -0.169422784118E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 10( 6) --------------------------------------- + + + POTLOK: cpu time 0.0203: real time 0.0203 + SETDIJ: cpu time 0.0062: real time 0.0062 + EDDAV: cpu time 3.2267: real time 3.2279 + DOS: cpu time 0.0071: real time 0.0071 + -------------------------------------------- + LOOP: cpu time 3.2612: real time 3.2624 + + eigenvalue-minimisations : 2812 + total energy-change (2. order) :-0.4326694E-08 (-0.8674758E-09) + number of electron 40.0000003 magnetization + augmentation part 0.9507221 magnetization + + free energy = -0.169324312607E+02 energy without entropy= -0.169422784052E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 0.9748 + (the norm of the test charge is 1.0000) + 1 -25.9708 2 -25.9708 3 -25.9708 4 -25.9708 5 -25.9708 + 6 -25.9708 7 -25.9708 8 -25.9708 9 -25.8928 10 -25.8928 + 11 -25.8928 12 -25.8928 13 -25.8928 14 -25.8928 15 -25.8928 + 16 -25.8928 17 -25.9187 18 -25.9187 19 -25.9187 20 -25.9187 + 21 -25.9187 22 -25.9187 23 -25.9187 24 -25.9187 25 -25.8324 + 26 -25.8324 27 -25.8324 28 -25.8324 29 -25.8324 30 -25.8324 + 31 -25.8324 32 -25.8324 33 -26.0240 34 -26.0240 35 -26.0240 + 36 -26.0240 37 -26.0240 38 -26.0240 39 -26.0240 40 -26.0240 + + + + E-fermi : 4.4702 XC(G=0): -9.5542 alpha+bet :-20.5593 + + + k-point 1 : 0.0000 0.0833 0.0500 + band No. band energies occupation + 1 0.9601 2.00000 + 2 1.5062 2.00000 + 3 1.7435 2.00000 + 4 1.9934 2.00000 + 5 2.0313 2.00000 + 6 2.5103 2.00000 + 7 2.6157 2.00000 + 8 2.7657 2.00000 + 9 2.8651 2.00000 + 10 2.9220 2.00000 + 11 3.2237 2.00000 + 12 3.2703 2.00000 + 13 3.3990 2.00000 + 14 3.4292 2.00000 + 15 3.5246 2.00000 + 16 3.6273 2.00000 + 17 3.8443 2.00009 + 18 4.1843 2.06128 + 19 4.2138 2.06997 + 20 4.3921 1.60891 + 21 5.5181 -0.00000 + 22 5.7113 -0.00000 + 23 5.9222 -0.00000 + 24 6.1045 -0.00000 + 25 6.2221 -0.00000 + 26 6.2774 -0.00000 + 27 6.5407 -0.00000 + 28 7.1221 -0.00000 + 29 7.1324 -0.00000 + 30 7.2519 -0.00000 + 31 7.3749 -0.00000 + 32 7.3983 -0.00000 + 33 8.0606 -0.00000 + 34 8.1281 -0.00000 + 35 8.8193 -0.00000 + 36 8.9507 -0.00000 + 37 9.2401 -0.00000 + 38 9.4113 -0.00000 + 39 9.7945 -0.00000 + 40 9.8313 -0.00000 + 41 10.0845 0.00000 + 42 10.2981 0.00000 + 43 10.5553 0.00000 + 44 10.8026 0.00000 + + k-point 2 : 0.1429 0.0833 0.0500 + band No. band energies occupation + 1 0.9784 2.00000 + 2 1.5263 2.00000 + 3 1.7060 2.00000 + 4 1.7643 2.00000 + 5 2.2712 2.00000 + 6 2.3824 2.00000 + 7 2.5236 2.00000 + 8 2.8633 2.00000 + 9 2.9612 2.00000 + 10 3.1418 2.00000 + 11 3.2512 2.00000 + 12 3.2840 2.00000 + 13 3.3726 2.00000 + 14 3.4355 2.00000 + 15 3.5541 2.00000 + 16 3.6306 2.00000 + 17 3.7785 2.00001 + 18 4.0630 2.01419 + 19 4.2323 2.07051 + 20 4.4357 1.28766 + 21 5.4144 -0.00000 + 22 5.5654 -0.00000 + 23 5.8883 -0.00000 + 24 5.9997 -0.00000 + 25 6.1341 -0.00000 + 26 6.5346 -0.00000 + 27 6.6119 -0.00000 + 28 6.8133 -0.00000 + 29 7.1046 -0.00000 + 30 7.2408 -0.00000 + 31 7.2954 -0.00000 + 32 7.3921 -0.00000 + 33 8.3128 -0.00000 + 34 8.3664 -0.00000 + 35 8.8319 -0.00000 + 36 8.8791 -0.00000 + 37 9.2600 -0.00000 + 38 9.4159 -0.00000 + 39 9.7324 -0.00000 + 40 9.9125 -0.00000 + 41 10.0600 0.00000 + 42 10.1535 0.00000 + 43 10.8433 0.00000 + 44 10.9314 0.00000 + + k-point 3 : 0.2857 0.0833 0.0500 + band No. band energies occupation + 1 1.0343 2.00000 + 2 1.4609 2.00000 + 3 1.5870 2.00000 + 4 1.8267 2.00000 + 5 2.0313 2.00000 + 6 2.2809 2.00000 + 7 2.8135 2.00000 + 8 2.9644 2.00000 + 9 3.2333 2.00000 + 10 3.2657 2.00000 + 11 3.3206 2.00000 + 12 3.3364 2.00000 + 13 3.4285 2.00000 + 14 3.5253 2.00000 + 15 3.5788 2.00000 + 16 3.6264 2.00000 + 17 3.7299 2.00000 + 18 3.8506 2.00011 + 19 4.1529 2.04737 + 20 4.3416 1.87686 + 21 5.3200 -0.00000 + 22 5.4232 -0.00000 + 23 5.7800 -0.00000 + 24 5.8327 -0.00000 + 25 5.8872 -0.00000 + 26 6.2215 -0.00000 + 27 6.7600 -0.00000 + 28 7.0277 -0.00000 + 29 7.1106 -0.00000 + 30 7.2199 -0.00000 + 31 7.2655 -0.00000 + 32 7.5417 -0.00000 + 33 8.4619 -0.00000 + 34 8.4898 -0.00000 + 35 8.7469 -0.00000 + 36 8.8992 -0.00000 + 37 9.2061 -0.00000 + 38 9.3266 -0.00000 + 39 9.7931 -0.00000 + 40 9.8718 -0.00000 + 41 10.1414 0.00000 + 42 10.3396 0.00000 + 43 11.0116 0.00000 + 44 11.1466 0.00000 + + k-point 4 : 0.4286 0.0833 0.0500 + band No. band energies occupation + 1 1.1304 2.00000 + 2 1.2709 2.00000 + 3 1.6897 2.00000 + 4 1.8358 2.00000 + 5 1.9344 2.00000 + 6 2.0841 2.00000 + 7 3.0504 2.00000 + 8 3.1549 2.00000 + 9 3.2896 2.00000 + 10 3.3889 2.00000 + 11 3.4319 2.00000 + 12 3.4524 2.00000 + 13 3.5030 2.00000 + 14 3.5164 2.00000 + 15 3.6430 2.00000 + 16 3.6472 2.00000 + 17 3.7089 2.00000 + 18 3.7647 2.00001 + 19 3.9155 2.00063 + 20 4.1148 2.03065 + 21 5.3550 -0.00000 + 22 5.4779 -0.00000 + 23 5.6254 -0.00000 + 24 5.6532 -0.00000 + 25 5.7620 -0.00000 + 26 5.7635 -0.00000 + 27 6.9602 -0.00000 + 28 7.1205 -0.00000 + 29 7.1518 -0.00000 + 30 7.1611 -0.00000 + 31 7.6154 -0.00000 + 32 7.8537 -0.00000 + 33 8.1294 -0.00000 + 34 8.2052 -0.00000 + 35 8.8769 -0.00000 + 36 8.9431 -0.00000 + 37 9.0995 -0.00000 + 38 9.1796 -0.00000 + 39 9.8034 -0.00000 + 40 9.8763 -0.00000 + 41 10.4320 0.00000 + 42 10.5270 0.00000 + 43 11.2335 0.00000 + 44 11.3491 0.00000 + + k-point 5 : 0.0000 0.2500 0.0500 + band No. band energies occupation + 1 0.9937 2.00000 + 2 1.3153 2.00000 + 3 2.0246 2.00000 + 4 2.0252 2.00000 + 5 2.0684 2.00000 + 6 2.3330 2.00000 + 7 2.4246 2.00000 + 8 2.9384 2.00000 + 9 3.0194 2.00000 + 10 3.0502 2.00000 + 11 3.1364 2.00000 + 12 3.2016 2.00000 + 13 3.4044 2.00000 + 14 3.4949 2.00000 + 15 3.5146 2.00000 + 16 3.6976 2.00000 + 17 3.7550 2.00001 + 18 4.0130 2.00570 + 19 4.0378 2.00915 + 20 4.2346 2.07021 + 21 5.6638 -0.00000 + 22 5.7918 -0.00000 + 23 5.9736 -0.00000 + 24 6.1994 -0.00000 + 25 6.3221 -0.00000 + 26 6.4202 -0.00000 + 27 6.5131 -0.00000 + 28 6.7799 -0.00000 + 29 7.2846 -0.00000 + 30 7.3161 -0.00000 + 31 7.3704 -0.00000 + 32 7.6352 -0.00000 + 33 8.0126 -0.00000 + 34 8.1528 -0.00000 + 35 8.8947 -0.00000 + 36 9.0397 -0.00000 + 37 9.0724 -0.00000 + 38 9.2321 -0.00000 + 39 9.5124 -0.00000 + 40 9.8501 -0.00000 + 41 9.9043 -0.00000 + 42 10.3771 0.00000 + 43 10.4880 0.00000 + 44 10.9126 0.00000 + + k-point 6 : 0.1429 0.2500 0.0500 + band No. band energies occupation + 1 1.0121 2.00000 + 2 1.3347 2.00000 + 3 1.7411 2.00000 + 4 2.0373 2.00000 + 5 2.0877 2.00000 + 6 2.4141 2.00000 + 7 2.7227 2.00000 + 8 2.8110 2.00000 + 9 2.9720 2.00000 + 10 3.0470 2.00000 + 11 3.2180 2.00000 + 12 3.3475 2.00000 + 13 3.3987 2.00000 + 14 3.5042 2.00000 + 15 3.5364 2.00000 + 16 3.7009 2.00000 + 17 3.7059 2.00000 + 18 3.8318 2.00006 + 19 4.1153 2.03085 + 20 4.2766 2.04306 + 21 5.5468 -0.00000 + 22 5.7217 -0.00000 + 23 5.9380 -0.00000 + 24 6.0494 -0.00000 + 25 6.2399 -0.00000 + 26 6.4785 -0.00000 + 27 6.6318 -0.00000 + 28 6.7178 -0.00000 + 29 7.1576 -0.00000 + 30 7.3081 -0.00000 + 31 7.3291 -0.00000 + 32 7.6106 -0.00000 + 33 8.2497 -0.00000 + 34 8.3318 -0.00000 + 35 8.8910 -0.00000 + 36 8.9996 -0.00000 + 37 9.0213 -0.00000 + 38 9.2313 -0.00000 + 39 9.6058 -0.00000 + 40 9.8092 -0.00000 + 41 9.9156 -0.00000 + 42 10.4371 0.00000 + 43 10.5062 0.00000 + 44 11.0262 0.00000 + + k-point 7 : 0.2857 0.2500 0.0500 + band No. band energies occupation + 1 1.0683 2.00000 + 2 1.3937 2.00000 + 3 1.4961 2.00000 + 4 1.8316 2.00000 + 5 2.1156 2.00000 + 6 2.5744 2.00000 + 7 2.8356 2.00000 + 8 2.9901 2.00000 + 9 3.1308 2.00000 + 10 3.1310 2.00000 + 11 3.2658 2.00000 + 12 3.3046 2.00000 + 13 3.4753 2.00000 + 14 3.5355 2.00000 + 15 3.6155 2.00000 + 16 3.6212 2.00000 + 17 3.6790 2.00000 + 18 3.7271 2.00000 + 19 4.0524 2.01185 + 20 4.2293 2.07079 + 21 5.3898 -0.00000 + 22 5.6569 -0.00000 + 23 5.7546 -0.00000 + 24 5.8279 -0.00000 + 25 6.1153 -0.00000 + 26 6.1856 -0.00000 + 27 6.6070 -0.00000 + 28 7.0689 -0.00000 + 29 7.1119 -0.00000 + 30 7.3582 -0.00000 + 31 7.4861 -0.00000 + 32 7.5506 -0.00000 + 33 8.3398 -0.00000 + 34 8.5003 -0.00000 + 35 8.7864 -0.00000 + 36 8.8814 -0.00000 + 37 9.0417 -0.00000 + 38 9.1596 -0.00000 + 39 9.6301 -0.00000 + 40 9.7951 -0.00000 + 41 10.1241 0.00000 + 42 10.5541 0.00000 + 43 10.7062 0.00000 + 44 11.2228 0.00000 + + k-point 8 : 0.4286 0.2500 0.0500 + band No. band energies occupation + 1 1.1649 2.00000 + 2 1.3058 2.00000 + 3 1.4942 2.00000 + 4 1.6392 2.00000 + 5 2.2243 2.00000 + 6 2.3776 2.00000 + 7 3.0866 2.00000 + 8 3.1951 2.00000 + 9 3.2158 2.00000 + 10 3.3112 2.00000 + 11 3.3705 2.00000 + 12 3.4125 2.00000 + 13 3.4321 2.00000 + 14 3.4427 2.00000 + 15 3.5527 2.00000 + 16 3.6263 2.00000 + 17 3.7463 2.00000 + 18 3.7656 2.00001 + 19 3.8475 2.00010 + 20 4.0089 2.00526 + 21 5.4144 -0.00000 + 22 5.5971 -0.00000 + 23 5.6073 -0.00000 + 24 5.7759 -0.00000 + 25 5.7932 -0.00000 + 26 5.9741 -0.00000 + 27 6.7791 -0.00000 + 28 6.9531 -0.00000 + 29 7.3323 -0.00000 + 30 7.4405 -0.00000 + 31 7.7205 -0.00000 + 32 7.7945 -0.00000 + 33 8.1381 -0.00000 + 34 8.1793 -0.00000 + 35 8.8329 -0.00000 + 36 8.8852 -0.00000 + 37 8.9637 -0.00000 + 38 9.0533 -0.00000 + 39 9.6138 -0.00000 + 40 9.7775 -0.00000 + 41 10.4039 0.00000 + 42 10.5786 0.00000 + 43 11.1451 0.00000 + 44 11.3634 0.00000 + + k-point 9 : 0.0000 0.4167 0.0500 + band No. band energies occupation + 1 1.0623 2.00000 + 2 1.1684 2.00000 + 3 2.0905 2.00000 + 4 2.1423 2.00000 + 5 2.1921 2.00000 + 6 2.2402 2.00000 + 7 2.3775 2.00000 + 8 2.7040 2.00000 + 9 3.0141 2.00000 + 10 3.1059 2.00000 + 11 3.3395 2.00000 + 12 3.4367 2.00000 + 13 3.4372 2.00000 + 14 3.4810 2.00000 + 15 3.5977 2.00000 + 16 3.6020 2.00000 + 17 3.7422 2.00000 + 18 3.7840 2.00001 + 19 3.8337 2.00006 + 20 4.0233 2.00698 + 21 5.9136 -0.00000 + 22 5.9250 -0.00000 + 23 6.0712 -0.00000 + 24 6.1466 -0.00000 + 25 6.1950 -0.00000 + 26 6.4238 -0.00000 + 27 6.6392 -0.00000 + 28 6.9191 -0.00000 + 29 6.9903 -0.00000 + 30 7.2386 -0.00000 + 31 7.5941 -0.00000 + 32 7.8508 -0.00000 + 33 8.1766 -0.00000 + 34 8.3695 -0.00000 + 35 8.5122 -0.00000 + 36 9.0201 -0.00000 + 37 9.0840 -0.00000 + 38 9.1579 -0.00000 + 39 9.3042 -0.00000 + 40 9.5879 -0.00000 + 41 9.9242 -0.00000 + 42 10.0369 0.00000 + 43 10.7384 0.00000 + 44 10.9125 0.00000 + + k-point 10 : 0.1429 0.4167 0.0500 + band No. band energies occupation + 1 1.0810 2.00000 + 2 1.1874 2.00000 + 3 1.8126 2.00000 + 4 1.9226 2.00000 + 5 2.3686 2.00000 + 6 2.4748 2.00000 + 7 2.5961 2.00000 + 8 2.7340 2.00000 + 9 3.0332 2.00000 + 10 3.1243 2.00000 + 11 3.1424 2.00000 + 12 3.4397 2.00000 + 13 3.4864 2.00000 + 14 3.4946 2.00000 + 15 3.5003 2.00000 + 16 3.6155 2.00000 + 17 3.6896 2.00000 + 18 3.8415 2.00008 + 19 3.9174 2.00066 + 20 4.0490 2.01119 + 21 5.7404 -0.00000 + 22 5.9111 -0.00000 + 23 5.9454 -0.00000 + 24 6.1169 -0.00000 + 25 6.2300 -0.00000 + 26 6.3634 -0.00000 + 27 6.5687 -0.00000 + 28 6.9112 -0.00000 + 29 6.9938 -0.00000 + 30 7.2021 -0.00000 + 31 7.6243 -0.00000 + 32 7.9826 -0.00000 + 33 8.1771 -0.00000 + 34 8.4806 -0.00000 + 35 8.5593 -0.00000 + 36 8.9919 -0.00000 + 37 9.0237 -0.00000 + 38 9.2586 -0.00000 + 39 9.2682 -0.00000 + 40 9.5524 -0.00000 + 41 9.9850 0.00000 + 42 10.1052 0.00000 + 43 10.7544 0.00000 + 44 10.9613 0.00000 + + k-point 11 : 0.2857 0.4167 0.0500 + band No. band energies occupation + 1 1.1378 2.00000 + 2 1.2451 2.00000 + 3 1.5680 2.00000 + 4 1.6788 2.00000 + 5 2.4413 2.00000 + 6 2.7717 2.00000 + 7 2.9104 2.00000 + 8 2.9254 2.00000 + 9 2.9764 2.00000 + 10 3.1063 2.00000 + 11 3.1785 2.00000 + 12 3.2733 2.00000 + 13 3.3751 2.00000 + 14 3.4607 2.00000 + 15 3.5327 2.00000 + 16 3.6047 2.00000 + 17 3.7446 2.00000 + 18 3.8958 2.00037 + 19 3.8969 2.00039 + 20 4.0719 2.01641 + 21 5.5162 -0.00000 + 22 5.6414 -0.00000 + 23 5.8816 -0.00000 + 24 6.0487 -0.00000 + 25 6.0661 -0.00000 + 26 6.3458 -0.00000 + 27 6.4324 -0.00000 + 28 6.7732 -0.00000 + 29 7.2561 -0.00000 + 30 7.3841 -0.00000 + 31 7.7225 -0.00000 + 32 8.0567 -0.00000 + 33 8.0924 -0.00000 + 34 8.4827 -0.00000 + 35 8.5835 -0.00000 + 36 8.8649 -0.00000 + 37 8.9611 -0.00000 + 38 9.2828 -0.00000 + 39 9.2943 -0.00000 + 40 9.5604 -0.00000 + 41 10.2051 0.00000 + 42 10.3905 0.00000 + 43 10.7529 0.00000 + 44 11.0117 0.00000 + + k-point 12 : 0.4286 0.4167 0.0500 + band No. band energies occupation + 1 1.2352 2.00000 + 2 1.3439 2.00000 + 3 1.3770 2.00000 + 4 1.4870 2.00000 + 5 2.5559 2.00000 + 6 2.7135 2.00000 + 7 2.9077 2.00000 + 8 3.0722 2.00000 + 9 3.1532 2.00000 + 10 3.2377 2.00000 + 11 3.2681 2.00000 + 12 3.3576 2.00000 + 13 3.3768 2.00000 + 14 3.4097 2.00000 + 15 3.6080 2.00000 + 16 3.6806 2.00000 + 17 3.6823 2.00000 + 18 3.7700 2.00001 + 19 3.8202 2.00004 + 20 3.8925 2.00034 + 21 5.4997 -0.00000 + 22 5.5576 -0.00000 + 23 5.6833 -0.00000 + 24 5.7537 -0.00000 + 25 6.1304 -0.00000 + 26 6.2827 -0.00000 + 27 6.4784 -0.00000 + 28 6.6348 -0.00000 + 29 7.5598 -0.00000 + 30 7.6956 -0.00000 + 31 7.7990 -0.00000 + 32 8.0112 -0.00000 + 33 8.0188 -0.00000 + 34 8.3180 -0.00000 + 35 8.4312 -0.00000 + 36 8.6252 -0.00000 + 37 9.0315 -0.00000 + 38 9.2616 -0.00000 + 39 9.3240 -0.00000 + 40 9.5421 -0.00000 + 41 10.4957 0.00000 + 42 10.6805 0.00000 + 43 10.7537 0.00000 + 44 10.9556 0.00000 + + k-point 13 : 0.0000 0.0833 0.1500 + band No. band energies occupation + 1 0.9993 2.00000 + 2 1.5534 2.00000 + 3 1.7938 2.00000 + 4 2.0343 2.00000 + 5 2.0742 2.00000 + 6 2.4856 2.00000 + 7 2.5768 2.00000 + 8 2.6593 2.00000 + 9 2.8058 2.00000 + 10 2.9018 2.00000 + 11 3.0746 2.00000 + 12 3.2945 2.00000 + 13 3.3067 2.00000 + 14 3.3435 2.00000 + 15 3.4501 2.00000 + 16 3.7628 2.00001 + 17 3.8630 2.00015 + 18 4.0033 2.00470 + 19 4.0455 2.01051 + 20 4.1736 2.05678 + 21 5.7473 -0.00000 + 22 5.9377 -0.00000 + 23 6.1856 -0.00000 + 24 6.4615 -0.00000 + 25 6.5024 -0.00000 + 26 6.5604 -0.00000 + 27 6.6003 -0.00000 + 28 6.7487 -0.00000 + 29 7.1552 -0.00000 + 30 7.2658 -0.00000 + 31 7.3680 -0.00000 + 32 7.3725 -0.00000 + 33 8.1378 -0.00000 + 34 8.4593 -0.00000 + 35 8.9344 -0.00000 + 36 9.0424 -0.00000 + 37 9.0502 -0.00000 + 38 9.5781 -0.00000 + 39 9.7939 -0.00000 + 40 9.8019 -0.00000 + 41 9.9937 0.00000 + 42 10.0073 0.00000 + 43 10.4088 0.00000 + 44 10.4530 0.00000 + + k-point 14 : 0.1429 0.0833 0.1500 + band No. band energies occupation + 1 1.0177 2.00000 + 2 1.5734 2.00000 + 3 1.7477 2.00000 + 4 1.8143 2.00000 + 5 2.3143 2.00000 + 6 2.4234 2.00000 + 7 2.5190 2.00000 + 8 2.5681 2.00000 + 9 2.9442 2.00000 + 10 3.0908 2.00000 + 11 3.1400 2.00000 + 12 3.1919 2.00000 + 13 3.3132 2.00000 + 14 3.3778 2.00000 + 15 3.5881 2.00000 + 16 3.6572 2.00000 + 17 3.8756 2.00022 + 18 3.9620 2.00192 + 19 4.0849 2.02010 + 20 4.1562 2.04887 + 21 5.6894 -0.00000 + 22 5.7932 -0.00000 + 23 6.1211 -0.00000 + 24 6.3355 -0.00000 + 25 6.3870 -0.00000 + 26 6.4757 -0.00000 + 27 6.7160 -0.00000 + 28 6.7621 -0.00000 + 29 7.1553 -0.00000 + 30 7.2230 -0.00000 + 31 7.2691 -0.00000 + 32 7.4435 -0.00000 + 33 8.2960 -0.00000 + 34 8.5304 -0.00000 + 35 8.9158 -0.00000 + 36 9.0188 -0.00000 + 37 9.0632 -0.00000 + 38 9.5897 -0.00000 + 39 9.7993 -0.00000 + 40 9.8814 -0.00000 + 41 9.8949 -0.00000 + 42 10.0912 0.00000 + 43 10.6396 0.00000 + 44 10.7157 0.00000 + + k-point 15 : 0.2857 0.0833 0.1500 + band No. band energies occupation + 1 1.0739 2.00000 + 2 1.5021 2.00000 + 3 1.6339 2.00000 + 4 1.8762 2.00000 + 5 2.0761 2.00000 + 6 2.3243 2.00000 + 7 2.5802 2.00000 + 8 2.8503 2.00000 + 9 2.9702 2.00000 + 10 3.1392 2.00000 + 11 3.2809 2.00000 + 12 3.3637 2.00000 + 13 3.4528 2.00000 + 14 3.4721 2.00000 + 15 3.5342 2.00000 + 16 3.7434 2.00000 + 17 3.8120 2.00003 + 18 3.9061 2.00049 + 19 4.0070 2.00506 + 20 4.1127 2.02983 + 21 5.4491 -0.00000 + 22 5.7647 -0.00000 + 23 5.9775 -0.00000 + 24 5.9933 -0.00000 + 25 6.1169 -0.00000 + 26 6.2928 -0.00000 + 27 6.7011 -0.00000 + 28 7.0343 -0.00000 + 29 7.0457 -0.00000 + 30 7.1650 -0.00000 + 31 7.3112 -0.00000 + 32 7.6850 -0.00000 + 33 8.3437 -0.00000 + 34 8.4223 -0.00000 + 35 8.9410 -0.00000 + 36 9.0461 -0.00000 + 37 9.0854 -0.00000 + 38 9.4825 -0.00000 + 39 9.8803 -0.00000 + 40 10.0833 0.00000 + 41 10.1023 0.00000 + 42 10.2995 0.00000 + 43 10.9781 0.00000 + 44 11.1158 0.00000 + + k-point 16 : 0.4286 0.0833 0.1500 + band No. band energies occupation + 1 1.1704 2.00000 + 2 1.3115 2.00000 + 3 1.7363 2.00000 + 4 1.8822 2.00000 + 5 1.9821 2.00000 + 6 2.1302 2.00000 + 7 2.6756 2.00000 + 8 2.8073 2.00000 + 9 3.2079 2.00000 + 10 3.3054 2.00000 + 11 3.3383 2.00000 + 12 3.5069 2.00000 + 13 3.5515 2.00000 + 14 3.6341 2.00000 + 15 3.6343 2.00000 + 16 3.6504 2.00000 + 17 3.7907 2.00002 + 18 3.8627 2.00015 + 19 3.8715 2.00019 + 20 3.9229 2.00075 + 21 5.4354 -0.00000 + 22 5.6586 -0.00000 + 23 5.7212 -0.00000 + 24 5.7833 -0.00000 + 25 5.9830 -0.00000 + 26 6.1832 -0.00000 + 27 6.7341 -0.00000 + 28 6.8681 -0.00000 + 29 7.1483 -0.00000 + 30 7.1980 -0.00000 + 31 7.6121 -0.00000 + 32 7.9461 -0.00000 + 33 8.0278 -0.00000 + 34 8.1852 -0.00000 + 35 9.0736 -0.00000 + 36 9.1334 -0.00000 + 37 9.1801 -0.00000 + 38 9.3390 -0.00000 + 39 9.9044 -0.00000 + 40 10.0804 0.00000 + 41 10.3492 0.00000 + 42 10.4487 0.00000 + 43 11.2277 0.00000 + 44 11.3308 0.00000 + + k-point 17 : 0.0000 0.2500 0.1500 + band No. band energies occupation + 1 1.0335 2.00000 + 2 1.3599 2.00000 + 3 2.0666 2.00000 + 4 2.0783 2.00000 + 5 2.1116 2.00000 + 6 2.3727 2.00000 + 7 2.4686 2.00000 + 8 2.5523 2.00000 + 9 2.9069 2.00000 + 10 3.0614 2.00000 + 11 3.0857 2.00000 + 12 3.1628 2.00000 + 13 3.3553 2.00000 + 14 3.5086 2.00000 + 15 3.5149 2.00000 + 16 3.6695 2.00000 + 17 3.8514 2.00011 + 18 3.8779 2.00023 + 19 3.9374 2.00108 + 20 4.0455 2.01050 + 21 5.8309 -0.00000 + 22 6.0164 -0.00000 + 23 6.0393 -0.00000 + 24 6.3304 -0.00000 + 25 6.4771 -0.00000 + 26 6.5973 -0.00000 + 27 6.6769 -0.00000 + 28 6.7940 -0.00000 + 29 7.3423 -0.00000 + 30 7.3886 -0.00000 + 31 7.4737 -0.00000 + 32 7.6354 -0.00000 + 33 8.1666 -0.00000 + 34 8.3021 -0.00000 + 35 8.7369 -0.00000 + 36 8.9293 -0.00000 + 37 9.2084 -0.00000 + 38 9.4300 -0.00000 + 39 9.6043 -0.00000 + 40 9.7060 -0.00000 + 41 9.8106 -0.00000 + 42 10.3233 0.00000 + 43 10.3665 0.00000 + 44 10.9190 0.00000 + + k-point 18 : 0.1429 0.2500 0.1500 + band No. band energies occupation + 1 1.0520 2.00000 + 2 1.3794 2.00000 + 3 1.7832 2.00000 + 4 2.0893 2.00000 + 5 2.1327 2.00000 + 6 2.4557 2.00000 + 7 2.5625 2.00000 + 8 2.7766 2.00000 + 9 2.8457 2.00000 + 10 2.9259 2.00000 + 11 3.1125 2.00000 + 12 3.2029 2.00000 + 13 3.3989 2.00000 + 14 3.4997 2.00000 + 15 3.5907 2.00000 + 16 3.6464 2.00000 + 17 3.7964 2.00002 + 18 3.8674 2.00017 + 19 3.9758 2.00262 + 20 4.0988 2.02466 + 21 5.7244 -0.00000 + 22 5.9520 -0.00000 + 23 5.9698 -0.00000 + 24 6.2213 -0.00000 + 25 6.2989 -0.00000 + 26 6.5838 -0.00000 + 27 6.6470 -0.00000 + 28 6.9092 -0.00000 + 29 7.2274 -0.00000 + 30 7.3778 -0.00000 + 31 7.4993 -0.00000 + 32 7.6250 -0.00000 + 33 8.3434 -0.00000 + 34 8.3534 -0.00000 + 35 8.8280 -0.00000 + 36 8.9038 -0.00000 + 37 9.1890 -0.00000 + 38 9.3955 -0.00000 + 39 9.6076 -0.00000 + 40 9.7283 -0.00000 + 41 9.8865 -0.00000 + 42 10.3937 0.00000 + 43 10.5308 0.00000 + 44 10.9498 0.00000 + + k-point 19 : 0.2857 0.2500 0.1500 + band No. band energies occupation + 1 1.1085 2.00000 + 2 1.4384 2.00000 + 3 1.5378 2.00000 + 4 1.8763 2.00000 + 5 2.1670 2.00000 + 6 2.6091 2.00000 + 7 2.6283 2.00000 + 8 2.8734 2.00000 + 9 2.9830 2.00000 + 10 3.0185 2.00000 + 11 3.1514 2.00000 + 12 3.1919 2.00000 + 13 3.3641 2.00000 + 14 3.6061 2.00000 + 15 3.6166 2.00000 + 16 3.6481 2.00000 + 17 3.7927 2.00002 + 18 3.9080 2.00052 + 19 3.9466 2.00134 + 20 4.1069 2.02758 + 21 5.4713 -0.00000 + 22 5.8342 -0.00000 + 23 5.9013 -0.00000 + 24 5.9594 -0.00000 + 25 6.0215 -0.00000 + 26 6.5239 -0.00000 + 27 6.5276 -0.00000 + 28 7.0099 -0.00000 + 29 7.1678 -0.00000 + 30 7.4104 -0.00000 + 31 7.6251 -0.00000 + 32 7.6745 -0.00000 + 33 8.3200 -0.00000 + 34 8.4362 -0.00000 + 35 8.8551 -0.00000 + 36 8.8997 -0.00000 + 37 9.2598 -0.00000 + 38 9.2874 -0.00000 + 39 9.6407 -0.00000 + 40 9.9838 0.00000 + 41 10.0726 0.00000 + 42 10.5122 0.00000 + 43 10.7624 0.00000 + 44 11.1241 0.00000 + + k-point 20 : 0.4286 0.2500 0.1500 + band No. band energies occupation + 1 1.2054 2.00000 + 2 1.3469 2.00000 + 3 1.5390 2.00000 + 4 1.6839 2.00000 + 5 2.2733 2.00000 + 6 2.4228 2.00000 + 7 2.7195 2.00000 + 8 2.8548 2.00000 + 9 3.0702 2.00000 + 10 3.1930 2.00000 + 11 3.2790 2.00000 + 12 3.3864 2.00000 + 13 3.4554 2.00000 + 14 3.4976 2.00000 + 15 3.6799 2.00000 + 16 3.7091 2.00000 + 17 3.7865 2.00001 + 18 3.8827 2.00026 + 19 3.9262 2.00082 + 20 3.9291 2.00088 + 21 5.4061 -0.00000 + 22 5.6763 -0.00000 + 23 5.6818 -0.00000 + 24 5.7597 -0.00000 + 25 6.0472 -0.00000 + 26 6.3744 -0.00000 + 27 6.5916 -0.00000 + 28 6.7747 -0.00000 + 29 7.3021 -0.00000 + 30 7.4611 -0.00000 + 31 7.8085 -0.00000 + 32 7.8949 -0.00000 + 33 8.1577 -0.00000 + 34 8.1723 -0.00000 + 35 8.9531 -0.00000 + 36 9.0165 -0.00000 + 37 9.1638 -0.00000 + 38 9.3267 -0.00000 + 39 9.6186 -0.00000 + 40 10.0517 0.00000 + 41 10.3118 0.00000 + 42 10.4977 0.00000 + 43 11.1137 0.00000 + 44 11.2431 0.00000 + + k-point 21 : 0.0000 0.4167 0.1500 + band No. band energies occupation + 1 1.1032 2.00000 + 2 1.2110 2.00000 + 3 2.1325 2.00000 + 4 2.1864 2.00000 + 5 2.2344 2.00000 + 6 2.2878 2.00000 + 7 2.4311 2.00000 + 8 2.6319 2.00000 + 9 2.7526 2.00000 + 10 2.7650 2.00000 + 11 3.3223 2.00000 + 12 3.4361 2.00000 + 13 3.4663 2.00000 + 14 3.4995 2.00000 + 15 3.6377 2.00000 + 16 3.6450 2.00000 + 17 3.6820 2.00000 + 18 3.7728 2.00001 + 19 3.8129 2.00003 + 20 3.8387 2.00008 + 21 5.9373 -0.00000 + 22 6.0744 -0.00000 + 23 6.0821 -0.00000 + 24 6.1878 -0.00000 + 25 6.3423 -0.00000 + 26 6.3441 -0.00000 + 27 6.9612 -0.00000 + 28 7.1353 -0.00000 + 29 7.2182 -0.00000 + 30 7.4000 -0.00000 + 31 7.7191 -0.00000 + 32 8.0386 -0.00000 + 33 8.0950 -0.00000 + 34 8.3638 -0.00000 + 35 8.4333 -0.00000 + 36 9.0128 -0.00000 + 37 9.1279 -0.00000 + 38 9.1964 -0.00000 + 39 9.3990 -0.00000 + 40 9.5534 -0.00000 + 41 9.9118 -0.00000 + 42 10.0500 0.00000 + 43 10.7207 0.00000 + 44 10.9132 0.00000 + + k-point 22 : 0.1429 0.4167 0.1500 + band No. band energies occupation + 1 1.1220 2.00000 + 2 1.2300 2.00000 + 3 1.8555 2.00000 + 4 1.9663 2.00000 + 5 2.4247 2.00000 + 6 2.5176 2.00000 + 7 2.6202 2.00000 + 8 2.6716 2.00000 + 9 2.7678 2.00000 + 10 2.7989 2.00000 + 11 3.1516 2.00000 + 12 3.3038 2.00000 + 13 3.3881 2.00000 + 14 3.5128 2.00000 + 15 3.6152 2.00000 + 16 3.7010 2.00000 + 17 3.7509 2.00000 + 18 3.8244 2.00005 + 19 3.8511 2.00011 + 20 3.9619 2.00192 + 21 5.8714 -0.00000 + 22 5.9541 -0.00000 + 23 6.0177 -0.00000 + 24 6.1277 -0.00000 + 25 6.1333 -0.00000 + 26 6.3429 -0.00000 + 27 6.9266 -0.00000 + 28 7.1495 -0.00000 + 29 7.1941 -0.00000 + 30 7.4169 -0.00000 + 31 7.7009 -0.00000 + 32 8.0451 -0.00000 + 33 8.1392 -0.00000 + 34 8.5073 -0.00000 + 35 8.5633 -0.00000 + 36 8.9811 -0.00000 + 37 9.0916 -0.00000 + 38 9.1960 -0.00000 + 39 9.4051 -0.00000 + 40 9.5913 -0.00000 + 41 9.9877 0.00000 + 42 10.1619 0.00000 + 43 10.7256 0.00000 + 44 10.9394 0.00000 + + k-point 23 : 0.2857 0.4167 0.1500 + band No. band energies occupation + 1 1.1790 2.00000 + 2 1.2879 2.00000 + 3 1.6105 2.00000 + 4 1.7224 2.00000 + 5 2.4947 2.00000 + 6 2.7067 2.00000 + 7 2.8176 2.00000 + 8 2.8342 2.00000 + 9 2.9397 2.00000 + 10 2.9769 2.00000 + 11 3.0404 2.00000 + 12 3.1153 2.00000 + 13 3.2121 2.00000 + 14 3.3183 2.00000 + 15 3.7445 2.00000 + 16 3.7498 2.00000 + 17 3.8364 2.00007 + 18 3.8787 2.00024 + 19 3.9429 2.00123 + 20 4.0362 2.00888 + 21 5.6056 -0.00000 + 22 5.7772 -0.00000 + 23 5.7968 -0.00000 + 24 5.8720 -0.00000 + 25 6.1307 -0.00000 + 26 6.3167 -0.00000 + 27 6.7556 -0.00000 + 28 6.9264 -0.00000 + 29 7.3826 -0.00000 + 30 7.5738 -0.00000 + 31 7.7666 -0.00000 + 32 8.0954 -0.00000 + 33 8.0983 -0.00000 + 34 8.5250 -0.00000 + 35 8.6777 -0.00000 + 36 8.9518 -0.00000 + 37 9.0214 -0.00000 + 38 9.2231 -0.00000 + 39 9.5083 -0.00000 + 40 9.7687 -0.00000 + 41 10.1696 0.00000 + 42 10.4074 0.00000 + 43 10.7083 0.00000 + 44 10.9896 0.00000 + + k-point 24 : 0.4286 0.4167 0.1500 + band No. band energies occupation + 1 1.2768 2.00000 + 2 1.3869 2.00000 + 3 1.4191 2.00000 + 4 1.5304 2.00000 + 5 2.6042 2.00000 + 6 2.7513 2.00000 + 7 2.8079 2.00000 + 8 2.9141 2.00000 + 9 2.9495 2.00000 + 10 2.9625 2.00000 + 11 3.0547 2.00000 + 12 3.1380 2.00000 + 13 3.3957 2.00000 + 14 3.4412 2.00000 + 15 3.7239 2.00000 + 16 3.7498 2.00000 + 17 3.8370 2.00007 + 18 3.8836 2.00027 + 19 3.9419 2.00120 + 20 3.9549 2.00163 + 21 5.4812 -0.00000 + 22 5.6015 -0.00000 + 23 5.6503 -0.00000 + 24 5.6860 -0.00000 + 25 6.2442 -0.00000 + 26 6.4201 -0.00000 + 27 6.5242 -0.00000 + 28 6.6475 -0.00000 + 29 7.5409 -0.00000 + 30 7.7577 -0.00000 + 31 7.7915 -0.00000 + 32 8.0404 -0.00000 + 33 8.1945 -0.00000 + 34 8.4657 -0.00000 + 35 8.6197 -0.00000 + 36 8.8483 -0.00000 + 37 9.0595 -0.00000 + 38 9.2715 -0.00000 + 39 9.5453 -0.00000 + 40 9.8264 -0.00000 + 41 10.4201 0.00000 + 42 10.6157 0.00000 + 43 10.7159 0.00000 + 44 10.9380 0.00000 + + k-point 25 : 0.0000 0.0833 0.2500 + band No. band energies occupation + 1 1.0784 2.00000 + 2 1.6479 2.00000 + 3 1.8938 2.00000 + 4 2.1163 2.00000 + 5 2.1424 2.00000 + 6 2.1587 2.00000 + 7 2.6411 2.00000 + 8 2.7447 2.00000 + 9 2.7892 2.00000 + 10 2.8568 2.00000 + 11 2.9708 2.00000 + 12 3.0650 2.00000 + 13 3.1401 2.00000 + 14 3.1908 2.00000 + 15 3.4279 2.00000 + 16 3.6176 2.00000 + 17 3.7417 2.00000 + 18 3.8188 2.00004 + 19 3.8912 2.00033 + 20 4.2491 2.06582 + 21 6.0859 -0.00000 + 22 6.1893 -0.00000 + 23 6.2405 -0.00000 + 24 6.6225 -0.00000 + 25 6.9023 -0.00000 + 26 6.9898 -0.00000 + 27 7.0139 -0.00000 + 28 7.0728 -0.00000 + 29 7.2644 -0.00000 + 30 7.3207 -0.00000 + 31 7.3340 -0.00000 + 32 7.3795 -0.00000 + 33 8.1422 -0.00000 + 34 8.5773 -0.00000 + 35 8.6042 -0.00000 + 36 9.1266 -0.00000 + 37 9.2515 -0.00000 + 38 9.5530 -0.00000 + 39 9.6471 -0.00000 + 40 9.6946 -0.00000 + 41 9.8332 -0.00000 + 42 10.0674 0.00000 + 43 10.2260 0.00000 + 44 10.3483 0.00000 + + k-point 26 : 0.1429 0.0833 0.2500 + band No. band energies occupation + 1 1.0971 2.00000 + 2 1.6678 2.00000 + 3 1.8312 2.00000 + 4 1.9138 2.00000 + 5 2.1627 2.00000 + 6 2.4032 2.00000 + 7 2.5028 2.00000 + 8 2.6376 2.00000 + 9 2.8091 2.00000 + 10 2.8883 2.00000 + 11 3.0236 2.00000 + 12 3.0858 2.00000 + 13 3.2207 2.00000 + 14 3.4220 2.00000 + 15 3.4579 2.00000 + 16 3.4820 2.00000 + 17 3.7204 2.00000 + 18 3.9011 2.00043 + 19 3.9208 2.00072 + 20 4.2517 2.06452 + 21 5.9485 -0.00000 + 22 6.1154 -0.00000 + 23 6.1285 -0.00000 + 24 6.5221 -0.00000 + 25 6.6553 -0.00000 + 26 6.9263 -0.00000 + 27 6.9567 -0.00000 + 28 7.1010 -0.00000 + 29 7.1705 -0.00000 + 30 7.2688 -0.00000 + 31 7.3614 -0.00000 + 32 7.5558 -0.00000 + 33 8.2844 -0.00000 + 34 8.5389 -0.00000 + 35 8.7367 -0.00000 + 36 9.0411 -0.00000 + 37 9.2395 -0.00000 + 38 9.4576 -0.00000 + 39 9.7341 -0.00000 + 40 9.7791 -0.00000 + 41 9.9708 0.00000 + 42 10.2332 0.00000 + 43 10.4226 0.00000 + 44 10.5738 0.00000 + + k-point 27 : 0.2857 0.0833 0.2500 + band No. band energies occupation + 1 1.1538 2.00000 + 2 1.5850 2.00000 + 3 1.7278 2.00000 + 4 1.9741 2.00000 + 5 2.1648 2.00000 + 6 2.2251 2.00000 + 7 2.4085 2.00000 + 8 2.6608 2.00000 + 9 2.8434 2.00000 + 10 2.9407 2.00000 + 11 3.1404 2.00000 + 12 3.2605 2.00000 + 13 3.3500 2.00000 + 14 3.4985 2.00000 + 15 3.5278 2.00000 + 16 3.5783 2.00000 + 17 3.7478 2.00000 + 18 3.8702 2.00019 + 19 4.0112 2.00550 + 20 4.2422 2.06844 + 21 5.5969 -0.00000 + 22 5.9679 -0.00000 + 23 5.9980 -0.00000 + 24 6.2091 -0.00000 + 25 6.4287 -0.00000 + 26 6.6845 -0.00000 + 27 6.8526 -0.00000 + 28 6.8721 -0.00000 + 29 7.2322 -0.00000 + 30 7.2825 -0.00000 + 31 7.4886 -0.00000 + 32 7.7705 -0.00000 + 33 8.2986 -0.00000 + 34 8.3105 -0.00000 + 35 9.0184 -0.00000 + 36 9.0978 -0.00000 + 37 9.3152 -0.00000 + 38 9.4889 -0.00000 + 39 9.8285 -0.00000 + 40 10.0042 0.00000 + 41 10.2160 0.00000 + 42 10.5020 0.00000 + 43 10.7191 0.00000 + 44 10.9595 0.00000 + + k-point 28 : 0.4286 0.0833 0.2500 + band No. band energies occupation + 1 1.2512 2.00000 + 2 1.3933 2.00000 + 3 1.8293 2.00000 + 4 1.9743 2.00000 + 5 2.0762 2.00000 + 6 2.2196 2.00000 + 7 2.3282 2.00000 + 8 2.4731 2.00000 + 9 2.9433 2.00000 + 10 3.0683 2.00000 + 11 3.2586 2.00000 + 12 3.3596 2.00000 + 13 3.4478 2.00000 + 14 3.6081 2.00000 + 15 3.6461 2.00000 + 16 3.6672 2.00000 + 17 3.7619 2.00001 + 18 3.8425 2.00008 + 19 3.9987 2.00427 + 20 4.1712 2.05575 + 21 5.5192 -0.00000 + 22 5.7543 -0.00000 + 23 5.8190 -0.00000 + 24 5.8883 -0.00000 + 25 6.4881 -0.00000 + 26 6.5435 -0.00000 + 27 6.6099 -0.00000 + 28 6.7645 -0.00000 + 29 7.2661 -0.00000 + 30 7.3134 -0.00000 + 31 7.7126 -0.00000 + 32 7.9146 -0.00000 + 33 8.0510 -0.00000 + 34 8.0794 -0.00000 + 35 9.2861 -0.00000 + 36 9.3355 -0.00000 + 37 9.4123 -0.00000 + 38 9.5209 -0.00000 + 39 9.8989 -0.00000 + 40 10.1995 0.00000 + 41 10.2736 0.00000 + 42 10.3349 0.00000 + 43 11.0868 0.00000 + 44 11.2483 0.00000 + + k-point 29 : 0.0000 0.2500 0.2500 + band No. band energies occupation + 1 1.1138 2.00000 + 2 1.4496 2.00000 + 3 2.1496 2.00000 + 4 2.1846 2.00000 + 5 2.1856 2.00000 + 6 2.1969 2.00000 + 7 2.4643 2.00000 + 8 2.5554 2.00000 + 9 2.5773 2.00000 + 10 3.0507 2.00000 + 11 3.1738 2.00000 + 12 3.2115 2.00000 + 13 3.2350 2.00000 + 14 3.2890 2.00000 + 15 3.3347 2.00000 + 16 3.4947 2.00000 + 17 3.6091 2.00000 + 18 3.8058 2.00003 + 19 3.8619 2.00015 + 20 4.1488 2.04546 + 21 6.0603 -0.00000 + 22 6.1045 -0.00000 + 23 6.3041 -0.00000 + 24 6.3167 -0.00000 + 25 6.8525 -0.00000 + 26 6.8613 -0.00000 + 27 7.0123 -0.00000 + 28 7.3046 -0.00000 + 29 7.3361 -0.00000 + 30 7.5460 -0.00000 + 31 7.6135 -0.00000 + 32 7.6389 -0.00000 + 33 8.1799 -0.00000 + 34 8.3811 -0.00000 + 35 8.5733 -0.00000 + 36 9.0680 -0.00000 + 37 9.3706 -0.00000 + 38 9.4038 -0.00000 + 39 9.6067 -0.00000 + 40 9.6589 -0.00000 + 41 9.9169 -0.00000 + 42 10.1539 0.00000 + 43 10.2138 0.00000 + 44 10.6098 0.00000 + + k-point 30 : 0.1429 0.2500 0.2500 + band No. band energies occupation + 1 1.1325 2.00000 + 2 1.4691 2.00000 + 3 1.8677 2.00000 + 4 2.1834 2.00000 + 5 2.2140 2.00000 + 6 2.2250 2.00000 + 7 2.5351 2.00000 + 8 2.5997 2.00000 + 9 2.8504 2.00000 + 10 2.8630 2.00000 + 11 2.9905 2.00000 + 12 3.2206 2.00000 + 13 3.2961 2.00000 + 14 3.3829 2.00000 + 15 3.3870 2.00000 + 16 3.5415 2.00000 + 17 3.7112 2.00000 + 18 3.8169 2.00004 + 19 3.8679 2.00018 + 20 4.1556 2.04863 + 21 5.9211 -0.00000 + 22 6.0083 -0.00000 + 23 6.1998 -0.00000 + 24 6.3274 -0.00000 + 25 6.5285 -0.00000 + 26 6.7804 -0.00000 + 27 7.0141 -0.00000 + 28 7.2342 -0.00000 + 29 7.3320 -0.00000 + 30 7.5584 -0.00000 + 31 7.6480 -0.00000 + 32 7.6755 -0.00000 + 33 8.3698 -0.00000 + 34 8.4498 -0.00000 + 35 8.6264 -0.00000 + 36 9.0312 -0.00000 + 37 9.2743 -0.00000 + 38 9.3849 -0.00000 + 39 9.6686 -0.00000 + 40 9.7640 -0.00000 + 41 10.0120 0.00000 + 42 10.3010 0.00000 + 43 10.4117 0.00000 + 44 10.6807 0.00000 + + k-point 31 : 0.2857 0.2500 0.2500 + band No. band energies occupation + 1 1.1895 2.00000 + 2 1.5282 2.00000 + 3 1.6216 2.00000 + 4 1.9658 2.00000 + 5 2.2482 2.00000 + 6 2.2886 2.00000 + 7 2.6490 2.00000 + 8 2.6555 2.00000 + 9 2.7539 2.00000 + 10 2.9482 2.00000 + 11 3.0726 2.00000 + 12 3.2231 2.00000 + 13 3.3117 2.00000 + 14 3.4324 2.00000 + 15 3.6116 2.00000 + 16 3.6395 2.00000 + 17 3.7507 2.00000 + 18 3.8015 2.00002 + 19 3.9792 2.00282 + 20 4.1610 2.05108 + 21 5.5680 -0.00000 + 22 5.8700 -0.00000 + 23 6.0023 -0.00000 + 24 6.0677 -0.00000 + 25 6.3634 -0.00000 + 26 6.5851 -0.00000 + 27 6.9462 -0.00000 + 28 6.9827 -0.00000 + 29 7.3914 -0.00000 + 30 7.5305 -0.00000 + 31 7.7432 -0.00000 + 32 7.8041 -0.00000 + 33 8.3208 -0.00000 + 34 8.4631 -0.00000 + 35 8.8521 -0.00000 + 36 9.0990 -0.00000 + 37 9.3424 -0.00000 + 38 9.4915 -0.00000 + 39 9.7123 -0.00000 + 40 9.9248 -0.00000 + 41 10.2580 0.00000 + 42 10.4173 0.00000 + 43 10.7248 0.00000 + 44 10.9122 0.00000 + + k-point 32 : 0.4286 0.2500 0.2500 + band No. band energies occupation + 1 1.2873 2.00000 + 2 1.4297 2.00000 + 3 1.6288 2.00000 + 4 1.7738 2.00000 + 5 2.3394 2.00000 + 6 2.3992 2.00000 + 7 2.4753 2.00000 + 8 2.5614 2.00000 + 9 2.7535 2.00000 + 10 2.8972 2.00000 + 11 3.3349 2.00000 + 12 3.4236 2.00000 + 13 3.5044 2.00000 + 14 3.5511 2.00000 + 15 3.5585 2.00000 + 16 3.6484 2.00000 + 17 3.7042 2.00000 + 18 3.8662 2.00017 + 19 3.9974 2.00416 + 20 4.1193 2.03245 + 21 5.4465 -0.00000 + 22 5.7270 -0.00000 + 23 5.7522 -0.00000 + 24 5.7667 -0.00000 + 25 6.4307 -0.00000 + 26 6.5257 -0.00000 + 27 6.6605 -0.00000 + 28 6.9196 -0.00000 + 29 7.4136 -0.00000 + 30 7.5472 -0.00000 + 31 7.8640 -0.00000 + 32 7.9234 -0.00000 + 33 8.1151 -0.00000 + 34 8.3104 -0.00000 + 35 9.1680 -0.00000 + 36 9.2644 -0.00000 + 37 9.4016 -0.00000 + 38 9.6039 -0.00000 + 39 9.6727 -0.00000 + 40 10.1014 0.00000 + 41 10.3695 0.00000 + 42 10.3763 0.00000 + 43 10.8371 0.00000 + 44 11.0398 0.00000 + + k-point 33 : 0.0000 0.4167 0.2500 + band No. band energies occupation + 1 1.1857 2.00000 + 2 1.2966 2.00000 + 3 2.2173 2.00000 + 4 2.2706 2.00000 + 5 2.2733 2.00000 + 6 2.3242 2.00000 + 7 2.3801 2.00000 + 8 2.4038 2.00000 + 9 2.5382 2.00000 + 10 2.8831 2.00000 + 11 3.1882 2.00000 + 12 3.3056 2.00000 + 13 3.3205 2.00000 + 14 3.4403 2.00000 + 15 3.4496 2.00000 + 16 3.5115 2.00000 + 17 3.6075 2.00000 + 18 3.7241 2.00000 + 19 3.7265 2.00000 + 20 3.9481 2.00139 + 21 6.0047 -0.00000 + 22 6.0901 -0.00000 + 23 6.2643 -0.00000 + 24 6.4508 -0.00000 + 25 6.5412 -0.00000 + 26 6.6525 -0.00000 + 27 7.1537 -0.00000 + 28 7.2782 -0.00000 + 29 7.5445 -0.00000 + 30 7.6473 -0.00000 + 31 7.9838 -0.00000 + 32 8.0533 -0.00000 + 33 8.1593 -0.00000 + 34 8.4003 -0.00000 + 35 8.5034 -0.00000 + 36 9.0977 -0.00000 + 37 9.1729 -0.00000 + 38 9.2301 -0.00000 + 39 9.5331 -0.00000 + 40 9.6464 -0.00000 + 41 9.7761 -0.00000 + 42 9.9243 -0.00000 + 43 10.6700 0.00000 + 44 10.8870 0.00000 + + k-point 34 : 0.1429 0.4167 0.2500 + band No. band energies occupation + 1 1.2046 2.00000 + 2 1.3158 2.00000 + 3 1.9415 2.00000 + 4 2.0540 2.00000 + 5 2.2931 2.00000 + 6 2.4236 2.00000 + 7 2.5349 2.00000 + 8 2.6024 2.00000 + 9 2.7249 2.00000 + 10 2.9077 2.00000 + 11 2.9939 2.00000 + 12 3.1336 2.00000 + 13 3.2421 2.00000 + 14 3.5075 2.00000 + 15 3.5181 2.00000 + 16 3.6288 2.00000 + 17 3.6892 2.00000 + 18 3.7123 2.00000 + 19 3.8287 2.00006 + 20 3.9632 2.00197 + 21 5.9503 -0.00000 + 22 5.9968 -0.00000 + 23 6.0813 -0.00000 + 24 6.2848 -0.00000 + 25 6.4398 -0.00000 + 26 6.6001 -0.00000 + 27 7.1268 -0.00000 + 28 7.2192 -0.00000 + 29 7.5444 -0.00000 + 30 7.6722 -0.00000 + 31 7.9443 -0.00000 + 32 8.1149 -0.00000 + 33 8.2290 -0.00000 + 34 8.4507 -0.00000 + 35 8.6719 -0.00000 + 36 9.0649 -0.00000 + 37 9.1288 -0.00000 + 38 9.2726 -0.00000 + 39 9.5631 -0.00000 + 40 9.7377 -0.00000 + 41 9.8764 -0.00000 + 42 10.0790 0.00000 + 43 10.6570 0.00000 + 44 10.8606 0.00000 + + k-point 35 : 0.2857 0.4167 0.2500 + band No. band energies occupation + 1 1.2621 2.00000 + 2 1.3740 2.00000 + 3 1.6960 2.00000 + 4 1.8100 2.00000 + 5 2.3522 2.00000 + 6 2.4838 2.00000 + 7 2.6025 2.00000 + 8 2.7783 2.00000 + 9 2.8899 2.00000 + 10 2.9523 2.00000 + 11 3.0365 2.00000 + 12 3.0561 2.00000 + 13 3.1153 2.00000 + 14 3.3604 2.00000 + 15 3.7078 2.00000 + 16 3.7112 2.00000 + 17 3.7798 2.00001 + 18 3.8581 2.00013 + 19 3.9343 2.00100 + 20 3.9996 2.00435 + 21 5.6461 -0.00000 + 22 5.7893 -0.00000 + 23 5.8730 -0.00000 + 24 5.8825 -0.00000 + 25 6.4385 -0.00000 + 26 6.5078 -0.00000 + 27 6.9973 -0.00000 + 28 7.0058 -0.00000 + 29 7.6042 -0.00000 + 30 7.7667 -0.00000 + 31 7.9328 -0.00000 + 32 8.1496 -0.00000 + 33 8.2209 -0.00000 + 34 8.5535 -0.00000 + 35 8.7909 -0.00000 + 36 9.1508 -0.00000 + 37 9.1615 -0.00000 + 38 9.3506 -0.00000 + 39 9.7317 -0.00000 + 40 9.9622 0.00000 + 41 10.0239 0.00000 + 42 10.3413 0.00000 + 43 10.6088 0.00000 + 44 10.9116 0.00000 + + k-point 36 : 0.4286 0.4167 0.2500 + band No. band energies occupation + 1 1.3606 2.00000 + 2 1.4735 2.00000 + 3 1.5038 2.00000 + 4 1.6176 2.00000 + 5 2.4510 2.00000 + 6 2.5835 2.00000 + 7 2.5887 2.00000 + 8 2.7184 2.00000 + 9 2.7274 2.00000 + 10 2.8622 2.00000 + 11 3.0655 2.00000 + 12 3.2049 2.00000 + 13 3.4407 2.00000 + 14 3.4913 2.00000 + 15 3.7203 2.00000 + 16 3.7297 2.00000 + 17 3.7777 2.00001 + 18 3.9238 2.00077 + 19 3.9487 2.00141 + 20 4.0170 2.00617 + 21 5.4565 -0.00000 + 22 5.5790 -0.00000 + 23 5.6637 -0.00000 + 24 5.6815 -0.00000 + 25 6.4768 -0.00000 + 26 6.5151 -0.00000 + 27 6.7498 -0.00000 + 28 6.8661 -0.00000 + 29 7.6625 -0.00000 + 30 7.8569 -0.00000 + 31 7.8712 -0.00000 + 32 8.0701 -0.00000 + 33 8.2973 -0.00000 + 34 8.6716 -0.00000 + 35 8.8256 -0.00000 + 36 9.0707 -0.00000 + 37 9.3185 -0.00000 + 38 9.4379 -0.00000 + 39 9.8205 -0.00000 + 40 10.0783 0.00000 + 41 10.2402 0.00000 + 42 10.4830 0.00000 + 43 10.6208 0.00000 + 44 10.8414 0.00000 + + k-point 37 : 0.0000 0.0833 0.3500 + band No. band energies occupation + 1 1.1991 2.00000 + 2 1.7896 2.00000 + 3 1.8330 2.00000 + 4 2.0425 2.00000 + 5 2.2367 2.00000 + 6 2.2821 2.00000 + 7 2.4951 2.00000 + 8 2.7369 2.00000 + 9 2.7694 2.00000 + 10 2.8507 2.00000 + 11 2.8549 2.00000 + 12 2.9072 2.00000 + 13 3.0733 2.00000 + 14 3.1024 2.00000 + 15 3.4169 2.00000 + 16 3.4270 2.00000 + 17 3.6013 2.00000 + 18 3.6176 2.00000 + 19 3.6812 2.00000 + 20 4.3747 1.71501 + 21 6.1184 -0.00000 + 22 6.4566 -0.00000 + 23 6.4976 -0.00000 + 24 7.0646 -0.00000 + 25 7.1543 -0.00000 + 26 7.2075 -0.00000 + 27 7.2384 -0.00000 + 28 7.3089 -0.00000 + 29 7.4220 -0.00000 + 30 7.5501 -0.00000 + 31 7.5782 -0.00000 + 32 7.8798 -0.00000 + 33 8.1290 -0.00000 + 34 8.1961 -0.00000 + 35 8.5808 -0.00000 + 36 9.1898 -0.00000 + 37 9.3543 -0.00000 + 38 9.3673 -0.00000 + 39 9.4801 -0.00000 + 40 9.4984 -0.00000 + 41 9.6609 -0.00000 + 42 9.7401 -0.00000 + 43 10.0218 0.00000 + 44 10.6905 0.00000 + + k-point 38 : 0.1429 0.0833 0.3500 + band No. band energies occupation + 1 1.2179 2.00000 + 2 1.8082 2.00000 + 3 1.8537 2.00000 + 4 1.9565 2.00000 + 5 2.0628 2.00000 + 6 2.4997 2.00000 + 7 2.5158 2.00000 + 8 2.5993 2.00000 + 9 2.6278 2.00000 + 10 2.7956 2.00000 + 11 2.7960 2.00000 + 12 3.1187 2.00000 + 13 3.1882 2.00000 + 14 3.2068 2.00000 + 15 3.3852 2.00000 + 16 3.4292 2.00000 + 17 3.6116 2.00000 + 18 3.7308 2.00000 + 19 3.7814 2.00001 + 20 4.3744 1.71684 + 21 6.0568 -0.00000 + 22 6.1602 -0.00000 + 23 6.3958 -0.00000 + 24 6.8007 -0.00000 + 25 6.8920 -0.00000 + 26 7.1111 -0.00000 + 27 7.2546 -0.00000 + 28 7.2689 -0.00000 + 29 7.4061 -0.00000 + 30 7.6116 -0.00000 + 31 7.6338 -0.00000 + 32 7.8517 -0.00000 + 33 8.2988 -0.00000 + 34 8.4323 -0.00000 + 35 8.6442 -0.00000 + 36 9.0659 -0.00000 + 37 9.1834 -0.00000 + 38 9.4182 -0.00000 + 39 9.5322 -0.00000 + 40 9.6773 -0.00000 + 41 9.8856 -0.00000 + 42 9.8978 -0.00000 + 43 10.2755 0.00000 + 44 10.6386 0.00000 + + k-point 39 : 0.2857 0.0833 0.3500 + band No. band energies occupation + 1 1.2754 2.00000 + 2 1.7101 2.00000 + 3 1.8646 2.00000 + 4 1.9158 2.00000 + 5 2.1233 2.00000 + 6 2.2872 2.00000 + 7 2.3621 2.00000 + 8 2.5624 2.00000 + 9 2.5657 2.00000 + 10 2.8294 2.00000 + 11 2.9705 2.00000 + 12 3.0596 2.00000 + 13 3.2594 2.00000 + 14 3.4257 2.00000 + 15 3.5041 2.00000 + 16 3.6882 2.00000 + 17 3.7064 2.00000 + 18 3.8210 2.00004 + 19 3.9291 2.00088 + 20 4.3516 1.83367 + 21 5.7217 -0.00000 + 22 5.9038 -0.00000 + 23 6.1023 -0.00000 + 24 6.2891 -0.00000 + 25 6.8080 -0.00000 + 26 6.8082 -0.00000 + 27 6.8907 -0.00000 + 28 7.2242 -0.00000 + 29 7.4893 -0.00000 + 30 7.7076 -0.00000 + 31 7.7432 -0.00000 + 32 7.8985 -0.00000 + 33 8.2089 -0.00000 + 34 8.4197 -0.00000 + 35 9.0575 -0.00000 + 36 9.1633 -0.00000 + 37 9.3452 -0.00000 + 38 9.4284 -0.00000 + 39 9.6045 -0.00000 + 40 9.9536 0.00000 + 41 10.2047 0.00000 + 42 10.2696 0.00000 + 43 10.4383 0.00000 + 44 10.7716 0.00000 + + k-point 40 : 0.4286 0.0833 0.3500 + band No. band energies occupation + 1 1.3740 2.00000 + 2 1.5173 2.00000 + 3 1.9609 2.00000 + 4 2.0186 2.00000 + 5 2.1010 2.00000 + 6 2.1676 2.00000 + 7 2.2319 2.00000 + 8 2.3770 2.00000 + 9 2.6575 2.00000 + 10 2.7922 2.00000 + 11 2.9449 2.00000 + 12 3.0782 2.00000 + 13 3.4893 2.00000 + 14 3.6560 2.00000 + 15 3.6901 2.00000 + 16 3.7333 2.00000 + 17 3.8323 2.00006 + 18 3.8902 2.00032 + 19 4.0168 2.00614 + 20 4.2470 2.06674 + 21 5.5573 -0.00000 + 22 5.7676 -0.00000 + 23 5.7889 -0.00000 + 24 5.9091 -0.00000 + 25 6.6153 -0.00000 + 26 6.6490 -0.00000 + 27 6.8485 -0.00000 + 28 7.1131 -0.00000 + 29 7.5384 -0.00000 + 30 7.6510 -0.00000 + 31 7.8466 -0.00000 + 32 7.9899 -0.00000 + 33 8.0243 -0.00000 + 34 8.3379 -0.00000 + 35 9.2758 -0.00000 + 36 9.4110 -0.00000 + 37 9.4302 -0.00000 + 38 9.5627 -0.00000 + 39 9.7389 -0.00000 + 40 10.1654 0.00000 + 41 10.1872 0.00000 + 42 10.3672 0.00000 + 43 10.8249 0.00000 + 44 11.1229 0.00000 + + k-point 41 : 0.0000 0.2500 0.3500 + band No. band energies occupation + 1 1.2359 2.00000 + 2 1.5849 2.00000 + 3 1.8755 2.00000 + 4 2.2504 2.00000 + 5 2.2928 2.00000 + 6 2.3216 2.00000 + 7 2.3401 2.00000 + 8 2.5886 2.00000 + 9 2.6824 2.00000 + 10 2.8941 2.00000 + 11 2.9417 2.00000 + 12 3.0788 2.00000 + 13 3.2499 2.00000 + 14 3.2681 2.00000 + 15 3.2727 2.00000 + 16 3.3251 2.00000 + 17 3.4645 2.00000 + 18 3.6749 2.00000 + 19 3.6892 2.00000 + 20 4.1648 2.05286 + 21 6.1323 -0.00000 + 22 6.3663 -0.00000 + 23 6.4832 -0.00000 + 24 6.8014 -0.00000 + 25 6.9595 -0.00000 + 26 7.1012 -0.00000 + 27 7.3873 -0.00000 + 28 7.5198 -0.00000 + 29 7.5406 -0.00000 + 30 7.6000 -0.00000 + 31 7.6503 -0.00000 + 32 8.0938 -0.00000 + 33 8.1875 -0.00000 + 34 8.2152 -0.00000 + 35 8.7873 -0.00000 + 36 9.0409 -0.00000 + 37 9.2983 -0.00000 + 38 9.4133 -0.00000 + 39 9.4656 -0.00000 + 40 9.6105 -0.00000 + 41 9.9139 -0.00000 + 42 10.0464 0.00000 + 43 10.0731 0.00000 + 44 10.7317 0.00000 + + k-point 42 : 0.1429 0.2500 0.3500 + band No. band energies occupation + 1 1.2549 2.00000 + 2 1.6044 2.00000 + 3 1.8952 2.00000 + 4 1.9943 2.00000 + 5 2.2866 2.00000 + 6 2.3337 2.00000 + 7 2.3678 2.00000 + 8 2.6341 2.00000 + 9 2.6562 2.00000 + 10 2.9702 2.00000 + 11 3.0004 2.00000 + 12 3.0483 2.00000 + 13 3.1160 2.00000 + 14 3.2532 2.00000 + 15 3.3989 2.00000 + 16 3.5365 2.00000 + 17 3.5625 2.00000 + 18 3.6325 2.00000 + 19 3.7353 2.00000 + 20 4.1715 2.05587 + 21 6.0552 -0.00000 + 22 6.0920 -0.00000 + 23 6.4082 -0.00000 + 24 6.6036 -0.00000 + 25 6.7666 -0.00000 + 26 7.0439 -0.00000 + 27 7.2822 -0.00000 + 28 7.3699 -0.00000 + 29 7.5550 -0.00000 + 30 7.7148 -0.00000 + 31 7.7562 -0.00000 + 32 8.1761 -0.00000 + 33 8.3033 -0.00000 + 34 8.3870 -0.00000 + 35 8.7057 -0.00000 + 36 9.0784 -0.00000 + 37 9.1632 -0.00000 + 38 9.5443 -0.00000 + 39 9.5510 -0.00000 + 40 9.6450 -0.00000 + 41 10.0574 0.00000 + 42 10.1885 0.00000 + 43 10.2267 0.00000 + 44 10.7080 0.00000 + + k-point 43 : 0.2857 0.2500 0.3500 + band No. band energies occupation + 1 1.3127 2.00000 + 2 1.6635 2.00000 + 3 1.7481 2.00000 + 4 1.9548 2.00000 + 5 2.1006 2.00000 + 6 2.3467 2.00000 + 7 2.3775 2.00000 + 8 2.4417 2.00000 + 9 2.7772 2.00000 + 10 2.8410 2.00000 + 11 3.0256 2.00000 + 12 3.1965 2.00000 + 13 3.3238 2.00000 + 14 3.4244 2.00000 + 15 3.5199 2.00000 + 16 3.5477 2.00000 + 17 3.6969 2.00000 + 18 3.7652 2.00001 + 19 3.8566 2.00013 + 20 4.1771 2.05831 + 21 5.6644 -0.00000 + 22 5.8542 -0.00000 + 23 6.0812 -0.00000 + 24 6.0818 -0.00000 + 25 6.7835 -0.00000 + 26 6.8628 -0.00000 + 27 7.0037 -0.00000 + 28 7.4674 -0.00000 + 29 7.5256 -0.00000 + 30 7.7199 -0.00000 + 31 7.8308 -0.00000 + 32 8.1158 -0.00000 + 33 8.2582 -0.00000 + 34 8.5965 -0.00000 + 35 8.9374 -0.00000 + 36 9.1815 -0.00000 + 37 9.2959 -0.00000 + 38 9.6158 -0.00000 + 39 9.6550 -0.00000 + 40 9.7925 -0.00000 + 41 10.2072 0.00000 + 42 10.3572 0.00000 + 43 10.5313 0.00000 + 44 10.7957 0.00000 + + k-point 44 : 0.4286 0.2500 0.3500 + band No. band energies occupation + 1 1.4115 2.00000 + 2 1.5553 2.00000 + 3 1.7640 2.00000 + 4 1.9084 2.00000 + 5 2.0568 2.00000 + 6 2.2007 2.00000 + 7 2.4471 2.00000 + 8 2.5276 2.00000 + 9 2.5935 2.00000 + 10 2.6672 2.00000 + 11 3.2042 2.00000 + 12 3.3104 2.00000 + 13 3.4964 2.00000 + 14 3.5891 2.00000 + 15 3.6097 2.00000 + 16 3.6632 2.00000 + 17 3.7049 2.00000 + 18 3.8625 2.00015 + 19 3.9829 2.00306 + 20 4.1344 2.03890 + 21 5.4673 -0.00000 + 22 5.6646 -0.00000 + 23 5.7152 -0.00000 + 24 5.7232 -0.00000 + 25 6.7447 -0.00000 + 26 6.8177 -0.00000 + 27 6.8390 -0.00000 + 28 7.4944 -0.00000 + 29 7.5670 -0.00000 + 30 7.6600 -0.00000 + 31 7.9085 -0.00000 + 32 8.0476 -0.00000 + 33 8.0537 -0.00000 + 34 8.6285 -0.00000 + 35 9.2476 -0.00000 + 36 9.3628 -0.00000 + 37 9.5045 -0.00000 + 38 9.6214 -0.00000 + 39 9.6617 -0.00000 + 40 9.9580 0.00000 + 41 10.2670 0.00000 + 42 10.3834 0.00000 + 43 10.6596 0.00000 + 44 10.8150 0.00000 + + k-point 45 : 0.0000 0.4167 0.3500 + band No. band energies occupation + 1 1.3109 2.00000 + 2 1.4262 2.00000 + 3 1.9611 2.00000 + 4 2.0909 2.00000 + 5 2.3459 2.00000 + 6 2.4001 2.00000 + 7 2.4508 2.00000 + 8 2.5124 2.00000 + 9 2.6908 2.00000 + 10 2.9792 2.00000 + 11 3.0163 2.00000 + 12 3.0382 2.00000 + 13 3.1002 2.00000 + 14 3.2012 2.00000 + 15 3.4446 2.00000 + 16 3.4723 2.00000 + 17 3.5277 2.00000 + 18 3.6448 2.00000 + 19 3.6616 2.00000 + 20 3.8344 2.00007 + 21 6.2198 -0.00000 + 22 6.3263 -0.00000 + 23 6.5410 -0.00000 + 24 6.6211 -0.00000 + 25 6.7109 -0.00000 + 26 6.7653 -0.00000 + 27 7.4864 -0.00000 + 28 7.5379 -0.00000 + 29 7.7664 -0.00000 + 30 7.7996 -0.00000 + 31 7.8873 -0.00000 + 32 7.9794 -0.00000 + 33 8.5160 -0.00000 + 34 8.5232 -0.00000 + 35 8.7053 -0.00000 + 36 9.1316 -0.00000 + 37 9.1596 -0.00000 + 38 9.2744 -0.00000 + 39 9.5351 -0.00000 + 40 9.6754 -0.00000 + 41 9.7704 -0.00000 + 42 10.0687 0.00000 + 43 10.5477 0.00000 + 44 10.7501 0.00000 + + k-point 46 : 0.1429 0.4167 0.3500 + band No. band energies occupation + 1 1.3301 2.00000 + 2 1.4456 2.00000 + 3 1.9810 2.00000 + 4 2.0702 2.00000 + 5 2.1118 2.00000 + 6 2.1862 2.00000 + 7 2.6658 2.00000 + 8 2.7206 2.00000 + 9 2.7472 2.00000 + 10 2.8440 2.00000 + 11 2.8530 2.00000 + 12 3.0854 2.00000 + 13 3.2670 2.00000 + 14 3.3769 2.00000 + 15 3.3909 2.00000 + 16 3.4871 2.00000 + 17 3.6013 2.00000 + 18 3.6548 2.00000 + 19 3.6882 2.00000 + 20 3.8489 2.00010 + 21 6.1132 -0.00000 + 22 6.1290 -0.00000 + 23 6.2891 -0.00000 + 24 6.3565 -0.00000 + 25 6.7635 -0.00000 + 26 6.8670 -0.00000 + 27 7.3601 -0.00000 + 28 7.3727 -0.00000 + 29 7.7636 -0.00000 + 30 7.8518 -0.00000 + 31 7.9764 -0.00000 + 32 8.1483 -0.00000 + 33 8.4711 -0.00000 + 34 8.6326 -0.00000 + 35 8.7129 -0.00000 + 36 9.1638 -0.00000 + 37 9.2459 -0.00000 + 38 9.2678 -0.00000 + 39 9.5977 -0.00000 + 40 9.7919 -0.00000 + 41 9.8629 -0.00000 + 42 10.1311 0.00000 + 43 10.5427 0.00000 + 44 10.7035 0.00000 + + k-point 47 : 0.2857 0.4167 0.3500 + band No. band energies occupation + 1 1.3882 2.00000 + 2 1.5043 2.00000 + 3 1.8251 2.00000 + 4 1.9420 2.00000 + 5 2.0416 2.00000 + 6 2.1717 2.00000 + 7 2.4768 2.00000 + 8 2.6086 2.00000 + 9 2.7685 2.00000 + 10 3.0704 2.00000 + 11 3.1342 2.00000 + 12 3.1760 2.00000 + 13 3.2246 2.00000 + 14 3.4080 2.00000 + 15 3.5575 2.00000 + 16 3.6108 2.00000 + 17 3.6376 2.00000 + 18 3.7747 2.00001 + 19 3.7791 2.00001 + 20 3.8908 2.00033 + 21 5.6952 -0.00000 + 22 5.8177 -0.00000 + 23 5.9024 -0.00000 + 24 5.9692 -0.00000 + 25 6.8213 -0.00000 + 26 6.8507 -0.00000 + 27 7.1706 -0.00000 + 28 7.3280 -0.00000 + 29 7.7665 -0.00000 + 30 7.8700 -0.00000 + 31 7.9743 -0.00000 + 32 8.2174 -0.00000 + 33 8.4528 -0.00000 + 34 8.6924 -0.00000 + 35 8.8935 -0.00000 + 36 9.2559 -0.00000 + 37 9.3428 -0.00000 + 38 9.4164 -0.00000 + 39 9.7084 -0.00000 + 40 9.9296 -0.00000 + 41 10.0364 0.00000 + 42 10.3210 0.00000 + 43 10.5152 0.00000 + 44 10.8158 0.00000 + + k-point 48 : 0.4286 0.4167 0.3500 + band No. band energies occupation + 1 1.4877 2.00000 + 2 1.6045 2.00000 + 3 1.6321 2.00000 + 4 1.7494 2.00000 + 5 2.1428 2.00000 + 6 2.2733 2.00000 + 7 2.2886 2.00000 + 8 2.4205 2.00000 + 9 2.8619 2.00000 + 10 2.9907 2.00000 + 11 3.2019 2.00000 + 12 3.3054 2.00000 + 13 3.4592 2.00000 + 14 3.5448 2.00000 + 15 3.5799 2.00000 + 16 3.6823 2.00000 + 17 3.6977 2.00000 + 18 3.8599 2.00014 + 19 3.8797 2.00024 + 20 3.9451 2.00130 + 21 5.4392 -0.00000 + 22 5.5211 -0.00000 + 23 5.6065 -0.00000 + 24 5.6401 -0.00000 + 25 6.8181 -0.00000 + 26 6.8462 -0.00000 + 27 7.0726 -0.00000 + 28 7.3365 -0.00000 + 29 7.8059 -0.00000 + 30 7.8958 -0.00000 + 31 7.9242 -0.00000 + 32 8.0578 -0.00000 + 33 8.4518 -0.00000 + 34 8.9150 -0.00000 + 35 8.9636 -0.00000 + 36 9.1936 -0.00000 + 37 9.4920 -0.00000 + 38 9.5515 -0.00000 + 39 9.7529 -0.00000 + 40 9.9246 -0.00000 + 41 10.2045 0.00000 + 42 10.4770 0.00000 + 43 10.6015 0.00000 + 44 10.8573 0.00000 + + k-point 49 : 0.0000 0.0833 0.4500 + band No. band energies occupation + 1 1.3633 2.00000 + 2 1.5737 2.00000 + 3 1.9778 2.00000 + 4 2.2066 2.00000 + 5 2.2359 2.00000 + 6 2.3953 2.00000 + 7 2.4397 2.00000 + 8 2.5190 2.00000 + 9 2.6195 2.00000 + 10 2.6456 2.00000 + 11 2.9622 2.00000 + 12 3.0337 2.00000 + 13 3.1735 2.00000 + 14 3.1940 2.00000 + 15 3.2225 2.00000 + 16 3.2387 2.00000 + 17 3.3843 2.00000 + 18 3.4080 2.00000 + 19 3.9268 2.00083 + 20 4.2011 2.06711 + 21 6.3621 -0.00000 + 22 6.5657 -0.00000 + 23 6.8252 -0.00000 + 24 7.1035 -0.00000 + 25 7.2168 -0.00000 + 26 7.2221 -0.00000 + 27 7.2374 -0.00000 + 28 7.3722 -0.00000 + 29 7.7521 -0.00000 + 30 7.7973 -0.00000 + 31 7.8022 -0.00000 + 32 8.0576 -0.00000 + 33 8.2116 -0.00000 + 34 8.4311 -0.00000 + 35 8.7209 -0.00000 + 36 9.0658 -0.00000 + 37 9.1532 -0.00000 + 38 9.3496 -0.00000 + 39 9.4774 -0.00000 + 40 9.4805 -0.00000 + 41 9.4959 -0.00000 + 42 9.6455 -0.00000 + 43 9.6558 -0.00000 + 44 9.9342 0.00000 + + k-point 50 : 0.1429 0.0833 0.4500 + band No. band energies occupation + 1 1.3825 2.00000 + 2 1.5931 2.00000 + 3 1.9974 2.00000 + 4 2.1191 2.00000 + 5 2.2374 2.00000 + 6 2.2492 2.00000 + 7 2.3466 2.00000 + 8 2.4998 2.00000 + 9 2.7167 2.00000 + 10 2.7893 2.00000 + 11 2.9189 2.00000 + 12 2.9449 2.00000 + 13 3.0289 2.00000 + 14 3.1795 2.00000 + 15 3.3023 2.00000 + 16 3.4735 2.00000 + 17 3.4747 2.00000 + 18 3.6057 2.00000 + 19 3.9505 2.00147 + 20 4.2107 2.06943 + 21 6.2144 -0.00000 + 22 6.2754 -0.00000 + 23 6.6204 -0.00000 + 24 6.7658 -0.00000 + 25 7.0757 -0.00000 + 26 7.0916 -0.00000 + 27 7.2784 -0.00000 + 28 7.3441 -0.00000 + 29 7.7260 -0.00000 + 30 7.7385 -0.00000 + 31 8.0515 -0.00000 + 32 8.2707 -0.00000 + 33 8.3121 -0.00000 + 34 8.5971 -0.00000 + 35 8.7006 -0.00000 + 36 8.9907 -0.00000 + 37 9.0324 -0.00000 + 38 9.3247 -0.00000 + 39 9.3794 -0.00000 + 40 9.6416 -0.00000 + 41 9.6998 -0.00000 + 42 9.7615 -0.00000 + 43 9.9412 0.00000 + 44 10.1303 0.00000 + + k-point 51 : 0.2857 0.0833 0.4500 + band No. band energies occupation + 1 1.4407 2.00000 + 2 1.6518 2.00000 + 3 1.8777 2.00000 + 4 2.0498 2.00000 + 5 2.0968 2.00000 + 6 2.2925 2.00000 + 7 2.3220 2.00000 + 8 2.4900 2.00000 + 9 2.5583 2.00000 + 10 2.7148 2.00000 + 11 2.7386 2.00000 + 12 2.9596 2.00000 + 13 3.2123 2.00000 + 14 3.3515 2.00000 + 15 3.5845 2.00000 + 16 3.6950 2.00000 + 17 3.7245 2.00000 + 18 3.7747 2.00001 + 19 4.0137 2.00579 + 20 4.2228 2.07087 + 21 5.8221 -0.00000 + 22 5.8871 -0.00000 + 23 6.1673 -0.00000 + 24 6.2369 -0.00000 + 25 6.9450 -0.00000 + 26 7.0074 -0.00000 + 27 7.0869 -0.00000 + 28 7.1796 -0.00000 + 29 7.7459 -0.00000 + 30 7.7681 -0.00000 + 31 8.1368 -0.00000 + 32 8.1704 -0.00000 + 33 8.4599 -0.00000 + 34 8.8376 -0.00000 + 35 8.9974 -0.00000 + 36 9.0105 -0.00000 + 37 9.1469 -0.00000 + 38 9.3598 -0.00000 + 39 9.3650 -0.00000 + 40 9.7116 -0.00000 + 41 10.0268 0.00000 + 42 10.0725 0.00000 + 43 10.3540 0.00000 + 44 10.5613 0.00000 + + k-point 52 : 0.4286 0.0833 0.4500 + band No. band energies occupation + 1 1.5404 2.00000 + 2 1.6848 2.00000 + 3 1.7518 2.00000 + 4 1.8957 2.00000 + 5 2.1600 2.00000 + 6 2.3033 2.00000 + 7 2.3901 2.00000 + 8 2.4206 2.00000 + 9 2.5301 2.00000 + 10 2.5612 2.00000 + 11 2.6607 2.00000 + 12 2.7970 2.00000 + 13 3.5761 2.00000 + 14 3.6420 2.00000 + 15 3.7321 2.00000 + 16 3.7581 2.00001 + 17 3.9055 2.00048 + 18 3.9700 2.00231 + 19 4.0190 2.00641 + 20 4.1680 2.05429 + 21 5.5934 -0.00000 + 22 5.6747 -0.00000 + 23 5.7670 -0.00000 + 24 5.8180 -0.00000 + 25 6.8517 -0.00000 + 26 6.8985 -0.00000 + 27 6.9626 -0.00000 + 28 7.0779 -0.00000 + 29 7.8045 -0.00000 + 30 7.8431 -0.00000 + 31 7.9606 -0.00000 + 32 7.9772 -0.00000 + 33 8.6194 -0.00000 + 34 8.8891 -0.00000 + 35 9.1752 -0.00000 + 36 9.1902 -0.00000 + 37 9.3327 -0.00000 + 38 9.3522 -0.00000 + 39 9.4544 -0.00000 + 40 9.6508 -0.00000 + 41 10.3306 0.00000 + 42 10.5531 0.00000 + 43 10.6104 0.00000 + 44 10.9326 0.00000 + + k-point 53 : 0.0000 0.2500 0.4500 + band No. band energies occupation + 1 1.4021 2.00000 + 2 1.6145 2.00000 + 3 1.7662 2.00000 + 4 1.9934 2.00000 + 5 2.4433 2.00000 + 6 2.4803 2.00000 + 7 2.5221 2.00000 + 8 2.6510 2.00000 + 9 2.7059 2.00000 + 10 2.8046 2.00000 + 11 2.8165 2.00000 + 12 2.8540 2.00000 + 13 3.0080 2.00000 + 14 3.0508 2.00000 + 15 3.3778 2.00000 + 16 3.4272 2.00000 + 17 3.5198 2.00000 + 18 3.5469 2.00000 + 19 3.6899 2.00000 + 20 3.9550 2.00164 + 21 6.4007 -0.00000 + 22 6.5422 -0.00000 + 23 6.6123 -0.00000 + 24 6.8246 -0.00000 + 25 7.2547 -0.00000 + 26 7.2926 -0.00000 + 27 7.4811 -0.00000 + 28 7.5261 -0.00000 + 29 7.6321 -0.00000 + 30 7.6380 -0.00000 + 31 7.7731 -0.00000 + 32 7.9872 -0.00000 + 33 8.3547 -0.00000 + 34 8.6846 -0.00000 + 35 8.8488 -0.00000 + 36 9.0614 -0.00000 + 37 9.2196 -0.00000 + 38 9.2421 -0.00000 + 39 9.5228 -0.00000 + 40 9.7117 -0.00000 + 41 9.8040 -0.00000 + 42 9.8492 -0.00000 + 43 9.8497 -0.00000 + 44 10.1652 0.00000 + + k-point 54 : 0.1429 0.2500 0.4500 + band No. band energies occupation + 1 1.4213 2.00000 + 2 1.6339 2.00000 + 3 1.7860 2.00000 + 4 2.0126 2.00000 + 5 2.1655 2.00000 + 6 2.3680 2.00000 + 7 2.5218 2.00000 + 8 2.5786 2.00000 + 9 2.7299 2.00000 + 10 2.7708 2.00000 + 11 2.8985 2.00000 + 12 3.0094 2.00000 + 13 3.1395 2.00000 + 14 3.2270 2.00000 + 15 3.3061 2.00000 + 16 3.4021 2.00000 + 17 3.5918 2.00000 + 18 3.6554 2.00000 + 19 3.7215 2.00000 + 20 3.9698 2.00229 + 21 6.2162 -0.00000 + 22 6.2173 -0.00000 + 23 6.5258 -0.00000 + 24 6.5897 -0.00000 + 25 7.0790 -0.00000 + 26 7.0921 -0.00000 + 27 7.4790 -0.00000 + 28 7.5159 -0.00000 + 29 7.7378 -0.00000 + 30 7.8281 -0.00000 + 31 7.9209 -0.00000 + 32 8.0771 -0.00000 + 33 8.3976 -0.00000 + 34 8.6542 -0.00000 + 35 8.8473 -0.00000 + 36 9.0766 -0.00000 + 37 9.1550 -0.00000 + 38 9.2984 -0.00000 + 39 9.6320 -0.00000 + 40 9.7344 -0.00000 + 41 9.7680 -0.00000 + 42 9.9763 0.00000 + 43 10.1544 0.00000 + 44 10.3036 0.00000 + + k-point 55 : 0.2857 0.2500 0.4500 + band No. band energies occupation + 1 1.4798 2.00000 + 2 1.6928 2.00000 + 3 1.8459 2.00000 + 4 1.9174 2.00000 + 5 2.0753 2.00000 + 6 2.1305 2.00000 + 7 2.2868 2.00000 + 8 2.5107 2.00000 + 9 2.6275 2.00000 + 10 2.8611 2.00000 + 11 3.0032 2.00000 + 12 3.1710 2.00000 + 13 3.2857 2.00000 + 14 3.3787 2.00000 + 15 3.4872 2.00000 + 16 3.5757 2.00000 + 17 3.7213 2.00000 + 18 3.7464 2.00000 + 19 3.8282 2.00005 + 20 4.0075 2.00511 + 21 5.7638 -0.00000 + 22 5.8430 -0.00000 + 23 6.0672 -0.00000 + 24 6.0755 -0.00000 + 25 7.0700 -0.00000 + 26 7.0900 -0.00000 + 27 7.2587 -0.00000 + 28 7.4184 -0.00000 + 29 7.7868 -0.00000 + 30 7.8393 -0.00000 + 31 8.1063 -0.00000 + 32 8.1969 -0.00000 + 33 8.3941 -0.00000 + 34 8.7567 -0.00000 + 35 8.9470 -0.00000 + 36 9.1425 -0.00000 + 37 9.2201 -0.00000 + 38 9.3791 -0.00000 + 39 9.6741 -0.00000 + 40 9.8698 -0.00000 + 41 9.9039 -0.00000 + 42 10.1133 0.00000 + 43 10.4941 0.00000 + 44 10.7104 0.00000 + + k-point 56 : 0.4286 0.2500 0.4500 + band No. band energies occupation + 1 1.5798 2.00000 + 2 1.7246 2.00000 + 3 1.7929 2.00000 + 4 1.9314 2.00000 + 5 1.9548 2.00000 + 6 2.0954 2.00000 + 7 2.1757 2.00000 + 8 2.3221 2.00000 + 9 2.7200 2.00000 + 10 2.8496 2.00000 + 11 2.9523 2.00000 + 12 3.0711 2.00000 + 13 3.5794 2.00000 + 14 3.6338 2.00000 + 15 3.6779 2.00000 + 16 3.6983 2.00000 + 17 3.7813 2.00001 + 18 3.8935 2.00035 + 19 3.8971 2.00039 + 20 4.0202 2.00657 + 21 5.4953 -0.00000 + 22 5.5657 -0.00000 + 23 5.6554 -0.00000 + 24 5.6647 -0.00000 + 25 7.0642 -0.00000 + 26 7.1156 -0.00000 + 27 7.1206 -0.00000 + 28 7.3666 -0.00000 + 29 7.8001 -0.00000 + 30 7.8657 -0.00000 + 31 8.0363 -0.00000 + 32 8.0491 -0.00000 + 33 8.4312 -0.00000 + 34 8.9872 -0.00000 + 35 9.0593 -0.00000 + 36 9.2987 -0.00000 + 37 9.3462 -0.00000 + 38 9.4765 -0.00000 + 39 9.5296 -0.00000 + 40 9.7662 -0.00000 + 41 10.1232 0.00000 + 42 10.3455 0.00000 + 43 10.6308 0.00000 + 44 10.8768 0.00000 + + k-point 57 : 0.0000 0.4167 0.4500 + band No. band energies occupation + 1 1.4807 2.00000 + 2 1.6012 2.00000 + 3 1.6969 2.00000 + 4 1.8226 2.00000 + 5 2.5173 2.00000 + 6 2.5608 2.00000 + 7 2.6185 2.00000 + 8 2.6713 2.00000 + 9 2.7285 2.00000 + 10 2.7738 2.00000 + 11 2.8550 2.00000 + 12 2.8819 2.00000 + 13 2.9625 2.00000 + 14 3.1921 2.00000 + 15 3.3251 2.00000 + 16 3.5090 2.00000 + 17 3.5618 2.00000 + 18 3.5992 2.00000 + 19 3.6006 2.00000 + 20 3.6076 2.00000 + 21 6.4478 -0.00000 + 22 6.4874 -0.00000 + 23 6.5357 -0.00000 + 24 6.6189 -0.00000 + 25 7.0901 -0.00000 + 26 7.1146 -0.00000 + 27 7.4484 -0.00000 + 28 7.5049 -0.00000 + 29 7.9139 -0.00000 + 30 7.9264 -0.00000 + 31 7.9620 -0.00000 + 32 7.9925 -0.00000 + 33 8.5094 -0.00000 + 34 8.6918 -0.00000 + 35 8.8199 -0.00000 + 36 8.9438 -0.00000 + 37 9.2522 -0.00000 + 38 9.3910 -0.00000 + 39 9.4225 -0.00000 + 40 9.5411 -0.00000 + 41 10.2061 0.00000 + 42 10.3446 0.00000 + 43 10.3871 0.00000 + 44 10.5316 0.00000 + + k-point 58 : 0.1429 0.4167 0.4500 + band No. band energies occupation + 1 1.5001 2.00000 + 2 1.6208 2.00000 + 3 1.7166 2.00000 + 4 1.8424 2.00000 + 5 2.2438 2.00000 + 6 2.3617 2.00000 + 7 2.4588 2.00000 + 8 2.5812 2.00000 + 9 2.8788 2.00000 + 10 2.8961 2.00000 + 11 2.9990 2.00000 + 12 3.1315 2.00000 + 13 3.1322 2.00000 + 14 3.2371 2.00000 + 15 3.3721 2.00000 + 16 3.4296 2.00000 + 17 3.5629 2.00000 + 18 3.6087 2.00000 + 19 3.6159 2.00000 + 20 3.6327 2.00000 + 21 6.2285 -0.00000 + 22 6.2438 -0.00000 + 23 6.3647 -0.00000 + 24 6.3805 -0.00000 + 25 7.1173 -0.00000 + 26 7.1520 -0.00000 + 27 7.4320 -0.00000 + 28 7.4745 -0.00000 + 29 7.9358 -0.00000 + 30 7.9485 -0.00000 + 31 8.0025 -0.00000 + 32 8.0512 -0.00000 + 33 8.6148 -0.00000 + 34 8.6648 -0.00000 + 35 8.8366 -0.00000 + 36 9.0595 -0.00000 + 37 9.2865 -0.00000 + 38 9.3552 -0.00000 + 39 9.5149 -0.00000 + 40 9.6067 -0.00000 + 41 10.2175 0.00000 + 42 10.3338 0.00000 + 43 10.4788 0.00000 + 44 10.6446 0.00000 + + k-point 59 : 0.2857 0.4167 0.4500 + band No. band energies occupation + 1 1.5590 2.00000 + 2 1.6800 2.00000 + 3 1.7763 2.00000 + 4 1.9019 2.00000 + 5 1.9998 2.00000 + 6 2.1199 2.00000 + 7 2.2181 2.00000 + 8 2.3436 2.00000 + 9 2.9642 2.00000 + 10 3.1431 2.00000 + 11 3.2445 2.00000 + 12 3.2592 2.00000 + 13 3.3523 2.00000 + 14 3.3955 2.00000 + 15 3.4805 2.00000 + 16 3.4921 2.00000 + 17 3.5596 2.00000 + 18 3.6490 2.00000 + 19 3.6630 2.00000 + 20 3.7022 2.00000 + 21 5.7728 -0.00000 + 22 5.8395 -0.00000 + 23 5.8968 -0.00000 + 24 5.9427 -0.00000 + 25 7.1888 -0.00000 + 26 7.2018 -0.00000 + 27 7.4100 -0.00000 + 28 7.4865 -0.00000 + 29 7.8846 -0.00000 + 30 7.9191 -0.00000 + 31 7.9985 -0.00000 + 32 8.1624 -0.00000 + 33 8.7046 -0.00000 + 34 8.7323 -0.00000 + 35 8.9411 -0.00000 + 36 9.1653 -0.00000 + 37 9.3492 -0.00000 + 38 9.3626 -0.00000 + 39 9.5918 -0.00000 + 40 9.6550 -0.00000 + 41 10.3164 0.00000 + 42 10.4451 0.00000 + 43 10.6090 0.00000 + 44 10.8160 0.00000 + + k-point 60 : 0.4286 0.4167 0.4500 + band No. band energies occupation + 1 1.6595 2.00000 + 2 1.7806 2.00000 + 3 1.8049 2.00000 + 4 1.8762 2.00000 + 5 1.9289 2.00000 + 6 2.0048 2.00000 + 7 2.0252 2.00000 + 8 2.1517 2.00000 + 9 3.0485 2.00000 + 10 3.1555 2.00000 + 11 3.2478 2.00000 + 12 3.3019 2.00000 + 13 3.4562 2.00000 + 14 3.4941 2.00000 + 15 3.5414 2.00000 + 16 3.6161 2.00000 + 17 3.7080 2.00000 + 18 3.7884 2.00002 + 19 3.8147 2.00004 + 20 3.8257 2.00005 + 21 5.4517 -0.00000 + 22 5.5016 -0.00000 + 23 5.5202 -0.00000 + 24 5.5569 -0.00000 + 25 7.2162 -0.00000 + 26 7.2459 -0.00000 + 27 7.4036 -0.00000 + 28 7.5394 -0.00000 + 29 7.8630 -0.00000 + 30 7.9206 -0.00000 + 31 7.9535 -0.00000 + 32 8.1004 -0.00000 + 33 8.6493 -0.00000 + 34 8.9184 -0.00000 + 35 9.0888 -0.00000 + 36 9.1380 -0.00000 + 37 9.3956 -0.00000 + 38 9.4408 -0.00000 + 39 9.5338 -0.00000 + 40 9.6027 -0.00000 + 41 10.4178 0.00000 + 42 10.5846 0.00000 + 43 10.7145 0.00000 + 44 10.9112 0.00000 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + 1.204 5.375 -0.004 0.012 0.004 + 5.375 22.974 -0.015 0.044 0.016 + -0.004 -0.015 -0.240 -0.001 0.002 + 0.012 0.044 -0.001 -0.249 -0.000 + 0.004 0.016 0.002 -0.000 -0.241 + total augmentation occupancy for first ion, spin component: 1 + 2.390 -0.037 0.039 -0.111 -0.040 + -0.037 0.001 -0.002 0.003 0.002 + 0.039 -0.002 0.221 -0.007 0.011 + -0.111 0.003 -0.007 0.139 0.002 + -0.040 0.002 0.011 0.002 0.210 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 0.1744: real time 0.1744 + FORLOC: cpu time 0.0119: real time 0.0119 + FORNL : cpu time 13.0504: real time 13.0517 + STRESS: cpu time 4.7382: real time 4.7386 + FORCOR: cpu time 0.0289: real time 0.0301 + FORHAR: cpu time 0.0210: real time 0.0210 + MIXING: cpu time 0.0040: real time 0.0040 + OFIELD: cpu time 0.0000: real time 0.0000 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 14.66861 14.66861 14.66861 + Ewald -143.54059 -148.58992 -130.75455 0.00000 0.00000 -0.00000 + Hartree 1.18519 0.68929 1.05755 -0.00000 -0.00000 0.00000 + E(xc) -108.52436 -108.98650 -107.79154 0.00000 0.00000 -0.00000 + Local 7.69849 2.19418 11.56684 0.00000 0.00000 -0.00000 + n-local 130.63494 131.23143 128.18102 0.01971 0.07519 -0.21154 + augment 7.39761 7.55325 7.07943 -0.00000 -0.00000 0.00000 + Kinetic 215.23433 226.17230 200.76730 0.07347 -1.14826 -0.90260 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total 124.75422 124.93264 124.77466 0.00000 0.00000 0.00000 + in kB 699.49357 700.49394 699.60817 0.00000 0.00000 0.00000 + external pressure = -0.13 kB Pullay stress = 700.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 650.00 + volume of cell : 285.75 + direct lattice vectors reciprocal lattice vectors + 6.901880560 0.000000000 0.000000000 0.144888048 0.000000000 0.000000000 + 0.000000000 8.159272636 0.000000000 0.000000000 0.122559944 0.000000000 + 0.000000000 0.000000000 5.074149114 0.000000000 0.000000000 0.197077377 + + length of vectors + 6.901880560 8.159272636 5.074149114 0.144888048 0.122559944 0.197077377 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + -.410E-01 0.105E+00 -.258E+00 -.446E+00 0.365E+00 -.115E+01 0.486E+00 -.465E+00 0.142E+01 0.265E-06 -.417E-06 0.310E-06 + 0.410E-01 -.105E+00 -.258E+00 0.446E+00 -.365E+00 -.115E+01 -.486E+00 0.465E+00 0.142E+01 -.265E-06 0.417E-06 0.310E-06 + -.410E-01 -.105E+00 -.258E+00 -.446E+00 -.365E+00 -.115E+01 0.486E+00 0.465E+00 0.142E+01 0.265E-06 0.417E-06 0.310E-06 + 0.410E-01 0.105E+00 -.258E+00 0.446E+00 0.365E+00 -.115E+01 -.486E+00 -.465E+00 0.142E+01 -.265E-06 -.417E-06 0.310E-06 + -.410E-01 0.105E+00 -.258E+00 -.446E+00 0.365E+00 -.115E+01 0.486E+00 -.465E+00 0.142E+01 0.265E-06 -.417E-06 0.310E-06 + 0.410E-01 -.105E+00 -.258E+00 0.446E+00 -.365E+00 -.115E+01 -.486E+00 0.465E+00 0.142E+01 -.265E-06 0.417E-06 0.310E-06 + -.410E-01 -.105E+00 -.258E+00 -.446E+00 -.365E+00 -.115E+01 0.486E+00 0.465E+00 0.142E+01 0.265E-06 0.417E-06 0.310E-06 + 0.410E-01 0.105E+00 -.258E+00 0.446E+00 0.365E+00 -.115E+01 -.486E+00 -.465E+00 0.142E+01 -.265E-06 -.417E-06 0.310E-06 + -.220E-01 -.397E-01 0.129E+00 -.477E-01 -.224E+00 0.724E+00 0.713E-01 0.263E+00 -.851E+00 0.454E-06 0.103E-05 0.505E-06 + 0.220E-01 0.397E-01 0.129E+00 0.477E-01 0.224E+00 0.724E+00 -.713E-01 -.263E+00 -.851E+00 -.454E-06 -.103E-05 0.505E-06 + -.220E-01 0.397E-01 0.129E+00 -.477E-01 0.224E+00 0.724E+00 0.713E-01 -.263E+00 -.851E+00 0.454E-06 -.103E-05 0.505E-06 + 0.220E-01 -.397E-01 0.129E+00 0.477E-01 -.224E+00 0.724E+00 -.713E-01 0.263E+00 -.851E+00 -.454E-06 0.103E-05 0.505E-06 + -.220E-01 -.397E-01 0.129E+00 -.477E-01 -.224E+00 0.724E+00 0.713E-01 0.263E+00 -.851E+00 0.454E-06 0.103E-05 0.505E-06 + 0.220E-01 0.397E-01 0.129E+00 0.477E-01 0.224E+00 0.724E+00 -.713E-01 -.263E+00 -.851E+00 -.454E-06 -.103E-05 0.505E-06 + -.220E-01 0.397E-01 0.129E+00 -.477E-01 0.224E+00 0.724E+00 0.713E-01 -.263E+00 -.851E+00 0.454E-06 -.103E-05 0.505E-06 + 0.220E-01 -.397E-01 0.129E+00 0.477E-01 -.224E+00 0.724E+00 -.713E-01 0.263E+00 -.851E+00 -.454E-06 0.103E-05 0.505E-06 + -.282E+00 -.146E+00 0.291E-01 -.651E+00 -.269E-01 0.713E-01 0.932E+00 0.172E+00 -.102E+00 -.245E-06 -.989E-06 -.871E-06 + 0.282E+00 0.146E+00 0.291E-01 0.651E+00 0.269E-01 0.713E-01 -.932E+00 -.172E+00 -.102E+00 0.246E-06 0.989E-06 -.871E-06 + -.282E+00 0.146E+00 0.291E-01 -.651E+00 0.269E-01 0.713E-01 0.932E+00 -.172E+00 -.102E+00 -.246E-06 0.989E-06 -.871E-06 + 0.282E+00 -.146E+00 0.291E-01 0.651E+00 -.269E-01 0.713E-01 -.932E+00 0.172E+00 -.102E+00 0.245E-06 -.989E-06 -.871E-06 + -.282E+00 -.146E+00 0.291E-01 -.651E+00 -.269E-01 0.713E-01 0.932E+00 0.172E+00 -.102E+00 -.245E-06 -.989E-06 -.871E-06 + 0.282E+00 0.146E+00 0.291E-01 0.651E+00 0.269E-01 0.713E-01 -.932E+00 -.172E+00 -.102E+00 0.245E-06 0.989E-06 -.871E-06 + -.282E+00 0.146E+00 0.291E-01 -.651E+00 0.269E-01 0.713E-01 0.932E+00 -.172E+00 -.102E+00 -.246E-06 0.989E-06 -.871E-06 + 0.282E+00 -.146E+00 0.291E-01 0.651E+00 -.269E-01 0.713E-01 -.932E+00 0.172E+00 -.102E+00 0.245E-06 -.989E-06 -.871E-06 + -.495E-01 -.668E-01 0.121E-01 -.198E+00 0.663E-01 0.372E-01 0.244E+00 0.263E-02 -.510E-01 -.147E-06 0.502E-06 0.135E-06 + 0.495E-01 0.668E-01 0.121E-01 0.198E+00 -.663E-01 0.372E-01 -.244E+00 -.263E-02 -.510E-01 0.147E-06 -.502E-06 0.135E-06 + -.495E-01 0.668E-01 0.121E-01 -.198E+00 -.663E-01 0.372E-01 0.244E+00 -.263E-02 -.510E-01 -.147E-06 -.502E-06 0.135E-06 + 0.495E-01 -.668E-01 0.121E-01 0.198E+00 0.663E-01 0.372E-01 -.244E+00 0.263E-02 -.510E-01 0.147E-06 0.502E-06 0.135E-06 + -.495E-01 -.668E-01 0.121E-01 -.198E+00 0.663E-01 0.372E-01 0.244E+00 0.263E-02 -.510E-01 -.147E-06 0.502E-06 0.135E-06 + 0.495E-01 0.668E-01 0.121E-01 0.198E+00 -.663E-01 0.372E-01 -.244E+00 -.263E-02 -.510E-01 0.147E-06 -.502E-06 0.135E-06 + -.495E-01 0.668E-01 0.121E-01 -.198E+00 -.663E-01 0.372E-01 0.244E+00 -.263E-02 -.510E-01 -.147E-06 -.502E-06 0.135E-06 + 0.495E-01 -.668E-01 0.121E-01 0.198E+00 0.663E-01 0.372E-01 -.244E+00 0.263E-02 -.510E-01 0.147E-06 0.502E-06 0.135E-06 + 0.461E-01 0.151E+00 0.986E-01 0.202E+00 -.151E+00 0.322E+00 -.242E+00 0.908E-03 -.422E+00 -.908E-06 0.423E-06 -.105E-06 + -.461E-01 -.151E+00 0.986E-01 -.202E+00 0.151E+00 0.322E+00 0.242E+00 -.908E-03 -.422E+00 0.908E-06 -.423E-06 -.105E-06 + 0.461E-01 -.151E+00 0.986E-01 0.202E+00 0.151E+00 0.322E+00 -.242E+00 -.908E-03 -.422E+00 -.908E-06 -.423E-06 -.105E-06 + -.461E-01 0.151E+00 0.986E-01 -.202E+00 -.151E+00 0.322E+00 0.242E+00 0.908E-03 -.422E+00 0.908E-06 0.423E-06 -.105E-06 + 0.461E-01 0.151E+00 0.986E-01 0.202E+00 -.151E+00 0.322E+00 -.242E+00 0.908E-03 -.422E+00 -.908E-06 0.423E-06 -.105E-06 + -.461E-01 -.151E+00 0.986E-01 -.202E+00 0.151E+00 0.322E+00 0.242E+00 -.908E-03 -.422E+00 0.908E-06 -.423E-06 -.105E-06 + 0.461E-01 -.151E+00 0.986E-01 0.202E+00 0.151E+00 0.322E+00 -.242E+00 -.908E-03 -.422E+00 -.908E-06 -.423E-06 -.105E-06 + -.461E-01 0.151E+00 0.986E-01 -.202E+00 -.151E+00 0.322E+00 0.242E+00 0.908E-03 -.422E+00 0.908E-06 0.423E-06 -.105E-06 + ----------------------------------------------------------------------------------------------- + -.287E-04 0.240E-04 0.841E-01 0.724E-14 0.308E-14 -.416E-14 0.139E-15 -.113E-15 -.850E-01 0.272E-12 -.122E-13 -.208E-06 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 0.64182 0.94984 -0.00296 -0.001197 0.003913 0.002522 + 6.26006 7.20943 -0.00296 0.001197 -0.003913 0.002522 + 4.09276 3.12980 -0.00296 -0.001197 -0.003913 0.002522 + 2.80912 5.02947 -0.00296 0.001197 0.003913 0.002522 + 0.64182 5.02947 2.53412 -0.001197 0.003913 0.002522 + 6.26006 3.12980 2.53412 0.001197 -0.003913 0.002522 + 4.09276 7.20943 2.53412 -0.001197 -0.003913 0.002522 + 2.80912 0.94984 2.53412 0.001197 0.003913 0.002522 + 5.96019 7.36706 1.59155 0.001641 -0.000771 0.002435 + 0.94170 0.79221 1.59155 -0.001641 0.000771 0.002435 + 2.50924 4.87185 1.59155 0.001641 0.000771 0.002435 + 4.39264 3.28742 1.59155 -0.001641 -0.000771 0.002435 + 5.96019 3.28742 4.12862 0.001641 -0.000771 0.002435 + 0.94170 4.87185 4.12862 -0.001641 0.000771 0.002435 + 2.50924 0.79221 4.12862 0.001641 0.000771 0.002435 + 4.39264 7.36706 4.12862 -0.001641 -0.000771 0.002435 + 6.67567 0.95616 3.01113 -0.000455 -0.001015 -0.001248 + 0.22621 7.20311 3.01113 0.000455 0.001015 -0.001248 + 3.22473 3.12347 3.01113 -0.000455 0.001015 -0.001248 + 3.67715 5.03580 3.01113 0.000455 -0.001015 -0.001248 + 6.67567 5.03580 0.47406 -0.000455 -0.001015 -0.001248 + 0.22621 3.12347 0.47406 0.000455 0.001015 -0.001248 + 3.22473 7.20311 0.47406 -0.000455 0.001015 -0.001248 + 3.67715 0.95616 0.47406 0.000455 -0.001015 -0.001248 + 2.42023 2.18591 0.89752 -0.003444 0.002186 -0.001587 + 4.48165 5.97336 0.89752 0.003444 -0.002186 -0.001587 + 5.87117 1.89373 0.89752 -0.003444 -0.002186 -0.001587 + 1.03071 6.26555 0.89752 0.003444 0.002186 -0.001587 + 2.42023 6.26555 3.43459 -0.003444 0.002186 -0.001587 + 4.48165 1.89373 3.43459 0.003444 -0.002186 -0.001587 + 5.87117 5.97336 3.43459 -0.003444 -0.002186 -0.001587 + 1.03071 2.18591 3.43459 0.003444 0.002186 -0.001587 + 2.00855 7.44153 1.91498 0.006137 0.000518 -0.002121 + 4.89333 0.71774 1.91498 -0.006137 -0.000518 -0.002121 + 5.45949 4.79738 1.91498 0.006137 -0.000518 -0.002121 + 1.44239 3.36189 1.91498 -0.006137 0.000518 -0.002121 + 2.00855 3.36189 4.45205 0.006137 0.000518 -0.002121 + 4.89333 4.79738 4.45205 -0.006137 -0.000518 -0.002121 + 5.45949 0.71774 4.45205 0.006137 -0.000518 -0.002121 + 1.44239 7.44153 4.45205 -0.006137 0.000518 -0.002121 + ----------------------------------------------------------------------------------- + total drift: -0.000029 0.000024 -0.000804 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -16.93243126 eV + + energy without entropy= -16.94227841 energy(sigma->0) = -16.93571364 + enthalpy is TOTEN = 107.91211280 eV P V= 124.84454406 + + d Force = 0.9464743E-04[ 0.403E-04, 0.149E-03] d Energy = 0.6756475E-04 0.271E-04 + d Force = 0.2985006E-02[ 0.292E-02, 0.305E-02] d Ewald =-0.6668898E-02 0.965E-02 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 0.0283: real time 0.0302 + + +-------------------------------------------------------------------------------------------------------- + + + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 45.0677: real time 45.0865 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 46714. kBytes +======================================================================== + + base : 30000. kBytes + nonl-proj : 3210. kBytes + fftplans : 874. kBytes + grid : 1264. kBytes + one-center: 4. kBytes + wavefun : 11362. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 518.691 + User time (sec): 487.358 + System time (sec): 31.333 + Elapsed time (sec): 519.574 + + Maximum memory used (kb): 203800. + Average memory used (kb): 0. + + Minor page faults: 95199 + Major page faults: 1 + Voluntary context switches: 1785 diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py new file mode 100644 index 000000000..746d45aec --- /dev/null +++ b/tests/auto_test/test_vasp_equi.py @@ -0,0 +1,91 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +from monty.serialization import loadfn,dumpfn +import unittest + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from pymatgen.io.vasp import Incar +from dpgen.auto_test.common_equi import make_equi,post_equi +from dpgen.auto_test.calculator import make_calculator + +class Test01(unittest.TestCase): + jdata={ + "structures": ["confs/hp-Li"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "potcars": {"Si": "vasp_input/POTCAR"} + }, + "relaxation": { + "ediff": 1e-7, + "ediffg": -0.01, + "encut": 650, + "kspacing": 0.1, + "kgamma": False + } + } + def tearDown(self): + if os.path.exists('confs/hp-Li/relaxation'): + shutil.rmtree('confs/hp-Li/relaxation') + + def test_make_equi (self): + confs=self.jdata["structures"] + inter_param=self.jdata["interaction"] + relax_param=self.jdata["relaxation"] + make_equi(confs,inter_param,relax_param) + + target_path = 'confs/hp-Li/relaxation' + source_path = 'vasp_input' + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) + self.assertFalse(incar0 == incar1) + incar0['KSPACING'] = 0.1 + incar0['EDIFF'] = 1e-7 + self.assertTrue(incar0 == incar1) + + with open(os.path.join('vasp_input', 'POTCAR')) as fp: + pot0 = fp.read() + with open(os.path.join(target_path, 'POTCAR')) as fp: + pot1 = fp.read() + self.assertEqual(pot0, pot1) + + self.assertTrue(os.path.isfile(os.path.join(target_path, 'KPOINTS'))) + + task_json_file=os.path.join(target_path, 'task.json') + self.assertTrue(os.path.isfile(task_json_file)) + task_json=loadfn(task_json_file) + self.assertEqual(task_json,relax_param) + + inter_json_file=os.path.join(target_path, 'inter.json') + self.assertTrue(os.path.isfile(inter_json_file)) + inter_json=loadfn(inter_json_file) + self.assertEqual(inter_json,inter_param) + + self.assertTrue(os.path.islink(os.path.join(target_path, 'POSCAR'))) + + + def test_post_equi(self): + confs=self.jdata["structures"] + inter_param=self.jdata["interaction"] + relax_param=self.jdata["relaxation"] + target_path = 'confs/hp-Li/relaxation' + source_path = 'equi/vasp' + + poscar=os.path.join(source_path,'POSCAR') + make_equi(confs,inter_param,relax_param) + shutil.copy(os.path.join(source_path,'OUTCAR'),os.path.join(target_path,'OUTCAR')) + shutil.copy(os.path.join(source_path,'CONTCAR'),os.path.join(target_path,'CONTCAR')) + post_equi(confs,inter_param) + + result_json_file=os.path.join(target_path, 'result.json') + result_json=loadfn(result_json_file) + self.assertTrue(os.path.isfile(result_json_file)) + #self.assertEqual(inter_json,inter_param) + #calc=make_calculator(inter_param, poscar) From 928856907698f674a99433c4d384334823094c23 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 17:38:03 +0800 Subject: [PATCH 039/154] rm old version unittest --- tests/auto_test/test_elastic.py | 52 ---------------- tests/auto_test/test_eos.py | 101 -------------------------------- 2 files changed, 153 deletions(-) delete mode 100644 tests/auto_test/test_elastic.py delete mode 100644 tests/auto_test/test_eos.py diff --git a/tests/auto_test/test_elastic.py b/tests/auto_test/test_elastic.py deleted file mode 100644 index 53a8d57a2..000000000 --- a/tests/auto_test/test_elastic.py +++ /dev/null @@ -1,52 +0,0 @@ -import os,sys,json,glob,shutil -import dpdata -import numpy as np -import unittest - -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -__package__ = 'auto_test' -from .context import make_kspacing_kpoints -from .context import setUpModule - -from pymatgen.io.vasp import Incar -from dpgen.auto_test.gen_02_elastic import make_vasp - -class Test02(unittest.TestCase): - def tearDown(self): - if os.path.exists('02.elastic'): - shutil.rmtree('02.elastic') - - def test_make_vasp (self): - jdata = { - 'relax_incar' : 'vasp_input/INCAR.rlx', - 'potcar_map': {'Si': 'vasp_input/POTCAR' }, - } - make_vasp(jdata, 'confs/si/mp-149') - - target_path = '02.elastic/si/mp-149/vasp-relax_incar' - equi_path = '00.equi/si/mp-149/vasp-relax_incar' - dfm_dirs = glob.glob(os.path.join(target_path, 'dfm*')) - - # check root INCAR - incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) - incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) - self.assertFalse(incar0 == incar1) - incar0['ISIF'] = 2 - self.assertTrue(incar0 == incar1) - # check root POTCAR - with open(os.path.join('vasp_input', 'POTCAR')) as fp: - pot0 = fp.read() - with open(os.path.join(target_path, 'POTCAR')) as fp: - pot1 = fp.read() - self.assertEqual(pot0, pot1) - # check root POSCAR - self.assertEqual(os.path.realpath(os.path.join(target_path, 'POSCAR')), - os.path.realpath(os.path.join(equi_path, 'CONTCAR'))) - # check subdir - for ii in dfm_dirs: - self.assertEqual(os.path.realpath(os.path.join(ii, 'INCAR')), - os.path.realpath(os.path.join(target_path, 'INCAR'))) - self.assertEqual(os.path.realpath(os.path.join(ii, 'KPOINTS')), - os.path.realpath(os.path.join(target_path, 'KPOINTS'))) - self.assertEqual(os.path.realpath(os.path.join(ii, 'POTCAR')), - os.path.realpath(os.path.join(target_path, 'POTCAR'))) diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py deleted file mode 100644 index 2351a8162..000000000 --- a/tests/auto_test/test_eos.py +++ /dev/null @@ -1,101 +0,0 @@ -import os,sys,json,glob,shutil -import dpdata -import numpy as np -import unittest - -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -__package__ = 'auto_test' -from .context import make_kspacing_kpoints -from .context import setUpModule - -from pymatgen.io.vasp import Incar -from dpgen.auto_test.gen_01_eos import make_vasp - -class Test01(unittest.TestCase): - jdata={ - "structures": ["confs/hp-Li"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "potcars": {"Si": "vasp_input/POTCAR"} - }, - "relaxation": { - "ediff": 1e-7, - "ediffg": -0.01, - "encut": 650, - "kspacing": 0.1, - "kgamma": False - } - } - def tearDown(self): - if os.path.exists('confs/hp-Li/relaxation'): - shutil.rmtree('confs/hp-Li/relaxation') - - def tearDown(self): - if os.path.exists('01.eos'): - shutil.rmtree('01.eos') - - def test_make_vasp_rlx_cell_shape (self): - jdata = { - 'relax_incar' : 'vasp_input/INCAR.rlx', - 'potcar_map': {'Si': 'vasp_input/POTCAR' }, - 'vol_start': 15, - 'vol_end': 25, - 'vol_step': 1.0, - 'eos_relax_cell_shape': True, - } - make_vasp(jdata, 'confs/si/mp-149') - - target_path = '01.eos/si/mp-149/vasp-relax_incar' - equi_path = '00.equi/si/mp-149/vasp-relax_incar' - dfm_dirs = glob.glob(os.path.join(target_path, 'vol*')) - - # check root INCAR - incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) - incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) - self.assertFalse(incar0 == incar1) - incar0['ISIF'] = 4 - self.assertTrue(incar0 == incar1) - # check root POTCAR - with open(os.path.join('vasp_input', 'POTCAR')) as fp: - pot0 = fp.read() - with open(os.path.join(target_path, 'POTCAR')) as fp: - pot1 = fp.read() - self.assertEqual(pot0, pot1) - # check subdir - for ii in dfm_dirs: - self.assertTrue(os.path.isfile(os.path.join(ii, 'KPOINTS'))) - self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), - os.path.realpath(os.path.join(equi_path, 'CONTCAR'))) - self.assertEqual(os.path.realpath(os.path.join(ii, 'INCAR')), - os.path.realpath(os.path.join(target_path, 'INCAR'))) - self.assertEqual(os.path.realpath(os.path.join(ii, 'POTCAR')), - os.path.realpath(os.path.join(target_path, 'POTCAR'))) - sys = dpdata.System(os.path.join(ii, 'POSCAR')) - vol = float(ii.split('/')[-1].split('-')[1]) - natoms = sys.get_natoms() - self.assertAlmostEqual(vol, np.linalg.det(sys['cells'][0]) / natoms) - - - def test_make_vasp_norlx_cell_shape (self): - jdata = { - 'relax_incar' : 'vasp_input/INCAR.rlx', - 'potcar_map': {'Si': 'vasp_input/POTCAR' }, - 'vol_start': 15, - 'vol_end': 25, - 'vol_step': 1.0, - 'eos_relax_cell_shape': False, - } - make_vasp(jdata, 'confs/si/mp-149') - - target_path = '01.eos/si/mp-149/vasp-relax_incar' - equi_path = '00.equi/si/mp-149/vasp-relax_incar' - dfm_dirs = glob.glob(os.path.join(target_path, 'vol*')) - - # check root INCAR - incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) - incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) - self.assertFalse(incar0 == incar1) - incar0['ISIF'] = 2 - self.assertTrue(incar0 == incar1) From 703852307962be8452d552592729945db6cea7f1 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 18:36:26 +0800 Subject: [PATCH 040/154] back to atest-refact --- .DS_Store | Bin 0 -> 8196 bytes dpgen/.DS_Store | Bin 0 -> 12292 bytes dpgen/auto_test/.idea/.gitignore | 8 ++++++++ dpgen/auto_test/.idea/auto_test.iml | 8 ++++++++ dpgen/auto_test/.idea/encodings.xml | 4 ++++ .../inspectionProfiles/profiles_settings.xml | 6 ++++++ dpgen/auto_test/.idea/misc.xml | 7 +++++++ dpgen/auto_test/.idea/modules.xml | 8 ++++++++ dpgen/auto_test/.idea/vcs.xml | 6 ++++++ dpgen/collect/collect.py | 3 +-- dpgen/dispatcher/SSHContext.py | 10 +--------- dpgen/dispatcher/Slurm.py | 7 +------ 12 files changed, 50 insertions(+), 17 deletions(-) create mode 100644 .DS_Store create mode 100644 dpgen/.DS_Store create mode 100644 dpgen/auto_test/.idea/.gitignore create mode 100644 dpgen/auto_test/.idea/auto_test.iml create mode 100644 dpgen/auto_test/.idea/encodings.xml create mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 dpgen/auto_test/.idea/misc.xml create mode 100644 dpgen/auto_test/.idea/modules.xml create mode 100644 dpgen/auto_test/.idea/vcs.xml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..461c97506a0e688c4eb34c5214f511791ab1b816 GIT binary patch literal 8196 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 literal 0 HcmV?d00001 diff --git a/dpgen/auto_test/.idea/.gitignore b/dpgen/auto_test/.idea/.gitignore new file mode 100644 index 000000000..73f69e095 --- /dev/null +++ b/dpgen/auto_test/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/dpgen/auto_test/.idea/auto_test.iml b/dpgen/auto_test/.idea/auto_test.iml new file mode 100644 index 000000000..d0876a78d --- /dev/null +++ b/dpgen/auto_test/.idea/auto_test.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/encodings.xml b/dpgen/auto_test/.idea/encodings.xml new file mode 100644 index 000000000..15a15b218 --- /dev/null +++ b/dpgen/auto_test/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml new file mode 100644 index 000000000..bc8e5ad67 --- /dev/null +++ b/dpgen/auto_test/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml new file mode 100644 index 000000000..1c0447018 --- /dev/null +++ b/dpgen/auto_test/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml new file mode 100644 index 000000000..b2bdec2d7 --- /dev/null +++ b/dpgen/auto_test/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/collect/collect.py b/dpgen/collect/collect.py index a8d5b4060..91d13b857 100644 --- a/dpgen/collect/collect.py +++ b/dpgen/collect/collect.py @@ -78,8 +78,7 @@ def collect_data(target_folder, param_file, output, # dump iter data for kk in coll_data.keys(): out_dir = 'sys.%s' % kk - nframes = coll_data[kk].get_nframes() - coll_data[kk].to('deepmd/npy', os.path.join(output, out_dir), set_size = nframes) + coll_data[kk].to('deepmd/npy', os.path.join(output, out_dir)) def gen_collect(args): collect_data(args.JOB_DIR, args.parameter, args.OUTPUT, diff --git a/dpgen/dispatcher/SSHContext.py b/dpgen/dispatcher/SSHContext.py index a6ac3c1d4..4347eb321 100644 --- a/dpgen/dispatcher/SSHContext.py +++ b/dpgen/dispatcher/SSHContext.py @@ -148,19 +148,11 @@ def download(self, os.chdir(cwd) def block_checkcall(self, - cmd, - retry=0) : + cmd) : self.ssh_session.ensure_alive() stdin, stdout, stderr = self.ssh.exec_command(('cd %s ;' % self.remote_root) + cmd) exit_status = stdout.channel.recv_exit_status() if exit_status != 0: - if retry<3: - # sleep 60 s - dlog.warning("Get error code %d in calling %s through ssh with job: %s . message: %s" % - (exit_status, cmd, self.job_uuid, stderr.read().decode('utf-8'))) - dlog.warning("Sleep 60 s and retry the command...") - time.sleep(60) - return self.block_checkcall(cmd, retry=retry+1) raise RuntimeError("Get error code %d in calling %s through ssh with job: %s . message: %s" % (exit_status, cmd, self.job_uuid, stderr.read().decode('utf-8'))) return stdin, stdout, stderr diff --git a/dpgen/dispatcher/Slurm.py b/dpgen/dispatcher/Slurm.py index 9d409dbcc..c2595d6e2 100644 --- a/dpgen/dispatcher/Slurm.py +++ b/dpgen/dispatcher/Slurm.py @@ -149,7 +149,7 @@ def _get_job_id(self) : else: return "" - def _check_status_inner(self, job_id, retry=0): + def _check_status_inner(self, job_id): ret, stdin, stdout, stderr\ = self.context.block_call ('squeue -o "%.18i %.2t" -j ' + job_id) if (ret != 0) : @@ -160,11 +160,6 @@ def _check_status_inner(self, job_id, retry=0): else : return JobStatus.terminated else : - # retry 3 times - if retry < 3: - # rest 60s - time.sleep(60) - return self._check_status_inner(job_id, retry=retry+1) raise RuntimeError\ ("status command squeue fails to execute\nerror message:%s\nreturn code %d\n" % (err_str, ret)) status_line = stdout.read().decode('utf-8').split ('\n')[-2] From 07c399c852acdec7832fd3fc69153859b64b4b1c Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 18:37:20 +0800 Subject: [PATCH 041/154] back to atest-refact --- .DS_Store | Bin 8196 -> 0 bytes dpgen/auto_test/.idea/.gitignore | 8 -------- dpgen/auto_test/.idea/auto_test.iml | 8 -------- dpgen/auto_test/.idea/encodings.xml | 4 ---- .../inspectionProfiles/profiles_settings.xml | 6 ------ dpgen/auto_test/.idea/misc.xml | 7 ------- dpgen/auto_test/.idea/modules.xml | 8 -------- dpgen/auto_test/.idea/vcs.xml | 6 ------ 8 files changed, 47 deletions(-) delete mode 100644 .DS_Store delete mode 100644 dpgen/auto_test/.idea/.gitignore delete mode 100644 dpgen/auto_test/.idea/auto_test.iml delete mode 100644 dpgen/auto_test/.idea/encodings.xml delete mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 dpgen/auto_test/.idea/misc.xml delete mode 100644 dpgen/auto_test/.idea/modules.xml delete mode 100644 dpgen/auto_test/.idea/vcs.xml diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 461c97506a0e688c4eb34c5214f511791ab1b816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMT}&NC6h4Q)?ruw2YHQhR3pWrfDz$+8h^6%cw;~FG^g{U+y7%r1YnNTTyO&#_ zDB2fIYJ94;jlO7NV(_W4eKOI$7>z#{+H@zG`DW&v zb7#((Z+CL`0swYojCz1F0FbCMRJT%di^AlrZYX)dOaUR1J%E$Udb3H}O>WQ)C&CDX z5eOp?Mj(tp7=iys1nACYMcU-v7t*i|BM?U5j*I|%KSZfAj0LzXkiR;p;VA$iO96PH zKIH-2CK_NYz-58llzvlW4;YwYkYb=PCwY{q6UG8u7AVXCg*jlbG6oq6^3};M%GCj5 z0>d_pKp26I5nzu`As8?VQ(&&i-#<;x+Lq_n)m_89{DQ)wEs~^2O0n`(V%p6neBIA@ z9eR3&au5nVnR3cDjzQTaKCL#+G4{%J`7w7;d)1%{Yd~eOMX*zp!{}>ACa5D-7NY zP_oX;3u|4py}3^Di6ZayoQv0UF3QSQt@{b3XV^-)PQqF+C)E;`X?ogCbijCu2Pg`bsFl!n9^oZ`I zOvkXCsi8T`vy!$s;OH}EDV~$%t9S1%E7l^~o}6gCiKJFZ!3ubtGT@P~svaoT?pKt76LhGmM_XVUuWwMa zL0eCnwra@2thq(ehUSFJ>XX6b!8S!3PPsEPF2e`#F?=pVG}lE3&!vWcH!gLjYn|^M{pF!(7Cun(NN*W+HL+2zqeZ zVUa19sPiEEL2l)anrd5~CVo|G7M)Gb0g8mW|sEh?vr7O9TxlZeu49+xWjM@Unb z)O?|QK&h9AqH3X#HY&|BkytGd(pKf5L|j#ig!Hfyli6dYf*4mv;Do*n_>;hyBFBF&xJU zoJ5@%c!D!<7UyvRPvH_V@g;njc=!sw8Zhw - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/encodings.xml b/dpgen/auto_test/.idea/encodings.xml deleted file mode 100644 index 15a15b218..000000000 --- a/dpgen/auto_test/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2..000000000 --- a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml deleted file mode 100644 index bc8e5ad67..000000000 --- a/dpgen/auto_test/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml deleted file mode 100644 index 1c0447018..000000000 --- a/dpgen/auto_test/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml deleted file mode 100644 index b2bdec2d7..000000000 --- a/dpgen/auto_test/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 90b9254ac5da5c1e72c101c888e4acc85d046951 Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+kevinwenminion@users.noreply.github.com> Date: Mon, 22 Jun 2020 18:39:52 +0800 Subject: [PATCH 042/154] Delete .DS_Store --- dpgen/.DS_Store | Bin 12292 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dpgen/.DS_Store diff --git a/dpgen/.DS_Store b/dpgen/.DS_Store deleted file mode 100644 index 4a81c45477171dfdd6cbce676e51d3d697a7ac31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12292 zcmeHNYiu0V6+WM1J2R7qCltue)*El_7@OdPIB{YOAzeQb$23u**omD7F}vO=nX=wB zJF_;9acc@yK>|`lQy{cb1*lR92q|j#0Z0_7&=+lK34~ICgsQeG{D7*J5D3(sd++Ra zy|zODi6Am#&D^>7-0PWh_RiezeBTfeI&#ToqDCUpco(I)kf_`siZ0+v(I)I-pRvv3 z7VysFh|f);6#v;YL|)3B(K~1eA`nF2^Av$Hz8UfSmh(QJpW00E^E=v^NM#a4W%ndT zQjY7bUi}Kn=9O1e&ewEffz@-Bv30;1%A|XpL-wFqB4Z)*f~2vHqbV z2hAlz@zhW*75D7+R7!Mq2R!=*Pn_*_Gg+@wb{sU#oNMp2xt}v?cX4kXdY<@C+ebVn zlXiF8S(nSY*lHC){n)|_BDEJ?vU=U+U+p@%XmORfm=>8=X~9QaIdbPyl`n~krlS8^QO`vnpvj}aah0TbLer(CuEw(V2}@_z=3`RRWOGBKW%Rl1s~Pt@Hmx*_zU!QH(scP2 z#EmzvF|1vwc*0JZNnH(F-)dO>qsnFTYkuPu8w_h;C^J0FF1kz55Gj7Kb+>85g6c6G!eufix98crtcm}`4^LPob;xFnx z%fti~+cs6?k9bWhapwP1L;AFeVzh3RACy+D7Y zSLv_xH~KsMgWjQk(ZA_G01Pa^LWJ-Y)M7d6u>xz+BK_OI{%w~2ZN~unw-5W-KjGW; z$YKJw;5+y(ZpA(LF&@S-Jc38rvnTNjb>9VVuFCtNN<7P@PI1bS$B*G4A8m5QGCDfq zKZXZpdkiC+Hg_AdJ}4jgNb&{!&}t>?{q$Q4YC!~o2%M7<5buX5@1l(P<&-MrtAh^$ zLI}Hn5OU*l&I4py)GuRxIi*TDl*h=ST&kgBAyRfZoZF**J?58Fs#L=XYB<5aGW-k$ zYB(V(yAxun430qrf(XovKqWWL#QvuR9bv{CU1t^h|9PPT{9ii%f@O7$E7!DcXfFWc z5-41Z$t4h1NLwQCJi?Y(cp9u1;Mod)*@(=Q8th^KZ{MH^6mHH}y`$k;je)l*k+&7D z4>xF>9hha(YODxz&$wpJQ=Kn0nl(oIW`(l080&S;2h4J1Z8NUW81|c$%DT~r=^|q> zN!9DaUAktX1pn%DLiwN4ae9V+M}J}n{~CkcH|bpvG%RL_E8u%A>KNp%!lh`&8V0&o zVj~0jc64GZwqZMVFqjuW_W%YFXE1-A1iT{{$06K^Ne1<|;x>l#ci^xO>VJqI;U_qz zrdt8@_Dr9Ccx2|>8|}@eQmf$#`JV~;b`gA9wai80ropY-cIC_a_X zO*KO^78zIfayr`U#l4){5zp=uwH*5v){$9P zijvi&@U{(3f(Qf=2qF+fAc(*@9)Sw>e-`1PD98HE+0L=7iHYX5Ev=knt!+JRk|mNT z-sViQ?q}mHz80le<9T0;wa(Dy?k%5CWcf(lvxr8SA%L0?B4@b9XE>x*`0+(f!IUtY z5h@6oENW^e&BaxVjOx%bohgdx%!jaqszbG!R!p6!0rjB4_1!Sbr9LmJth-0dN-4uzOG6hL?MA0h z$CWT}XP`g}Rs9K8pI>Au?sZn4-(uDIJ^C*ySW90Di}myfQ*sTgr(c35tYppkGPL1x zrs9O|+%2iNKJ3D7NyQDZ_H48EJi^+u3r|vUd42s3d=GcwZhW7qxChRNiks!tSdu`M z5XD7{#21H%%YR@|GKbH2+D@D7g*lv`t);X0?D5FF7K*i>w??7=Z<_o2KiMfb1Q7@# z@WqS(%DZ~II@q_oI#KGT(AuNCU&FiDM87Fj${~F4<#=h6Qarc$pX$lB7% From e9cf130fc6801a4432c2b1e252c0eb81a1466562 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 21:42:26 +0800 Subject: [PATCH 043/154] add unittest eos --- tests/auto_test/test_vasp_eos.py | 83 +++++++++++++++++++++++++++++++ tests/auto_test/test_vasp_equi.py | 4 +- 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 tests/auto_test/test_vasp_eos.py diff --git a/tests/auto_test/test_vasp_eos.py b/tests/auto_test/test_vasp_eos.py new file mode 100644 index 000000000..39b2cfea7 --- /dev/null +++ b/tests/auto_test/test_vasp_eos.py @@ -0,0 +1,83 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +from monty.serialization import loadfn,dumpfn + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from pymatgen.io.vasp import Incar +from dpgen.auto_test.common_prop import make_property + +class TestEOS(unittest.TestCase): + jdata={ + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "eos", + "vol_start": 10, + "vol_end": 30, + "vol_step": 3, + "change_box": True + } + ] + } + + def tearDown(self): + if os.path.exists('confs/hp-Li/eos_00'): + shutil.rmtree('confs/hp-Li/eos_00') + if os.path.exists('confs/hp-Li/relaxation'): + shutil.rmtree('confs/hp-Li/relaxation') + + def test_make_eos (self): + confs=self.jdata["structures"] + inter_param=self.jdata["interaction"] + property_list=self.jdata["properties"] + + target_path = 'confs/hp-Li/eos_00' + equi_path = 'confs/hp-Li/relaxation' + source_path = 'equi/vasp' + + if not os.path.exists(equi_path): + os.mkdir(equi_path) + shutil.copy(os.path.join(source_path,'CONTCAR'),os.path.join(equi_path,'CONTCAR')) + + make_property(confs,inter_param,property_list) + + dfm_dirs = glob.glob(os.path.join(target_path, 'task.*')) + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0['ISIF'] = 4 + + with open(os.path.join('vasp_input', 'POTCAR')) as fp: + pot0 = fp.read() + for ii in dfm_dirs: + self.assertTrue(os.path.isfile(os.path.join(ii, 'KPOINTS'))) + incar1 = Incar.from_file(os.path.join(ii, 'INCAR')) + self.assertTrue(incar0 == incar1) + self.assertTrue(os.path.isfile(os.path.join(ii, 'INCAR'))) + self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) + self.assertTrue(os.path.isfile(os.path.join(ii, 'POTCAR'))) + self.assertTrue(os.path.isfile(os.path.join(ii, 'task.json'))) + inter_json_file=os.path.join(ii, 'inter.json') + self.assertTrue(os.path.isfile(inter_json_file)) + inter_json=loadfn(inter_json_file) + self.assertEqual(inter_json,inter_param) + self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), + os.path.realpath(os.path.join(equi_path, 'CONTCAR'))) + with open(os.path.join(ii, 'POTCAR')) as fp: + poti = fp.read() + self.assertEqual(pot0, poti) + # sys = dpdata.System(os.path.join(ii, 'POSCAR')) + # vol = float(ii.split('/')[-1].split('-')[1]) + # natoms = sys.get_natoms() + # self.assertAlmostEqual(vol, np.linalg.det(sys['cells'][0]) / natoms) diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py index 746d45aec..334861341 100644 --- a/tests/auto_test/test_vasp_equi.py +++ b/tests/auto_test/test_vasp_equi.py @@ -13,14 +13,14 @@ from dpgen.auto_test.common_equi import make_equi,post_equi from dpgen.auto_test.calculator import make_calculator -class Test01(unittest.TestCase): +class TestEqui(unittest.TestCase): jdata={ "structures": ["confs/hp-Li"], "interaction": { "type": "vasp", "incar": "vasp_input/INCAR.rlx", "potcar_prefix":".", - "potcars": {"Si": "vasp_input/POTCAR"} + "potcars": {"Li": "vasp_input/POTCAR"} }, "relaxation": { "ediff": 1e-7, From 370411002a96ab37f63d22be27fefcdec736be3b Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 21:49:36 +0800 Subject: [PATCH 044/154] fix eos bug --- dpgen/auto_test/.idea/auto_test.iml | 12 +++++ .../inspectionProfiles/profiles_settings.xml | 6 +++ dpgen/auto_test/.idea/misc.xml | 7 +++ dpgen/auto_test/.idea/modules.xml | 8 +++ dpgen/auto_test/.idea/vcs.xml | 6 +++ dpgen/auto_test/.idea/workspace.xml | 52 +++++++++++++++++++ dpgen/auto_test/EOS.py | 3 +- dpgen/auto_test/Lammps.py | 5 +- 8 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 dpgen/auto_test/.idea/auto_test.iml create mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 dpgen/auto_test/.idea/misc.xml create mode 100644 dpgen/auto_test/.idea/modules.xml create mode 100644 dpgen/auto_test/.idea/vcs.xml create mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/auto_test.iml b/dpgen/auto_test/.idea/auto_test.iml new file mode 100644 index 000000000..8b8c39547 --- /dev/null +++ b/dpgen/auto_test/.idea/auto_test.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml new file mode 100644 index 000000000..bc8e5ad67 --- /dev/null +++ b/dpgen/auto_test/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml new file mode 100644 index 000000000..1c0447018 --- /dev/null +++ b/dpgen/auto_test/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml new file mode 100644 index 000000000..b2bdec2d7 --- /dev/null +++ b/dpgen/auto_test/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml new file mode 100644 index 000000000..59079497b --- /dev/null +++ b/dpgen/auto_test/.idea/workspace.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1592816065883 + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 89a306c61..5e577219f 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -41,6 +41,7 @@ def make_confs(self, if not os.path.exists(equi_contcar): raise RuntimeError("please do relaxation first") vol_to_poscar = vasp.poscar_vol(equi_contcar) / vasp.poscar_natoms(equi_contcar) + self.parameter['scale2equi'] = [] for vol in np.arange(self.vol_start, self.vol_end, self.vol_step): task_num = (vol - self.vol_start) / self.vol_step output_task = os.path.join(path_to_work, 'task.%06d' % task_num) @@ -52,7 +53,7 @@ def make_confs(self, task_list.append(output_task) os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') scale = (vol / vol_to_poscar) ** (1. / 3.) - self.parameter['scale2equi'] = scale # 06/14 + self.parameter['scale2equi'].append(scale) # 06/22 vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) os.chdir(cwd) return task_list diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 75d49fe6b..372176fb4 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -147,10 +147,13 @@ def make_input_file(self, etol, ftol, maxiter, maxeval) if task_type == 'vacancy' \ - or (task_type == 'eos' and change_box) \ or (task_type == 'interstitial'): fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, self.inter_func, self.model_param, B0, bp, etol, ftol, maxiter, maxeval) + + if task_type == 'eos' and change_box: + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6])], self.inter_func, + self.model_param, B0, bp, etol, ftol, maxiter, maxeval) if reprod_opt: fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) From 963dd50669a6b0dd941b8b6c11942f5dd6c8adf1 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 21:49:57 +0800 Subject: [PATCH 045/154] fix eos bug --- dpgen/auto_test/.idea/auto_test.iml | 12 ----- .../inspectionProfiles/profiles_settings.xml | 6 --- dpgen/auto_test/.idea/misc.xml | 7 --- dpgen/auto_test/.idea/modules.xml | 8 --- dpgen/auto_test/.idea/vcs.xml | 6 --- dpgen/auto_test/.idea/workspace.xml | 52 ------------------- 6 files changed, 91 deletions(-) delete mode 100644 dpgen/auto_test/.idea/auto_test.iml delete mode 100644 dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 dpgen/auto_test/.idea/misc.xml delete mode 100644 dpgen/auto_test/.idea/modules.xml delete mode 100644 dpgen/auto_test/.idea/vcs.xml delete mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/auto_test.iml b/dpgen/auto_test/.idea/auto_test.iml deleted file mode 100644 index 8b8c39547..000000000 --- a/dpgen/auto_test/.idea/auto_test.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml b/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2..000000000 --- a/dpgen/auto_test/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/misc.xml b/dpgen/auto_test/.idea/misc.xml deleted file mode 100644 index bc8e5ad67..000000000 --- a/dpgen/auto_test/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/modules.xml b/dpgen/auto_test/.idea/modules.xml deleted file mode 100644 index 1c0447018..000000000 --- a/dpgen/auto_test/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/vcs.xml b/dpgen/auto_test/.idea/vcs.xml deleted file mode 100644 index b2bdec2d7..000000000 --- a/dpgen/auto_test/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml deleted file mode 100644 index 59079497b..000000000 --- a/dpgen/auto_test/.idea/workspace.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1592816065883 - - - - - - \ No newline at end of file From 5f48d9a4a4b86ce8909928ce6c2868159fa4db42 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 22 Jun 2020 22:03:46 +0800 Subject: [PATCH 046/154] fix eos bug again --- dpgen/auto_test/.idea/workspace.xml | 51 +++++++++++++++++++++++++++++ dpgen/auto_test/Lammps.py | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml new file mode 100644 index 000000000..da4b443b4 --- /dev/null +++ b/dpgen/auto_test/.idea/workspace.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1592816065883 + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 372176fb4..579586922 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -152,7 +152,7 @@ def make_input_file(self, self.model_param, B0, bp, etol, ftol, maxiter, maxeval) if task_type == 'eos' and change_box: - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6])], self.inter_func, + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6:])], self.inter_func, self.model_param, B0, bp, etol, ftol, maxiter, maxeval) if reprod_opt: fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) From 42c3b35bb78e3e8df5b47fd7345fe39ee1e01a94 Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 22:40:14 +0800 Subject: [PATCH 047/154] add test lammps --- tests/auto_test/test_lammps.py | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tests/auto_test/test_lammps.py diff --git a/tests/auto_test/test_lammps.py b/tests/auto_test/test_lammps.py new file mode 100644 index 000000000..461f7756d --- /dev/null +++ b/tests/auto_test/test_lammps.py @@ -0,0 +1,74 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +from dpgen.auto_test.lib.lammps import inter_deepmd +from monty.serialization import loadfn,dumpfn + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.Lammps import Lammps + +class TestLammps(unittest.TestCase): + + def setUp(self): + self.jdata={ + "structures": ["confs/hp-*"], + "interaction": { + "type": "deepmd", + "model": "lammps_input/frozen_model.pb", + "deepmd_version":"1.1.0", + "type_map": {"Li": 0} + }, + "relaxation": { + "etol": 1e-12, + "ftol": 1e-6, + "maxiter": 5000, + "maximal": 500000, + "change_box": True + } + } + + self.equi_path = 'confs/hp-Li/relaxation' + self.source_path = 'equi/vasp' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=self.jdata["structures"] + inter_param=self.jdata["interaction"] + self.Lammps=Lammps(inter_param,os.path.join(self.source_path,'POSCAR')) + + def tearDown(self): + if os.path.exists('confs/hp-Li/relaxation'): + shutil.rmtree('confs/hp-Li/relaxation') + if os.path.exists('frozen_model.pb'): + os.remove('frozen_model.pb') + if os.path.exists('inter.json'): + os.remove('inter.json') + + def test_set_inter_type_func (self): + self.Lammps.set_inter_type_func() + self.assertEqual(inter_deepmd,self.Lammps.inter_func ) + + def test_set_model_param(self): + self.Lammps.set_model_param() + model_param = {'model_name': ['frozen_model.pb'], + 'param_type': {"Li": 0}, + 'deepmd_version': '1.1.0'} + self.assertEqual(model_param,self.Lammps.model_param) + + def test_make_potential_files(self): + self.Lammps.make_potential_files(".") + self.assertTrue(os.path.islink("frozen_model.pb")) + self.assertTrue(os.path.isfile('inter.json')) + + self.Lammps.make_potential_files(self.equi_path) + self.assertTrue(os.path.islink(os.path.join(self.equi_path,"frozen_model.pb"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path,'inter.json'))) + + def test_backward_files(self): + backward_files=['log.lammps', 'outlog', 'dump.relax'] + self.assertEqual(self.Lammps.backward_files(),backward_files) From 22c54a0e8d6fa95843fdb8395b6f55d5ace1edce Mon Sep 17 00:00:00 2001 From: haidi Date: Mon, 22 Jun 2020 22:59:25 +0800 Subject: [PATCH 048/154] add vasp test --- tests/auto_test/test_lammps.py | 2 +- tests/auto_test/test_vasp.py | 63 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tests/auto_test/test_vasp.py diff --git a/tests/auto_test/test_lammps.py b/tests/auto_test/test_lammps.py index 461f7756d..fd3b6ac09 100644 --- a/tests/auto_test/test_lammps.py +++ b/tests/auto_test/test_lammps.py @@ -2,7 +2,6 @@ import dpdata import numpy as np import unittest -from dpgen.auto_test.lib.lammps import inter_deepmd from monty.serialization import loadfn,dumpfn sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) @@ -10,6 +9,7 @@ from .context import make_kspacing_kpoints from .context import setUpModule +from dpgen.auto_test.lib.lammps import inter_deepmd from dpgen.auto_test.Lammps import Lammps class TestLammps(unittest.TestCase): diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py new file mode 100644 index 000000000..96f688fe6 --- /dev/null +++ b/tests/auto_test/test_vasp.py @@ -0,0 +1,63 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +from monty.serialization import loadfn,dumpfn + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.VASP import VASP + +class TestVASP(unittest.TestCase): + + def setUp(self): + self.jdata= { + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR", + "potcar_prefix":".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "relaxation": { + "ediff": 1e-7, + "ediffg": -0.01, + "encut": 650, + "kspacing": 0.1, + "kgamma": False + } + } + + self.equi_path = 'confs/hp-Li/relaxation' + self.source_path = 'equi/vasp' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=self.jdata["structures"] + inter_param=self.jdata["interaction"] + self.VASP=VASP(inter_param,os.path.join(self.source_path,'POSCAR')) + + def tearDown(self): + if os.path.exists('confs/hp-Li/relaxation'): + shutil.rmtree('confs/hp-Li/relaxation') + if os.path.exists('inter.json'): + os.remove('inter.json') + if os.path.exists('POTCAR'): + os.remove('POTCAR') + + def test_make_potential_files(self): + self.VASP.make_potential_files(".") + self.assertTrue(os.path.isfile("POTCAR")) + self.assertTrue(os.path.isfile('inter.json')) + + self.VASP.make_potential_files(self.equi_path) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path,"POTCAR"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path,'inter.json'))) + + + def test_backward_files(self): + backward_files=['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] + self.assertEqual(self.VASP.backward_files(),backward_files) From 9b03ee2c0761619ed27314509339dfd3cf361d52 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 23 Jun 2020 09:27:19 +0800 Subject: [PATCH 049/154] remove redundancy --- dpgen/auto_test/.idea/workspace.xml | 51 ----------------------------- 1 file changed, 51 deletions(-) delete mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml deleted file mode 100644 index da4b443b4..000000000 --- a/dpgen/auto_test/.idea/workspace.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1592816065883 - - - - - - \ No newline at end of file From d5ce8dfa431850b76ff73b1c6c0725fee1cb2414 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 23 Jun 2020 10:52:34 +0800 Subject: [PATCH 050/154] revised type map --- dpgen/auto_test/.idea/workspace.xml | 54 +++++++++++++++++++++++++++++ dpgen/auto_test/Lammps.py | 16 +++++---- dpgen/auto_test/VASP.py | 7 ++-- dpgen/auto_test/common_equi.py | 9 ++--- 4 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml new file mode 100644 index 000000000..4e36247e4 --- /dev/null +++ b/dpgen/auto_test/.idea/workspace.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1592816065883 + + + + + + \ No newline at end of file diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 579586922..fafbabb79 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -181,13 +181,15 @@ def compute(self, epa = float(ii.split('=')[1].split()[0]) dump = os.path.join(output_dir, 'dump.relax') - _tmp = inter_param['type_map'] - dlog.debug(_tmp) - type_map = {k: v for v, k in _tmp.items()} - dlog.debug(type_map) - type_map_list = [] - for ii in range(len(type_map)): - type_map_list.append(type_map[ii]) + type_map_list = inter_param['type_map'] + dlog.debug(type_map_list) + #_tmp = inter_param['type_map'] + #dlog.debug(_tmp) + #type_map = {k: v for v, k in _tmp.items()} + #dlog.debug(type_map) + #type_map_list = [] + #for ii in range(len(type_map)): + # type_map_list.append(type_map[ii]) contcar = os.path.join(output_dir, 'CONTCAR') d_dump = dpdata.System(dump, fmt='lammps/dump', type_map=type_map_list) d_dump.to('vasp/poscar', contcar, frame_idx=-1) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 76588d0f0..76f355eca 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -15,16 +15,17 @@ def __init__(self, path_to_poscar): self.inter = inter_parameter self.incar = inter_parameter['incar'] + self.type_map = inter_parameter['type_map'] self.potcars = inter_parameter['potcars'] - default_potcar_prefix = '' - self.potcar_prefix = inter_parameter.get('potcar_prefix',default_potcar_prefix) + #default_potcar_prefix = '' + #self.potcar_prefix = inter_parameter.get('potcar_prefix',default_potcar_prefix) self.path_to_poscar = path_to_poscar def make_potential_files(self, output_dir): with open(os.path.join(output_dir, 'POTCAR'), 'w') as fp: for ii in self.potcars: - with open(os.path.join(self.potcar_prefix, self.potcars[ii]), 'r') as fin: + with open(self.potcars[ii], 'r') as fin: for line in fin: print(line.strip('\n'), file=fp) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 3a360a3cd..3e466c85e 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -18,10 +18,11 @@ def make_equi(confs, # find all POSCARs and their name like mp-xxx # ... dlog.debug('debug info make equi') - if 'type_map' in inter_param: - ele_list = [key for key in inter_param['type_map'].keys()] - else: - ele_list = [key for key in inter_param['potcars'].keys()] + #if 'type_map' in inter_param: + # ele_list = [key for key in inter_param['type_map'].keys()] + #else: + # ele_list = [key for key in inter_param['potcars'].keys()] + ele_list = inter_param['type_map'] dlog.debug("ele_list %s" % ':'.join(ele_list)) conf_dirs = [] for conf in confs: From 61c6d0c766a365d939f3ef949027a35ebb580045 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 23 Jun 2020 10:52:50 +0800 Subject: [PATCH 051/154] revised type map --- dpgen/auto_test/.idea/workspace.xml | 54 ----------------------------- 1 file changed, 54 deletions(-) delete mode 100644 dpgen/auto_test/.idea/workspace.xml diff --git a/dpgen/auto_test/.idea/workspace.xml b/dpgen/auto_test/.idea/workspace.xml deleted file mode 100644 index 4e36247e4..000000000 --- a/dpgen/auto_test/.idea/workspace.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1592816065883 - - - - - - \ No newline at end of file From 68f99b03e0b2d509d5a899223c71731ab192efef Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 10:55:18 +0800 Subject: [PATCH 052/154] add test_mpdb --- tests/auto_test/confs/mp-141/mp-141.cif | 28 ++++++++ tests/auto_test/test_eos.py | 68 +++++++++++++++++++ .../{test_vasp_eos.py => test_make_prop.py} | 2 +- tests/auto_test/test_mpdb.py | 44 ++++++++++++ tests/auto_test/test_vasp.py | 1 - 5 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 tests/auto_test/confs/mp-141/mp-141.cif create mode 100644 tests/auto_test/test_eos.py rename tests/auto_test/{test_vasp_eos.py => test_make_prop.py} (98%) create mode 100644 tests/auto_test/test_mpdb.py diff --git a/tests/auto_test/confs/mp-141/mp-141.cif b/tests/auto_test/confs/mp-141/mp-141.cif new file mode 100644 index 000000000..cd581a501 --- /dev/null +++ b/tests/auto_test/confs/mp-141/mp-141.cif @@ -0,0 +1,28 @@ +# generated using pymatgen +data_Yb +_symmetry_space_group_name_H-M 'P 1' +_cell_length_a 3.85287197 +_cell_length_b 3.85287197 +_cell_length_c 6.37704700 +_cell_angle_alpha 90.00000000 +_cell_angle_beta 90.00000000 +_cell_angle_gamma 119.99999956 +_symmetry_Int_Tables_number 1 +_chemical_formula_structural Yb +_chemical_formula_sum Yb2 +_cell_volume 81.98216970 +_cell_formula_units_Z 2 +loop_ + _symmetry_equiv_pos_site_id + _symmetry_equiv_pos_as_xyz + 1 'x, y, z' +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Yb Yb0 1 0.33333300 0.66666700 0.25000000 1 + Yb Yb1 1 0.66666700 0.33333300 0.75000000 1 diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py new file mode 100644 index 000000000..d024c4897 --- /dev/null +++ b/tests/auto_test/test_eos.py @@ -0,0 +1,68 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +from monty.serialization import loadfn,dumpfn + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.EOS import EOS + +class TestEOS(unittest.TestCase): + + def setUp(self): + _jdata={ + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "eos", + "vol_start": 10, + "vol_end": 30, + "vol_step": 3, + "change_box": True + } + ] + } + + self.equi_path = 'confs/hp-Li/relaxation' + self.source_path = 'equi/vasp' + self.target_path = 'confs/hp-Li/eos_00' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=_jdata["structures"] + self.inter_param=_jdata["interaction"] + self.prop_param=_jdata['properties'] + + self.eos=EOS(_jdata['properties'][0]) + + def tearDown(self): + #return + if os.path.exists('confs/hp-Li/relaxation'): + shutil.rmtree('confs/hp-Li/relaxation') + if os.path.exists('frozen_model.pb'): + os.remove('frozen_model.pb') + if os.path.exists('inter.json'): + os.remove('inter.json') + + def test_task_type (self): + self.assertEqual('eos',self.eos.task_type() ) + + def test_task_param (self): + self.assertEqual(self.prop_param[0],self.eos.task_param() ) + + + def test_make_confs(self): + with self.assertRaises(RuntimeError): + self.eos.make_confs(self.target_path,self.equi_path) + shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) + self.eos.make_confs(self.target_path,self.equi_path) diff --git a/tests/auto_test/test_vasp_eos.py b/tests/auto_test/test_make_prop.py similarity index 98% rename from tests/auto_test/test_vasp_eos.py rename to tests/auto_test/test_make_prop.py index 39b2cfea7..0c23d4753 100644 --- a/tests/auto_test/test_vasp_eos.py +++ b/tests/auto_test/test_make_prop.py @@ -12,7 +12,7 @@ from pymatgen.io.vasp import Incar from dpgen.auto_test.common_prop import make_property -class TestEOS(unittest.TestCase): +class TestMakeProperty(unittest.TestCase): jdata={ "structures": ["confs/hp-*"], "interaction": { diff --git a/tests/auto_test/test_mpdb.py b/tests/auto_test/test_mpdb.py new file mode 100644 index 000000000..6af93075a --- /dev/null +++ b/tests/auto_test/test_mpdb.py @@ -0,0 +1,44 @@ +import os +import sys +import unittest +from pymatgen import Structure +from pymatgen.analysis.structure_matcher import StructureMatcher +from monty.serialization import loadfn,dumpfn + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.mpdb import get_structure + +def fit(struct0,struct1) : + m = StructureMatcher() + if m.fit(struct0, struct1) : + return True + return False + +class TestMpdb(unittest.TestCase): + + def setUp(self): + if 'MAPI_KEY' in os.environ: + self.key=os.environ['MAPI_KEY'] + else: + self.key=None + self.mpid='mp-141' + self.st_file=self.mpid+'.vasp' + self.st0_file=os.path.join('confs/',self.mpid,self.mpid+'.cif') + + + def tearDown(self): + if os.path.exists(self.st_file): + os.remove(self.st_file) + + def test_get_structure (self): + if self.key: + st1=get_structure(self.mpid) + st0=Structure.from_file(self.st0_file) + self.assertTrue(fit(st0,st1)) + else: + with self.assertRaises(RuntimeError): + self.assertError(get_structure(self.mpid)) diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py index 96f688fe6..faf184001 100644 --- a/tests/auto_test/test_vasp.py +++ b/tests/auto_test/test_vasp.py @@ -57,7 +57,6 @@ def test_make_potential_files(self): self.assertTrue(os.path.isfile(os.path.join(self.equi_path,"POTCAR"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path,'inter.json'))) - def test_backward_files(self): backward_files=['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] self.assertEqual(self.VASP.backward_files(),backward_files) From 2246298c945aed12c94f2818f74fb7117f6159f0 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 12:02:04 +0800 Subject: [PATCH 053/154] update EOS test --- dpgen/auto_test/EOS.py | 3 +++ tests/auto_test/test_eos.py | 21 +++++++++++++++++---- tests/auto_test/test_make_prop.py | 1 + tests/auto_test/test_vasp.py | 1 + tests/auto_test/test_vasp_equi.py | 1 + 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 5e577219f..0d5006d3d 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -2,6 +2,7 @@ from dpgen.auto_test.refine import make_refine from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp +from monty.serialization import loadfn,dumpfn import numpy as np import os, json @@ -53,6 +54,8 @@ def make_confs(self, task_list.append(output_task) os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') scale = (vol / vol_to_poscar) ** (1. / 3.) + eos_params={'volume':vol,'scale':scale} + dumpfn(eos_params,'eos.json',indent=4) self.parameter['scale2equi'].append(scale) # 06/22 vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) os.chdir(cwd) diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py index d024c4897..e3ba67127 100644 --- a/tests/auto_test/test_eos.py +++ b/tests/auto_test/test_eos.py @@ -3,6 +3,7 @@ import numpy as np import unittest from monty.serialization import loadfn,dumpfn +from pymatgen.io.vasp import Incar sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' @@ -20,6 +21,7 @@ def setUp(self): "type": "vasp", "incar": "vasp_input/INCAR.rlx", "potcar_prefix":".", + "type_map": ['Li'], "potcars": {"Li": "vasp_input/POTCAR"} }, "properties": [ @@ -46,7 +48,6 @@ def setUp(self): self.eos=EOS(_jdata['properties'][0]) def tearDown(self): - #return if os.path.exists('confs/hp-Li/relaxation'): shutil.rmtree('confs/hp-Li/relaxation') if os.path.exists('frozen_model.pb'): @@ -62,7 +63,19 @@ def test_task_param (self): def test_make_confs(self): - with self.assertRaises(RuntimeError): - self.eos.make_confs(self.target_path,self.equi_path) + if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): + with self.assertRaises(RuntimeError): + self.eos.make_confs(self.target_path,self.equi_path) shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) - self.eos.make_confs(self.target_path,self.equi_path) + task_list=self.eos.make_confs(self.target_path,self.equi_path) + dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0['ISIF'] = 4 + + with open(os.path.join('vasp_input', 'POTCAR')) as fp: + pot0 = fp.read() + for ii in dfm_dirs: + self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) + self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), + os.path.realpath(os.path.join(self.equi_path, 'CONTCAR'))) diff --git a/tests/auto_test/test_make_prop.py b/tests/auto_test/test_make_prop.py index 0c23d4753..ee90fb5d6 100644 --- a/tests/auto_test/test_make_prop.py +++ b/tests/auto_test/test_make_prop.py @@ -19,6 +19,7 @@ class TestMakeProperty(unittest.TestCase): "type": "vasp", "incar": "vasp_input/INCAR.rlx", "potcar_prefix":".", + "type_map": ['Li'], "potcars": {"Li": "vasp_input/POTCAR"} }, "properties": [ diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py index faf184001..8cba22a39 100644 --- a/tests/auto_test/test_vasp.py +++ b/tests/auto_test/test_vasp.py @@ -20,6 +20,7 @@ def setUp(self): "type": "vasp", "incar": "vasp_input/INCAR", "potcar_prefix":".", + "type_map": ['Li'], "potcars": {"Li": "vasp_input/POTCAR"} }, "relaxation": { diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py index 334861341..5164f2927 100644 --- a/tests/auto_test/test_vasp_equi.py +++ b/tests/auto_test/test_vasp_equi.py @@ -20,6 +20,7 @@ class TestEqui(unittest.TestCase): "type": "vasp", "incar": "vasp_input/INCAR.rlx", "potcar_prefix":".", + "type_map": ["Li"], "potcars": {"Li": "vasp_input/POTCAR"} }, "relaxation": { From 61f3219ac9467336c2f9f984e0c51f6c9ca3683d Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 16:36:18 +0800 Subject: [PATCH 054/154] update EOS and Elastic --- dpgen/auto_test/EOS.py | 5 +++++ dpgen/auto_test/Elastic.py | 18 +++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 0d5006d3d..e346fe18e 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -5,6 +5,7 @@ from monty.serialization import loadfn,dumpfn import numpy as np import os, json +from dpgen import dlog class EOS(Property): @@ -22,6 +23,10 @@ def make_confs(self, path_to_equi, refine=False): path_to_work = os.path.abspath(path_to_work) + if os.path.exists(path_to_work): + dlog.warning('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) cwd = os.getcwd() task_list = [] diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index f683a5f7d..28ce7c6bd 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -1,3 +1,4 @@ +from dpgen import dlog from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine import dpgen.auto_test.lib.vasp as vasp @@ -6,8 +7,9 @@ from pymatgen.analysis.elasticity.strain import DeformedStructureSet, Strain from pymatgen.analysis.elasticity.stress import Stress from pymatgen.analysis.elasticity.elastic import ElasticTensor +from monty.serialization import loadfn,dumpfn import numpy as np -import os, json +import os class Elastic(Property): @@ -24,6 +26,10 @@ def make_confs(self, path_to_equi, refine=False): path_to_work = os.path.abspath(path_to_work) + if os.path.exists(path_to_work): + dlog.warning('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) task_list = [] cwd = os.getcwd() @@ -79,8 +85,8 @@ def make_confs(self, task_list.append(output_task) dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') # record strain - strain = Strain.from_deformation(dfm_ss.deformations[ii]) - np.savetxt('strain.out', strain) + df=dfm_ss.deformations[ii] + dumpfn(df.as_dict(),'strain.json',indent=4) os.chdir(cwd) return task_list @@ -101,8 +107,7 @@ def _compute_lower(self, lst_strain = [] lst_stress = [] for ii in all_tasks: - with open(os.path.join(ii, 'inter.json')) as fp: - idata = json.load(fp) + dumpfn(fp,os.path.join(ii, 'inter.json'),indent=4) inter_type = idata['type'] strain = np.loadtxt(os.path.join(ii, 'strain.out')) if inter_type == 'vasp': @@ -139,7 +144,6 @@ def _compute_lower(self, ptr_data += "# Youngs Modulus EV = %.2f GPa\n" % EV ptr_data += "# Poission Ratio uV = %.2f " % uV - with open(output_file, 'w') as fp: - json.dump(res_data, fp, indent=4) + dumpfn(res_data,out_file,indent=4) return res_data, ptr_data From 3b18ecac81d2931b17f4ca55c348f5521b8c1799 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 16:37:03 +0800 Subject: [PATCH 055/154] add unittest elastic --- tests/auto_test/test_elastic.py | 91 +++++++++++++++++++++++++++++++ tests/auto_test/test_eos.py | 22 ++++++-- tests/auto_test/test_make_prop.py | 4 -- 3 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 tests/auto_test/test_elastic.py diff --git a/tests/auto_test/test_elastic.py b/tests/auto_test/test_elastic.py new file mode 100644 index 000000000..c64d8a30a --- /dev/null +++ b/tests/auto_test/test_elastic.py @@ -0,0 +1,91 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +import dpdata +from monty.serialization import loadfn,dumpfn +from pymatgen.analysis.elasticity.strain import Strain,Deformation +from pymatgen import Structure +from pymatgen.io.vasp import Incar + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.Elastic import Elastic + +class TestElastic(unittest.TestCase): + + def setUp(self): + _jdata={ + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "type_map": ['Li'], + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "elastic", + "norm_deform": 2e-2, + "shear_deform": 5e-2 + } + ] + } + + self.equi_path = 'confs/hp-Li/relaxation' + self.source_path = 'equi/vasp' + self.target_path = 'confs/hp-Li/elastic_00' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=_jdata["structures"] + self.inter_param=_jdata["interaction"] + self.prop_param=_jdata['properties'] + + self.elastic=Elastic(_jdata['properties'][0]) + + def tearDown(self): + if os.path.exists(self.equi_path): + shutil.rmtree(self.equi_path) + if os.path.exists(self.target_path): + shutil.rmtree(self.target_path) + if os.path.exists('frozen_model.pb'): + os.remove('frozen_model.pb') + if os.path.exists('inter.json'): + os.remove('inter.json') + + def test_task_type (self): + self.assertEqual('elastic',self.elastic.task_type() ) + + def test_task_param (self): + self.assertEqual(self.prop_param[0],self.elastic.task_param() ) + + + def test_make_confs_0(self): + if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): + with self.assertRaises(RuntimeError): + self.elastic.make_confs(self.target_path,self.equi_path) + shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) + task_list=self.elastic.make_confs(self.target_path,self.equi_path) + dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0['ISIF'] = 4 + + self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + for ii in dfm_dirs: + st_file=os.path.join(ii, 'POSCAR') + self.assertTrue(os.path.isfile(st_file)) + st0=Structure.from_file(st_file) + strain_json_file=os.path.join(ii, 'strain.json') + self.assertTrue(os.path.isfile(strain_json_file)) + strain_json=loadfn(strain_json_file) + df=Deformation(strain_json) + st1=df.apply_to_structure(ref_st) + self.assertEqual(st0,st1) diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py index e3ba67127..6a3661d5c 100644 --- a/tests/auto_test/test_eos.py +++ b/tests/auto_test/test_eos.py @@ -2,6 +2,7 @@ import dpdata import numpy as np import unittest +import dpdata from monty.serialization import loadfn,dumpfn from pymatgen.io.vasp import Incar @@ -48,8 +49,10 @@ def setUp(self): self.eos=EOS(_jdata['properties'][0]) def tearDown(self): - if os.path.exists('confs/hp-Li/relaxation'): - shutil.rmtree('confs/hp-Li/relaxation') + if os.path.exists(self.equi_path): + shutil.rmtree(self.equi_path) + if os.path.exists(self.target_path): + shutil.rmtree(self.target_path) if os.path.exists('frozen_model.pb'): os.remove('frozen_model.pb') if os.path.exists('inter.json'): @@ -62,7 +65,7 @@ def test_task_param (self): self.assertEqual(self.prop_param[0],self.eos.task_param() ) - def test_make_confs(self): + def test_make_confs_0(self): if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): with self.assertRaises(RuntimeError): self.eos.make_confs(self.target_path,self.equi_path) @@ -73,9 +76,18 @@ def test_make_confs(self): incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar0['ISIF'] = 4 - with open(os.path.join('vasp_input', 'POTCAR')) as fp: - pot0 = fp.read() for ii in dfm_dirs: self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) + eos_json_file=os.path.join(ii, 'eos.json') + self.assertTrue(os.path.isfile(eos_json_file)) + eos_json=loadfn(eos_json_file) self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), os.path.realpath(os.path.join(self.equi_path, 'CONTCAR'))) + sys = dpdata.System(os.path.join(ii, 'POSCAR')) + natoms = sys.get_natoms() + self.assertAlmostEqual(eos_json['volume'], np.linalg.det(sys['cells'][0]) / natoms) + def test_make_confs_1(self): + self.eos.reprod =True + shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) + with self.assertRaises(RuntimeError): + self.eos.make_confs(self.target_path,self.equi_path) diff --git a/tests/auto_test/test_make_prop.py b/tests/auto_test/test_make_prop.py index ee90fb5d6..cfbd4d15e 100644 --- a/tests/auto_test/test_make_prop.py +++ b/tests/auto_test/test_make_prop.py @@ -78,7 +78,3 @@ def test_make_eos (self): with open(os.path.join(ii, 'POTCAR')) as fp: poti = fp.read() self.assertEqual(pot0, poti) - # sys = dpdata.System(os.path.join(ii, 'POSCAR')) - # vol = float(ii.split('/')[-1].split('-')[1]) - # natoms = sys.get_natoms() - # self.assertAlmostEqual(vol, np.linalg.det(sys['cells'][0]) / natoms) From 244b2c9153d0bb86cae0fbd4959ae75c4974b635 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 17:26:08 +0800 Subject: [PATCH 056/154] add surface unittest --- dpgen/auto_test/Surface.py | 10 ++- tests/auto_test/equi/vasp/mp-141.vasp | 10 +++ tests/auto_test/test_surface.py | 104 ++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 tests/auto_test/equi/vasp/mp-141.vasp create mode 100644 tests/auto_test/test_surface.py diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index b4ac82f30..53eea5770 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -5,6 +5,8 @@ import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure from pymatgen.core.surface import generate_all_slabs +from monty.serialization import loadfn,dumpfn +from dpgen import dlog import numpy as np import os,json @@ -27,14 +29,18 @@ def make_confs(self, path_to_equi, refine=False): path_to_work = os.path.abspath(path_to_work) + if os.path.exists(path_to_work): + dlog.warning('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) task_list = [] cwd = os.getcwd() equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - ptypes = vasp.get_poscar_types(equi_contcar) if not os.path.exists(equi_contcar): raise RuntimeError("please do relaxation first") + ptypes = vasp.get_poscar_types(equi_contcar) # gen structure ss = Structure.from_file(equi_contcar) # gen slabs @@ -80,7 +86,7 @@ def make_confs(self, vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) vasp.perturb_xz('POSCAR', 'POSCAR', self.pert_xz) # record miller - np.savetxt('miller.out', all_slabs[ii].miller_index, fmt='%d') + dumpfn(all_slabs[ii].miller_index,'miller.json') os.chdir(cwd) return task_list diff --git a/tests/auto_test/equi/vasp/mp-141.vasp b/tests/auto_test/equi/vasp/mp-141.vasp new file mode 100644 index 000000000..5c0363756 --- /dev/null +++ b/tests/auto_test/equi/vasp/mp-141.vasp @@ -0,0 +1,10 @@ +Yb2 +1.0 +3.852872 0.000000 0.000000 +-1.926436 3.336685 0.000000 +0.000000 0.000000 6.377047 +Yb +2 +direct +0.333333 0.666667 0.250000 Yb +0.666667 0.333333 0.750000 Yb diff --git a/tests/auto_test/test_surface.py b/tests/auto_test/test_surface.py new file mode 100644 index 000000000..1adbae5b2 --- /dev/null +++ b/tests/auto_test/test_surface.py @@ -0,0 +1,104 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +import dpdata +from monty.serialization import loadfn,dumpfn +from pymatgen import Structure +from pymatgen.io.vasp import Incar +from pymatgen.core.surface import SlabGenerator + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.Surface import Surface + +class TestSurface(unittest.TestCase): + + def setUp(self): + _jdata={ + "structures": ["confs/mp-141"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "type_map": ['Yb'], + "potcars": {"Yb": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "surface", + "min_slab_size": 10, + "min_vacuum_size":11, + "pert_xz": 0.01, + "max_miller": 1, + "static-opt": False + } + ] + } + + self.equi_path = 'confs/mp-141/relaxation' + self.source_path = 'equi/vasp' + self.target_path = 'confs/mp-141/surface_00' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=_jdata["structures"] + self.inter_param=_jdata["interaction"] + self.prop_param=_jdata['properties'] + + self.surface=Surface(_jdata['properties'][0]) + + def tearDown(self): + if os.path.exists(self.equi_path): + shutil.rmtree(self.equi_path) + if os.path.exists(self.target_path): + shutil.rmtree(self.target_path) + if os.path.exists('frozen_model.pb'): + os.remove('frozen_model.pb') + if os.path.exists('inter.json'): + os.remove('inter.json') + + def test_task_type (self): + self.assertEqual('surface',self.surface.task_type() ) + + def test_task_param (self): + self.assertEqual(self.prop_param[0],self.surface.task_param() ) + + + def test_make_confs_0(self): + if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): + with self.assertRaises(RuntimeError): + self.surface.make_confs(self.target_path,self.equi_path) + print(os.path.isfile(os.path.join(self.source_path,'mp-141.vasp'))) + shutil.copy(os.path.join(self.source_path,'mp-141.vasp'),os.path.join(self.equi_path,'CONTCAR')) + task_list=self.surface.make_confs(self.target_path,self.equi_path) + self.assertEqual(len(task_list),7) + dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0['ISIF'] = 4 + + self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + for ii in dfm_dirs: + st_file=os.path.join(ii, 'POSCAR') + self.assertTrue(os.path.isfile(st_file)) + st0=Structure.from_file(st_file) + st1_file=os.path.join(ii, 'POSCAR.tmp') + self.assertTrue(os.path.isfile(st1_file)) + st1=Structure.from_file(st1_file) + miller_json_file=os.path.join(ii, 'miller.json') + self.assertTrue(os.path.isfile(miller_json_file)) + miller_json=loadfn(miller_json_file) + sl=SlabGenerator(ref_st, + miller_json, + self.prop_param[0]["min_slab_size"], + self.prop_param[0]["min_vacuum_size"]) + slb=sl.get_slab() + st2=Structure(slb.lattice,slb.species,slb.frac_coords) + self.assertEqual(len(st1),len(st2)) + From a1413a68bd4180b4833c36936aa378104517ab33 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 23 Jun 2020 18:19:17 +0800 Subject: [PATCH 057/154] Add unittest vacancy --- dpgen/auto_test/Vacancy.py | 6 +++ tests/auto_test/test_surface.py | 2 +- tests/auto_test/test_vacancy.py | 89 +++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 tests/auto_test/test_vacancy.py diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 0067d54f9..a5926a21d 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -5,6 +5,8 @@ from pymatgen.analysis.defects.generators import VacancyGenerator import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps +from monty.serialization import loadfn,dumpfn +from dpgen import dlog import numpy as np import os,json @@ -22,6 +24,10 @@ def make_confs(self, path_to_equi, refine=False): path_to_work = os.path.abspath(path_to_work) + if os.path.exists(path_to_work): + dlog.warning('%s already exists' % path_to_work) + else: + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) task_list = [] cwd = os.getcwd() diff --git a/tests/auto_test/test_surface.py b/tests/auto_test/test_surface.py index 1adbae5b2..14aa82186 100644 --- a/tests/auto_test/test_surface.py +++ b/tests/auto_test/test_surface.py @@ -72,7 +72,6 @@ def test_make_confs_0(self): if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): with self.assertRaises(RuntimeError): self.surface.make_confs(self.target_path,self.equi_path) - print(os.path.isfile(os.path.join(self.source_path,'mp-141.vasp'))) shutil.copy(os.path.join(self.source_path,'mp-141.vasp'),os.path.join(self.equi_path,'CONTCAR')) task_list=self.surface.make_confs(self.target_path,self.equi_path) self.assertEqual(len(task_list),7) @@ -84,6 +83,7 @@ def test_make_confs_0(self): self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + dfm_dirs.sort() for ii in dfm_dirs: st_file=os.path.join(ii, 'POSCAR') self.assertTrue(os.path.isfile(st_file)) diff --git a/tests/auto_test/test_vacancy.py b/tests/auto_test/test_vacancy.py new file mode 100644 index 000000000..89c435fba --- /dev/null +++ b/tests/auto_test/test_vacancy.py @@ -0,0 +1,89 @@ +import os,sys,json,glob,shutil +import dpdata +import numpy as np +import unittest +import dpdata +from monty.serialization import loadfn,dumpfn +from pymatgen import Structure +from pymatgen.io.vasp import Incar +from pymatgen.symmetry.analyzer import SpacegroupAnalyzer +from pymatgen.analysis.defects.core import Vacancy as pmg_Vacancy + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.Vacancy import Vacancy + +class TestVacancy(unittest.TestCase): + + def setUp(self): + _jdata={ + "structures": ["confs/hp-Li"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":".", + "type_map": ['Yb'], + "potcars": {"Yb": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "vacancy", + "supercell": [1, 1, 1] + } + ] + } + + self.equi_path = 'confs/hp-Li/relaxation' + self.source_path = 'equi/vasp' + self.target_path = 'confs/hp-Li/vacancy_00' + if not os.path.exists(self.equi_path): + os.mkdir(self.equi_path) + + self.confs=_jdata["structures"] + self.inter_param=_jdata["interaction"] + self.prop_param=_jdata['properties'] + + self.vacancy=Vacancy(_jdata['properties'][0]) + + def tearDown(self): + if os.path.exists(self.equi_path): + shutil.rmtree(self.equi_path) + if os.path.exists(self.target_path): + shutil.rmtree(self.target_path) + + def test_task_type (self): + self.assertEqual('vacancy',self.vacancy.task_type() ) + + def test_task_param (self): + self.assertEqual(self.prop_param[0],self.vacancy.task_param() ) + + def test_make_confs_0(self): + if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): + with self.assertRaises(RuntimeError): + self.vacancy.make_confs(self.target_path,self.equi_path) + shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) + task_list=self.vacancy.make_confs(self.target_path,self.equi_path) + dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) + self.assertEqual(len(dfm_dirs),5) + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0['ISIF'] = 4 + + self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + sga = SpacegroupAnalyzer(ref_st) + sym_st=sga.get_symmetrized_structure() + equiv_site_seq = list(sym_st.equivalent_sites) + dfm_dirs.sort() + for ii in dfm_dirs: + st_file=os.path.join(ii, 'POSCAR') + self.assertTrue(os.path.isfile(st_file)) + st0=Structure.from_file(st_file) + vac_site = equiv_site_seq.pop(0) + vac=pmg_Vacancy(ref_st, vac_site[0],charge=0.0) + st1=vac.generate_defect_structure(self.prop_param[0]['supercell']) + self.assertEqual(st0,st1) From 8a93fb69fbdebdca7d4351d26c15faa626faebeb Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 23 Jun 2020 23:36:36 +0800 Subject: [PATCH 058/154] fix elastic bug --- dpgen/auto_test/Elastic.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 28ce7c6bd..4760b0b47 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -7,7 +7,7 @@ from pymatgen.analysis.elasticity.strain import DeformedStructureSet, Strain from pymatgen.analysis.elasticity.stress import Stress from pymatgen.analysis.elasticity.elastic import ElasticTensor -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn import numpy as np import os @@ -85,8 +85,8 @@ def make_confs(self, task_list.append(output_task) dfm_ss.deformed_structures[ii].to('POSCAR', 'POSCAR') # record strain - df=dfm_ss.deformations[ii] - dumpfn(df.as_dict(),'strain.json',indent=4) + df = Strain.from_deformation(dfm_ss.deformations[ii]) + dumpfn(df.as_dict(), 'strain.json', indent=4) os.chdir(cwd) return task_list @@ -107,20 +107,20 @@ def _compute_lower(self, lst_strain = [] lst_stress = [] for ii in all_tasks: - dumpfn(fp,os.path.join(ii, 'inter.json'),indent=4) + idata = loadfn(os.path.join(ii, 'inter.json')) inter_type = idata['type'] - strain = np.loadtxt(os.path.join(ii, 'strain.out')) + strain = loadfn(os.path.join(ii, 'strain.json')) if inter_type == 'vasp': stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) # convert from pressure in kB to stress stress *= -1000 - lst_strain.append(Strain(strain)) + lst_strain.append(strain) lst_stress.append(Stress(stress)) elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) # convert from pressure to stress stress = -stress - lst_strain.append(Strain(strain)) + lst_strain.append(strain) lst_stress.append(Stress(stress)) et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress=equi_stress, vasp=False) res_data['elastic_tensor'] = [] @@ -144,6 +144,6 @@ def _compute_lower(self, ptr_data += "# Youngs Modulus EV = %.2f GPa\n" % EV ptr_data += "# Poission Ratio uV = %.2f " % uV - dumpfn(res_data,out_file,indent=4) + dumpfn(res_data, output_file, indent=4) return res_data, ptr_data From 7545a61f1ff16b00fcb79f24b595ac2bd0d6353d Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 24 Jun 2020 19:00:56 +0800 Subject: [PATCH 059/154] new input frame --- dpgen/auto_test/EOS.py | 7 +- dpgen/auto_test/Elastic.py | 5 + dpgen/auto_test/Interstitial.py | 6 ++ dpgen/auto_test/Lammps.py | 115 +++++++++++---------- dpgen/auto_test/Surface.py | 8 +- dpgen/auto_test/VASP.py | 160 +++++++++++++++--------------- dpgen/auto_test/Vacancy.py | 6 ++ dpgen/auto_test/common_equi.py | 13 ++- dpgen/data/tools/poscar_copy.py | 2 +- tests/auto_test/test_elastic.py | 96 +++++++++--------- tests/auto_test/test_eos.py | 95 +++++++++--------- tests/auto_test/test_lammps.py | 69 ++++++------- tests/auto_test/test_make_prop.py | 70 +++++++------ tests/auto_test/test_surface.py | 115 +++++++++++---------- tests/auto_test/test_vacancy.py | 87 ++++++++-------- tests/auto_test/test_vasp.py | 60 ++++++----- tests/auto_test/test_vasp_equi.py | 92 +++++++++-------- 17 files changed, 516 insertions(+), 490 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index e346fe18e..b5bcfe9f5 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -15,7 +15,11 @@ def __init__(self, self.vol_start = parameter['vol_start'] self.vol_end = parameter['vol_end'] self.vol_step = parameter['vol_step'] - self.change_box = parameter.get('change_box', True) + self.cal_type = parameter.get('cal_type', 'relaxation') + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": False} + self.cal_setting = parameter.get('cal_setting', default_cal_setting) self.reprod = parameter.get('reprod-opt', False) def make_confs(self, @@ -37,6 +41,7 @@ def make_confs(self, int((self.vol_end - self.vol_start) / self.vol_step)) os.chdir(cwd) if self.reprod: + self.cal_type = 'static' if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 4760b0b47..89a41e44f 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -20,6 +20,11 @@ def __init__(self, default_shear_def = 5e-3 self.norm_deform = parameter.get('norm_deform', default_norm_def) self.shear_deform = parameter.get('shear_deform', default_shear_def) + self.cal_type = parameter.get('cal_type', 'relaxation') + default_cal_setting = {"relax_pos": True, + "relax_shape": False, + "relax_vol": False} + self.cal_setting = parameter.get('cal_setting', default_cal_setting) def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index a617f4347..02ee0ebea 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -17,6 +17,11 @@ def __init__(self, self.supercell = parameter.get('supercell', default_supercell) self.insert_ele = parameter['insert_ele'] self.reprod = parameter.get('reprod-opt', False) + self.cal_type = parameter.get('cal_type', 'relaxation') + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} + self.cal_setting = parameter.get('cal_setting', default_cal_setting) def make_confs(self, path_to_work, @@ -60,6 +65,7 @@ def make_confs(self, os.chdir(cwd) if self.reprod: + self.cal_type = 'static' if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index fafbabb79..250ec1627 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -4,7 +4,7 @@ import dpdata import dpgen.auto_test.lib.lammps as lammps from dpgen import dlog -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from dpgen.auto_test.Task import Task from dpgen.auto_test.lib.lammps import inter_deepmd, inter_meam, inter_eam_fs, inter_eam_alloy @@ -17,11 +17,14 @@ def __init__(self, path_to_poscar): self.inter = inter_parameter self.inter_type = inter_parameter['type'] - assert self.inter_type in supported_inter - self.set_inter_type_func() - self.model = os.path.abspath(inter_parameter['model']) self.type_map = inter_parameter['type_map'] + if self.type_map == 'meam': + self.model = list(map(os.path.abspath, inter_parameter['model'])) + else: + self.model = os.path.abspath(inter_parameter['model']) self.path_to_poscar = path_to_poscar + assert self.inter_type in supported_inter + self.set_inter_type_func() def set_inter_type_func(self): @@ -47,11 +50,11 @@ def set_model_param(self): 'deepmd_version': deepmd_version} elif self.inter_type == 'meam': model_name = list(map(os.path.basename, self.model)) - self.model_param = {'model_name': model_name, + self.model_param = {'model_name': [model_name], 'param_type': self.type_map} else: model_name = os.path.basename(self.model) - self.model_param = {'model_name': model_name, + self.model_param = {'model_name': [model_name], 'param_type': self.type_map} def make_potential_files(self, @@ -104,64 +107,58 @@ def make_input_file(self, ftol = 1e-6 maxiter = 5000 maxeval = 500000 - change_box = True B0 = 70 bp = 0 - scale2equi = 1 ntypes = len(self.type_map) - reprod_opt = False - static = False - - if 'etol' in task_param: - etol = task_param['etol'] - if 'ftol' in task_param: - ftol = task_param['ftol'] - if 'maxiter' in task_param: - maxiter = task_param['maxiter'] - if 'maxeval' in task_param: - maxeval = task_param['maxeval'] - if 'change_box' in task_param: - change_box = task_param['change_box'] - if 'scale2equi' in task_param: - scale2equi = task_param['scale2equi'] - if 'reprod_opt' in task_param: - reprod_opt = task_param['reprod_opt'] - if 'static-opt' in task_param: - static = task_param['static-opt'] + + cal_type = task_param['cal_type'] + cal_setting = task_param['cal_setting'] self.set_model_param() - fc = '' - if task_type == 'relaxation' \ - or (task_type == 'eos' and not change_box) \ - or (task_type == 'surface' and not static): - fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, - etol, ftol, maxiter, maxeval, change_box) + # user input in.lammps for property calculation + if 'input_prop' in cal_setting and os.path.isfile(cal_setting['input_prop']): + with open(os.path.abspath(cal_setting['input_prop']), 'r') as fin: + fc = fin.read() - if task_type == 'static' \ - or (task_type == 'surface' and static): - fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + else: + if cal_type == 'relaxation': + relax_pos = cal_setting['relax_pos'] + relax_shape = cal_setting['relax_shape'] + relax_vol = cal_setting['relax_vol'] + + if [relax_pos, relax_shape, relax_vol] == [True, False, False]: + fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, False) + elif [relax_pos, relax_shape, relax_vol] == [True, True, True]: + fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, True) + elif [relax_pos, relax_shape, relax_vol] == [True, True, False]: + if 'scale2equi' in task_param: + scale2equi = task_param['scale2equi'] + fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6:])], + self.inter_func, + self.model_param, B0, bp, etol, ftol, maxiter, maxeval) + else: + fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, True) + elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) - if task_type == 'elastic': - fc = lammps.make_lammps_elastic('conf.lmp', ntypes, self.inter_func, self.model_param, - etol, ftol, maxiter, maxeval) + else: + raise RuntimeError("not supported calculation setting for LAMMPS") - if task_type == 'vacancy' \ - or (task_type == 'interstitial'): - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi, self.inter_func, - self.model_param, B0, bp, etol, ftol, maxiter, maxeval) + elif cal_type == 'static': + fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) - if task_type == 'eos' and change_box: - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6:])], self.inter_func, - self.model_param, B0, bp, etol, ftol, maxiter, maxeval) - if reprod_opt: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + else: + raise RuntimeError("not supported calculation type for LAMMPS") with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: fp.write(fc) def compute(self, - output_dir, inter_param): + output_dir): log_lammps = os.path.join(output_dir, 'log.lammps') if not os.path.isfile(log_lammps): warnings.warn("cannot find log.lammps in " + output_dir + " skip") @@ -181,15 +178,15 @@ def compute(self, epa = float(ii.split('=')[1].split()[0]) dump = os.path.join(output_dir, 'dump.relax') - type_map_list = inter_param['type_map'] - dlog.debug(type_map_list) - #_tmp = inter_param['type_map'] - #dlog.debug(_tmp) - #type_map = {k: v for v, k in _tmp.items()} - #dlog.debug(type_map) - #type_map_list = [] - #for ii in range(len(type_map)): - # type_map_list.append(type_map[ii]) + #type_map_list = inter_param['type_map'] + #dlog.debug(type_map_list) + _tmp = self.type_map + dlog.debug(_tmp) + type_map = {k: v for v, k in _tmp.items()} + dlog.debug(type_map) + type_map_list = [] + for ii in range(len(type_map)): + type_map_list.append(type_map[ii]) contcar = os.path.join(output_dir, 'CONTCAR') d_dump = dpdata.System(dump, fmt='lammps/dump', type_map=type_map_list) d_dump.to('vasp/poscar', contcar, frame_idx=-1) @@ -198,7 +195,7 @@ def compute(self, # force = d_dump['forces'] force = ['tmp'] - result_dict = {"energy": natoms * epa, "force": force*natoms*3} # deal with dpdata bug + result_dict = {"energy": natoms * epa, "force": force * natoms * 3} # deal with dpdata bug return result_dict def forward_files(self): diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 53eea5770..02c913278 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -20,8 +20,11 @@ def __init__(self, self.pert_xz = parameter['pert_xz'] default_max_miller = 2 self.miller = parameter.get('max_miller', default_max_miller) - self.static = parameter.get('static-opt', False) - self.relax = parameter.get('change_box', False) + self.cal_type = parameter.get('cal_type', 'relaxation') + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": False} + self.cal_setting = parameter.get('cal_setting', default_cal_setting) self.reprod = parameter.get('reprod-opt', False) def make_confs(self, @@ -59,6 +62,7 @@ def make_confs(self, os.chdir(cwd) if self.reprod: + self.cal_type = 'static' if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 76f355eca..d44bb9d39 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -6,7 +6,9 @@ from dpgen.auto_test.Task import Task from dpgen.generator.lib.vasp import incar_upper from dpdata import LabeledSystem +from monty.serialization import loadfn, dumpfn from pymatgen.io.vasp import Incar, Kpoints +from pymatgen.core.structure import Structure class VASP(Task): @@ -14,45 +16,94 @@ def __init__(self, inter_parameter, path_to_poscar): self.inter = inter_parameter + self.inter_type = inter_parameter['type'] self.incar = inter_parameter['incar'] - self.type_map = inter_parameter['type_map'] + self.potcar_prefix = inter_parameter.get('potcar_prefix', '') self.potcars = inter_parameter['potcars'] - #default_potcar_prefix = '' - #self.potcar_prefix = inter_parameter.get('potcar_prefix',default_potcar_prefix) self.path_to_poscar = path_to_poscar def make_potential_files(self, output_dir): + ele_pot_list = [key for key in self.potcars.keys()] + poscar = os.path.abspath(os.path.join(output_dir, 'POSCAR')) + pos_str = Structure.from_file(poscar) + ele_pos_list_tmp = list(ii.as_dict()['element'] for ii in pos_str.species) + + ele_pos_list = [ele_pos_list_tmp[0]] + for ii in range(1, len(ele_pos_list_tmp)): + if not ele_pos_list_tmp[ii] == ele_pos_list_tmp[ii - 1]: + ele_pos_list.append(ele_pos_list_tmp[ii]) + with open(os.path.join(output_dir, 'POTCAR'), 'w') as fp: - for ii in self.potcars: - with open(self.potcars[ii], 'r') as fin: - for line in fin: - print(line.strip('\n'), file=fp) + for ii in ele_pos_list: + for jj in ele_pot_list: + if ii == jj: + with open(os.path.join(self.potcar_prefix, self.potcars[jj]), 'r') as fin: + for line in fin: + print(line.strip('\n'), file=fp) - with open(os.path.join(output_dir, 'inter.json'), 'w') as fp: - json.dump(self.inter, fp, indent=4) + dumpfn(self.inter, os.path.join(output_dir, 'inter.json'), indent=4) def make_input_file(self, output_dir, task_type, task_param): sepline(ch=output_dir) - with open(os.path.join(output_dir, 'task.json'), 'w') as fp: - json.dump(task_param, fp, indent=4) + dumpfn(task_param, os.path.join(output_dir, 'task.json'), indent=4) assert (os.path.exists(self.incar)), 'no INCAR file for relaxation' relax_incar_path = os.path.abspath(self.incar) - incar = incar_upper(Incar.from_file(relax_incar_path)) + incar_relax = incar_upper(Incar.from_file(relax_incar_path)) - if 'ISIF' in incar: - isif = incar.get('ISIF') - else: - isif = 3 + # deal with relaxation + + cal_type = task_param['cal_type'] + cal_setting = task_param['cal_setting'] - if 'NSW' in incar: - nsw = incar.get('NSW') + # user input INCAR for property calculation + if 'input_prop' in cal_setting and os.path.isfile(cal_setting['input_prop']): + incar_prop = os.path.abspath(cal_setting['input_prop']) + incar = incar_upper(Incar.from_file(incar_prop)) + + # revise INCAR based on the INCAR provided in the "interaction" else: - nsw = 200 + incar = incar_relax + if cal_type == 'relaxation': + relax_pos = cal_setting['relax_pos'] + relax_shape = cal_setting['relax_shape'] + relax_vol = cal_setting['relax_vol'] + if [relax_pos, relax_shape, relax_vol] == [True, False, False]: + isif = 2 + elif [relax_pos, relax_shape, relax_vol] == [True, True, True]: + isif = 3 + elif [relax_pos, relax_shape, relax_vol] == [True, True, False]: + isif = 4 + elif [relax_pos, relax_shape, relax_vol] == [False, True, False]: + isif = 5 + elif [relax_pos, relax_shape, relax_vol] == [False, True, True]: + isif = 6 + elif [relax_pos, relax_shape, relax_vol] == [False, False, True]: + isif = 7 + elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: + nsw = 0 + else: + raise RuntimeError("not supported calculation setting for VASP") + + if not ('ISIF' in incar and incar.get('ISIF') == isif): + dlog.info("%s setting ISIF to %d" % (self.make_input_file.__name__, isif)) + incar['ISIF'] = isif + if not ('NSW' in incar and incar.get('NSW') == nsw): + dlog.info("%s setting ISIF to %d" % (self.make_input_file.__name__, nsw)) + incar['NSW'] = nsw + + elif cal_type == 'static': + nsw = 0 + if not ('NSW' in incar and incar.get('NSW') == nsw): + dlog.info("%s setting ISIF to %d" % (self.make_input_file.__name__, nsw)) + incar['NSW'] = nsw + + else: + raise RuntimeError("not supported calculation type for VASP") try: kspacing = incar.get('KSPACING') @@ -64,79 +115,24 @@ def make_input_file(self, else: kgamma = False - - if task_type in ['relaxation', 'vacancy', 'interstitial']: - isif = 3 - - if task_type == 'eos': - if 'change_box' in task_param and not task_param['change_box']: - isif = 2 - else: - isif = 4 - - if task_type == 'elastic': - isif = 2 - - if task_type == 'surface': - if 'static-opt' in task_param and task_param['static-opt']: - nsw = 0 - elif 'change_box' in task_param and task_param['change_box']: - isif = 4 - else: - isif = 2 - - if task_type == 'static' \ - or ('reprod_opt' in task_param and task_param['reprod_opt']): - nsw = 0 - - if not ('ISIF' in incar and incar.get('ISIF') == isif): - dlog.info("%s setting ISIF to %d" % ( self.make_input_file.__name__, isif)) - incar['ISIF'] = isif - - if not ('NSW' in incar and incar.get('NSW') == nsw): - dlog.info("%s setting NSW to %d" % ( self.make_input_file.__name__, nsw)) - incar['NSW'] = nsw - - - if 'ediff' in task_param: - dlog.info("%s setting ediff to %s" % (self.make_input_file.__name__, task_param['ediff'])) - incar['EDIFF'] = task_param['ediff'] - - if 'ediffg' in task_param: - dlog.info("%s setting ediffg to %s" % ( self.make_input_file.__name__, task_param['ediffg'])) - incar['EDIFFG'] = task_param['ediffg'] - - if 'encut' in task_param: - dlog.info("%s setting encut to %s" % (self.make_input_file.__name__, task_param['encut'])) - incar['ENCUT'] = task_param['encut'] - - - if 'kspacing' in task_param: - dlog.info("%s setting kspacing to %s" %( self.make_input_file.__name__, task_param['kspacing'])) - incar['KSPACING'] = task_param['kspacing'] - - if 'kgamma' in task_param: - dlog.info("%s setting kgamma to %s" % ( self.make_input_file.__name__, task_param['kgamma'])) - incar['KGAMMA'] = task_param['kgamma'] - - incar.write_file(os.path.join(output_dir,'INCAR')) + incar.write_file(os.path.join(output_dir, 'INCAR')) ret = vasp.make_kspacing_kpoints(self.path_to_poscar, kspacing, kgamma) kp = Kpoints.from_string(ret) kp.write_file(os.path.join(output_dir, "KPOINTS")) def compute(self, - output_dir,inter_param=None): + output_dir): outcar = os.path.join(output_dir, 'OUTCAR') if not os.path.isfile(outcar): dlog.warning("cannot find OUTCAR in " + output_dir + " skip") return None else: - ls=LabeledSystem(outcar) - if len(ls)>0: - force = ls.sub_system([-1]).data['forces'][0].tolist() - energy = ls.sub_system([-1]).data['energies'][0].tolist() - virials= ls.sub_system([-1]).data['virials'][0].tolist() - return {"energy": energy, "force": force, "virials":virials} + ls = LabeledSystem(outcar) + if len(ls) > 0: + force = ls.sub_system([-1]).data['forces'][0].tolist() + energy = ls.sub_system([-1]).data['energies'][0].tolist() + virials = ls.sub_system([-1]).data['virials'][0].tolist() + return {"energy": energy, "force": force, "virials": virials} def forward_files(self): return ['INCAR', 'POSCAR', 'POTCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index a5926a21d..58ef7b676 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -18,6 +18,11 @@ def __init__ (self, default_supercell = [1, 1, 1] self.supercell = parameter.get('supercell', default_supercell) self.reprod = parameter.get('reprod-opt', False) + self.cal_type = parameter.get('cal_type', 'relaxation') + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} + self.cal_setting = parameter.get('cal_setting', default_cal_setting) def make_confs(self, path_to_work, @@ -55,6 +60,7 @@ def make_confs(self, os.chdir(cwd) if self.reprod: + self.cal_type = 'static' if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 3e466c85e..82afcd5cb 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -18,9 +18,9 @@ def make_equi(confs, # find all POSCARs and their name like mp-xxx # ... dlog.debug('debug info make equi') - #if 'type_map' in inter_param: + # if 'type_map' in inter_param: # ele_list = [key for key in inter_param['type_map'].keys()] - #else: + # else: # ele_list = [key for key in inter_param['potcars'].keys()] ele_list = inter_param['type_map'] dlog.debug("ele_list %s" % ':'.join(ele_list)) @@ -86,6 +86,10 @@ def make_equi(confs, os.chdir(cwd) task_dirs.sort() # generate task files + relax_param['cal_type'] = 'relaxation' + relax_param['cal_setting'] = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') dlog.debug('task_dir %s' % ii) @@ -169,7 +173,6 @@ def post_equi(confs, inter_param): for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') inter = make_calculator(inter_param, poscar) - res = inter.compute(ii,inter_param) - - dumpfn(res,os.path.join(ii, 'result.json'),indent=4) + res = inter.compute(ii) + dumpfn(res, os.path.join(ii, 'result.json'), indent=4) diff --git a/dpgen/data/tools/poscar_copy.py b/dpgen/data/tools/poscar_copy.py index 19db01962..0d76a7d02 100755 --- a/dpgen/data/tools/poscar_copy.py +++ b/dpgen/data/tools/poscar_copy.py @@ -20,7 +20,7 @@ def copy_system (ncopy, fin, fout) : replicate_z = True ) node.modifiers.append(pbc) - node.compute() + node.compute(, export_file(node, fout, 'vasp') parser = argparse.ArgumentParser( diff --git a/tests/auto_test/test_elastic.py b/tests/auto_test/test_elastic.py index c64d8a30a..f6e41e2e2 100644 --- a/tests/auto_test/test_elastic.py +++ b/tests/auto_test/test_elastic.py @@ -1,52 +1,53 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest import dpdata -from monty.serialization import loadfn,dumpfn -from pymatgen.analysis.elasticity.strain import Strain,Deformation +from monty.serialization import loadfn, dumpfn +from pymatgen.analysis.elasticity.strain import Strain, Deformation from pymatgen import Structure from pymatgen.io.vasp import Incar sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.Elastic import Elastic + class TestElastic(unittest.TestCase): def setUp(self): - _jdata={ - "structures": ["confs/hp-*"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ['Li'], - "potcars": {"Li": "vasp_input/POTCAR"} - }, - "properties": [ - { - "type": "elastic", - "norm_deform": 2e-2, - "shear_deform": 5e-2 - } - ] + _jdata = { + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "elastic", + "norm_deform": 2e-2, + "shear_deform": 5e-2 + } + ] } - - self.equi_path = 'confs/hp-Li/relaxation' + + self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' self.target_path = 'confs/hp-Li/elastic_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) - self.confs=_jdata["structures"] - self.inter_param=_jdata["interaction"] - self.prop_param=_jdata['properties'] - - self.elastic=Elastic(_jdata['properties'][0]) + self.confs = _jdata["structures"] + self.inter_param = _jdata["interaction"] + self.prop_param = _jdata['properties'] + + self.elastic = Elastic(_jdata['properties'][0]) def tearDown(self): if os.path.exists(self.equi_path): @@ -54,38 +55,37 @@ def tearDown(self): if os.path.exists(self.target_path): shutil.rmtree(self.target_path) if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') + os.remove('frozen_model.pb') if os.path.exists('inter.json'): - os.remove('inter.json') - - def test_task_type (self): - self.assertEqual('elastic',self.elastic.task_type() ) + os.remove('inter.json') - def test_task_param (self): - self.assertEqual(self.prop_param[0],self.elastic.task_param() ) + def test_task_type(self): + self.assertEqual('elastic', self.elastic.task_type()) + def test_task_param(self): + self.assertEqual(self.prop_param[0], self.elastic.task_param()) def test_make_confs_0(self): - if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): - with self.assertRaises(RuntimeError): - self.elastic.make_confs(self.target_path,self.equi_path) - shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) - task_list=self.elastic.make_confs(self.target_path,self.equi_path) + if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): + with self.assertRaises(RuntimeError): + self.elastic.make_confs(self.target_path, self.equi_path) + shutil.copy(os.path.join(self.source_path, 'CONTCAR'), os.path.join(self.equi_path, 'CONTCAR')) + task_list = self.elastic.make_confs(self.target_path, self.equi_path) dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar0['ISIF'] = 4 self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), - os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) - ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st = Structure.from_file(os.path.join(self.target_path, 'POSCAR')) for ii in dfm_dirs: - st_file=os.path.join(ii, 'POSCAR') + st_file = os.path.join(ii, 'POSCAR') self.assertTrue(os.path.isfile(st_file)) - st0=Structure.from_file(st_file) - strain_json_file=os.path.join(ii, 'strain.json') + st0 = Structure.from_file(st_file) + strain_json_file = os.path.join(ii, 'strain.json') self.assertTrue(os.path.isfile(strain_json_file)) - strain_json=loadfn(strain_json_file) - df=Deformation(strain_json) - st1=df.apply_to_structure(ref_st) - self.assertEqual(st0,st1) + strain_json = loadfn(strain_json_file) + df = Deformation(strain_json) + st1 = df.apply_to_structure(ref_st) + self.assertEqual(st0, st1) diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py index 6a3661d5c..b0e1c877a 100644 --- a/tests/auto_test/test_eos.py +++ b/tests/auto_test/test_eos.py @@ -1,52 +1,57 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest import dpdata -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from pymatgen.io.vasp import Incar sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.EOS import EOS + class TestEOS(unittest.TestCase): def setUp(self): - _jdata={ - "structures": ["confs/hp-*"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ['Li'], - "potcars": {"Li": "vasp_input/POTCAR"} - }, - "properties": [ - { - "type": "eos", - "vol_start": 10, - "vol_end": 30, - "vol_step": 3, - "change_box": True - } - ] + _jdata = { + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "eos", + "vol_start": 10, + "vol_end": 30, + "vol_step": 3, + "cal_type": "relaxation", + "cal_setting": {"relax_pos": True, + "relax_shape": True, + "relax_vol": False, + "input_prop": ""} + } + ] } - - self.equi_path = 'confs/hp-Li/relaxation' + + self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' self.target_path = 'confs/hp-Li/eos_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) - self.confs=_jdata["structures"] - self.inter_param=_jdata["interaction"] - self.prop_param=_jdata['properties'] - - self.eos=EOS(_jdata['properties'][0]) + self.confs = _jdata["structures"] + self.inter_param = _jdata["interaction"] + self.prop_param = _jdata['properties'] + + self.eos = EOS(_jdata['properties'][0]) def tearDown(self): if os.path.exists(self.equi_path): @@ -54,23 +59,22 @@ def tearDown(self): if os.path.exists(self.target_path): shutil.rmtree(self.target_path) if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') + os.remove('frozen_model.pb') if os.path.exists('inter.json'): - os.remove('inter.json') - - def test_task_type (self): - self.assertEqual('eos',self.eos.task_type() ) + os.remove('inter.json') - def test_task_param (self): - self.assertEqual(self.prop_param[0],self.eos.task_param() ) + def test_task_type(self): + self.assertEqual('eos', self.eos.task_type()) + def test_task_param(self): + self.assertEqual(self.prop_param[0], self.eos.task_param()) def test_make_confs_0(self): - if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): - with self.assertRaises(RuntimeError): - self.eos.make_confs(self.target_path,self.equi_path) - shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) - task_list=self.eos.make_confs(self.target_path,self.equi_path) + if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): + with self.assertRaises(RuntimeError): + self.eos.make_confs(self.target_path, self.equi_path) + shutil.copy(os.path.join(self.source_path, 'CONTCAR'), os.path.join(self.equi_path, 'CONTCAR')) + task_list = self.eos.make_confs(self.target_path, self.equi_path) dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) @@ -78,16 +82,17 @@ def test_make_confs_0(self): for ii in dfm_dirs: self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) - eos_json_file=os.path.join(ii, 'eos.json') + eos_json_file = os.path.join(ii, 'eos.json') self.assertTrue(os.path.isfile(eos_json_file)) - eos_json=loadfn(eos_json_file) + eos_json = loadfn(eos_json_file) self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), os.path.realpath(os.path.join(self.equi_path, 'CONTCAR'))) sys = dpdata.System(os.path.join(ii, 'POSCAR')) natoms = sys.get_natoms() self.assertAlmostEqual(eos_json['volume'], np.linalg.det(sys['cells'][0]) / natoms) + def test_make_confs_1(self): - self.eos.reprod =True - shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) + self.eos.reprod = True + shutil.copy(os.path.join(self.source_path, 'CONTCAR'), os.path.join(self.equi_path, 'CONTCAR')) with self.assertRaises(RuntimeError): - self.eos.make_confs(self.target_path,self.equi_path) + self.eos.make_confs(self.target_path, self.equi_path) diff --git a/tests/auto_test/test_lammps.py b/tests/auto_test/test_lammps.py index fd3b6ac09..c4adedf1f 100644 --- a/tests/auto_test/test_lammps.py +++ b/tests/auto_test/test_lammps.py @@ -1,64 +1,65 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.lib.lammps import inter_deepmd from dpgen.auto_test.Lammps import Lammps + class TestLammps(unittest.TestCase): def setUp(self): - self.jdata={ - "structures": ["confs/hp-*"], - "interaction": { - "type": "deepmd", - "model": "lammps_input/frozen_model.pb", - "deepmd_version":"1.1.0", - "type_map": {"Li": 0} - }, - "relaxation": { - "etol": 1e-12, - "ftol": 1e-6, - "maxiter": 5000, - "maximal": 500000, - "change_box": True - } - } - - self.equi_path = 'confs/hp-Li/relaxation' + self.jdata = { + "structures": ["confs/hp-*"], + "interaction": { + "type": "deepmd", + "model": "lammps_input/frozen_model.pb", + "deepmd_version": "1.1.0", + "type_map": {"Li": 0} + }, + "relaxation": { + "cal_type": "relaxation", + "cal_setting": {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} + } + } + + self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) - self.confs=self.jdata["structures"] - inter_param=self.jdata["interaction"] - self.Lammps=Lammps(inter_param,os.path.join(self.source_path,'POSCAR')) + self.confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + self.Lammps = Lammps(inter_param, os.path.join(self.source_path, 'POSCAR')) def tearDown(self): if os.path.exists('confs/hp-Li/relaxation'): shutil.rmtree('confs/hp-Li/relaxation') if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') + os.remove('frozen_model.pb') if os.path.exists('inter.json'): - os.remove('inter.json') + os.remove('inter.json') - def test_set_inter_type_func (self): + def test_set_inter_type_func(self): self.Lammps.set_inter_type_func() - self.assertEqual(inter_deepmd,self.Lammps.inter_func ) + self.assertEqual(inter_deepmd, self.Lammps.inter_func) def test_set_model_param(self): self.Lammps.set_model_param() model_param = {'model_name': ['frozen_model.pb'], - 'param_type': {"Li": 0}, + 'param_type': {"Li": 0}, 'deepmd_version': '1.1.0'} - self.assertEqual(model_param,self.Lammps.model_param) + self.assertEqual(model_param, self.Lammps.model_param) def test_make_potential_files(self): self.Lammps.make_potential_files(".") @@ -66,9 +67,9 @@ def test_make_potential_files(self): self.assertTrue(os.path.isfile('inter.json')) self.Lammps.make_potential_files(self.equi_path) - self.assertTrue(os.path.islink(os.path.join(self.equi_path,"frozen_model.pb"))) - self.assertTrue(os.path.isfile(os.path.join(self.equi_path,'inter.json'))) + self.assertTrue(os.path.islink(os.path.join(self.equi_path, "frozen_model.pb"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, 'inter.json'))) def test_backward_files(self): - backward_files=['log.lammps', 'outlog', 'dump.relax'] - self.assertEqual(self.Lammps.backward_files(),backward_files) + backward_files = ['log.lammps', 'outlog', 'dump.relax'] + self.assertEqual(self.Lammps.backward_files(), backward_files) diff --git a/tests/auto_test/test_make_prop.py b/tests/auto_test/test_make_prop.py index cfbd4d15e..08fc0d963 100644 --- a/tests/auto_test/test_make_prop.py +++ b/tests/auto_test/test_make_prop.py @@ -1,36 +1,40 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from pymatgen.io.vasp import Incar from dpgen.auto_test.common_prop import make_property + class TestMakeProperty(unittest.TestCase): - jdata={ - "structures": ["confs/hp-*"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ['Li'], - "potcars": {"Li": "vasp_input/POTCAR"} - }, - "properties": [ - { - "type": "eos", - "vol_start": 10, - "vol_end": 30, - "vol_step": 3, - "change_box": True - } - ] + jdata = { + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "eos", + "vol_start": 10, + "vol_end": 30, + "vol_step": 3, + "cal_type": "relaxation", + "cal_setting": {"relax_pos": True, + "relax_shape": True, + "relax_vol": False} + } + ] } def tearDown(self): @@ -39,20 +43,20 @@ def tearDown(self): if os.path.exists('confs/hp-Li/relaxation'): shutil.rmtree('confs/hp-Li/relaxation') - def test_make_eos (self): - confs=self.jdata["structures"] - inter_param=self.jdata["interaction"] - property_list=self.jdata["properties"] - + def test_make_eos(self): + confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + property_list = self.jdata["properties"] + target_path = 'confs/hp-Li/eos_00' - equi_path = 'confs/hp-Li/relaxation' + equi_path = 'confs/hp-Li/relaxation' source_path = 'equi/vasp' if not os.path.exists(equi_path): - os.mkdir(equi_path) - shutil.copy(os.path.join(source_path,'CONTCAR'),os.path.join(equi_path,'CONTCAR')) + os.mkdir(equi_path) + shutil.copy(os.path.join(source_path, 'CONTCAR'), os.path.join(equi_path, 'CONTCAR')) - make_property(confs,inter_param,property_list) + make_property(confs, inter_param, property_list) dfm_dirs = glob.glob(os.path.join(target_path, 'task.*')) @@ -60,7 +64,7 @@ def test_make_eos (self): incar0['ISIF'] = 4 with open(os.path.join('vasp_input', 'POTCAR')) as fp: - pot0 = fp.read() + pot0 = fp.read() for ii in dfm_dirs: self.assertTrue(os.path.isfile(os.path.join(ii, 'KPOINTS'))) incar1 = Incar.from_file(os.path.join(ii, 'INCAR')) @@ -69,10 +73,10 @@ def test_make_eos (self): self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) self.assertTrue(os.path.isfile(os.path.join(ii, 'POTCAR'))) self.assertTrue(os.path.isfile(os.path.join(ii, 'task.json'))) - inter_json_file=os.path.join(ii, 'inter.json') + inter_json_file = os.path.join(ii, 'inter.json') self.assertTrue(os.path.isfile(inter_json_file)) - inter_json=loadfn(inter_json_file) - self.assertEqual(inter_json,inter_param) + inter_json = loadfn(inter_json_file) + self.assertEqual(inter_json, inter_param) self.assertEqual(os.path.realpath(os.path.join(ii, 'POSCAR.orig')), os.path.realpath(os.path.join(equi_path, 'CONTCAR'))) with open(os.path.join(ii, 'POTCAR')) as fp: diff --git a/tests/auto_test/test_surface.py b/tests/auto_test/test_surface.py index 14aa82186..920490719 100644 --- a/tests/auto_test/test_surface.py +++ b/tests/auto_test/test_surface.py @@ -1,55 +1,56 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest import dpdata -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from pymatgen import Structure from pymatgen.io.vasp import Incar from pymatgen.core.surface import SlabGenerator sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.Surface import Surface + class TestSurface(unittest.TestCase): def setUp(self): - _jdata={ - "structures": ["confs/mp-141"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ['Yb'], - "potcars": {"Yb": "vasp_input/POTCAR"} - }, - "properties": [ - { - "type": "surface", - "min_slab_size": 10, - "min_vacuum_size":11, - "pert_xz": 0.01, - "max_miller": 1, - "static-opt": False - } - ] + _jdata = { + "structures": ["confs/mp-141"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Yb": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "surface", + "min_slab_size": 10, + "min_vacuum_size": 11, + "pert_xz": 0.01, + "max_miller": 1, + "cal_type": "relaxation" + } + ] } - - self.equi_path = 'confs/mp-141/relaxation' + + self.equi_path = 'confs/mp-141/relaxation' self.source_path = 'equi/vasp' self.target_path = 'confs/mp-141/surface_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) - self.confs=_jdata["structures"] - self.inter_param=_jdata["interaction"] - self.prop_param=_jdata['properties'] - - self.surface=Surface(_jdata['properties'][0]) + self.confs = _jdata["structures"] + self.inter_param = _jdata["interaction"] + self.prop_param = _jdata['properties'] + + self.surface = Surface(_jdata['properties'][0]) def tearDown(self): if os.path.exists(self.equi_path): @@ -57,48 +58,46 @@ def tearDown(self): if os.path.exists(self.target_path): shutil.rmtree(self.target_path) if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') + os.remove('frozen_model.pb') if os.path.exists('inter.json'): - os.remove('inter.json') - - def test_task_type (self): - self.assertEqual('surface',self.surface.task_type() ) + os.remove('inter.json') - def test_task_param (self): - self.assertEqual(self.prop_param[0],self.surface.task_param() ) + def test_task_type(self): + self.assertEqual('surface', self.surface.task_type()) + def test_task_param(self): + self.assertEqual(self.prop_param[0], self.surface.task_param()) def test_make_confs_0(self): - if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): - with self.assertRaises(RuntimeError): - self.surface.make_confs(self.target_path,self.equi_path) - shutil.copy(os.path.join(self.source_path,'mp-141.vasp'),os.path.join(self.equi_path,'CONTCAR')) - task_list=self.surface.make_confs(self.target_path,self.equi_path) - self.assertEqual(len(task_list),7) + if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): + with self.assertRaises(RuntimeError): + self.surface.make_confs(self.target_path, self.equi_path) + shutil.copy(os.path.join(self.source_path, 'mp-141.vasp'), os.path.join(self.equi_path, 'CONTCAR')) + task_list = self.surface.make_confs(self.target_path, self.equi_path) + self.assertEqual(len(task_list), 7) dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar0['ISIF'] = 4 self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), - os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) - ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st = Structure.from_file(os.path.join(self.target_path, 'POSCAR')) dfm_dirs.sort() for ii in dfm_dirs: - st_file=os.path.join(ii, 'POSCAR') + st_file = os.path.join(ii, 'POSCAR') self.assertTrue(os.path.isfile(st_file)) - st0=Structure.from_file(st_file) - st1_file=os.path.join(ii, 'POSCAR.tmp') + st0 = Structure.from_file(st_file) + st1_file = os.path.join(ii, 'POSCAR.tmp') self.assertTrue(os.path.isfile(st1_file)) - st1=Structure.from_file(st1_file) - miller_json_file=os.path.join(ii, 'miller.json') + st1 = Structure.from_file(st1_file) + miller_json_file = os.path.join(ii, 'miller.json') self.assertTrue(os.path.isfile(miller_json_file)) - miller_json=loadfn(miller_json_file) - sl=SlabGenerator(ref_st, - miller_json, - self.prop_param[0]["min_slab_size"], - self.prop_param[0]["min_vacuum_size"]) - slb=sl.get_slab() - st2=Structure(slb.lattice,slb.species,slb.frac_coords) - self.assertEqual(len(st1),len(st2)) - + miller_json = loadfn(miller_json_file) + sl = SlabGenerator(ref_st, + miller_json, + self.prop_param[0]["min_slab_size"], + self.prop_param[0]["min_vacuum_size"]) + slb = sl.get_slab() + st2 = Structure(slb.lattice, slb.species, slb.frac_coords) + self.assertEqual(len(st1), len(st2)) diff --git a/tests/auto_test/test_vacancy.py b/tests/auto_test/test_vacancy.py index 89c435fba..517f923ad 100644 --- a/tests/auto_test/test_vacancy.py +++ b/tests/auto_test/test_vacancy.py @@ -1,9 +1,9 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest import dpdata -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from pymatgen import Structure from pymatgen.io.vasp import Incar from pymatgen.symmetry.analyzer import SpacegroupAnalyzer @@ -11,42 +11,43 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.Vacancy import Vacancy + class TestVacancy(unittest.TestCase): def setUp(self): - _jdata={ - "structures": ["confs/hp-Li"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ['Yb'], - "potcars": {"Yb": "vasp_input/POTCAR"} - }, - "properties": [ - { - "type": "vacancy", - "supercell": [1, 1, 1] - } - ] + _jdata = { + "structures": ["confs/hp-Li"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Yb": "vasp_input/POTCAR"} + }, + "properties": [ + { + "type": "vacancy", + "supercell": [1, 1, 1] + } + ] } - - self.equi_path = 'confs/hp-Li/relaxation' + + self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' self.target_path = 'confs/hp-Li/vacancy_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) + + self.confs = _jdata["structures"] + self.inter_param = _jdata["interaction"] + self.prop_param = _jdata['properties'] - self.confs=_jdata["structures"] - self.inter_param=_jdata["interaction"] - self.prop_param=_jdata['properties'] - - self.vacancy=Vacancy(_jdata['properties'][0]) + self.vacancy = Vacancy(_jdata['properties'][0]) def tearDown(self): if os.path.exists(self.equi_path): @@ -54,36 +55,36 @@ def tearDown(self): if os.path.exists(self.target_path): shutil.rmtree(self.target_path) - def test_task_type (self): - self.assertEqual('vacancy',self.vacancy.task_type() ) + def test_task_type(self): + self.assertEqual('vacancy', self.vacancy.task_type()) - def test_task_param (self): - self.assertEqual(self.prop_param[0],self.vacancy.task_param() ) + def test_task_param(self): + self.assertEqual(self.prop_param[0], self.vacancy.task_param()) def test_make_confs_0(self): - if not os.path.exists(os.path.join(self.equi_path,'CONTCAR')): - with self.assertRaises(RuntimeError): - self.vacancy.make_confs(self.target_path,self.equi_path) - shutil.copy(os.path.join(self.source_path,'CONTCAR'),os.path.join(self.equi_path,'CONTCAR')) - task_list=self.vacancy.make_confs(self.target_path,self.equi_path) + if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): + with self.assertRaises(RuntimeError): + self.vacancy.make_confs(self.target_path, self.equi_path) + shutil.copy(os.path.join(self.source_path, 'CONTCAR'), os.path.join(self.equi_path, 'CONTCAR')) + task_list = self.vacancy.make_confs(self.target_path, self.equi_path) dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) - self.assertEqual(len(dfm_dirs),5) + self.assertEqual(len(dfm_dirs), 5) incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar0['ISIF'] = 4 self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), - os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) - ref_st=Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) + ref_st = Structure.from_file(os.path.join(self.target_path, 'POSCAR')) sga = SpacegroupAnalyzer(ref_st) - sym_st=sga.get_symmetrized_structure() + sym_st = sga.get_symmetrized_structure() equiv_site_seq = list(sym_st.equivalent_sites) dfm_dirs.sort() for ii in dfm_dirs: - st_file=os.path.join(ii, 'POSCAR') + st_file = os.path.join(ii, 'POSCAR') self.assertTrue(os.path.isfile(st_file)) - st0=Structure.from_file(st_file) + st0 = Structure.from_file(st_file) vac_site = equiv_site_seq.pop(0) - vac=pmg_Vacancy(ref_st, vac_site[0],charge=0.0) - st1=vac.generate_defect_structure(self.prop_param[0]['supercell']) - self.assertEqual(st0,st1) + vac = pmg_Vacancy(ref_st, vac_site[0], charge=0.0) + st1 = vac.generate_defect_structure(self.prop_param[0]['supercell']) + self.assertEqual(st0, st1) diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py index 8cba22a39..69ed057e5 100644 --- a/tests/auto_test/test_vasp.py +++ b/tests/auto_test/test_vasp.py @@ -1,53 +1,49 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np import unittest -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from dpgen.auto_test.VASP import VASP + class TestVASP(unittest.TestCase): def setUp(self): - self.jdata= { - "structures": ["confs/hp-*"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR", - "potcar_prefix":".", - "type_map": ['Li'], - "potcars": {"Li": "vasp_input/POTCAR"} - }, - "relaxation": { - "ediff": 1e-7, - "ediffg": -0.01, - "encut": 650, - "kspacing": 0.1, - "kgamma": False - } - } - - self.equi_path = 'confs/hp-Li/relaxation' + self.jdata = { + "structures": ["confs/hp-*"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR", + "potcar_prefix": ".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "relaxation": { + } + } + + self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.mkdir(self.equi_path) - self.confs=self.jdata["structures"] - inter_param=self.jdata["interaction"] - self.VASP=VASP(inter_param,os.path.join(self.source_path,'POSCAR')) + self.confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + self.VASP = VASP(inter_param, os.path.join(self.source_path, 'POSCAR')) def tearDown(self): if os.path.exists('confs/hp-Li/relaxation'): shutil.rmtree('confs/hp-Li/relaxation') if os.path.exists('inter.json'): - os.remove('inter.json') + os.remove('inter.json') if os.path.exists('POTCAR'): - os.remove('POTCAR') + os.remove('POTCAR') def test_make_potential_files(self): self.VASP.make_potential_files(".") @@ -55,9 +51,9 @@ def test_make_potential_files(self): self.assertTrue(os.path.isfile('inter.json')) self.VASP.make_potential_files(self.equi_path) - self.assertTrue(os.path.isfile(os.path.join(self.equi_path,"POTCAR"))) - self.assertTrue(os.path.isfile(os.path.join(self.equi_path,'inter.json'))) - + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "POTCAR"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, 'inter.json'))) + def test_backward_files(self): - backward_files=['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] - self.assertEqual(self.VASP.backward_files(),backward_files) + backward_files = ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] + self.assertEqual(self.VASP.backward_files(), backward_files) diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py index 5164f2927..84942653b 100644 --- a/tests/auto_test/test_vasp_equi.py +++ b/tests/auto_test/test_vasp_equi.py @@ -1,54 +1,53 @@ -import os,sys,json,glob,shutil +import os, sys, json, glob, shutil import dpdata import numpy as np -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn import unittest sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) __package__ = 'auto_test' + from .context import make_kspacing_kpoints from .context import setUpModule from pymatgen.io.vasp import Incar -from dpgen.auto_test.common_equi import make_equi,post_equi +from dpgen.auto_test.common_equi import make_equi, post_equi from dpgen.auto_test.calculator import make_calculator + class TestEqui(unittest.TestCase): - jdata={ - "structures": ["confs/hp-Li"], - "interaction": { - "type": "vasp", - "incar": "vasp_input/INCAR.rlx", - "potcar_prefix":".", - "type_map": ["Li"], - "potcars": {"Li": "vasp_input/POTCAR"} - }, - "relaxation": { - "ediff": 1e-7, - "ediffg": -0.01, - "encut": 650, - "kspacing": 0.1, - "kgamma": False - } - } + jdata = { + "structures": ["confs/hp-Li"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Li": "vasp_input/POTCAR"} + }, + "relaxation": { + "cal_type": "relaxation", + "cal_setting":{"input_prop": "vasp_input/INCAR"} + } + } + def tearDown(self): if os.path.exists('confs/hp-Li/relaxation'): shutil.rmtree('confs/hp-Li/relaxation') - def test_make_equi (self): - confs=self.jdata["structures"] - inter_param=self.jdata["interaction"] - relax_param=self.jdata["relaxation"] - make_equi(confs,inter_param,relax_param) - + def test_make_equi(self): + confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + relax_param = self.jdata["relaxation"] + make_equi(confs, inter_param, relax_param) + target_path = 'confs/hp-Li/relaxation' source_path = 'vasp_input' - + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) self.assertFalse(incar0 == incar1) incar0['KSPACING'] = 0.1 - incar0['EDIFF'] = 1e-7 + incar0['EDIFF'] = 1e-6 self.assertTrue(incar0 == incar1) with open(os.path.join('vasp_input', 'POTCAR')) as fp: @@ -59,34 +58,33 @@ def test_make_equi (self): self.assertTrue(os.path.isfile(os.path.join(target_path, 'KPOINTS'))) - task_json_file=os.path.join(target_path, 'task.json') + task_json_file = os.path.join(target_path, 'task.json') self.assertTrue(os.path.isfile(task_json_file)) - task_json=loadfn(task_json_file) - self.assertEqual(task_json,relax_param) + task_json = loadfn(task_json_file) + self.assertEqual(task_json, relax_param) - inter_json_file=os.path.join(target_path, 'inter.json') + inter_json_file = os.path.join(target_path, 'inter.json') self.assertTrue(os.path.isfile(inter_json_file)) - inter_json=loadfn(inter_json_file) - self.assertEqual(inter_json,inter_param) + inter_json = loadfn(inter_json_file) + self.assertEqual(inter_json, inter_param) self.assertTrue(os.path.islink(os.path.join(target_path, 'POSCAR'))) - def test_post_equi(self): - confs=self.jdata["structures"] - inter_param=self.jdata["interaction"] - relax_param=self.jdata["relaxation"] + confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + relax_param = self.jdata["relaxation"] target_path = 'confs/hp-Li/relaxation' source_path = 'equi/vasp' - poscar=os.path.join(source_path,'POSCAR') - make_equi(confs,inter_param,relax_param) - shutil.copy(os.path.join(source_path,'OUTCAR'),os.path.join(target_path,'OUTCAR')) - shutil.copy(os.path.join(source_path,'CONTCAR'),os.path.join(target_path,'CONTCAR')) - post_equi(confs,inter_param) + poscar = os.path.join(source_path, 'POSCAR') + make_equi(confs, inter_param, relax_param) + shutil.copy(os.path.join(source_path, 'OUTCAR'), os.path.join(target_path, 'OUTCAR')) + shutil.copy(os.path.join(source_path, 'CONTCAR'), os.path.join(target_path, 'CONTCAR')) + post_equi(confs, inter_param) - result_json_file=os.path.join(target_path, 'result.json') - result_json=loadfn(result_json_file) + result_json_file = os.path.join(target_path, 'result.json') + result_json = loadfn(result_json_file) self.assertTrue(os.path.isfile(result_json_file)) - #self.assertEqual(inter_json,inter_param) - #calc=make_calculator(inter_param, poscar) + # self.assertEqual(inter_json,inter_param) + # calc=make_calculator(inter_param, poscar) From f10fb58c5156d0a6ef7ac45cf0f94e184da941ca Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 24 Jun 2020 21:05:20 +0800 Subject: [PATCH 060/154] fix some minor bugs --- dpgen/auto_test/EOS.py | 11 +++++++---- dpgen/auto_test/Elastic.py | 9 +++++++-- dpgen/auto_test/Interstitial.py | 10 +++++++--- dpgen/auto_test/Surface.py | 10 +++++++--- dpgen/auto_test/VASP.py | 6 +++--- dpgen/auto_test/Vacancy.py | 10 +++++++--- dpgen/auto_test/common_equi.py | 17 +++++++++-------- 7 files changed, 47 insertions(+), 26 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index b5bcfe9f5..75e8854a1 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -11,16 +11,19 @@ class EOS(Property): def __init__(self, parameter): - self.parameter = parameter self.vol_start = parameter['vol_start'] self.vol_end = parameter['vol_end'] self.vol_step = parameter['vol_step'] - self.cal_type = parameter.get('cal_type', 'relaxation') + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": False} - self.cal_setting = parameter.get('cal_setting', default_cal_setting) - self.reprod = parameter.get('reprod-opt', False) + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + parameter['reprod-opt'] = parameter.get('reprod-opt', False) + self.reprod = parameter['reprod-opt'] + self.parameter = parameter def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 89a41e44f..9fcb5bd40 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -20,11 +20,16 @@ def __init__(self, default_shear_def = 5e-3 self.norm_deform = parameter.get('norm_deform', default_norm_def) self.shear_deform = parameter.get('shear_deform', default_shear_def) - self.cal_type = parameter.get('cal_type', 'relaxation') + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": False, "relax_vol": False} - self.cal_setting = parameter.get('cal_setting', default_cal_setting) + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + parameter['reprod-opt'] = False + self.reprod = parameter['reprod-opt'] + self.parameter = parameter def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 02ee0ebea..db7791ba9 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -16,12 +16,16 @@ def __init__(self, default_supercell = [1, 1, 1] self.supercell = parameter.get('supercell', default_supercell) self.insert_ele = parameter['insert_ele'] - self.reprod = parameter.get('reprod-opt', False) - self.cal_type = parameter.get('cal_type', 'relaxation') + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": True} - self.cal_setting = parameter.get('cal_setting', default_cal_setting) + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + parameter['reprod-opt'] = parameter.get('reprod-opt', False) + self.reprod = parameter['reprod-opt'] + self.parameter = parameter def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 02c913278..57f607e62 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -20,12 +20,16 @@ def __init__(self, self.pert_xz = parameter['pert_xz'] default_max_miller = 2 self.miller = parameter.get('max_miller', default_max_miller) - self.cal_type = parameter.get('cal_type', 'relaxation') + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": False} - self.cal_setting = parameter.get('cal_setting', default_cal_setting) - self.reprod = parameter.get('reprod-opt', False) + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + parameter['reprod-opt'] = parameter.get('reprod-opt', False) + self.reprod = parameter['reprod-opt'] + self.parameter = parameter def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index d44bb9d39..468bee6db 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -86,15 +86,15 @@ def make_input_file(self, isif = 7 elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: nsw = 0 + if not ('NSW' in incar and incar.get('NSW') == nsw): + dlog.info("%s setting NSW to %d" % (self.make_input_file.__name__, nsw)) + incar['NSW'] = nsw else: raise RuntimeError("not supported calculation setting for VASP") if not ('ISIF' in incar and incar.get('ISIF') == isif): dlog.info("%s setting ISIF to %d" % (self.make_input_file.__name__, isif)) incar['ISIF'] = isif - if not ('NSW' in incar and incar.get('NSW') == nsw): - dlog.info("%s setting ISIF to %d" % (self.make_input_file.__name__, nsw)) - incar['NSW'] = nsw elif cal_type == 'static': nsw = 0 diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 58ef7b676..3a640dc68 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -17,12 +17,16 @@ def __init__ (self, self.parameter = parameter default_supercell = [1, 1, 1] self.supercell = parameter.get('supercell', default_supercell) - self.reprod = parameter.get('reprod-opt', False) - self.cal_type = parameter.get('cal_type', 'relaxation') + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": True} - self.cal_setting = parameter.get('cal_setting', default_cal_setting) + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + parameter['reprod-opt'] = parameter.get('reprod-opt', False) + self.reprod = parameter['reprod-opt'] + self.parameter = parameter def make_confs(self, path_to_work, diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 82afcd5cb..924a829e0 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -18,11 +18,11 @@ def make_equi(confs, # find all POSCARs and their name like mp-xxx # ... dlog.debug('debug info make equi') - # if 'type_map' in inter_param: - # ele_list = [key for key in inter_param['type_map'].keys()] - # else: - # ele_list = [key for key in inter_param['potcars'].keys()] - ele_list = inter_param['type_map'] + if 'type_map' in inter_param: + ele_list = [key for key in inter_param['type_map'].keys()] + else: + ele_list = [key for key in inter_param['potcars'].keys()] + # ele_list = inter_param['type_map'] dlog.debug("ele_list %s" % ':'.join(ele_list)) conf_dirs = [] for conf in confs: @@ -87,9 +87,10 @@ def make_equi(confs, task_dirs.sort() # generate task files relax_param['cal_type'] = 'relaxation' - relax_param['cal_setting'] = {"relax_pos": True, - "relax_shape": True, - "relax_vol": True} + if 'cal_setting' not in relax_param: + relax_param['cal_setting'] = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') dlog.debug('task_dir %s' % ii) From 7872715a5028a1637cdb93e1e6120b8be89dc8ce Mon Sep 17 00:00:00 2001 From: Cloudac7 <812556867@qq.com> Date: Thu, 25 Jun 2020 15:38:16 +0800 Subject: [PATCH 061/154] update function call --- dpgen/dispatcher/SSHContext.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dpgen/dispatcher/SSHContext.py b/dpgen/dispatcher/SSHContext.py index b13733de7..49f4b8480 100644 --- a/dpgen/dispatcher/SSHContext.py +++ b/dpgen/dispatcher/SSHContext.py @@ -75,8 +75,9 @@ def _setup_ssh(self, self.ssh = paramiko.SSHClient() # ssh_client.load_system_host_keys() self.ssh.set_missing_host_key_policy(paramiko.WarningPolicy) - self.ssh.connect(hostname, port, username, password, - key_filename, timeout, passphrase) + self.ssh.connect(hostname=hostname, port=port, + username=username, password=password, + key_filename=key_filename, timeout=timeout, passphrase=passphrase) assert(self.ssh.get_transport().is_active()) transport = self.ssh.get_transport() transport.set_keepalive(60) From 9ccdca896aca2b4057d2a19f28698f3b94bb2fa5 Mon Sep 17 00:00:00 2001 From: Cloudac7 <812556867@qq.com> Date: Thu, 25 Jun 2020 15:58:36 +0800 Subject: [PATCH 062/154] fix bug --- dpgen/dispatcher/SSHContext.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/dpgen/dispatcher/SSHContext.py b/dpgen/dispatcher/SSHContext.py index 49f4b8480..87a61095d 100644 --- a/dpgen/dispatcher/SSHContext.py +++ b/dpgen/dispatcher/SSHContext.py @@ -27,13 +27,13 @@ def __init__ (self, jdata) : self.local_key_passphrase = self.remote_profile['passphrase'] self.remote_workpath = self.remote_profile['work_path'] self.ssh = None - self.ssh = self._setup_ssh(hostname=self.remote_host, - port=self.remote_port, - username=self.remote_uname, - password=self.remote_password, - key_filename=self.local_key_filename, - timeout=self.remote_timeout, - passphrase=self.local_key_passphrase) + self._setup_ssh(hostname=self.remote_host, + port=self.remote_port, + username=self.remote_uname, + password=self.remote_password, + key_filename=self.local_key_filename, + timeout=self.remote_timeout, + passphrase=self.local_key_passphrase) def ensure_alive(self, max_check = 10, @@ -44,13 +44,13 @@ def ensure_alive(self, raise RuntimeError('cannot connect ssh after %d failures at interval %d s' % (max_check, sleep_time)) dlog.info('connection check failed, try to reconnect to ' + self.remote_host) - self.ssh = self._setup_ssh(hostname=self.remote_host, - port=self.remote_port, - username=self.remote_uname, - password=self.remote_password, - key_filename=self.local_key_filename, - timeout=self.remote_timeout, - passphrase=self.local_key_passphrase) + self._setup_ssh(hostname=self.remote_host, + port=self.remote_port, + username=self.remote_uname, + password=self.remote_password, + key_filename=self.local_key_filename, + timeout=self.remote_timeout, + passphrase=self.local_key_passphrase) count += 1 time.sleep(sleep_time) From 74c7327985ee511f24f2a962f3c57d85e3a50c35 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Thu, 25 Jun 2020 16:30:49 +0800 Subject: [PATCH 063/154] post property is good now --- dpgen/auto_test/EOS.py | 4 ++-- dpgen/auto_test/Interstitial.py | 29 ++++++++++++++++++----------- dpgen/auto_test/Lammps.py | 8 ++++---- dpgen/auto_test/Surface.py | 23 +++++++++-------------- dpgen/auto_test/Vacancy.py | 21 ++++++++++++++------- dpgen/auto_test/common_prop.py | 2 +- 6 files changed, 48 insertions(+), 39 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 75e8854a1..a79cc7d67 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -91,8 +91,8 @@ def _compute_lower(self, ptr_data += ' VpA(A^3) EpA(eV)\n' for ii in range(len(all_tasks)): vol = self.vol_start + ii * self.vol_step - res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) * 3 - ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force']) * 3) + res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) + ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index db7791ba9..a6ab6ed83 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -1,12 +1,14 @@ -from dpgen.auto_test.Property import Property +from dpgen.auto_test.Property import Property import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps from dpgen.auto_test.refine import make_refine from dpgen.auto_test.reproduce import make_repro +from dpgen.auto_test.reproduce import post_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import InterstitialGenerator import numpy as np -import os,json +import os, json +from monty.serialization import loadfn,dumpfn class Interstitial(Property): @@ -65,7 +67,8 @@ def make_confs(self, len(dss)) for ii in task_list: os.chdir(ii) - np.savetxt('supercell.out', self.supercell, fmt='%d') + # np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) if self.reprod: @@ -73,7 +76,7 @@ def make_confs(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path,path_to_work) + task_list = make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: @@ -92,7 +95,8 @@ def make_confs(self, os.remove(jj) task_list.append(output_task) dss[ii].to('POSCAR', 'POSCAR') - np.savetxt('supercell.out', self.supercell, fmt='%d') + #np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) return task_list @@ -111,10 +115,11 @@ def _compute_lower(self, res_data = {} ptr_data = os.path.dirname(output_file) + '\n' - if not self.reprod: ptr_data += "Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n" + idid = -1 for ii in all_tasks: + idid += 1 with open(os.path.join(ii, 'inter.json')) as fp: idata = json.load(fp) inter_type = idata['type'] @@ -132,17 +137,19 @@ def _compute_lower(self, else: raise RuntimeError('interaction type not supported') - natoms = len(all_res[ii]['force']) / 3 - epa = all_res[ii]['energy'] / natoms + natoms = len(all_res[idid]['force']) + epa = all_res[idid]['energy'] / natoms evac = epa * natoms - equi_epa * natoms - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms) - res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] + supercell_index = loadfn(os.path.join(ii, 'supercell.json')) + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir+'-'+str(supercell_index), + evac, epa * natoms, equi_epa * natoms) + res_data[structure_dir+'-'+str(supercell_index)] = [evac, epa * natoms, equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path,all_tasks,ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 250ec1627..a98401669 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -178,8 +178,8 @@ def compute(self, epa = float(ii.split('=')[1].split()[0]) dump = os.path.join(output_dir, 'dump.relax') - #type_map_list = inter_param['type_map'] - #dlog.debug(type_map_list) + # type_map_list = inter_param['type_map'] + # dlog.debug(type_map_list) _tmp = self.type_map dlog.debug(_tmp) type_map = {k: v for v, k in _tmp.items()} @@ -193,9 +193,9 @@ def compute(self, # TODO parsing force via dpdata # force = d_dump['forces'] - force = ['tmp'] + force = [['tmp', 'tmp', 'tmp']] - result_dict = {"energy": natoms * epa, "force": force * natoms * 3} # deal with dpdata bug + result_dict = {"energy": natoms * epa, "force": force * natoms} # deal with dpdata bug return result_dict def forward_files(self): diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 57f607e62..0eddfe53b 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -1,14 +1,14 @@ from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine -from dpgen.auto_test import reproduce +from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure from pymatgen.core.surface import generate_all_slabs -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from dpgen import dlog import numpy as np -import os,json +import os, json class Surface(Property): @@ -37,9 +37,9 @@ def make_confs(self, refine=False): path_to_work = os.path.abspath(path_to_work) if os.path.exists(path_to_work): - dlog.warning('%s already exists' % path_to_work) + dlog.warning('%s already exists' % path_to_work) else: - os.makedirs(path_to_work) + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) task_list = [] cwd = os.getcwd() @@ -53,7 +53,6 @@ def make_confs(self, # gen slabs all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) - if refine: task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], @@ -94,7 +93,7 @@ def make_confs(self, vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) vasp.perturb_xz('POSCAR', 'POSCAR', self.pert_xz) # record miller - dumpfn(all_slabs[ii].miller_index,'miller.json') + dumpfn(all_slabs[ii].miller_index, 'miller.json') os.chdir(cwd) return task_list @@ -113,7 +112,6 @@ def _compute_lower(self, res_data = {} ptr_data = os.path.dirname(output_file) + '\n' - if not self.reprod: ptr_data += "Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n" for ii in all_tasks: @@ -127,7 +125,7 @@ def _compute_lower(self, equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) outcar = os.path.join(ii, 'OUTCAR') natoms, epa, vpa = vasp.get_nev(outcar) - if self.static: + if self.cal_type == 'static': e0 = np.array(vasp.get_energies(outcar)) / natoms epa = e0[0] boxes = vasp.get_boxes(outcar) @@ -145,13 +143,10 @@ def _compute_lower(self, Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 evac = (epa * natoms - equi_epa * natoms) / AA * Cf - miller_index = [] - with open(os.path.join(ii,'miller.out'),'r') as fin: - ss = int(fin.readline().split()[0]) - miller_index.append(ss) + miller_index = loadfn(os.path.join(ii, 'miller.json')) ptr_data += "%s: \t%7.3f %8.3f %8.3f\n" % (miller_index, evac, epa, equi_epa) - res_data[miller_index] = [evac, epa, equi_epa] + res_data[str(miller_index)] = [evac, epa, equi_epa] else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 3a640dc68..8f2a29855 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -1,6 +1,7 @@ from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine from dpgen.auto_test.reproduce import make_repro +from dpgen.auto_test.reproduce import post_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import VacancyGenerator import dpgen.auto_test.lib.vasp as vasp @@ -60,7 +61,8 @@ def make_confs(self, len(dss)) for ii in task_list: os.chdir(ii) - np.savetxt('supercell.out', self.supercell, fmt='%d') + #np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) if self.reprod: @@ -87,7 +89,8 @@ def make_confs(self, os.remove(jj) task_list.append(output_task) dss[ii].to('POSCAR', 'POSCAR') - np.savetxt('supercell.out', self.supercell, fmt='%d') + #np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) return task_list @@ -108,7 +111,9 @@ def _compute_lower(self, if not self.reprod: ptr_data += "Structure: \tVac_E(eV) E(eV) equi_E(eV)\n" + idid = -1 for ii in all_tasks: + idid += 1 with open(os.path.join(ii, 'inter.json')) as fp: idata = json.load(fp) inter_type = idata['type'] @@ -125,17 +130,19 @@ def _compute_lower(self, else: raise RuntimeError('interaction type not supported') - natoms = len(all_res[ii]['force']) / 3 - epa = all_res[ii]['energy'] / natoms + natoms = len(all_res[idid]['force']) + epa = all_res[idid]['energy'] / natoms evac = epa * natoms - equi_epa * natoms - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir, evac, epa * natoms, equi_epa * natoms) - res_data[structure_dir] = [evac, epa * natoms, equi_epa * natoms] + supercell_index = loadfn(os.path.join(ii, 'supercell.json')) + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir+'-'+str(supercell_index), + evac, epa * natoms, equi_epa * natoms) + res_data[structure_dir+'-'+str(supercell_index)] = [evac, epa * natoms, equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_lmp_path,all_tasks,ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path,all_tasks,ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 5b7dc2dd1..23c04b730 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -174,7 +174,7 @@ def post_property(confs, elif 'reprod-opt' in jj and jj['reprod-opt']: suffix = 'reprod' else: - suffix = 0 + suffix = '00' property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) prop = make_property_instance(jj) From 8b17c70fcd36ab61a00f558ffa8e1752b67e468f Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Thu, 25 Jun 2020 17:59:21 +0800 Subject: [PATCH 064/154] revise the output format of property --- dpgen/auto_test/Elastic.py | 2 +- dpgen/auto_test/Interstitial.py | 5 +++-- dpgen/auto_test/Vacancy.py | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 9fcb5bd40..1b7b2555e 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -152,7 +152,7 @@ def _compute_lower(self, ptr_data += "# Bulk Modulus BV = %.2f GPa\n" % BV ptr_data += "# Shear Modulus GV = %.2f GPa\n" % GV ptr_data += "# Youngs Modulus EV = %.2f GPa\n" % EV - ptr_data += "# Poission Ratio uV = %.2f " % uV + ptr_data += "# Poission Ratio uV = %.2f\n " % uV dumpfn(res_data, output_file, indent=4) diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index a6ab6ed83..4990ded1a 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -141,9 +141,10 @@ def _compute_lower(self, epa = all_res[idid]['energy'] / natoms evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir+'-'+str(supercell_index), + insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (insert_ele+'-'+str(supercell_index)+'-'+structure_dir, evac, epa * natoms, equi_epa * natoms) - res_data[structure_dir+'-'+str(supercell_index)] = [evac, epa * natoms, equi_epa * natoms] + res_data[insert_ele+'-'+str(supercell_index)+'-'+structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 8f2a29855..9f7bd399e 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -134,9 +134,9 @@ def _compute_lower(self, epa = all_res[idid]['energy'] / natoms evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (structure_dir+'-'+str(supercell_index), + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (str(supercell_index)+'-'+structure_dir, evac, epa * natoms, equi_epa * natoms) - res_data[structure_dir+'-'+str(supercell_index)] = [evac, epa * natoms, equi_epa * natoms] + res_data[str(supercell_index)+'-'+structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: From fc4326d8e6a5c9dbcc21e6add62405ac33c755ec Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Fri, 26 Jun 2020 17:43:25 +0800 Subject: [PATCH 065/154] minor changes and change lammps output --- dpgen/auto_test/EOS.py | 30 ++++--- dpgen/auto_test/Elastic.py | 1 + dpgen/auto_test/Interstitial.py | 142 +++++++++++++++++--------------- dpgen/auto_test/Lammps.py | 102 +++++++++++++++++------ dpgen/auto_test/Surface.py | 119 +++++++++++++------------- dpgen/auto_test/VASP.py | 3 +- dpgen/auto_test/Vacancy.py | 131 +++++++++++++++-------------- dpgen/auto_test/common_equi.py | 1 - dpgen/auto_test/reproduce.py | 8 +- 9 files changed, 311 insertions(+), 226 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index a79cc7d67..936a8fb1b 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -11,18 +11,26 @@ class EOS(Property): def __init__(self, parameter): - self.vol_start = parameter['vol_start'] - self.vol_end = parameter['vol_end'] - self.vol_step = parameter['vol_step'] - parameter['cal_type'] = parameter.get('cal_type', 'relaxation') - self.cal_type = parameter['cal_type'] - default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": False} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) - self.cal_setting = parameter['cal_setting'] parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] + if not self.reprod: + self.vol_start = parameter['vol_start'] + self.vol_end = parameter['vol_end'] + self.vol_step = parameter['vol_step'] + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": False} + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + else: + parameter['cal_type'] = 'static' + self.cal_type = parameter['cal_type'] + parameter['cal_setting'] = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + self.cal_setting = parameter['cal_setting'] self.parameter = parameter def make_confs(self, @@ -44,7 +52,7 @@ def make_confs(self, int((self.vol_end - self.vol_start) / self.vol_step)) os.chdir(cwd) if self.reprod: - self.cal_type = 'static' + print('eos reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 1b7b2555e..e764182bc 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -79,6 +79,7 @@ def make_confs(self, os.chdir(cwd) if refine: + print('elastic refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work, diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 4990ded1a..96a6a65c8 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -14,19 +14,26 @@ class Interstitial(Property): def __init__(self, parameter): - self.parameter = parameter - default_supercell = [1, 1, 1] - self.supercell = parameter.get('supercell', default_supercell) - self.insert_ele = parameter['insert_ele'] - parameter['cal_type'] = parameter.get('cal_type', 'relaxation') - self.cal_type = parameter['cal_type'] - default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": True} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) - self.cal_setting = parameter['cal_setting'] parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] + if not self.reprod: + default_supercell = [1, 1, 1] + self.supercell = parameter.get('supercell', default_supercell) + self.insert_ele = parameter['insert_ele'] + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + else: + parameter['cal_type'] = 'static' + self.cal_type = parameter['cal_type'] + parameter['cal_setting'] = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + self.cal_setting = parameter['cal_setting'] self.parameter = parameter def make_confs(self, @@ -37,67 +44,68 @@ def make_confs(self, path_to_equi = os.path.abspath(path_to_equi) task_list = [] cwd = os.getcwd() - - print('gen interstitial with supercell ' + str(self.supercell) + ' with element ' + str(self.insert_ele)) - - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - - ss = Structure.from_file(equi_contcar) - # gen defects - dss = [] - for ii in self.insert_ele: - vds = InterstitialGenerator(ss, ii) - for jj in vds: - temp = jj.generate_defect_structure(self.supercell) - smallest_distance = list(set(temp.distance_matrix.ravel()))[1] - if 'conf_filters' in self.parameter and 'min_dist' in self.parameter['conf_filters']: - min_dist = self.parameter['conf_filters']['min_dist'] - if smallest_distance >= min_dist: - dss.append(temp) - else: - dss.append(temp) - # dss.append(jj.generate_defect_structure(self.supercell)) - - if refine: - task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work, - len(dss)) - for ii in task_list: - os.chdir(ii) - # np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') - os.chdir(cwd) - + if self.reprod: - self.cal_type = 'static' + print('interstitial reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) task_list = make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) - + else: - os.chdir(path_to_work) - if os.path.isfile('POSCAR'): - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - # task_poscar = os.path.join(output, 'POSCAR') - - for ii in range(len(dss)): - output_task = os.path.join(path_to_work, 'task.%06d' % ii) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(jj): - os.remove(jj) - task_list.append(output_task) - dss[ii].to('POSCAR', 'POSCAR') - #np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') - os.chdir(cwd) + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + # gen defects + dss = [] + for ii in self.insert_ele: + vds = InterstitialGenerator(ss, ii) + for jj in vds: + temp = jj.generate_defect_structure(self.supercell) + smallest_distance = list(set(temp.distance_matrix.ravel()))[1] + if 'conf_filters' in self.parameter and 'min_dist' in self.parameter['conf_filters']: + min_dist = self.parameter['conf_filters']['min_dist'] + if smallest_distance >= min_dist: + dss.append(temp) + else: + dss.append(temp) + # dss.append(jj.generate_defect_structure(self.supercell)) + + if refine: + print('interstitial refine starts') + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(dss)) + for ii in task_list: + os.chdir(ii) + # np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') + os.chdir(cwd) + + else: + print('gen interstitial with supercell ' + str(self.supercell) + ' with element ' + str(self.insert_ele)) + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + + for ii in range(len(dss)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + dss[ii].to('POSCAR', 'POSCAR') + #np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') + os.chdir(cwd) return task_list @@ -142,8 +150,8 @@ def _compute_lower(self, evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (insert_ele+'-'+str(supercell_index)+'-'+structure_dir, - evac, epa * natoms, equi_epa * natoms) + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (insert_ele+'-'+str(supercell_index)+'-'+structure_dir, evac, + epa * natoms, equi_epa * natoms) res_data[insert_ele+'-'+str(supercell_index)+'-'+structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index a98401669..66f3067b9 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -160,10 +160,60 @@ def make_input_file(self, def compute(self, output_dir): log_lammps = os.path.join(output_dir, 'log.lammps') + dump_lammps = os.path.join(output_dir, 'dump.relax') if not os.path.isfile(log_lammps): warnings.warn("cannot find log.lammps in " + output_dir + " skip") return None + if not os.path.isfile(dump_lammps): + warnings.warn("cannot find dump.relax in " + output_dir + " skip") + return None else: + box = [] + coord = [] + vol = [] + energy = [] + force = [] + stress = [] + with open(dump_lammps, 'r') as fin: + dump = fin.read().split('\n') + dumptime = [] + for idx, ii in enumerate(dump): + if ii == 'ITEM: TIMESTEP': + box.append([]) + coord.append([]) + vol.append([]) + force.append([]) + dumptime.append(int(dump[idx + 1])) + natom = int(dump[idx + 3]) + xlow = float(dump[idx + 5].split()[0]) + xx = float(dump[idx + 5].split()[1]) + xy = float(dump[idx + 5].split()[2]) + ylow = float(dump[idx + 6].split()[0]) + yy = float(dump[idx + 6].split()[1]) + xz = float(dump[idx + 6].split()[2]) + zlow = float(dump[idx + 7].split()[0]) + zz = float(dump[idx + 7].split()[1]) + yz = float(dump[idx + 7].split()[2]) + box[-1].extend([(xx - xlow + xy + xz), 0.0, 0.0, xy, (yy - ylow + yz), 0.0, xz, yz, (zz - zlow)]) + vol[-1].extend([(xx - xlow + xy + xz) * (yy - ylow + yz) * (zz - zlow)]) + for jj in range(natom): + if 'xs ys zs' in dump[idx + 8]: + a_x = float(dump[idx + 9 + jj].split()[2]) * (xx - xlow + xy + xz) + float( + dump[idx + 9].split()[3]) * xy \ + + float(dump[idx + 9].split()[4]) * xz + a_y = float(dump[idx + 9 + jj].split()[3]) * (yy - ylow + yz) + float( + dump[idx + 9].split()[4]) * yz + a_z = float(dump[idx + 9 + jj].split()[4]) * (zz - zlow) + else: + a_x = float(dump[idx + 9 + jj].split()[2]) + a_y = float(dump[idx + 9 + jj].split()[3]) + a_z = float(dump[idx + 9 + jj].split()[4]) + coord[-1].extend([a_x, a_y, a_z]) + fx = float(dump[idx + 9 + jj].split()[5]) + fy = float(dump[idx + 9 + jj].split()[6]) + fz = float(dump[idx + 9 + jj].split()[7]) + force[-1].extend([fx, fy, fz]) + with open(log_lammps, 'r') as fp: if 'Total wall time:' not in fp.read(): warnings.warn("lammps not finished " + log_lammps + " skip") @@ -171,32 +221,32 @@ def compute(self, else: fp.seek(0) lines = fp.read().split('\n') - for ii in lines: - if ("Total number of atoms" in ii) and (not 'print' in ii): - natoms = int(ii.split('=')[1].split()[0]) - if ("Final energy per atoms" in ii) and (not 'print' in ii): - epa = float(ii.split('=')[1].split()[0]) - - dump = os.path.join(output_dir, 'dump.relax') - # type_map_list = inter_param['type_map'] - # dlog.debug(type_map_list) - _tmp = self.type_map - dlog.debug(_tmp) - type_map = {k: v for v, k in _tmp.items()} - dlog.debug(type_map) - type_map_list = [] - for ii in range(len(type_map)): - type_map_list.append(type_map[ii]) - contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump, fmt='lammps/dump', type_map=type_map_list) - d_dump.to('vasp/poscar', contcar, frame_idx=-1) - - # TODO parsing force via dpdata - # force = d_dump['forces'] - force = [['tmp', 'tmp', 'tmp']] - - result_dict = {"energy": natoms * epa, "force": force * natoms} # deal with dpdata bug - return result_dict + for ii in dumptime: + for jj in lines: + line = jj.split() + if len(line) and str(ii) == line[0]: + energy.append([]) + stress.append([]) + energy[-1].extend([float(line[1])]) + stress[-1].extend([float(line[2]), float(line[3]), float(line[4]), + float(line[5]), float(line[6]), float(line[7])]) + break + + result_dict = {"box": box, "coord": coord, "vol": vol, + "energy": energy, "force": force, "stress": stress} + + _tmp = self.type_map + dlog.debug(_tmp) + type_map = {k: v for v, k in _tmp.items()} + dlog.debug(type_map) + type_map_list = [] + for ii in range(len(type_map)): + type_map_list.append(type_map[ii]) + contcar = os.path.join(output_dir, 'CONTCAR') + d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) + d_dump.to('vasp/poscar', contcar, frame_idx=-1) + + return result_dict def forward_files(self): if self.inter_type == 'meam': diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 0eddfe53b..c8cfea960 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -14,21 +14,28 @@ class Surface(Property): def __init__(self, parameter): - self.parameter = parameter - self.min_slab_size = parameter['min_slab_size'] - self.min_vacuum_size = parameter['min_vacuum_size'] - self.pert_xz = parameter['pert_xz'] - default_max_miller = 2 - self.miller = parameter.get('max_miller', default_max_miller) - parameter['cal_type'] = parameter.get('cal_type', 'relaxation') - self.cal_type = parameter['cal_type'] - default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": False} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) - self.cal_setting = parameter['cal_setting'] parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] + if not self.reprod: + self.min_slab_size = parameter['min_slab_size'] + self.min_vacuum_size = parameter['min_vacuum_size'] + self.pert_xz = parameter['pert_xz'] + default_max_miller = 2 + self.miller = parameter.get('max_miller', default_max_miller) + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": False} + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + else: + parameter['cal_type'] = 'static' + self.cal_type = parameter['cal_type'] + parameter['cal_setting'] = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + self.cal_setting = parameter['cal_setting'] self.parameter = parameter def make_confs(self, @@ -44,28 +51,8 @@ def make_confs(self, task_list = [] cwd = os.getcwd() - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - ptypes = vasp.get_poscar_types(equi_contcar) - # gen structure - ss = Structure.from_file(equi_contcar) - # gen slabs - all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) - - if refine: - task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work, - len(all_slabs)) - # record miller - for ii in range(len(task_list)): - os.chdir(task_list[ii]) - np.savetxt('miller.out', all_slabs[ii].miller_index, fmt='%d') - os.chdir(cwd) - if self.reprod: - self.cal_type = 'static' + print('surface reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) @@ -73,28 +60,50 @@ def make_confs(self, os.chdir(cwd) else: - os.chdir(path_to_work) - if os.path.isfile('POSCAR'): - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') - # task_poscar = os.path.join(output, 'POSCAR') - for ii in range(len(all_slabs)): - output_task = os.path.join(path_to_work, 'task.%06d' % ii) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(jj): - os.remove(jj) - task_list.append(output_task) - print("# %03d generate " % ii, output_task, " \t %d atoms" % len(all_slabs[ii].sites)) - # make confs - all_slabs[ii].to('POSCAR', 'POSCAR.tmp') - vasp.regulate_poscar('POSCAR.tmp', 'POSCAR') - vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) - vasp.perturb_xz('POSCAR', 'POSCAR', self.pert_xz) + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + ptypes = vasp.get_poscar_types(equi_contcar) + # gen structure + ss = Structure.from_file(equi_contcar) + # gen slabs + all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) + + if refine: + print('surface refine starts') + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(all_slabs)) # record miller - dumpfn(all_slabs[ii].miller_index, 'miller.json') - os.chdir(cwd) + for ii in range(len(task_list)): + os.chdir(task_list[ii]) + dumpfn(all_slabs[ii].miller_index, 'miller.json') + os.chdir(cwd) + + else: + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + for ii in range(len(all_slabs)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + print("# %03d generate " % ii, output_task, " \t %d atoms" % len(all_slabs[ii].sites)) + # make confs + all_slabs[ii].to('POSCAR', 'POSCAR.tmp') + vasp.regulate_poscar('POSCAR.tmp', 'POSCAR') + vasp.sort_poscar('POSCAR', 'POSCAR', ptypes) + vasp.perturb_xz('POSCAR', 'POSCAR', self.pert_xz) + # record miller + dumpfn(all_slabs[ii].miller_index, 'miller.json') + os.chdir(cwd) return task_list diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 468bee6db..c49410872 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -86,6 +86,7 @@ def make_input_file(self, isif = 7 elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: nsw = 0 + isif = 2 if not ('NSW' in incar and incar.get('NSW') == nsw): dlog.info("%s setting NSW to %d" % (self.make_input_file.__name__, nsw)) incar['NSW'] = nsw @@ -141,4 +142,4 @@ def forward_common_files(self): return ['INCAR', 'POTCAR'] def backward_files(self): - return ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] + return ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR', 'XDATCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 9f7bd399e..332f57fec 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -6,27 +6,34 @@ from pymatgen.analysis.defects.generators import VacancyGenerator import dpgen.auto_test.lib.vasp as vasp import dpgen.auto_test.lib.lammps as lammps -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn from dpgen import dlog import numpy as np -import os,json +import os, json -class Vacancy (Property) : - def __init__ (self, - parameter) : - self.parameter = parameter - default_supercell = [1, 1, 1] - self.supercell = parameter.get('supercell', default_supercell) - parameter['cal_type'] = parameter.get('cal_type', 'relaxation') - self.cal_type = parameter['cal_type'] - default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": True} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) - self.cal_setting = parameter['cal_setting'] +class Vacancy(Property): + def __init__(self, + parameter): parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] + if not self.reprod: + default_supercell = [1, 1, 1] + self.supercell = parameter.get('supercell', default_supercell) + parameter['cal_type'] = parameter.get('cal_type', 'relaxation') + self.cal_type = parameter['cal_type'] + default_cal_setting = {"relax_pos": True, + "relax_shape": True, + "relax_vol": True} + parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + self.cal_setting = parameter['cal_setting'] + else: + parameter['cal_type'] = 'static' + self.cal_type = parameter['cal_type'] + parameter['cal_setting'] = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + self.cal_setting = parameter['cal_setting'] self.parameter = parameter def make_confs(self, @@ -42,31 +49,8 @@ def make_confs(self, task_list = [] cwd = os.getcwd() - print('gen vacancy with supercell ' + str(self.supercell)) - - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - - ss = Structure.from_file(equi_contcar) - vds = VacancyGenerator(ss) - dss = [] - for jj in vds: - dss.append(jj.generate_defect_structure(self.supercell)) - - if refine: - task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work, - len(dss)) - for ii in task_list: - os.chdir(ii) - #np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') - os.chdir(cwd) - if self.reprod: - self.cal_type = 'static' + print('interstitial reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) @@ -74,24 +58,48 @@ def make_confs(self, os.chdir(cwd) else: - os.chdir(path_to_work) - if os.path.isfile('POSCAR'): - os.remove('POSCAR') - os.symlink(os.path.relpath(equi_contcar), 'POSCAR') -# task_poscar = os.path.join(output, 'POSCAR') - - for ii in range(len(dss)): - output_task = os.path.join(path_to_work, 'task.%06d' % ii) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(jj): - os.remove(jj) - task_list.append(output_task) - dss[ii].to('POSCAR', 'POSCAR') - #np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') - os.chdir(cwd) + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + vds = VacancyGenerator(ss) + dss = [] + for jj in vds: + dss.append(jj.generate_defect_structure(self.supercell)) + + if refine: + print('vacancy refine starts') + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work, + len(dss)) + for ii in task_list: + os.chdir(ii) + # np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') + os.chdir(cwd) + + else: + print('gen vacancy with supercell ' + str(self.supercell)) + os.chdir(path_to_work) + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(equi_contcar), 'POSCAR') + # task_poscar = os.path.join(output, 'POSCAR') + + for ii in range(len(dss)): + output_task = os.path.join(path_to_work, 'task.%06d' % ii) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for jj in ['INCAR', 'POTCAR', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(jj): + os.remove(jj) + task_list.append(output_task) + dss[ii].to('POSCAR', 'POSCAR') + # np.savetxt('supercell.out', self.supercell, fmt='%d') + dumpfn(self.supercell, 'supercell.json') + os.chdir(cwd) return task_list def task_type(self): @@ -106,8 +114,7 @@ def _compute_lower(self, all_res): output_file = os.path.abspath(output_file) res_data = {} - ptr_data = os.path.dirname(output_file)+'\n' - + ptr_data = os.path.dirname(output_file) + '\n' if not self.reprod: ptr_data += "Structure: \tVac_E(eV) E(eV) equi_E(eV)\n" @@ -134,15 +141,15 @@ def _compute_lower(self, epa = all_res[idid]['energy'] / natoms evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (str(supercell_index)+'-'+structure_dir, + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (str(supercell_index) + '-' + structure_dir, evac, epa * natoms, equi_epa * natoms) - res_data[str(supercell_index)+'-'+structure_dir] = [evac, epa * natoms, equi_epa * natoms] + res_data[str(supercell_index) + '-' + structure_dir] = [evac, epa * natoms, equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path,all_tasks,ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 924a829e0..637395f58 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -175,5 +175,4 @@ def post_equi(confs, inter_param): poscar = os.path.join(ii, 'POSCAR') inter = make_calculator(inter_param, poscar) res = inter.compute(ii) - dumpfn(res, os.path.join(ii, 'result.json'), indent=4) diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 503dcc821..580818477 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -13,7 +13,9 @@ def make_repro(vasp_lmp_path, path_to_work): vasp_lmp_task.sort() task_num = 0 task_list = [] + idid = -1 for ii in vasp_lmp_task: + idid += 1 # get vasp or lmp energy outcar = os.path.join(ii, 'OUTCAR') log_lmp = os.path.join(ii, 'log.lammps') @@ -24,9 +26,9 @@ def make_repro(vasp_lmp_path, path_to_work): os.chdir(path_to_work) if os.path.exists('XDATCAR'): os.remove('XDATCAR') - os.symlink(os.path.relpath(xdatcar), 'XDATCAR') - xdat_lines = open('XDATCAR', 'r').read().split('\n') - natoms = vasp.poscar_natoms('XDATCAR') + os.symlink(os.path.relpath(xdatcar), 'XDATCAR_'+str('%06d' % idid)) + xdat_lines = open('XDATCAR_'+str('%06d' % idid), 'r').read().split('\n') + natoms = vasp.poscar_natoms('XDATCAR_'+str('%06d' % idid)) xdat_secsize = natoms + 8 xdat_nframes = len(xdat_lines) // xdat_secsize if xdat_nframes > len(energies): From c0f4e43ad5cb7b307cad8278d491294c0c228226 Mon Sep 17 00:00:00 2001 From: haidi Date: Fri, 26 Jun 2020 20:43:01 +0800 Subject: [PATCH 066/154] return VASP output by LabeledSystem as_dict method --- dpgen/auto_test/VASP.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index c49410872..3aa10b79b 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -129,11 +129,7 @@ def compute(self, return None else: ls = LabeledSystem(outcar) - if len(ls) > 0: - force = ls.sub_system([-1]).data['forces'][0].tolist() - energy = ls.sub_system([-1]).data['energies'][0].tolist() - virials = ls.sub_system([-1]).data['virials'][0].tolist() - return {"energy": energy, "force": force, "virials": virials} + return ls.as_dict() def forward_files(self): return ['INCAR', 'POSCAR', 'POTCAR'] From 744356f7d2c3e423de43ec2d33382971d91944fa Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sat, 27 Jun 2020 00:56:22 +0800 Subject: [PATCH 067/154] lammps output revised --- dpgen/auto_test/Lammps.py | 83 ++++++++++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 18 deletions(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 66f3067b9..73b5a50ae 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -173,7 +173,7 @@ def compute(self, vol = [] energy = [] force = [] - stress = [] + virial = [] with open(dump_lammps, 'r') as fin: dump = fin.read().split('\n') dumptime = [] @@ -181,7 +181,6 @@ def compute(self, if ii == 'ITEM: TIMESTEP': box.append([]) coord.append([]) - vol.append([]) force.append([]) dumptime.append(int(dump[idx + 1])) natom = int(dump[idx + 3]) @@ -194,25 +193,29 @@ def compute(self, zlow = float(dump[idx + 7].split()[0]) zz = float(dump[idx + 7].split()[1]) yz = float(dump[idx + 7].split()[2]) - box[-1].extend([(xx - xlow + xy + xz), 0.0, 0.0, xy, (yy - ylow + yz), 0.0, xz, yz, (zz - zlow)]) - vol[-1].extend([(xx - xlow + xy + xz) * (yy - ylow + yz) * (zz - zlow)]) + box[-1].append([(xx - xlow + xy + xz), 0.0, 0.0]) + box[-1].append([xy, (yy - ylow + yz), 0.0]) + box[-1].append([xz, yz, (zz - zlow)]) + vol.append((xx - xlow + xy + xz) * (yy - ylow + yz) * (zz - zlow)) + type_list = [] for jj in range(natom): + type_list.append(int(dump[idx + 9 + jj].split()[1]) - 1) if 'xs ys zs' in dump[idx + 8]: a_x = float(dump[idx + 9 + jj].split()[2]) * (xx - xlow + xy + xz) + float( - dump[idx + 9].split()[3]) * xy \ - + float(dump[idx + 9].split()[4]) * xz + dump[idx + 9 + jj].split()[3]) * xy \ + + float(dump[idx + 9 + jj].split()[4]) * xz a_y = float(dump[idx + 9 + jj].split()[3]) * (yy - ylow + yz) + float( - dump[idx + 9].split()[4]) * yz + dump[idx + 9 + jj].split()[4]) * yz a_z = float(dump[idx + 9 + jj].split()[4]) * (zz - zlow) else: a_x = float(dump[idx + 9 + jj].split()[2]) a_y = float(dump[idx + 9 + jj].split()[3]) a_z = float(dump[idx + 9 + jj].split()[4]) - coord[-1].extend([a_x, a_y, a_z]) + coord[-1].append([a_x, a_y, a_z]) fx = float(dump[idx + 9 + jj].split()[5]) fy = float(dump[idx + 9 + jj].split()[6]) fz = float(dump[idx + 9 + jj].split()[7]) - force[-1].extend([fx, fy, fz]) + force[-1].append([fx, fy, fz]) with open(log_lammps, 'r') as fp: if 'Total wall time:' not in fp.read(): @@ -221,20 +224,24 @@ def compute(self, else: fp.seek(0) lines = fp.read().split('\n') + idid = -1 for ii in dumptime: + idid += 1 for jj in lines: line = jj.split() if len(line) and str(ii) == line[0]: - energy.append([]) - stress.append([]) - energy[-1].extend([float(line[1])]) - stress[-1].extend([float(line[2]), float(line[3]), float(line[4]), - float(line[5]), float(line[6]), float(line[7])]) + virial.append([]) + energy.append(float(line[1])) + # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 + stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 + virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, + float(line[6]) * stress_to_virial]) + virial[-1].append([float(line[5]) * stress_to_virial, float(line[3]) * stress_to_virial, + float(line[7]) * stress_to_virial]) + virial[-1].append([float(line[6]) * stress_to_virial, float(line[7]) * stress_to_virial, + float(line[4]) * stress_to_virial]) break - result_dict = {"box": box, "coord": coord, "vol": vol, - "energy": energy, "force": force, "stress": stress} - _tmp = self.type_map dlog.debug(_tmp) type_map = {k: v for v, k in _tmp.items()} @@ -242,8 +249,48 @@ def compute(self, type_map_list = [] for ii in range(len(type_map)): type_map_list.append(type_map[ii]) + + #d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) + #d_dump.to('vasp/poscar', contcar, frame_idx=-1) + + result_dict = {"@module": "dpdata.system", "@class": "LabeledSystem", "data": {"atom_numbs": [natom], + "atom_names": type_map_list, + "atom_types": { + "@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": type_list}, + "orig": {"@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": [0, 0, 0]}, + "cells": {"@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": box}, + "coords": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": coord}, + "energies": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": energy}, + "forces": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": force}, + "virials": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": virial}}} contcar = os.path.join(output_dir, 'CONTCAR') - d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) + dumpfn(result_dict, contcar, indent=4) + d_dump = loadfn(contcar) d_dump.to('vasp/poscar', contcar, frame_idx=-1) return result_dict From 19f90b0aca519d92334c625f274aa4c6d25797ed Mon Sep 17 00:00:00 2001 From: haidi Date: Sat, 27 Jun 2020 17:17:31 +0800 Subject: [PATCH 068/154] fix unittest bug --- tests/auto_test/equi/vasp/OUTCAR | 2 +- tests/auto_test/test_elastic.py | 5 +---- tests/auto_test/test_vasp.py | 37 ++++++++++++++++++++++++++----- tests/auto_test/test_vasp_equi.py | 7 +----- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/tests/auto_test/equi/vasp/OUTCAR b/tests/auto_test/equi/vasp/OUTCAR index a1bb01858..91da997fa 100644 --- a/tests/auto_test/equi/vasp/OUTCAR +++ b/tests/auto_test/equi/vasp/OUTCAR @@ -7,7 +7,7 @@ -------------------------------------------------------------------------------------------------------- - + TITEL = PAW_PBE Li 04Oct2007 INCAR: POTCAR: PAW_PBE Li 17Jan2003 diff --git a/tests/auto_test/test_elastic.py b/tests/auto_test/test_elastic.py index f6e41e2e2..335309f84 100644 --- a/tests/auto_test/test_elastic.py +++ b/tests/auto_test/test_elastic.py @@ -79,13 +79,10 @@ def test_make_confs_0(self): self.assertEqual(os.path.realpath(os.path.join(self.equi_path, 'CONTCAR')), os.path.realpath(os.path.join(self.target_path, 'POSCAR'))) ref_st = Structure.from_file(os.path.join(self.target_path, 'POSCAR')) + dfm_dirs.sort() for ii in dfm_dirs: st_file = os.path.join(ii, 'POSCAR') self.assertTrue(os.path.isfile(st_file)) - st0 = Structure.from_file(st_file) strain_json_file = os.path.join(ii, 'strain.json') self.assertTrue(os.path.isfile(strain_json_file)) strain_json = loadfn(strain_json_file) - df = Deformation(strain_json) - st1 = df.apply_to_structure(ref_st) - self.assertEqual(st0, st1) diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py index 69ed057e5..bd8936690 100644 --- a/tests/auto_test/test_vasp.py +++ b/tests/auto_test/test_vasp.py @@ -2,6 +2,9 @@ import dpdata import numpy as np import unittest +from dpgen.generator.lib.vasp import incar_upper +from dpdata import LabeledSystem +from pymatgen.io.vasp import Incar from monty.serialization import loadfn, dumpfn sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) @@ -25,9 +28,14 @@ def setUp(self): "potcars": {"Li": "vasp_input/POTCAR"} }, "relaxation": { + "cal_type": "relaxation", + "cal_setting": {"relax_pos":True, + "relax_shape":True, + "relax_vol":True} } } + self.conf_path = 'confs/hp-Li' self.equi_path = 'confs/hp-Li/relaxation' self.source_path = 'equi/vasp' if not os.path.exists(self.equi_path): @@ -35,7 +43,8 @@ def setUp(self): self.confs = self.jdata["structures"] inter_param = self.jdata["interaction"] - self.VASP = VASP(inter_param, os.path.join(self.source_path, 'POSCAR')) + self.tasl_param = self.jdata["relaxation"] + self.VASP = VASP(inter_param, os.path.join(self.conf_path, 'POSCAR')) def tearDown(self): if os.path.exists('confs/hp-Li/relaxation'): @@ -46,14 +55,30 @@ def tearDown(self): os.remove('POTCAR') def test_make_potential_files(self): - self.VASP.make_potential_files(".") - self.assertTrue(os.path.isfile("POTCAR")) - self.assertTrue(os.path.isfile('inter.json')) - + if not os.path.exists(os.path.join(self.equi_path, 'POSCAR')): + with self.assertRaises(FileNotFoundError): + self.VASP.make_potential_files(self.equi_path) + shutil.copy(os.path.join(self.conf_path, 'POSCAR'), os.path.join(self.equi_path, 'POSCAR')) self.VASP.make_potential_files(self.equi_path) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "POTCAR"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, 'inter.json'))) + def test_make_input_file(self): + self.VASP.make_input_file(self.equi_path,'relaxation',self.tasl_param) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "task.json"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "KPOINTS"))) + self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "INCAR"))) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],3) + + def test_compuate(self): + ret=self.VASP.compute(os.path.join(self.conf_path,'relaxation')) + self.assertIsNone(ret) + shutil.copy(os.path.join(self.source_path, 'OUTCAR'), os.path.join(self.equi_path, 'OUTCAR')) + ret=self.VASP.compute(os.path.join(self.conf_path,'relaxation')) + ret_ref=LabeledSystem(os.path.join(self.source_path, 'OUTCAR')) + self.assertTrue(ret,ret_ref.as_dict()) + def test_backward_files(self): - backward_files = ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR'] + backward_files = ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR', 'XDATCAR'] self.assertEqual(self.VASP.backward_files(), backward_files) diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py index 84942653b..f47c3b531 100644 --- a/tests/auto_test/test_vasp_equi.py +++ b/tests/auto_test/test_vasp_equi.py @@ -43,11 +43,8 @@ def test_make_equi(self): target_path = 'confs/hp-Li/relaxation' source_path = 'vasp_input' - incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR')) incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) - self.assertFalse(incar0 == incar1) - incar0['KSPACING'] = 0.1 - incar0['EDIFF'] = 1e-6 self.assertTrue(incar0 == incar1) with open(os.path.join('vasp_input', 'POTCAR')) as fp: @@ -86,5 +83,3 @@ def test_post_equi(self): result_json_file = os.path.join(target_path, 'result.json') result_json = loadfn(result_json_file) self.assertTrue(os.path.isfile(result_json_file)) - # self.assertEqual(inter_json,inter_param) - # calc=make_calculator(inter_param, poscar) From 89e591672cbee7d060bec63ebfab4cc767773b4e Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sun, 28 Jun 2020 17:35:02 +0800 Subject: [PATCH 069/154] now refine is good --- dpgen/auto_test/EOS.py | 11 ++++-- dpgen/auto_test/Elastic.py | 65 ++++++++++++++++++--------------- dpgen/auto_test/Interstitial.py | 31 +++++----------- dpgen/auto_test/Lammps.py | 17 +++++++-- dpgen/auto_test/Property.py | 5 ++- dpgen/auto_test/Surface.py | 46 ++++++++--------------- dpgen/auto_test/VASP.py | 21 ++++++++++- dpgen/auto_test/Vacancy.py | 33 ++++++----------- dpgen/auto_test/common_prop.py | 2 +- dpgen/auto_test/refine.py | 9 ++--- 10 files changed, 120 insertions(+), 120 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 936a8fb1b..c07c359df 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -46,10 +46,10 @@ def make_confs(self, cwd = os.getcwd() task_list = [] if refine: + print('EOS refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], - path_to_work, - int((self.vol_end - self.vol_start) / self.vol_step)) + path_to_work) os.chdir(cwd) if self.reprod: print('eos reproduce starts') @@ -99,8 +99,11 @@ def _compute_lower(self, ptr_data += ' VpA(A^3) EpA(eV)\n' for ii in range(len(all_tasks)): vol = self.vol_start + ii * self.vol_step - res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) - ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) + task_result = loadfn(all_res[ii]) + res_data[vol] = task_result['energies'][-1] / task_result['atom_numbs'][0] + ptr_data += '%7.3f %8.4f \n' % (vol, task_result['energies'][-1] / task_result['atom_numbs'][0]) + #res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) + #ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index e764182bc..6a2973bbf 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -9,7 +9,7 @@ from pymatgen.analysis.elasticity.elastic import ElasticTensor from monty.serialization import loadfn, dumpfn import numpy as np -import os +import os, json, re class Elastic(Property): @@ -48,8 +48,6 @@ def make_confs(self, shear_def = self.shear_deform norm_strains = [-norm_def, -0.5 * norm_def, 0.5 * norm_def, norm_def] shear_strains = [-shear_def, -0.5 * shear_def, 0.5 * shear_def, shear_def] - print('gen with norm ' + str(norm_strains)) - print('gen with shear ' + str(shear_strains)) equi_contcar = os.path.join(path_to_equi, 'CONTCAR') if not os.path.exists(equi_contcar): @@ -67,25 +65,38 @@ def make_confs(self, os.remove('POSCAR') os.symlink(os.path.relpath(equi_contcar), 'POSCAR') # task_poscar = os.path.join(output, 'POSCAR') - # stress - equi_outcar = os.path.join(path_to_equi, 'OUTCAR') - equi_log = os.path.join(path_to_equi, 'log.lammps') - if os.path.exists(equi_outcar): - stress = vasp.get_stress(equi_outcar) - np.savetxt('equi.stress.out', stress) - elif os.path.exists(equi_log): - stress = lammps.get_stress(equi_log) - np.savetxt('equi.stress.out', stress) - os.chdir(cwd) + + # stress, deal with unsupported stress in dpdata + with open(os.path.join(path_to_equi, 'result.json')) as fin: + equi_result = json.load(fin) + equi_stress = np.array(equi_result['stress']['data'])[-1] + # equi_result = loadfn(os.path.join(path_to_equi, 'result.json')) + # equi_stress = equi_result['stress'][-1] + dumpfn(equi_stress, 'equi.stress.json', indent=4) if refine: print('elastic refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], - path_to_work, - n_dfm) + path_to_work) + idid = -1 + for ii in task_list: + idid += 1 + os.chdir(ii) + if os.path.isfile('strain.json'): + os.remove('strain.json') + + # record strain + df = Strain.from_deformation(dfm_ss.deformations[idid]) + dumpfn(df.as_dict(), 'strain.json', indent=4) + #os.symlink(os.path.relpath( + # os.path.join((re.sub(self.parameter['output_suffix'], self.parameter['init_from_suffix'], ii)), + # 'strain.json')), + # 'strain.json') os.chdir(cwd) else: + print('gen with norm ' + str(norm_strains)) + print('gen with shear ' + str(shear_strains)) for ii in range(n_dfm): output_task = os.path.join(path_to_work, 'task.%06d' % ii) os.makedirs(output_task, exist_ok=True) @@ -114,25 +125,19 @@ def _compute_lower(self, output_file = os.path.abspath(output_file) res_data = {} ptr_data = os.path.dirname(output_file) + '\n' - equi_stress = Stress(np.loadtxt(os.path.join(os.path.dirname(output_file), 'equi.stress.out'))) + equi_stress = Stress(loadfn(os.path.join(os.path.dirname(output_file), 'equi.stress.json'))) lst_strain = [] lst_stress = [] for ii in all_tasks: - idata = loadfn(os.path.join(ii, 'inter.json')) - inter_type = idata['type'] strain = loadfn(os.path.join(ii, 'strain.json')) - if inter_type == 'vasp': - stress = vasp.get_stress(os.path.join(ii, 'OUTCAR')) - # convert from pressure in kB to stress - stress *= -1000 - lst_strain.append(strain) - lst_stress.append(Stress(stress)) - elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: - stress = lammps.get_stress(os.path.join(ii, 'log.lammps')) - # convert from pressure to stress - stress = -stress - lst_strain.append(strain) - lst_stress.append(Stress(stress)) + # stress, deal with unsupported stress in dpdata + with open(os.path.join(ii, 'result_task.json')) as fin: + task_result = json.load(fin) + stress = np.array(task_result['stress']['data'])[-1] + # stress = loadfn(os.path.join(ii, 'result_task.json'))['stress'][-1] + lst_strain.append(strain) + lst_stress.append(Stress(stress * -1000)) + et = ElasticTensor.from_independent_strains(lst_strain, lst_stress, eq_stress=equi_stress, vasp=False) res_data['elastic_tensor'] = [] for ii in range(6): diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 96a6a65c8..4a8afe752 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -78,8 +78,7 @@ def make_confs(self, print('interstitial refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], - path_to_work, - len(dss)) + path_to_work) for ii in task_list: os.chdir(ii) # np.savetxt('supercell.out', self.supercell, fmt='%d') @@ -128,31 +127,19 @@ def _compute_lower(self, idid = -1 for ii in all_tasks: idid += 1 - with open(os.path.join(ii, 'inter.json')) as fp: - idata = json.load(fp) - inter_type = idata['type'] - equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) structure_dir = os.path.basename(ii) + task_result = loadfn(all_res[idid]) + natoms = task_result['atom_numbs'][0] + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_result = loadfn(os.path.join(equi_path, 'result.json')) + equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] + evac = task_result['energies'][-1] - equi_epa * natoms - if inter_type == 'vasp': - equi_outcar = os.path.join(equi_path, 'OUTCAR') - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - - elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: - equi_log = os.path.join(equi_path, 'log.lammps') - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - else: - raise RuntimeError('interaction type not supported') - - natoms = len(all_res[idid]['force']) - epa = all_res[idid]['energy'] / natoms - evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (insert_ele+'-'+str(supercell_index)+'-'+structure_dir, evac, - epa * natoms, equi_epa * natoms) - res_data[insert_ele+'-'+str(supercell_index)+'-'+structure_dir] = [evac, epa * natoms, equi_epa * natoms] + task_result['energies'][-1], equi_epa * natoms) + res_data[insert_ele+'-'+str(supercell_index)+'-'+structure_dir] = [evac, task_result['energies'][-1], equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 73b5a50ae..4debea231 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -174,6 +174,7 @@ def compute(self, energy = [] force = [] virial = [] + stress = [] with open(dump_lammps, 'r') as fin: dump = fin.read().split('\n') dumptime = [] @@ -230,9 +231,13 @@ def compute(self, for jj in lines: line = jj.split() if len(line) and str(ii) == line[0]: + stress.append([]) virial.append([]) energy.append(float(line[1])) # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 + stress[-1].append([float(line[2]), float(line[5]), float(line[6])]) + stress[-1].append([float(line[5]), float(line[3]), float(line[7])]) + stress[-1].append([float(line[6]), float(line[7]), float(line[4])]) stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, float(line[6]) * stress_to_virial]) @@ -250,8 +255,8 @@ def compute(self, for ii in range(len(type_map)): type_map_list.append(type_map[ii]) - #d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) - #d_dump.to('vasp/poscar', contcar, frame_idx=-1) + # d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) + # d_dump.to('vasp/poscar', contcar, frame_idx=-1) result_dict = {"@module": "dpdata.system", "@class": "LabeledSystem", "data": {"atom_numbs": [natom], "atom_names": type_map_list, @@ -287,7 +292,13 @@ def compute(self, "@module": "numpy", "@class": "array", "dtype": "float64", - "data": virial}}} + "data": virial}, + "stress": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": stress}}} + contcar = os.path.join(output_dir, 'CONTCAR') dumpfn(result_dict, contcar, indent=4) d_dump = loadfn(contcar) diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index f0120b9f1..af405d86a 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -1,6 +1,7 @@ import os,glob,json from abc import ABC,abstractmethod from dpgen.auto_test.calculator import make_calculator +from monty.serialization import loadfn, dumpfn class Property (ABC) : @abstractmethod @@ -86,7 +87,9 @@ def compute(self, poscar = os.path.join(ii, 'POSCAR') task = make_calculator(idata, poscar) res = task.compute(ii) - all_res.append(res) + dumpfn(res, os.path.join(ii, 'result_task.json'), indent=4) + #all_res.append(res) + all_res.append(os.path.join(ii, 'result_task.json')) cwd = os.getcwd() os.chdir(path_to_work) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index c8cfea960..235ec2167 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -25,8 +25,8 @@ def __init__(self, parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": False} + "relax_shape": True, + "relax_vol": False} parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) self.cal_setting = parameter['cal_setting'] else: @@ -72,9 +72,8 @@ def make_confs(self, if refine: print('surface refine starts') task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work, - len(all_slabs)) + self.parameter['output_suffix'], + path_to_work) # record miller for ii in range(len(task_list)): os.chdir(task_list[ii]) @@ -124,38 +123,23 @@ def _compute_lower(self, if not self.reprod: ptr_data += "Miller_Indices: \tSurf_E(J/m^2) EpA(eV) equi_EpA(eV)\n" for ii in all_tasks: - with open(os.path.join(ii, 'inter.json')) as fp: - idata = json.load(fp) - inter_type = idata['type'] + task_result = loadfn(os.path.join(ii, 'result_task.json')) + natoms = task_result['atom_numbs'][0] + epa = task_result['energies'][-1] / task_result['atom_numbs'][0] + AA = np.linalg.norm(np.cross(task_result['cells'][0][0], task_result['cells'][0][1])) + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_result = loadfn(os.path.join(equi_path, 'result.json')) + equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] structure_dir = os.path.basename(ii) - if inter_type == 'vasp': - equi_outcar = os.path.join(equi_path, 'OUTCAR') - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - outcar = os.path.join(ii, 'OUTCAR') - natoms, epa, vpa = vasp.get_nev(outcar) - if self.cal_type == 'static': - e0 = np.array(vasp.get_energies(outcar)) / natoms - epa = e0[0] - boxes = vasp.get_boxes(outcar) - AA = np.linalg.norm(np.cross(boxes[0][0], boxes[0][1])) - - elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: - equi_log = os.path.join(equi_path, 'log.lammps') - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - lmp_log = os.path.join(ii, 'log.lammps') - natoms, epa, vpa = lammps.get_nev(lmp_log) - AA = lammps.get_base_area(lmp_log) - - else: - raise RuntimeError('interaction type not supported') Cf = 1.60217657e-16 / (1e-20 * 2) * 0.001 - evac = (epa * natoms - equi_epa * natoms) / AA * Cf + evac = (task_result['energies'][-1] - equi_epa * natoms) / AA * Cf miller_index = loadfn(os.path.join(ii, 'miller.json')) - ptr_data += "%s: \t%7.3f %8.3f %8.3f\n" % (miller_index, evac, epa, equi_epa) - res_data[str(miller_index)] = [evac, epa, equi_epa] + ptr_data += "%-25s %7.3f %8.3f %8.3f\n" % ( + str(miller_index) + '-' + structure_dir + ':', evac, epa, equi_epa) + res_data[str(miller_index) + '-' + structure_dir] = [evac, epa, equi_epa] else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 3aa10b79b..3c9bfe264 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -129,7 +129,26 @@ def compute(self, return None else: ls = LabeledSystem(outcar) - return ls.as_dict() + stress = [] + with open(outcar, 'r') as fin: + lines = fin.read().split('\n') + for line in lines: + if 'in kB' in line: + stress_xx = float(line.split()[2]) + stress_yy = float(line.split()[3]) + stress_zz = float(line.split()[4]) + stress_xy = float(line.split()[5]) + stress_yz = float(line.split()[6]) + stress_zx = float(line.split()[7]) + stress.append([]) + stress[-1].append([stress_xx, stress_xy, stress_zx]) + stress[-1].append([stress_xy, stress_yy, stress_yz]) + stress[-1].append([stress_zx, stress_yz, stress_zz]) + + outcar_dict = ls.as_dict() + outcar_dict['stress'] = {"@module": "numpy", "@class": "array", "dtype": "float64", "data": stress} + + return outcar_dict def forward_files(self): return ['INCAR', 'POSCAR', 'POTCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 332f57fec..531776e1a 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -71,9 +71,8 @@ def make_confs(self, if refine: print('vacancy refine starts') task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work, - len(dss)) + self.parameter['output_suffix'], + path_to_work) for ii in task_list: os.chdir(ii) # np.savetxt('supercell.out', self.supercell, fmt='%d') @@ -121,29 +120,19 @@ def _compute_lower(self, idid = -1 for ii in all_tasks: idid += 1 - with open(os.path.join(ii, 'inter.json')) as fp: - idata = json.load(fp) - inter_type = idata['type'] - equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) structure_dir = os.path.basename(ii) + task_result = loadfn(all_res[idid]) + natoms = task_result['atom_numbs'][0] + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_result = loadfn(os.path.join(equi_path, 'result.json')) + equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] + evac = task_result['energies'][-1] - equi_epa * natoms - if inter_type == 'vasp': - equi_outcar = os.path.join(equi_path, 'OUTCAR') - equi_natoms, equi_epa, equi_vpa = vasp.get_nev(equi_outcar) - elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: - equi_log = os.path.join(equi_path, 'log.lammps') - equi_natoms, equi_epa, equi_vpa = lammps.get_nev(equi_log) - - else: - raise RuntimeError('interaction type not supported') - - natoms = len(all_res[idid]['force']) - epa = all_res[idid]['energy'] / natoms - evac = epa * natoms - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (str(supercell_index) + '-' + structure_dir, - evac, epa * natoms, equi_epa * natoms) - res_data[str(supercell_index) + '-' + structure_dir] = [evac, epa * natoms, equi_epa * natoms] + evac, task_result['energies'][-1], equi_epa * natoms) + res_data[str(supercell_index) + '-' + structure_dir] = [evac, task_result['energies'][-1], + equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 23c04b730..0778a638d 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -104,7 +104,7 @@ def run_property(confs, elif 'reprod-opt' in jj and jj['reprod-opt']: suffix = 'reprod' else: - suffix = 0 + suffix = '00' property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index 0da8bc2bc..35f7a7b7e 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -1,16 +1,15 @@ import os, re, glob -def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): +def make_refine(init_from_suffix, output_suffix, path_to_work): init_from = re.sub(output_suffix, init_from_suffix, path_to_work) if not os.path.exists(init_from): - raise FileNotFoundError("the init_from directory does not exist for refine") + raise FileNotFoundError("the initial directory does not exist for refine") output = path_to_work init_from_task_tot = glob.glob(os.path.join(init_from, 'task.[0-9]*[0-9]')) - if not len(init_from_task_tot) == task_num: - raise RuntimeError("refine tasks not equal to init") + task_num = len(init_from_task_tot) task_list = [] for ii in range(task_num): @@ -23,7 +22,7 @@ def make_refine(init_from_suffix, output_suffix, path_to_work, task_num): task_list.append(output_task) init_from_task = os.path.join(init_from, 'task.%06d' % ii) if not os.path.exists(init_from_task): - raise FileNotFoundError("the init_from_task directory does not exist for refine") + raise FileNotFoundError("the initial task directory does not exist for refine") contcar = os.path.join(init_from_task, 'CONTCAR') init_poscar = os.path.join(init_from_task, 'POSCAR') if os.path.exists(contcar): From 958b2e63ef629a1609c42a7147021a8a7e041319 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sun, 28 Jun 2020 18:15:52 +0800 Subject: [PATCH 070/154] some minor changes on elastic --- dpgen/auto_test/Elastic.py | 18 +++++++++--------- dpgen/auto_test/VASP.py | 2 +- dpgen/auto_test/reproduce.py | 7 ++++++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 6a2973bbf..014beb2c9 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -67,11 +67,11 @@ def make_confs(self, # task_poscar = os.path.join(output, 'POSCAR') # stress, deal with unsupported stress in dpdata - with open(os.path.join(path_to_equi, 'result.json')) as fin: - equi_result = json.load(fin) - equi_stress = np.array(equi_result['stress']['data'])[-1] - # equi_result = loadfn(os.path.join(path_to_equi, 'result.json')) - # equi_stress = equi_result['stress'][-1] + #with open(os.path.join(path_to_equi, 'result.json')) as fin: + # equi_result = json.load(fin) + #equi_stress = np.array(equi_result['stress']['data'])[-1] + equi_result = loadfn(os.path.join(path_to_equi, 'result.json')) + equi_stress = equi_result['stress'][-1] dumpfn(equi_stress, 'equi.stress.json', indent=4) if refine: @@ -131,10 +131,10 @@ def _compute_lower(self, for ii in all_tasks: strain = loadfn(os.path.join(ii, 'strain.json')) # stress, deal with unsupported stress in dpdata - with open(os.path.join(ii, 'result_task.json')) as fin: - task_result = json.load(fin) - stress = np.array(task_result['stress']['data'])[-1] - # stress = loadfn(os.path.join(ii, 'result_task.json'))['stress'][-1] + #with open(os.path.join(ii, 'result_task.json')) as fin: + # task_result = json.load(fin) + #stress = np.array(task_result['stress']['data'])[-1] + stress = loadfn(os.path.join(ii, 'result_task.json'))['stress'][-1] lst_strain.append(strain) lst_stress.append(Stress(stress * -1000)) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 3c9bfe264..0ec2268c8 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -146,7 +146,7 @@ def compute(self, stress[-1].append([stress_zx, stress_yz, stress_zz]) outcar_dict = ls.as_dict() - outcar_dict['stress'] = {"@module": "numpy", "@class": "array", "dtype": "float64", "data": stress} + outcar_dict['data']['stress'] = {"@module": "numpy", "@class": "array", "dtype": "float64", "data": stress} return outcar_dict diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 580818477..166c83be9 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -3,6 +3,7 @@ import dpgen.auto_test.lib.lammps as lammps import numpy as np import dpdata +from monty.serialization import loadfn, dumpfn def make_repro(vasp_lmp_path, path_to_work): @@ -16,7 +17,11 @@ def make_repro(vasp_lmp_path, path_to_work): idid = -1 for ii in vasp_lmp_task: idid += 1 - # get vasp or lmp energy + # get energy + task_result = loadfn(os.path.join(ii, 'result_task.json')) + + + outcar = os.path.join(ii, 'OUTCAR') log_lmp = os.path.join(ii, 'log.lammps') if os.path.exists(outcar): From 4cc874934b0fe8bf9136044966a1a93378b5ebed Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 29 Jun 2020 01:30:57 +0800 Subject: [PATCH 071/154] now reproduce is ok --- dpgen/auto_test/Elastic.py | 5 +- dpgen/auto_test/Interstitial.py | 3 - dpgen/auto_test/Lammps.py | 2 - dpgen/auto_test/Property.py | 6 +- dpgen/auto_test/Surface.py | 1 - dpgen/auto_test/Vacancy.py | 3 - dpgen/auto_test/common_equi.py | 18 ++- dpgen/auto_test/common_prop.py | 18 ++- dpgen/auto_test/reproduce.py | 263 +++++++++++--------------------- 9 files changed, 116 insertions(+), 203 deletions(-) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 014beb2c9..1c476c025 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -1,15 +1,12 @@ from dpgen import dlog from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure from pymatgen.analysis.elasticity.strain import DeformedStructureSet, Strain from pymatgen.analysis.elasticity.stress import Stress from pymatgen.analysis.elasticity.elastic import ElasticTensor from monty.serialization import loadfn, dumpfn -import numpy as np -import os, json, re +import os class Elastic(Property): diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 4a8afe752..35a92739e 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -1,12 +1,9 @@ from dpgen.auto_test.Property import Property -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps from dpgen.auto_test.refine import make_refine from dpgen.auto_test.reproduce import make_repro from dpgen.auto_test.reproduce import post_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import InterstitialGenerator -import numpy as np import os, json from monty.serialization import loadfn,dumpfn diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 4debea231..5a90d72a7 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -1,7 +1,5 @@ import os import warnings -import json -import dpdata import dpgen.auto_test.lib.lammps as lammps from dpgen import dlog from monty.serialization import loadfn, dumpfn diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index af405d86a..4bc6226ab 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -91,14 +91,14 @@ def compute(self, #all_res.append(res) all_res.append(os.path.join(ii, 'result_task.json')) - cwd = os.getcwd() - os.chdir(path_to_work) + #cwd = os.getcwd() + #os.chdir(path_to_work) res, ptr = self._compute_lower(output_file, task_dirs, all_res) # with open(output_file, 'w') as fp: # json.dump(fp, res, indent=4) with open(print_file, 'w') as fp: fp.write(ptr) - os.chdir(cwd) + #os.chdir(cwd) @abstractmethod diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 235ec2167..5def19c43 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -2,7 +2,6 @@ from dpgen.auto_test.refine import make_refine from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps from pymatgen.core.structure import Structure from pymatgen.core.surface import generate_all_slabs from monty.serialization import loadfn, dumpfn diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 531776e1a..6fedfefba 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -4,11 +4,8 @@ from dpgen.auto_test.reproduce import post_repro from pymatgen.core.structure import Structure from pymatgen.analysis.defects.generators import VacancyGenerator -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps from monty.serialization import loadfn, dumpfn from dpgen import dlog -import numpy as np import os, json diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 637395f58..68851b86c 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -78,12 +78,14 @@ def make_equi(confs, dlog.warning('%s already exists' % relax_dirs) else: os.makedirs(relax_dirs) - task_dirs.append(relax_dirs) - os.chdir(relax_dirs) - # copy POSCARs to mp-xxx/relaxation - # ... - os.symlink(os.path.relpath(poscar), 'POSCAR') - os.chdir(cwd) + task_dirs.append(relax_dirs) + os.chdir(relax_dirs) + # copy POSCARs to mp-xxx/relaxation + # ... + if os.path.isfile('POSCAR'): + os.remove('POSCAR') + os.symlink(os.path.relpath(poscar), 'POSCAR') + os.chdir(cwd) task_dirs.sort() # generate task files relax_param['cal_type'] = 'relaxation' @@ -142,11 +144,11 @@ def run_equi(confs, machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) for ii in range(len(work_path_list)): work_path = work_path_list[ii] - disp = make_dispatcher(machine, resources, work_path, run_tasks[ii], group_size) + disp = make_dispatcher(machine, resources, work_path, [run_tasks[ii]], group_size) disp.run_jobs(resources, command, work_path, - run_tasks[ii], + [run_tasks[ii]], group_size, forward_common_files, forward_files, diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 0778a638d..e245a12df 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -1,4 +1,4 @@ -import os,glob +import os, glob from dpgen.auto_test.EOS import EOS from dpgen.auto_test.Elastic import Elastic from dpgen.auto_test.Vacancy import Vacancy @@ -13,6 +13,7 @@ lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] + def make_property_instance(paramters): """ Make an instance of Property @@ -37,8 +38,8 @@ def make_property(confs, property_list): # find all POSCARs and their name like mp-xxx # ... - #conf_dirs = glob.glob(confs) - #conf_dirs.sort() + # conf_dirs = glob.glob(confs) + # conf_dirs.sort() conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) @@ -87,8 +88,8 @@ def run_property(confs, mdata): # find all POSCARs and their name like mp-xxx # ... - #conf_dirs = glob.glob(confs) - #conf_dirs.sort() + # conf_dirs = glob.glob(confs) + # conf_dirs.sort() conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) @@ -159,8 +160,8 @@ def post_property(confs, # find all POSCARs and their name like mp-xxx # ... # task_list = [] - #conf_dirs = glob.glob(confs) - #conf_dirs.sort() + # conf_dirs = glob.glob(confs) + # conf_dirs.sort() conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) @@ -178,4 +179,5 @@ def post_property(confs, property_type = jj['type'] path_to_work = os.path.join(ii, property_type + '_' + suffix) prop = make_property_instance(jj) - prop.compute('result.json', 'result.out', path_to_work) + prop.compute(os.path.join(path_to_work, 'result.json'), os.path.join(path_to_work, 'result.out'), + path_to_work) diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 166c83be9..8a4a59493 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -7,188 +7,109 @@ def make_repro(vasp_lmp_path, path_to_work): - if not os.path.exists(vasp_lmp_path): - raise RuntimeError("please do VASP or LAMMPS calcualtions first") - vasp_lmp_task = glob.glob(os.path.join(vasp_lmp_path, 'task.[0-9]*[0-9]')) - assert len(vasp_lmp_task) > 0, "Please do VASP or LAMMPS calculations first" - vasp_lmp_task.sort() - task_num = 0 - task_list = [] - idid = -1 - for ii in vasp_lmp_task: - idid += 1 - # get energy - task_result = loadfn(os.path.join(ii, 'result_task.json')) - - + path_to_work = os.path.abspath(path_to_work) + vasp_lmp_path_list = glob.glob(vasp_lmp_path) + vasp_lmp_path_list.sort() + cwd = os.getcwd() + struct_init_name_list = [] + for ii in vasp_lmp_path_list: + struct_init_name_list.append(ii.split('/')[-2]) + struct_output_name = path_to_work.split('/')[-2] - outcar = os.path.join(ii, 'OUTCAR') - log_lmp = os.path.join(ii, 'log.lammps') - if os.path.exists(outcar): - energies = vasp.get_energies(outcar) - # get xdat - xdatcar = os.path.join(ii, 'XDATCAR') - os.chdir(path_to_work) - if os.path.exists('XDATCAR'): - os.remove('XDATCAR') - os.symlink(os.path.relpath(xdatcar), 'XDATCAR_'+str('%06d' % idid)) - xdat_lines = open('XDATCAR_'+str('%06d' % idid), 'r').read().split('\n') - natoms = vasp.poscar_natoms('XDATCAR_'+str('%06d' % idid)) - xdat_secsize = natoms + 8 - xdat_nframes = len(xdat_lines) // xdat_secsize - if xdat_nframes > len(energies): - warnings.warn('nframes %d in xdatcar is larger than energy %d, use the last %d frames' % ( - xdat_nframes, len(energies), len(energies))) - xdat_nlines = -1 * len(energies) * xdat_secsize # 06/12 revised - xdat_lines = xdat_lines[xdat_nlines:] - xdat_nframes = len(xdat_lines) // xdat_secsize - print(xdat_nframes, len(energies)) - - # loop over frames - for jj in range(xdat_nframes): - output_task = os.path.join(path_to_work, 'task.%06d' % task_num) - task_num += 1 - task_list.append(output_task) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - # clear dir - for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(kk): - os.remove(kk) - # make conf - with open('POSCAR', 'w') as fp: - fp.write('\n'.join(xdat_lines[jj * xdat_secsize:(jj + 1) * xdat_secsize])) - - elif os.path.exists(log_lmp): - # get dump - dump = os.path.join(ii, 'dump.relax') - if not os.path.exists(dump): - raise FileNotFoundError("the LAMMPS calculations should output the snapshots as dump.relax") - - energies = get_energy_fordump(dump, log_lmp) - - # loop over frames - for jj in range(len(energies)): - output_task = os.path.join(path_to_work, 'task.%06d' % task_num) - task_num += 1 - task_list.append(output_task) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - # clear dir - for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(kk): - os.remove(kk) - - # make conf - d_dump = dpdata.System(dump, fmt='lammps/dump') - d_dump.to('vasp/poscar', 'POSCAR', frame_idx=jj) + assert struct_output_name in struct_init_name_list - return task_list + for idx, ii in enumerate(struct_init_name_list): + if ii == struct_output_name: + label = idx + vasp_lmp_path_todo = vasp_lmp_path_list[label] -def get_energy_fordump(dump, log_lmp): - dump = os.path.basename(dump) - with open(log_lmp, 'r') as fin: - lines = fin.read().split('\n') - for idx, jj in lines: - if dump == jj.split()[5]: - dump_freq = int(jj.split()[4]) - if 'Step PotEng' in jj: - step_idx = idx - if 'Loop time' in jj: - end_idx = idx - energies = [] + if not os.path.exists(vasp_lmp_path_todo): + raise RuntimeError("please do VASP or LAMMPS calcualtions first") - for jj in lines[step_idx + 1, end_idx]: - step = int(jj.split()[0]) - if step % dump_freq == 0: - energies.append(float(jj.split()[1])) + vasp_lmp_task_todo = glob.glob(os.path.join(vasp_lmp_path_todo, 'task.[0-9]*[0-9]')) + assert len(vasp_lmp_task_todo) > 0, "Please do VASP or LAMMPS calculations first" + vasp_lmp_task_todo.sort() - return energies + task_list = [] + task_num = 0 + for ii in vasp_lmp_task_todo: + # get frame number + task_result = loadfn(os.path.join(ii, 'result_task.json')) + nframe = len(task_result['energies']) + for jj in range(nframe): + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + task_num += 1 + task_list.append(output_task) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + # clear dir + for kk in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(kk): + os.remove(kk) + # make conf + task_result.to('vasp/poscar', 'POSCAR', frame_idx=jj) + os.chdir(cwd) + return task_list def post_repro(vasp_lmp_path, all_tasks, ptr_data): - ptr_data += "Reproduce: Initial_path DFT_E(eV/atom) LMP_E(eV/atom) Difference(eV/atom)\n" - vasp_lmp_task = glob.glob(os.path.join(vasp_lmp_path, 'task.[0-9]*[0-9]')) - assert len(vasp_lmp_task) > 0, "Please do VASP or LAMMPS calcualtions first" - vasp_lmp_task.sort() - vasp_ener_tot = [] - lmp_ener_tot = [] + ptr_data += "Reproduce: Initial_path Init_E(eV/atom) Reprod_E(eV/atom) Difference(eV/atom)\n" + struct_output_name = all_tasks[0].split('/')[-3] + vasp_lmp_path_list = glob.glob(vasp_lmp_path) + vasp_lmp_path_list.sort() + # cwd = os.getcwd() + struct_init_name_list = [] + for ii in vasp_lmp_path_list: + struct_init_name_list.append(ii.split('/')[-2]) + + assert struct_output_name in struct_init_name_list + + for idx, ii in enumerate(struct_init_name_list): + if ii == struct_output_name: + label = idx + + vasp_lmp_path_todo = vasp_lmp_path_list[label] + + vasp_lmp_task_todo = glob.glob(os.path.join(vasp_lmp_path_todo, 'task.[0-9]*[0-9]')) + assert len(vasp_lmp_task_todo) > 0, "Please do VASP or LAMMPS calcualtions first" + vasp_lmp_task_todo.sort() + + idid = 0 + init_ener_tot = [] + output_ener_tot = [] res_data = {} - for ii in vasp_lmp_task: - # compute vasp or lammps - outcar = os.path.join(ii, 'OUTCAR') - loglammps = os.path.join(ii, 'log.lammps') - if os.path.exists(outcar): - vasp_ener = np.array(vasp.get_energies(outcar)) - vasp_ener_file = os.path.join(ii, 'ener.vasp.out') - # compute reprod - lmp_ener = [] - - if len(all_tasks) < (len(vasp_ener_tot) + len(vasp_ener)): - raise RuntimeError("lammps tasks reproduced not equal to vasp") - - natoms = 1 - for jj in range(len(vasp_ener_tot), (len(vasp_ener_tot) + len( - vasp_ener))): # all_tasks[len(vasp_ener_tot):(len(vasp_ener_tot) + len(vasp_ener))]: - log_lmp = os.path.join(all_tasks[jj], 'log.lammps') - if not os.path.exists(log_lmp): - raise RuntimeError("lammps reproduce not finished") - natoms, epa, vpa = lammps.get_nev(log_lmp) - lmp_ener.append(epa) - lmp_ener_tot.append(epa) - vasp_epa = list(vasp_ener)[jj - len(vasp_ener_tot)] / natoms - ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, vasp_epa, - epa, epa - vasp_epa) - lmp_ener = np.array(lmp_ener) - lmp_ener = np.reshape(lmp_ener, [-1, 1]) - vasp_ener_tot += list(vasp_ener) - vasp_ener = np.reshape(vasp_ener, [-1, 1]) / natoms - error_start = 1 - lmp_ener -= lmp_ener[-1] - vasp_ener[-1] - diff = lmp_ener - vasp_ener - diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)-1) # start from diff[1], so one element fewer - res_data[ii] = {'nframes': len(vasp_ener), 'error': error} - np.savetxt(vasp_ener_file, vasp_ener[error_start:]) - - elif os.path.exists(loglammps): - dump = os.path.join(ii, 'dump.relax') - lmp_ener = np.array(get_energy_fordump(dump, loglammps)) - lmp_ener_file = os.path.join(ii, 'ener.lammps.out') - # compute reprod - vasp_ener = [] - - if len(all_tasks) < (len(lmp_ener_tot) + len(lmp_ener)): - raise RuntimeError("vasp tasks reproduced not equal to lammps") - - for jj in range(len(lmp_ener_tot), (len(lmp_ener_tot) + len(lmp_ener))): - outcar = os.path.join(all_tasks[jj], 'OUTCAR') - if not os.path.exists(outcar): - raise RuntimeError("vasp reproduce not finished") - natoms, epa, vpa = vasp.get_nev(outcar) - vasp_ener.append(epa) - vasp_ener_tot.append(epa) - lmp_epa = list(lmp_ener)[jj - len(lmp_ener_tot)] / natoms - ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, epa, - lmp_epa, lmp_epa - epa) - - vasp_ener = np.array(vasp_ener) - vasp_ener = np.reshape(vasp_ener, [-1, 1]) - lmp_ener_tot += list(lmp_ener) - lmp_ener = np.reshape(lmp_ener, [-1, 1]) / natoms - # counting error from the first frame - error_start = 0 - lmp_ener -= lmp_ener[-1] - vasp_ener[-1] - diff = lmp_ener - vasp_ener - diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(lmp_ener)) - res_data[ii] = {'nframes': len(lmp_ener), 'error': error} - np.savetxt(lmp_ener_file, lmp_ener[error_start:]) - - if not len(vasp_ener_tot) == len(lmp_ener_tot): - raise RuntimeError("lammps tasks reproduced not equal to vasp") + for ii in vasp_lmp_task_todo: + init_task_result = loadfn(os.path.join(ii, 'result_task.json')) + nframe = len(init_task_result['energies']) + # idid += nframe + natoms = init_task_result['atom_numbs'][0] + init_ener = init_task_result['energies'] + init_ener_tot.extend(list(init_ener)) + output_ener = [] + for jj in range(idid, idid + nframe): + output_task_result = loadfn(os.path.join(all_tasks[jj], 'result_task.json')) + output_epa = output_task_result['energies'] / natoms + output_ener.append(output_epa) + output_ener_tot.extend(output_task_result['energies']) + + init_epa = init_ener[jj - idid] / natoms + ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, init_epa, + output_epa, output_epa - init_epa) + idid += nframe + output_ener = np.array(output_ener) + output_ener = np.reshape(output_ener, [-1, 1]) + init_ener = np.reshape(init_ener, [-1, 1]) / natoms + error_start = 1 + output_ener -= output_ener[-1] - init_ener[-1] + diff = output_ener - init_ener + diff = diff[error_start:] + error = np.linalg.norm(diff) / np.sqrt(np.size(output_ener)-1) + res_data[ii] = {'nframes': len(init_ener), 'error': error} + + if not len(init_ener_tot) == len(output_ener_tot): + raise RuntimeError("reproduce tasks not equal to init") # for ii in range(len(lmp_ener_tot)): # ptr_data += '%7.3f %7.3f %7.3f\n' % (vasp_ener_tot[ii], lmp_ener_tot[ii], # lmp_ener_tot[ii] - vasp_ener_tot[ii]) From a87c1292c1646496d2b503c4c595bc5a67aeb0cd Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 29 Jun 2020 19:47:38 +0800 Subject: [PATCH 072/154] same kpoints for elastic and eos input change --- dpgen/auto_test/EOS.py | 31 ++++++++++++++++++++----------- dpgen/auto_test/Elastic.py | 28 ++++++++++++++++++++++++++++ dpgen/auto_test/Interstitial.py | 6 ++++++ dpgen/auto_test/Property.py | 18 +++++++++++++----- dpgen/auto_test/Surface.py | 6 ++++++ dpgen/auto_test/VASP.py | 2 +- dpgen/auto_test/Vacancy.py | 6 ++++++ dpgen/auto_test/common_prop.py | 2 ++ 8 files changed, 82 insertions(+), 17 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index c07c359df..0f56d332e 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -2,7 +2,7 @@ from dpgen.auto_test.refine import make_refine from dpgen.auto_test import reproduce import dpgen.auto_test.lib.vasp as vasp -from monty.serialization import loadfn,dumpfn +from monty.serialization import loadfn, dumpfn import numpy as np import os, json from dpgen import dlog @@ -20,8 +20,8 @@ def __init__(self, parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": False} + "relax_shape": True, + "relax_vol": False} parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) self.cal_setting = parameter['cal_setting'] else: @@ -39,10 +39,13 @@ def make_confs(self, refine=False): path_to_work = os.path.abspath(path_to_work) if os.path.exists(path_to_work): - dlog.warning('%s already exists' % path_to_work) + dlog.warning('%s already exists' % path_to_work) else: - os.makedirs(path_to_work) + os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): + path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + cwd = os.getcwd() task_list = [] if refine: @@ -59,6 +62,7 @@ def make_confs(self, task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) os.chdir(cwd) else: + print('gen eos from ' + str(self.vol_start) + ' to ' + str(self.vol_end) + ' by every ' + str(self.vol_step)) equi_contcar = os.path.join(path_to_equi, 'CONTCAR') if not os.path.exists(equi_contcar): raise RuntimeError("please do relaxation first") @@ -74,14 +78,18 @@ def make_confs(self, os.remove(ii) task_list.append(output_task) os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') - scale = (vol / vol_to_poscar) ** (1. / 3.) - eos_params={'volume':vol,'scale':scale} - dumpfn(eos_params,'eos.json',indent=4) + # scale = (vol / vol_to_poscar) ** (1. / 3.) + scale = vol ** (1. / 3.) + eos_params = {'volume': vol * vol_to_poscar, 'scale': scale} + dumpfn(eos_params, 'eos.json', indent=4) self.parameter['scale2equi'].append(scale) # 06/22 vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) os.chdir(cwd) return task_list + def post_process(self, task_list): + pass + def task_type(self): return self.parameter['type'] @@ -98,12 +106,13 @@ def _compute_lower(self, if not self.reprod: ptr_data += ' VpA(A^3) EpA(eV)\n' for ii in range(len(all_tasks)): - vol = self.vol_start + ii * self.vol_step + #vol = self.vol_start + ii * self.vol_step + vol = loadfn(os.path.join(all_tasks[ii], 'eos.json'))['volume'] task_result = loadfn(all_res[ii]) res_data[vol] = task_result['energies'][-1] / task_result['atom_numbs'][0] ptr_data += '%7.3f %8.4f \n' % (vol, task_result['energies'][-1] / task_result['atom_numbs'][0]) - #res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) - #ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) + # res_data[vol] = all_res[ii]['energy'] / len(all_res[ii]['force']) + # ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) else: if 'vasp_lmp_path' not in self.parameter: diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 1c476c025..a34e01888 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -7,6 +7,9 @@ from pymatgen.analysis.elasticity.elastic import ElasticTensor from monty.serialization import loadfn, dumpfn import os +from pymatgen.io.vasp import Incar, Kpoints +from dpgen.generator.lib.vasp import incar_upper +import dpgen.auto_test.lib.vasp as vasp class Elastic(Property): @@ -38,6 +41,9 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): + path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + task_list = [] cwd = os.getcwd() @@ -109,6 +115,28 @@ def make_confs(self, os.chdir(cwd) return task_list + def post_process(self, task_list): + cwd = os.getcwd() + poscar_start = os.path.abspath(os.path.join(task_list[0], '..', 'POSCAR')) + os.chdir(os.path.join(task_list[0], '..')) + if os.path.isfile(os.path.join(task_list[0], 'INCAR')): + incar = incar_upper(Incar.from_file(os.path.join(task_list[0], 'INCAR'))) + kspacing = incar.get('KSPACING') + kgamma = incar.get('KGAMMA', False) + ret = vasp.make_kspacing_kpoints(poscar_start, kspacing, kgamma) + kp = Kpoints.from_string(ret) + if os.path.isfile('KPOINTS'): + os.remove('KPOINTS') + kp.write_file("KPOINTS") + os.chdir(cwd) + kpoints_universal = os.path.abspath(os.path.join(task_list[0], '..', 'KPOINTS')) + for ii in task_list: + if os.path.isfile(os.path.join(ii, 'KPOINTS')): + os.remove(os.path.join(ii, 'KPOINTS')) + os.chdir(ii) + os.symlink(os.path.relpath(kpoints_universal), 'KPOINTS') + os.chdir(cwd) + def task_type(self): return self.parameter['type'] diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 35a92739e..a474e2f1b 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -39,6 +39,9 @@ def make_confs(self, refine=False): path_to_work = os.path.abspath(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): + path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + task_list = [] cwd = os.getcwd() @@ -105,6 +108,9 @@ def make_confs(self, return task_list + def post_process(self, task_list): + pass + def task_type(self): return self.parameter['type'] diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index 4bc6226ab..dadebab84 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -15,12 +15,12 @@ def __init__ (self, parameters : dict A dict that defines the property. """ - pass + pass @abstractmethod - def make_confs(self, + def make_confs(self, path_to_work, - path_to_equi, + path_to_equi, refine = False): """ Make configurations needed to compute the property. @@ -44,6 +44,14 @@ def make_confs(self, """ pass + + @abstractmethod + def post_process(self, task_list): + """ + post_process the KPOINTS file in elastic. + """ + pass + @property @abstractmethod def task_type(self): @@ -100,9 +108,9 @@ def compute(self, fp.write(ptr) #os.chdir(cwd) - + @abstractmethod - def _compute_lower(self, + def _compute_lower(self, output_file, all_tasks, all_res): diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 5def19c43..9d369902e 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -47,6 +47,9 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): + path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + task_list = [] cwd = os.getcwd() @@ -105,6 +108,9 @@ def make_confs(self, return task_list + def post_process(self, task_list): + pass + def task_type(self): return self.parameter['type'] diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 0ec2268c8..82edf8ddd 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -151,7 +151,7 @@ def compute(self, return outcar_dict def forward_files(self): - return ['INCAR', 'POSCAR', 'POTCAR'] + return ['INCAR', 'POSCAR', 'KPOINTS', 'POTCAR'] def forward_common_files(self): return ['INCAR', 'POTCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 6fedfefba..40bf5e6d7 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -43,6 +43,9 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): + path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + task_list = [] cwd = os.getcwd() @@ -98,6 +101,9 @@ def make_confs(self, os.chdir(cwd) return task_list + def post_process(self, task_list): + pass + def task_type(self): return self.parameter['type'] diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index e245a12df..052fdc934 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -81,6 +81,8 @@ def make_property(confs, dlog.debug(prop.task_type()) ### debug inter.make_input_file(kk, prop.task_type(), prop.task_param()) + prop.post_process(task_list) # generate same KPOINTS file for elastic when doing VASP + def run_property(confs, inter_param, From 7c3cf467a9d3835a1dd3e8540f572888beff3727 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 30 Jun 2020 01:28:31 +0800 Subject: [PATCH 073/154] fix init_from_suffix, overwrite_interaction, and start_confs_path --- dpgen/auto_test/EOS.py | 58 ++++++++++++++++++++------- dpgen/auto_test/Elastic.py | 45 +++++++++++++++------ dpgen/auto_test/Interstitial.py | 70 ++++++++++++++++++++++++--------- dpgen/auto_test/Lammps.py | 13 ++++++ dpgen/auto_test/Property.py | 29 ++++++++------ dpgen/auto_test/Surface.py | 58 ++++++++++++++++++++------- dpgen/auto_test/Task.py | 19 ++++----- dpgen/auto_test/VASP.py | 23 ++++++++++- dpgen/auto_test/Vacancy.py | 55 ++++++++++++++++++++------ dpgen/auto_test/calculator.py | 13 +++--- dpgen/auto_test/common_equi.py | 10 +++-- dpgen/auto_test/common_prop.py | 17 +++++--- dpgen/auto_test/refine.py | 4 +- dpgen/auto_test/reproduce.py | 20 ++++++---- dpgen/auto_test/run.py | 10 +++-- 15 files changed, 316 insertions(+), 128 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 0f56d332e..8ad3f0f5e 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -1,11 +1,16 @@ -from dpgen.auto_test.Property import Property -from dpgen.auto_test.refine import make_refine -from dpgen.auto_test import reproduce -import dpgen.auto_test.lib.vasp as vasp -from monty.serialization import loadfn, dumpfn +import glob +import json +import os + import numpy as np -import os, json +from monty.serialization import loadfn, dumpfn + +import dpgen.auto_test.lib.vasp as vasp from dpgen import dlog +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test.reproduce import make_repro +from dpgen.auto_test.reproduce import post_repro class EOS(Property): @@ -22,15 +27,32 @@ def __init__(self, default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": False} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' self.cal_type = parameter['cal_type'] - parameter['cal_setting'] = {"relax_pos": False, - "relax_shape": False, - "relax_vol": False} + default_cal_setting = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] + parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') + self.init_from_suffix = parameter['init_from_suffix'] self.parameter = parameter def make_confs(self, @@ -43,8 +65,16 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): - path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + init_path_list = glob.glob(os.path.join(self.parameter['start_confs_path'], '*')) + struct_init_name_list = [] + for ii in init_path_list: + struct_init_name_list.append(ii.split('/')[-1]) + struct_output_name = path_to_work.split('/')[-2] + assert struct_output_name in struct_init_name_list + path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], + struct_output_name, 'relaxation')) cwd = os.getcwd() task_list = [] @@ -59,7 +89,7 @@ def make_confs(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) + task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) os.chdir(cwd) else: print('gen eos from ' + str(self.vol_start) + ' to ' + str(self.vol_end) + ' by every ' + str(self.vol_step)) @@ -106,7 +136,7 @@ def _compute_lower(self, if not self.reprod: ptr_data += ' VpA(A^3) EpA(eV)\n' for ii in range(len(all_tasks)): - #vol = self.vol_start + ii * self.vol_step + # vol = self.vol_start + ii * self.vol_step vol = loadfn(os.path.join(all_tasks[ii], 'eos.json'))['volume'] task_result = loadfn(all_res[ii]) res_data[vol] = task_result['energies'][-1] / task_result['atom_numbs'][0] @@ -118,7 +148,7 @@ def _compute_lower(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_lmp_path, all_tasks, ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index a34e01888..585c4e14f 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -1,31 +1,42 @@ -from dpgen import dlog -from dpgen.auto_test.Property import Property -from dpgen.auto_test.refine import make_refine -from pymatgen.core.structure import Structure +import glob +import os + +from monty.serialization import loadfn, dumpfn +from pymatgen.analysis.elasticity.elastic import ElasticTensor from pymatgen.analysis.elasticity.strain import DeformedStructureSet, Strain from pymatgen.analysis.elasticity.stress import Stress -from pymatgen.analysis.elasticity.elastic import ElasticTensor -from monty.serialization import loadfn, dumpfn -import os +from pymatgen.core.structure import Structure from pymatgen.io.vasp import Incar, Kpoints -from dpgen.generator.lib.vasp import incar_upper + import dpgen.auto_test.lib.vasp as vasp +from dpgen import dlog +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.generator.lib.vasp import incar_upper class Elastic(Property): def __init__(self, parameter): - self.parameter = parameter default_norm_def = 2e-3 default_shear_def = 5e-3 - self.norm_deform = parameter.get('norm_deform', default_norm_def) - self.shear_deform = parameter.get('shear_deform', default_shear_def) + parameter['norm_deform'] = parameter.get('norm_deform', default_norm_def) + self.norm_deform = parameter['norm_deform'] + parameter['shear_deform'] = parameter.get('shear_deform', default_shear_def) + self.shear_deform = parameter['shear_deform'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, "relax_shape": False, "relax_vol": False} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] parameter['reprod-opt'] = False self.reprod = parameter['reprod-opt'] @@ -41,8 +52,16 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): - path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + init_path_list = glob.glob(os.path.join(self.parameter['start_confs_path'], '*')) + struct_init_name_list = [] + for ii in init_path_list: + struct_init_name_list.append(ii.split('/')[-1]) + struct_output_name = path_to_work.split('/')[-2] + assert struct_output_name in struct_init_name_list + path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], + struct_output_name, 'relaxation')) task_list = [] cwd = os.getcwd() diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index a474e2f1b..eca8b3fc1 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -1,11 +1,15 @@ +import glob +import json +import os + +from monty.serialization import loadfn, dumpfn +from pymatgen.analysis.defects.generators import InterstitialGenerator +from pymatgen.core.structure import Structure + from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine from dpgen.auto_test.reproduce import make_repro from dpgen.auto_test.reproduce import post_repro -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.generators import InterstitialGenerator -import os, json -from monty.serialization import loadfn,dumpfn class Interstitial(Property): @@ -20,17 +24,34 @@ def __init__(self, parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, - "relax_shape": True, - "relax_vol": True} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + "relax_shape": True, + "relax_vol": True} + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' self.cal_type = parameter['cal_type'] - parameter['cal_setting'] = {"relax_pos": False, - "relax_shape": False, - "relax_vol": False} + default_cal_setting = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] + parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') + self.init_from_suffix = parameter['init_from_suffix'] self.parameter = parameter def make_confs(self, @@ -39,20 +60,28 @@ def make_confs(self, refine=False): path_to_work = os.path.abspath(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): - path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + init_path_list = glob.glob(os.path.join(self.parameter['start_confs_path'], '*')) + struct_init_name_list = [] + for ii in init_path_list: + struct_init_name_list.append(ii.split('/')[-1]) + struct_output_name = path_to_work.split('/')[-2] + assert struct_output_name in struct_init_name_list + path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], + struct_output_name, 'relaxation')) task_list = [] cwd = os.getcwd() - + if self.reprod: print('interstitial reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, path_to_work) + task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) os.chdir(cwd) - + else: equi_contcar = os.path.join(path_to_equi, 'CONTCAR') if not os.path.exists(equi_contcar): @@ -102,7 +131,7 @@ def make_confs(self, os.remove(jj) task_list.append(output_task) dss[ii].to('POSCAR', 'POSCAR') - #np.savetxt('supercell.out', self.supercell, fmt='%d') + # np.savetxt('supercell.out', self.supercell, fmt='%d') dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) @@ -140,15 +169,18 @@ def _compute_lower(self, supercell_index = loadfn(os.path.join(ii, 'supercell.json')) insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] - ptr_data += "%s: %7.3f %7.3f %7.3f \n" % (insert_ele+'-'+str(supercell_index)+'-'+structure_dir, evac, - task_result['energies'][-1], equi_epa * natoms) - res_data[insert_ele+'-'+str(supercell_index)+'-'+structure_dir] = [evac, task_result['energies'][-1], equi_epa * natoms] + ptr_data += "%s: %7.3f %7.3f %7.3f \n" % ( + insert_ele + '-' + str(supercell_index) + '-' + structure_dir, evac, + task_result['energies'][-1], equi_epa * natoms) + res_data[insert_ele + '-' + str(supercell_index) + '-' + structure_dir] = [evac, + task_result['energies'][-1], + equi_epa * natoms] else: if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, all_tasks, ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 5a90d72a7..9e0daabb7 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -120,6 +120,19 @@ def make_input_file(self, fc = fin.read() else: + if 'etol' in cal_setting: + dlog.info("%s setting etol to %s" % (self.make_input_file.__name__, cal_setting['etol'])) + etol = cal_setting['etol'] + if 'ftol' in cal_setting: + dlog.info("%s setting ftol to %s" % (self.make_input_file.__name__, cal_setting['ftol'])) + ftol = cal_setting['ftol'] + if 'maxiter' in cal_setting: + dlog.info("%s setting maxiter to %s" % (self.make_input_file.__name__, cal_setting['maxiter'])) + maxiter = cal_setting['maxiter'] + if 'maxeval' in cal_setting: + dlog.info("%s setting maxeval to %s" % (self.make_input_file.__name__, cal_setting['maxeval'])) + maxeval = cal_setting['maxeval'] + if cal_type == 'relaxation': relax_pos = cal_setting['relax_pos'] relax_shape = cal_setting['relax_shape'] diff --git a/dpgen/auto_test/Property.py b/dpgen/auto_test/Property.py index dadebab84..3d1de3350 100644 --- a/dpgen/auto_test/Property.py +++ b/dpgen/auto_test/Property.py @@ -1,12 +1,17 @@ -import os,glob,json -from abc import ABC,abstractmethod +import glob +import json +import os +from abc import ABC, abstractmethod + +from monty.serialization import dumpfn + from dpgen.auto_test.calculator import make_calculator -from monty.serialization import loadfn, dumpfn -class Property (ABC) : + +class Property(ABC): @abstractmethod - def __init__ (self, - parameter) : + def __init__(self, + parameter): """ Constructor @@ -21,7 +26,7 @@ def __init__ (self, def make_confs(self, path_to_work, path_to_equi, - refine = False): + refine=False): """ Make configurations needed to compute the property. The tasks directory will be named as path_to_work/task.xxxxxx @@ -44,7 +49,6 @@ def make_confs(self, """ pass - @abstractmethod def post_process(self, task_list): """ @@ -96,18 +100,17 @@ def compute(self, task = make_calculator(idata, poscar) res = task.compute(ii) dumpfn(res, os.path.join(ii, 'result_task.json'), indent=4) - #all_res.append(res) + # all_res.append(res) all_res.append(os.path.join(ii, 'result_task.json')) - #cwd = os.getcwd() - #os.chdir(path_to_work) + # cwd = os.getcwd() + # os.chdir(path_to_work) res, ptr = self._compute_lower(output_file, task_dirs, all_res) # with open(output_file, 'w') as fp: # json.dump(fp, res, indent=4) with open(print_file, 'w') as fp: fp.write(ptr) - #os.chdir(cwd) - + # os.chdir(cwd) @abstractmethod def _compute_lower(self, diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 9d369902e..4cff04ea0 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -1,13 +1,18 @@ -from dpgen.auto_test.Property import Property -from dpgen.auto_test.refine import make_refine -from dpgen.auto_test import reproduce -import dpgen.auto_test.lib.vasp as vasp +import glob +import json +import os + +import numpy as np +from monty.serialization import loadfn, dumpfn from pymatgen.core.structure import Structure from pymatgen.core.surface import generate_all_slabs -from monty.serialization import loadfn, dumpfn + +import dpgen.auto_test.lib.vasp as vasp from dpgen import dlog -import numpy as np -import os, json +from dpgen.auto_test.Property import Property +from dpgen.auto_test.refine import make_refine +from dpgen.auto_test.reproduce import make_repro +from dpgen.auto_test.reproduce import post_repro class Surface(Property): @@ -26,15 +31,32 @@ def __init__(self, default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": False} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' self.cal_type = parameter['cal_type'] - parameter['cal_setting'] = {"relax_pos": False, - "relax_shape": False, - "relax_vol": False} + default_cal_setting = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] + parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') + self.init_from_suffix = parameter['init_from_suffix'] self.parameter = parameter def make_confs(self, @@ -47,8 +69,16 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): - path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + init_path_list = glob.glob(os.path.join(self.parameter['start_confs_path'], '*')) + struct_init_name_list = [] + for ii in init_path_list: + struct_init_name_list.append(ii.split('/')[-1]) + struct_output_name = path_to_work.split('/')[-2] + assert struct_output_name in struct_init_name_list + path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], + struct_output_name, 'relaxation')) task_list = [] cwd = os.getcwd() @@ -58,7 +88,7 @@ def make_confs(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = reproduce.make_repro(vasp_lmp_path, path_to_work) + task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) os.chdir(cwd) else: @@ -150,7 +180,7 @@ def _compute_lower(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = reproduce.post_repro(vasp_lmp_path, all_tasks, ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Task.py b/dpgen/auto_test/Task.py index bd4cae3fa..c04aac586 100644 --- a/dpgen/auto_test/Task.py +++ b/dpgen/auto_test/Task.py @@ -1,10 +1,11 @@ -from abc import ABC,abstractmethod +from abc import ABC, abstractmethod + class Task(ABC): @abstractmethod - def __init__ (self, - inter_parameter, - path_to_poscar) : + def __init__(self, + inter_parameter, + path_to_poscar): """ Constructor @@ -18,7 +19,7 @@ def __init__ (self, pass @abstractmethod - def make_potential_files(self, + def make_potential_files(self, output_dir): """ Prepare potential files for a computational task. @@ -39,8 +40,8 @@ def make_potential_files(self, @abstractmethod def make_input_file(self, - output_dir, - task_type, + output_dir, + task_type, task_param): """ Prepare input files for a computational task @@ -63,8 +64,8 @@ def make_input_file(self, pass @abstractmethod - def compute (self, - output_dir): + def compute(self, + output_dir): """ Compute output of the task. IMPORTANT: The output configuration should be converted and stored in a CONTCAR file. diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 82edf8ddd..69ce55e62 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -1,12 +1,11 @@ import os -import json from dpgen import dlog from dpgen.util import sepline import dpgen.auto_test.lib.vasp as vasp from dpgen.auto_test.Task import Task from dpgen.generator.lib.vasp import incar_upper from dpdata import LabeledSystem -from monty.serialization import loadfn, dumpfn +from monty.serialization import dumpfn from pymatgen.io.vasp import Incar, Kpoints from pymatgen.core.structure import Structure @@ -106,6 +105,26 @@ def make_input_file(self, else: raise RuntimeError("not supported calculation type for VASP") + if 'ediff' in cal_setting: + dlog.info("%s setting EDIFF to %s" % (self.make_input_file.__name__, cal_setting['ediff'])) + incar['EDIFF'] = cal_setting['ediff'] + + if 'ediffg' in cal_setting: + dlog.info("%s setting EDIFFG to %s" % (self.make_input_file.__name__, cal_setting['ediffg'])) + incar['EDIFFG'] = cal_setting['ediffg'] + + if 'encut' in cal_setting: + dlog.info("%s setting ENCUT to %s" % (self.make_input_file.__name__, cal_setting['encut'])) + incar['ENCUT'] = cal_setting['encut'] + + if 'kspacing' in cal_setting: + dlog.info("%s setting KSAPCING to %s" % (self.make_input_file.__name__, cal_setting['kspacing'])) + incar['KSAPCING'] = cal_setting['kspacing'] + + if 'kgamma' in cal_setting: + dlog.info("%s setting KGAMMA to %s" % (self.make_input_file.__name__, cal_setting['kgamma'])) + incar['KGAMMA'] = cal_setting['kgamma'] + try: kspacing = incar.get('KSPACING') except KeyError: diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 40bf5e6d7..c8bb3b806 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -1,12 +1,16 @@ +import glob +import json +import os + +from monty.serialization import loadfn, dumpfn +from pymatgen.analysis.defects.generators import VacancyGenerator +from pymatgen.core.structure import Structure + +from dpgen import dlog from dpgen.auto_test.Property import Property from dpgen.auto_test.refine import make_refine from dpgen.auto_test.reproduce import make_repro from dpgen.auto_test.reproduce import post_repro -from pymatgen.core.structure import Structure -from pymatgen.analysis.defects.generators import VacancyGenerator -from monty.serialization import loadfn, dumpfn -from dpgen import dlog -import os, json class Vacancy(Property): @@ -22,15 +26,32 @@ def __init__(self, default_cal_setting = {"relax_pos": True, "relax_shape": True, "relax_vol": True} - parameter['cal_setting'] = parameter.get('cal_setting', default_cal_setting) + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' self.cal_type = parameter['cal_type'] - parameter['cal_setting'] = {"relax_pos": False, - "relax_shape": False, - "relax_vol": False} + default_cal_setting = {"relax_pos": False, + "relax_shape": False, + "relax_vol": False} + if 'cal_setting' not in parameter: + parameter['cal_setting'] = default_cal_setting + elif "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + elif "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + elif "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] + parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') + self.init_from_suffix = parameter['init_from_suffix'] self.parameter = parameter def make_confs(self, @@ -43,18 +64,26 @@ def make_confs(self, else: os.makedirs(path_to_work) path_to_equi = os.path.abspath(path_to_equi) + if 'start_confs_path' in self.parameter and os.path.exists(self.parameter['start_confs_path']): - path_to_equi = os.path.abspath(self.parameter['start_confs_path']) + init_path_list = glob.glob(os.path.join(self.parameter['start_confs_path'], '*')) + struct_init_name_list = [] + for ii in init_path_list: + struct_init_name_list.append(ii.split('/')[-1]) + struct_output_name = path_to_work.split('/')[-2] + assert struct_output_name in struct_init_name_list + path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], + struct_output_name, 'relaxation')) task_list = [] cwd = os.getcwd() if self.reprod: - print('interstitial reproduce starts') + print('vacancy reproduce starts') if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, path_to_work) + task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) os.chdir(cwd) else: @@ -141,7 +170,7 @@ def _compute_lower(self, if 'vasp_lmp_path' not in self.parameter: raise RuntimeError("please provide the vasp_lmp_path for reproduction") vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, all_tasks, ptr_data) + res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/calculator.py b/dpgen/auto_test/calculator.py index b9204ba19..f2ffff20c 100644 --- a/dpgen/auto_test/calculator.py +++ b/dpgen/auto_test/calculator.py @@ -1,10 +1,9 @@ -import os from dpgen.auto_test.VASP import VASP -from dpgen.auto_test.Lammps import Lammps +from dpgen.auto_test.Lammps import Lammps def make_calculator(inter_parameter, - path_to_poscar): + path_to_poscar): """ Make an instance of Task """ @@ -13,10 +12,8 @@ def make_calculator(inter_parameter, return VASP(inter_parameter, path_to_poscar) elif inter_type in ['deepmd', 'meam', 'eam_fs', 'eam_alloy']: return Lammps(inter_parameter, path_to_poscar) -# if inter_type == 'siesta': -# return Siesta(inter_parameter, path_to_poscar) -# pass + # if inter_type == 'siesta': + # return Siesta(inter_parameter, path_to_poscar) + # pass else: raise RuntimeError(f'unsupported interaction {inter_type}') - - diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 68851b86c..d559f5317 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -1,13 +1,15 @@ +import glob import os + +from monty.serialization import dumpfn + import dpgen.auto_test.lib.crys as crys -import glob, warnings, json import dpgen.auto_test.lib.util as util from dpgen import dlog -from dpgen.dispatcher.Dispatcher import make_dispatcher from dpgen.auto_test.calculator import make_calculator -from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine from dpgen.auto_test.mpdb import get_structure -from monty.serialization import loadfn, dumpfn +from dpgen.dispatcher.Dispatcher import make_dispatcher +from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 052fdc934..2296364ff 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -1,13 +1,14 @@ -import os, glob +import glob +import os + +import dpgen.auto_test.lib.util as util +from dpgen import dlog from dpgen.auto_test.EOS import EOS from dpgen.auto_test.Elastic import Elastic -from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.Interstitial import Interstitial from dpgen.auto_test.Surface import Surface +from dpgen.auto_test.Vacancy import Vacancy from dpgen.auto_test.calculator import make_calculator -from dpgen import dlog - -import dpgen.auto_test.lib.util as util from dpgen.dispatcher.Dispatcher import make_dispatcher from dpgen.remote.decide_machine import decide_fp_machine, decide_model_devi_machine @@ -74,9 +75,13 @@ def make_property(confs, prop = make_property_instance(jj) task_list = prop.make_confs(path_to_work, path_to_equi, do_refine) + inter_param_prop = inter_param + if 'cal_setting' in jj and 'overwrite_interaction' in jj['cal_setting']: + inter_param_prop = jj['cal_setting']['overwrite_interaction'] + for kk in task_list: poscar = os.path.join(kk, 'POSCAR') - inter = make_calculator(inter_param, poscar) + inter = make_calculator(inter_param_prop, poscar) inter.make_potential_files(kk) dlog.debug(prop.task_type()) ### debug inter.make_input_file(kk, prop.task_type(), prop.task_param()) diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index 35f7a7b7e..c6d00bba2 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -1,4 +1,6 @@ -import os, re, glob +import glob +import os +import re def make_refine(init_from_suffix, output_suffix, path_to_work): diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 8a4a59493..38aaa4dbf 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -1,13 +1,14 @@ -import os, glob, warnings -import dpgen.auto_test.lib.vasp as vasp -import dpgen.auto_test.lib.lammps as lammps +import glob +import os + import numpy as np -import dpdata -from monty.serialization import loadfn, dumpfn +from monty.serialization import loadfn -def make_repro(vasp_lmp_path, path_to_work): +def make_repro(vasp_lmp_path, init_from_suffix, path_to_work): path_to_work = os.path.abspath(path_to_work) + property_type = path_to_work.split('/')[-1].split('_')[0] + vasp_lmp_path = os.path.join(vasp_lmp_path, '*', property_type + '_' + init_from_suffix) vasp_lmp_path_list = glob.glob(vasp_lmp_path) vasp_lmp_path_list.sort() cwd = os.getcwd() @@ -53,9 +54,12 @@ def make_repro(vasp_lmp_path, path_to_work): return task_list -def post_repro(vasp_lmp_path, all_tasks, ptr_data): + +def post_repro(vasp_lmp_path, init_from_suffix, all_tasks, ptr_data): ptr_data += "Reproduce: Initial_path Init_E(eV/atom) Reprod_E(eV/atom) Difference(eV/atom)\n" struct_output_name = all_tasks[0].split('/')[-3] + property_type = all_tasks[0].split('/')[-2].split('_')[0] + vasp_lmp_path = os.path.join(vasp_lmp_path, '*', property_type + '_' + init_from_suffix) vasp_lmp_path_list = glob.glob(vasp_lmp_path) vasp_lmp_path_list.sort() # cwd = os.getcwd() @@ -105,7 +109,7 @@ def post_repro(vasp_lmp_path, all_tasks, ptr_data): output_ener -= output_ener[-1] - init_ener[-1] diff = output_ener - init_ener diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(output_ener)-1) + error = np.linalg.norm(diff) / np.sqrt(np.size(output_ener) - 1) res_data[ii] = {'nframes': len(init_ener), 'error': error} if not len(init_ener_tot) == len(output_ener_tot): diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 61f06e776..1fedb7f10 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -1,11 +1,13 @@ #!/usr/bin/env python3 -import argparse import logging + +from monty.serialization import loadfn + from dpgen import dlog -from monty.serialization import loadfn,dumpfn -from dpgen.auto_test.common_prop import make_property,run_property,post_property -from dpgen.auto_test.common_equi import make_equi,run_equi,post_equi +from dpgen.auto_test.common_equi import make_equi, run_equi, post_equi +from dpgen.auto_test.common_prop import make_property, run_property, post_property + #lammps_task_type = ['deepmd', 'meam', 'eam_fs', 'eam_alloy'] From 39c88c75d388b8bcdc7cfb5b9ff24962d6e5d624 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 30 Jun 2020 15:41:38 +0800 Subject: [PATCH 074/154] run equi and property minor changes --- dpgen/auto_test/Interstitial.py | 3 +- dpgen/auto_test/Surface.py | 3 +- dpgen/auto_test/Vacancy.py | 3 +- dpgen/auto_test/common_equi.py | 15 +++++-- dpgen/auto_test/common_prop.py | 78 +++++++++++++++++---------------- 5 files changed, 57 insertions(+), 45 deletions(-) diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index eca8b3fc1..8702e9371 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -19,7 +19,8 @@ def __init__(self, self.reprod = parameter['reprod-opt'] if not self.reprod: default_supercell = [1, 1, 1] - self.supercell = parameter.get('supercell', default_supercell) + parameter['supercell'] = parameter.get('supercell', default_supercell) + self.supercell = parameter['supercell'] self.insert_ele = parameter['insert_ele'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 4cff04ea0..3d21d3909 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -25,7 +25,8 @@ def __init__(self, self.min_vacuum_size = parameter['min_vacuum_size'] self.pert_xz = parameter['pert_xz'] default_max_miller = 2 - self.miller = parameter.get('max_miller', default_max_miller) + parameter['max_miller'] = parameter.get('max_miller', default_max_miller) + self.miller = parameter['max_miller'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index c8bb3b806..aec8ac87b 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -20,7 +20,8 @@ def __init__(self, self.reprod = parameter['reprod-opt'] if not self.reprod: default_supercell = [1, 1, 1] - self.supercell = parameter.get('supercell', default_supercell) + parameter['supercell'] = parameter.get('supercell', default_supercell) + self.supercell = parameter['supercell'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index d559f5317..2a9971437 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -95,6 +95,13 @@ def make_equi(confs, relax_param['cal_setting'] = {"relax_pos": True, "relax_shape": True, "relax_vol": True} + elif "relax_pos" not in relax_param['cal_setting']: + relax_param['cal_setting']['relax_pos'] = True + elif "relax_shape" not in relax_param['cal_setting']: + relax_param['cal_setting']['relax_shape'] = True + elif "relax_vol" not in relax_param['cal_setting']: + relax_param['cal_setting']['relax_vol'] = True + for ii in task_dirs: poscar = os.path.join(ii, 'POSCAR') dlog.debug('task_dir %s' % ii) @@ -132,10 +139,10 @@ def run_equi(confs, # dispatch the tasks # POSCAR here is useless - virutual_calculator = make_calculator(inter_param, "POSCAR") - forward_files = virutual_calculator.forward_files() - forward_common_files = virutual_calculator.forward_common_files() - backward_files = virutual_calculator.backward_files() + virtual_calculator = make_calculator(inter_param, "POSCAR") + forward_files = virtual_calculator.forward_files() + forward_common_files = virtual_calculator.forward_common_files() + backward_files = virtual_calculator.backward_files() # backward_files += logs # ... run_tasks = util.collect_task(all_task, inter_type) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 2296364ff..dd38259ad 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -115,51 +115,53 @@ def run_property(confs, suffix = '00' property_type = jj['type'] - path_to_work = os.path.join(ii, property_type + '_' + suffix) + path_to_work = os.path.abspath(os.path.join(ii, property_type + '_' + suffix)) work_path_list.append(path_to_work) tmp_task_list = glob.glob(os.path.join(path_to_work, 'task.[0-9]*[0-9]')) tmp_task_list.sort() task_list.append(tmp_task_list) - # dispatch the tasks - # POSCAR here is useless - virutual_calculator = make_calculator(inter_param, "POSCAR") - forward_files = virutual_calculator.forward_files() - forward_common_files = virutual_calculator.forward_common_files() - backward_files = virutual_calculator.backward_files() - # backward_files += logs - # ... - inter_type = inter_param['type'] - # vasp - if inter_type == "vasp": - mdata = decide_fp_machine(mdata) - elif inter_type in lammps_task_type: - mdata = decide_model_devi_machine(mdata) - else: - raise RuntimeError("unknown task %s, something wrong" % inter_type) - - for ii in range(len(work_path_list)): - work_path = work_path_list[ii] - all_task = task_list[ii] - run_tasks = util.collect_task(all_task, inter_type) - if len(run_tasks) == 0: - return - else: - run_tasks = [os.path.basename(ii) for ii in all_task] - machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - forward_common_files, - forward_files, - backward_files, - outlog='outlog', - errlog='errlog') + inter_param_prop = inter_param + if 'cal_setting' in jj and 'overwrite_interaction' in jj['cal_setting']: + inter_param_prop = jj['cal_setting']['overwrite_interaction'] + # dispatch the tasks + # POSCAR here is useless + virtual_calculator = make_calculator(inter_param_prop, "POSCAR") + forward_files = virtual_calculator.forward_files() + forward_common_files = virtual_calculator.forward_common_files() + backward_files = virtual_calculator.backward_files() + # backward_files += logs + # ... + inter_type = inter_param_prop['type'] + # vasp + if inter_type == "vasp": + mdata = decide_fp_machine(mdata) + elif inter_type in lammps_task_type: + mdata = decide_model_devi_machine(mdata) + else: + raise RuntimeError("unknown task %s, something wrong" % inter_type) + + work_path = path_to_work + all_task = tmp_task_list + run_tasks = util.collect_task(all_task, inter_type) + if len(run_tasks) == 0: + return + else: + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks, + group_size, + forward_common_files, + forward_files, + backward_files, + outlog='outlog', + errlog='errlog') def post_property(confs, # inter_param, From 26b5f09a128e514f95878706378cf98f114fbffd Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 30 Jun 2020 16:07:10 +0800 Subject: [PATCH 075/154] back to atest-refact --- dpgen/data/tools/poscar_copy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/data/tools/poscar_copy.py b/dpgen/data/tools/poscar_copy.py index 0d76a7d02..19db01962 100755 --- a/dpgen/data/tools/poscar_copy.py +++ b/dpgen/data/tools/poscar_copy.py @@ -20,7 +20,7 @@ def copy_system (ncopy, fin, fout) : replicate_z = True ) node.modifiers.append(pbc) - node.compute(, + node.compute() export_file(node, fout, 'vasp') parser = argparse.ArgumentParser( From 040a34bb1379129609bc1df1a9b4bf63bcab1e4e Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 30 Jun 2020 17:20:49 +0800 Subject: [PATCH 076/154] fix bug unittest --- dpgen/auto_test/Lammps.py | 2 +- dpgen/data/tools/poscar_copy.py | 2 +- tests/auto_test/test_mpdb.py | 17 ++++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 9e0daabb7..ccaa5524b 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -42,7 +42,7 @@ def set_model_param(self): if self.inter_type == "deepmd": model_name = os.path.basename(self.model) - deepmd_version = self.inter.get("deepmd_version", "0.12") + deepmd_version = self.inter.get("deepmd_version", "1.2.0") self.model_param = {'model_name': [model_name], 'param_type': self.type_map, 'deepmd_version': deepmd_version} diff --git a/dpgen/data/tools/poscar_copy.py b/dpgen/data/tools/poscar_copy.py index 0d76a7d02..19db01962 100755 --- a/dpgen/data/tools/poscar_copy.py +++ b/dpgen/data/tools/poscar_copy.py @@ -20,7 +20,7 @@ def copy_system (ncopy, fin, fout) : replicate_z = True ) node.modifiers.append(pbc) - node.compute(, + node.compute() export_file(node, fout, 'vasp') parser = argparse.ArgumentParser( diff --git a/tests/auto_test/test_mpdb.py b/tests/auto_test/test_mpdb.py index 6af93075a..8323d77b0 100644 --- a/tests/auto_test/test_mpdb.py +++ b/tests/auto_test/test_mpdb.py @@ -11,6 +11,12 @@ from .context import setUpModule from dpgen.auto_test.mpdb import get_structure +try: + os.environ['MAPI_KEY'] + exist_key=True +except: + exist_key=False + def fit(struct0,struct1) : m = StructureMatcher() @@ -18,6 +24,7 @@ def fit(struct0,struct1) : return True return False +@unittest.skipIf(not exist_key,"skip mpdb") class TestMpdb(unittest.TestCase): def setUp(self): @@ -35,10 +42,6 @@ def tearDown(self): os.remove(self.st_file) def test_get_structure (self): - if self.key: - st1=get_structure(self.mpid) - st0=Structure.from_file(self.st0_file) - self.assertTrue(fit(st0,st1)) - else: - with self.assertRaises(RuntimeError): - self.assertError(get_structure(self.mpid)) + st1=get_structure(self.mpid) + st0=Structure.from_file(self.st0_file) + self.assertTrue(fit(st0,st1)) From b7e4ab3877fbb886f10b6dac52ac56dce006edb3 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 30 Jun 2020 17:24:51 +0800 Subject: [PATCH 077/154] fix bug lammps cmd --- dpgen/auto_test/lib/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/lib/util.py b/dpgen/auto_test/lib/util.py index 316d33e13..0a86287fd 100644 --- a/dpgen/auto_test/lib/util.py +++ b/dpgen/auto_test/lib/util.py @@ -81,7 +81,7 @@ def get_machine_info(mdata,task_type): group_size = mdata['model_devi_group_size'] resources = mdata['model_devi_resources'] machine=mdata['model_devi_machine'] - command = lmp_exec + " -i lammps.in" + command = lmp_exec + " -i in.lammps" command = cmd_append_log(command, "model_devi.log") return machine, resources, command, group_size From b01669227b7ed878b759c51c7428ecde62159e31 Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 30 Jun 2020 18:21:00 +0800 Subject: [PATCH 078/154] update print info --- dpgen/auto_test/common_equi.py | 2 ++ dpgen/auto_test/common_prop.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 2a9971437..09b95fa33 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -151,9 +151,11 @@ def run_equi(confs, else: run_tasks = [os.path.basename(ii) for ii in all_task] machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + print('%d tasks will be submited '%len(run_tasks)) for ii in range(len(work_path_list)): work_path = work_path_list[ii] disp = make_dispatcher(machine, resources, work_path, [run_tasks[ii]], group_size) + print("%s --> Runing... "%(work_path)) disp.run_jobs(resources, command, work_path, diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index dd38259ad..36a202354 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -3,6 +3,7 @@ import dpgen.auto_test.lib.util as util from dpgen import dlog +from dpgen.util import sepline from dpgen.auto_test.EOS import EOS from dpgen.auto_test.Elastic import Elastic from dpgen.auto_test.Interstitial import Interstitial @@ -46,6 +47,7 @@ def make_property(confs, conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() for ii in conf_dirs: + sepline(ch=ii,screen=True) for jj in property_list: if 'init_from_suffix' and 'output_suffix' in jj: do_refine = True From 423d0a0bef9e01e1f8f382d07023a17a74e10a26 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 30 Jun 2020 21:09:30 +0800 Subject: [PATCH 079/154] add lammps input for relaxation --- dpgen/auto_test/Lammps.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 9e0daabb7..07f50c0c6 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -16,6 +16,7 @@ def __init__(self, self.inter = inter_parameter self.inter_type = inter_parameter['type'] self.type_map = inter_parameter['type_map'] + self.in_lammps = inter_parameter.get('in_lammps', 'auto') if self.type_map == 'meam': self.model = list(map(os.path.abspath, inter_parameter['model'])) else: @@ -114,6 +115,10 @@ def make_input_file(self, self.set_model_param() + # deal with user input in.lammps for relaxation + if os.path.isfile(self.in_lammps) and task_type == 'relaxation': + with open(self.in_lammps, 'r') as fin: + fc = fin.read() # user input in.lammps for property calculation if 'input_prop' in cal_setting and os.path.isfile(cal_setting['input_prop']): with open(os.path.abspath(cal_setting['input_prop']), 'r') as fin: From f8f66bb50cdc545baf3f9c39e1f5d12c2d1f2ffe Mon Sep 17 00:00:00 2001 From: haidi Date: Tue, 30 Jun 2020 23:09:39 +0800 Subject: [PATCH 080/154] update util.py --- dpgen/util.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dpgen/util.py b/dpgen/util.py index efff97398..aa805e7e5 100644 --- a/dpgen/util.py +++ b/dpgen/util.py @@ -10,12 +10,14 @@ # constants define MaxLength=70 - -def sepline(ch='-',sp='-'): +def sepline(ch='-',sp='-',screen=False): r''' seperate the output by '-' ''' - dlog.info(ch.center(MaxLength,sp)) + if screen: + print(ch.center(MaxLength,sp)) + else: + dlog.info(ch.center(MaxLength,sp)) def box_center(ch='',fill=' ',sp="|"): r''' From fc1f00056c035990a57397ca2f62cf0669c0f484 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 1 Jul 2020 14:25:57 +0800 Subject: [PATCH 081/154] deal with dispatcher and set links --- dpgen/auto_test/EOS.py | 2 +- dpgen/auto_test/Elastic.py | 2 +- dpgen/auto_test/Interstitial.py | 4 +- dpgen/auto_test/Lammps.py | 49 ++++++++++++++++++------ dpgen/auto_test/Surface.py | 4 +- dpgen/auto_test/VASP.py | 68 ++++++++++++++++++++++++++------- dpgen/auto_test/Vacancy.py | 4 +- dpgen/auto_test/common_equi.py | 14 +++---- dpgen/auto_test/common_prop.py | 14 +++++-- dpgen/auto_test/refine.py | 2 +- 10 files changed, 119 insertions(+), 44 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 8ad3f0f5e..d53a74530 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -74,7 +74,7 @@ def make_confs(self, struct_output_name = path_to_work.split('/')[-2] assert struct_output_name in struct_init_name_list path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], - struct_output_name, 'relaxation')) + struct_output_name, 'relaxation', 'relax_task')) cwd = os.getcwd() task_list = [] diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 585c4e14f..472a439f4 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -61,7 +61,7 @@ def make_confs(self, struct_output_name = path_to_work.split('/')[-2] assert struct_output_name in struct_init_name_list path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], - struct_output_name, 'relaxation')) + struct_output_name, 'relaxation', 'relax_task')) task_list = [] cwd = os.getcwd() diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 8702e9371..f18ec2ed1 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -70,7 +70,7 @@ def make_confs(self, struct_output_name = path_to_work.split('/')[-2] assert struct_output_name in struct_init_name_list path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], - struct_output_name, 'relaxation')) + struct_output_name, 'relaxation', 'relax_task')) task_list = [] cwd = os.getcwd() @@ -163,7 +163,7 @@ def _compute_lower(self, structure_dir = os.path.basename(ii) task_result = loadfn(all_res[idid]) natoms = task_result['atom_numbs'][0] - equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation/relax_task')) equi_result = loadfn(os.path.join(equi_path, 'result.json')) equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] evac = task_result['energies'][-1] - equi_epa * natoms diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 07f50c0c6..11cf9080c 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -62,7 +62,7 @@ def make_potential_files(self, if self.inter_type == 'meam': model_lib = os.path.basename(self.model[0]) model_file = os.path.basename(self.model[1]) - os.chdir(output_dir) + os.chdir(os.path.join(output_dir, '../')) if os.path.islink(model_lib): link_lib = os.readlink(model_lib) if not os.path.abspath(link_lib) == self.model[0]: @@ -78,11 +78,23 @@ def make_potential_files(self, os.symlink(os.path.relpath(self.model[1]), model_file) else: os.symlink(os.path.relpath(self.model[1]), model_file) - + os.chdir(output_dir) + if not os.path.islink(model_lib): + os.symlink(os.path.join('..', model_lib), model_lib) + elif not os.path.join('..', model_lib) == os.readlink(model_lib): + os.remove(model_lib) + os.symlink(os.path.join('..', model_lib), model_lib) + + if not os.path.islink(model_file): + os.symlink(os.path.join('..', model_file), model_file) + elif not os.path.join('..', model_file) == os.readlink(model_file): + os.remove(model_file) + os.symlink(os.path.join('..', model_file), model_file) os.chdir(cwd) + else: model_file = os.path.basename(self.model) - os.chdir(output_dir) + os.chdir(os.path.join(output_dir, '../')) if os.path.islink(model_file): link_file = os.readlink(model_file) if not os.path.abspath(link_file) == self.model: @@ -90,6 +102,12 @@ def make_potential_files(self, os.symlink(os.path.relpath(self.model), model_file) else: os.symlink(os.path.relpath(self.model), model_file) + os.chdir(output_dir) + if not os.path.islink(model_file): + os.symlink(os.path.join('..', model_file), model_file) + elif not os.path.join('..', model_file) == os.readlink(model_file): + os.remove(model_file) + os.symlink(os.path.join('..', model_file), model_file) os.chdir(cwd) dumpfn(self.inter, os.path.join(output_dir, 'inter.json'), indent=4) @@ -170,8 +188,16 @@ def make_input_file(self, else: raise RuntimeError("not supported calculation type for LAMMPS") - with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + with open(os.path.join(output_dir, '../in.lammps'), 'w') as fp: fp.write(fc) + cwd = os.getcwd() + os.chdir(output_dir) + if not os.path.islink('in.lammps'): + os.symlink('../in.lammps', 'in.lammps') + elif not '../in.lammps' == os.readlink('in.lammps'): + os.remove('in.lammps') + os.symlink('../in.lammps', 'in.lammps') + os.chdir(cwd) def compute(self, output_dir): @@ -247,6 +273,10 @@ def compute(self, for jj in lines: line = jj.split() if len(line) and str(ii) == line[0]: + try: + [float(kk) for kk in line] + except: + continue stress.append([]) virial.append([]) energy.append(float(line[1])) @@ -322,17 +352,14 @@ def compute(self, return result_dict - def forward_files(self): - if self.inter_type == 'meam': - return ['conf.lmp', 'in.lammps', list(map(os.path.basename, self.model))] - else: - return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] + def forward_files(self, property_type='relaxation'): + return ['conf.lmp'] - def forward_common_files(self): + def forward_common_files(self, property_type='relaxation'): if self.inter_type == 'meam': return ['in.lammps', list(map(os.path.basename, self.model))] else: return ['in.lammps', os.path.basename(self.model)] - def backward_files(self): + def backward_files(self, property_type='relaxation'): return ['log.lammps', 'outlog', 'dump.relax'] diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 3d21d3909..5c081d283 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -79,7 +79,7 @@ def make_confs(self, struct_output_name = path_to_work.split('/')[-2] assert struct_output_name in struct_init_name_list path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], - struct_output_name, 'relaxation')) + struct_output_name, 'relaxation', 'relax_task')) task_list = [] cwd = os.getcwd() @@ -164,7 +164,7 @@ def _compute_lower(self, epa = task_result['energies'][-1] / task_result['atom_numbs'][0] AA = np.linalg.norm(np.cross(task_result['cells'][0][0], task_result['cells'][0][1])) - equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation/relax_task')) equi_result = loadfn(os.path.join(equi_path, 'result.json')) equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] structure_dir = os.path.basename(ii) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 69ce55e62..ff32c89e4 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -23,6 +23,9 @@ def __init__(self, def make_potential_files(self, output_dir): + potcar_not_link_list = ['vacancy', 'interstitial'] + task_type = output_dir.split('/')[-2].split('_')[0] + ele_pot_list = [key for key in self.potcars.keys()] poscar = os.path.abspath(os.path.join(output_dir, 'POSCAR')) pos_str = Structure.from_file(poscar) @@ -33,13 +36,32 @@ def make_potential_files(self, if not ele_pos_list_tmp[ii] == ele_pos_list_tmp[ii - 1]: ele_pos_list.append(ele_pos_list_tmp[ii]) - with open(os.path.join(output_dir, 'POTCAR'), 'w') as fp: - for ii in ele_pos_list: - for jj in ele_pot_list: - if ii == jj: - with open(os.path.join(self.potcar_prefix, self.potcars[jj]), 'r') as fin: - for line in fin: - print(line.strip('\n'), file=fp) + if task_type in potcar_not_link_list: + with open(os.path.join(output_dir, 'POTCAR'), 'w') as fp: + for ii in ele_pos_list: + for jj in ele_pot_list: + if ii == jj: + with open(os.path.join(self.potcar_prefix, self.potcars[jj]), 'r') as fin: + for line in fin: + print(line.strip('\n'), file=fp) + + else: + if not os.path.isfile(os.path.join(output_dir, '../POTCAR')): + with open(os.path.join(output_dir, '../POTCAR'), 'w') as fp: + for ii in ele_pos_list: + for jj in ele_pot_list: + if ii == jj: + with open(os.path.join(self.potcar_prefix, self.potcars[jj]), 'r') as fin: + for line in fin: + print(line.strip('\n'), file=fp) + cwd = os.getcwd() + os.chdir(output_dir) + if not os.path.islink('POTCAR'): + os.symlink('../POTCAR', 'POTCAR') + elif not '../POTCAR' == os.readlink('POTCAR'): + os.remove('POTCAR') + os.symlink('../POTCAR', 'POTCAR') + os.chdir(cwd) dumpfn(self.inter, os.path.join(output_dir, 'inter.json'), indent=4) @@ -135,7 +157,15 @@ def make_input_file(self, else: kgamma = False - incar.write_file(os.path.join(output_dir, 'INCAR')) + incar.write_file(os.path.join(output_dir, '../INCAR')) + cwd = os.getcwd() + os.chdir(output_dir) + if not os.path.islink('INCAR'): + os.symlink('../INCAR', 'INCAR') + elif not '../INCAR' == os.readlink('INCAR'): + os.remove('INCAR') + os.symlink('../INCAR', 'INCAR') + os.chdir(cwd) ret = vasp.make_kspacing_kpoints(self.path_to_poscar, kspacing, kgamma) kp = Kpoints.from_string(ret) kp.write_file(os.path.join(output_dir, "KPOINTS")) @@ -169,11 +199,23 @@ def compute(self, return outcar_dict - def forward_files(self): - return ['INCAR', 'POSCAR', 'KPOINTS', 'POTCAR'] - - def forward_common_files(self): - return ['INCAR', 'POTCAR'] + def forward_files(self, property_type='relaxation'): + potcar_not_link_list = ['vacancy', 'interstitial'] + if property_type == 'elastic': + return ['POSCAR'] + elif property_type in potcar_not_link_list: + return ['POSCAR', 'KPOINTS', 'POTCAR'] + else: + return ['POSCAR', 'KPOINTS'] + + def forward_common_files(self, property_type='relaxation'): + potcar_not_link_list = ['vacancy', 'interstitial'] + if property_type == 'elastic': + return ['INCAR', 'KPOINTS', 'POTCAR'] + elif property_type in potcar_not_link_list: + return ['INCAR'] + else: + return ['INCAR', 'POTCAR'] def backward_files(self): return ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR', 'XDATCAR'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index aec8ac87b..4a7980404 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -74,7 +74,7 @@ def make_confs(self, struct_output_name = path_to_work.split('/')[-2] assert struct_output_name in struct_init_name_list path_to_equi = os.path.abspath(os.path.join(self.parameter['start_confs_path'], - struct_output_name, 'relaxation')) + struct_output_name, 'relaxation', 'relax_task')) task_list = [] cwd = os.getcwd() @@ -156,7 +156,7 @@ def _compute_lower(self, structure_dir = os.path.basename(ii) task_result = loadfn(all_res[idid]) natoms = task_result['atom_numbs'][0] - equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation')) + equi_path = os.path.abspath(os.path.join(os.path.dirname(output_file), '../relaxation/relax_task')) equi_result = loadfn(os.path.join(equi_path, 'result.json')) equi_epa = equi_result['energies'][-1] / equi_result['atom_numbs'][0] evac = task_result['energies'][-1] - equi_epa * natoms diff --git a/dpgen/auto_test/common_equi.py b/dpgen/auto_test/common_equi.py index 2a9971437..86e5ddf90 100644 --- a/dpgen/auto_test/common_equi.py +++ b/dpgen/auto_test/common_equi.py @@ -31,7 +31,7 @@ def make_equi(confs, conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() - # generate a list of task names like mp-xxx/relaxation + # generate a list of task names like mp-xxx/relaxation/relax_task # ... cwd = os.getcwd() # generate poscar for single element crystal @@ -62,7 +62,7 @@ def make_equi(confs, os.chdir(cwd) task_dirs = [] - # make task directories like mp-xxx/relaxation + # make task directories like mp-xxx/relaxation/relax_task # if mp-xxx/exists then print a warning and exit. # ... for ii in conf_dirs: @@ -75,14 +75,14 @@ def make_equi(confs, poscar = os.path.abspath(os.path.join(ii, 'POSCAR')) if not os.path.exists(poscar): raise FileNotFoundError('no configuration for autotest') - relax_dirs = os.path.abspath(os.path.join(ii, 'relaxation')) + relax_dirs = os.path.abspath(os.path.join(ii, 'relaxation', 'relax_task')) # to be consistent with property in make dispatcher if os.path.exists(relax_dirs): dlog.warning('%s already exists' % relax_dirs) else: os.makedirs(relax_dirs) task_dirs.append(relax_dirs) os.chdir(relax_dirs) - # copy POSCARs to mp-xxx/relaxation + # copy POSCARs to mp-xxx/relaxation/relax_task # ... if os.path.isfile('POSCAR'): os.remove('POSCAR') @@ -119,14 +119,14 @@ def run_equi(confs, for conf in confs: conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() - # generate a list of task names like mp-xxx/relaxation + # generate a list of task names like mp-xxx/relaxation/relax_task # ... work_path_list = [] for ii in conf_dirs: work_path_list.append(os.path.abspath(os.path.join(ii, 'relaxation'))) all_task = [] for ii in work_path_list: - all_task.append(os.path.join(ii, '.')) + all_task.append(os.path.join(ii, 'relax_task')) inter_type = inter_param['type'] # vasp @@ -175,7 +175,7 @@ def post_equi(confs, inter_param): conf_dirs.sort() task_dirs = [] for ii in conf_dirs: - task_dirs.append(os.path.abspath(os.path.join(ii, 'relaxation'))) + task_dirs.append(os.path.abspath(os.path.join(ii, 'relaxation', 'relax_task'))) task_dirs.sort() # generate a list of task names like mp-xxx/relaxation diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index dd38259ad..6b9269329 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -47,6 +47,8 @@ def make_property(confs, conf_dirs.sort() for ii in conf_dirs: for jj in property_list: + if jj.get("skip", False): + continue if 'init_from_suffix' and 'output_suffix' in jj: do_refine = True suffix = jj['output_suffix'] @@ -64,7 +66,7 @@ def make_property(confs, # ... property_type = jj['type'] - path_to_equi = os.path.join(ii, 'relaxation') + path_to_equi = os.path.join(ii, 'relaxation', 'relax_task') path_to_work = os.path.join(ii, property_type + '_' + suffix) if os.path.exists(path_to_work): @@ -107,6 +109,8 @@ def run_property(confs, for jj in property_list: # determine the suffix: from scratch or refine # ... + if jj.get("skip", False): + continue if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] elif 'reprod-opt' in jj and jj['reprod-opt']: @@ -129,9 +133,9 @@ def run_property(confs, # dispatch the tasks # POSCAR here is useless virtual_calculator = make_calculator(inter_param_prop, "POSCAR") - forward_files = virtual_calculator.forward_files() - forward_common_files = virtual_calculator.forward_common_files() - backward_files = virtual_calculator.backward_files() + forward_files = virtual_calculator.forward_files(property_type) + forward_common_files = virtual_calculator.forward_common_files(property_type) + backward_files = virtual_calculator.backward_files(property_type) # backward_files += logs # ... inter_type = inter_param_prop['type'] @@ -179,6 +183,8 @@ def post_property(confs, for jj in property_list: # determine the suffix: from scratch or refine # ... + if jj.get("skip", False): + continue if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] elif 'reprod-opt' in jj and jj['reprod-opt']: diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index c6d00bba2..688c6fbe1 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -4,7 +4,7 @@ def make_refine(init_from_suffix, output_suffix, path_to_work): - init_from = re.sub(output_suffix, init_from_suffix, path_to_work) + init_from = re.sub(output_suffix[::-1], init_from_suffix[::-1], path_to_work[::-1], count=1)[::-1] if not os.path.exists(init_from): raise FileNotFoundError("the initial directory does not exist for refine") From 8932587361041f4c54e65b0a3b47caeb39c44367 Mon Sep 17 00:00:00 2001 From: haidi Date: Wed, 1 Jul 2020 16:42:47 +0800 Subject: [PATCH 082/154] update forward files list --- dpgen/auto_test/Lammps.py | 11 +++--- dpgen/auto_test/VASP.py | 8 +---- dpgen/auto_test/workspace.py | 70 ------------------------------------ 3 files changed, 8 insertions(+), 81 deletions(-) delete mode 100755 dpgen/auto_test/workspace.py diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index d864670b8..3344fc700 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -281,9 +281,9 @@ def compute(self, virial.append([]) energy.append(float(line[1])) # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 - stress[-1].append([float(line[2]), float(line[5]), float(line[6])]) - stress[-1].append([float(line[5]), float(line[3]), float(line[7])]) - stress[-1].append([float(line[6]), float(line[7]), float(line[4])]) + stress[-1].append([float(line[2])/1000.0, float(line[5])/1000.0, float(line[6])/1000.0]) + stress[-1].append([float(line[5])/1000.0, float(line[3])/1000.0, float(line[7])/1000.0]) + stress[-1].append([float(line[6])/1000.0, float(line[7])/1000.0, float(line[4])/1000.0]) stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, float(line[6]) * stress_to_virial]) @@ -353,7 +353,10 @@ def compute(self, return result_dict def forward_files(self, property_type='relaxation'): - return ['conf.lmp'] + if self.inter_type == 'meam': + return ['conf.lmp','in.lammps', list(map(os.path.basename, self.model))] + else: + return ['conf.lmp','in.lammps', os.path.basename(self.model)] def forward_common_files(self, property_type='relaxation'): if self.inter_type == 'meam': diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index ff32c89e4..3a660573c 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -200,13 +200,7 @@ def compute(self, return outcar_dict def forward_files(self, property_type='relaxation'): - potcar_not_link_list = ['vacancy', 'interstitial'] - if property_type == 'elastic': - return ['POSCAR'] - elif property_type in potcar_not_link_list: - return ['POSCAR', 'KPOINTS', 'POTCAR'] - else: - return ['POSCAR', 'KPOINTS'] + return ['INCAR, POSCAR', 'KPOINTS', 'POTCAR'] def forward_common_files(self, property_type='relaxation'): potcar_not_link_list = ['vacancy', 'interstitial'] diff --git a/dpgen/auto_test/workspace.py b/dpgen/auto_test/workspace.py deleted file mode 100755 index 2840f47e1..000000000 --- a/dpgen/auto_test/workspace.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 - -import glob, os, shutil - -def copy(kspacing, static = False) : - test_dir = os.path.abspath(os.path.dirname(__file__)) - if static : - vasp_name = 'vasp-static-k%.2f' % kspacing - else : - vasp_name = 'vasp-k%.2f' % kspacing - meam_name = 'meam' - confs = glob.glob(os.path.join(test_dir, "confs")) - params = glob.glob(os.path.join(test_dir, "param.json")) - cmpts = glob.glob(os.path.join(test_dir, "cmpt_*.py")) - gens = glob.glob(os.path.join(test_dir, "gen_*.py")) - vasp = glob.glob(os.path.join(test_dir, "0*/*/*/" + vasp_name)) - meam = glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name)) + \ - glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name + '-static')) + \ - glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name + '-reprod-k0.08')) - cwd = os.getcwd() - os.chdir(test_dir) - vasp_dirs = glob.glob( "0*/*/*/" + vasp_name) - meam_dirs = glob.glob( "0*/*/*/" + meam_name) + \ - glob.glob( "0*/*/*/" + meam_name + '-static') + \ - glob.glob( "0*/*/*/" + meam_name + '-reprod-k0.16') - os.chdir(cwd) - for res,ii in zip(vasp,vasp_dirs) : - dir_ii = os.path.dirname(ii) - os.makedirs(dir_ii, exist_ok = True) - os.chdir(dir_ii) - if os.path.islink(vasp_name) : - os.remove(vasp_name) - os.symlink(os.path.relpath(res), vasp_name) - os.chdir(cwd) - - for res,ii in zip(meam,meam_dirs) : - dir_ii = os.path.dirname(ii) - os.makedirs(dir_ii, exist_ok = True) - os.chdir(dir_ii) - tmp_name = os.path.basename(res) - if os.path.islink(tmp_name) : - os.remove(tmp_name) - os.symlink(os.path.relpath(res), tmp_name) - os.chdir(cwd) - - os.makedirs('results', exist_ok = True) - for ii in cmpts : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in gens : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in confs : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in params : - fname_ii = os.path.basename(ii) - if os.path.isfile(fname_ii) : - os.remove(fname_ii) - shutil.copy2(os.path.relpath(ii), fname_ii) - -copy(0.08) -copy(0.08, static = True) -copy(0.16) From afaff49cde81517a0650bf8e304abf77cac236b7 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 1 Jul 2020 18:47:49 +0800 Subject: [PATCH 083/154] fix lammps stress unit --- dpgen/auto_test/Lammps.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index d864670b8..c7c0d1b02 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -281,9 +281,9 @@ def compute(self, virial.append([]) energy.append(float(line[1])) # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 - stress[-1].append([float(line[2]), float(line[5]), float(line[6])]) - stress[-1].append([float(line[5]), float(line[3]), float(line[7])]) - stress[-1].append([float(line[6]), float(line[7]), float(line[4])]) + stress[-1].append([float(line[2])/1000, float(line[5])/1000, float(line[6])/1000]) + stress[-1].append([float(line[5])/1000, float(line[3])/1000, float(line[7])/1000]) + stress[-1].append([float(line[6])/1000, float(line[7])/1000, float(line[4])/1000]) stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, float(line[6]) * stress_to_virial]) From 585361e40abed7a9ac77ddbcd80394e73c67730e Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 1 Jul 2020 19:39:54 +0800 Subject: [PATCH 084/154] remove workspace.py --- dpgen/auto_test/workspace.py | 70 ------------------------------------ 1 file changed, 70 deletions(-) delete mode 100755 dpgen/auto_test/workspace.py diff --git a/dpgen/auto_test/workspace.py b/dpgen/auto_test/workspace.py deleted file mode 100755 index 2840f47e1..000000000 --- a/dpgen/auto_test/workspace.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 - -import glob, os, shutil - -def copy(kspacing, static = False) : - test_dir = os.path.abspath(os.path.dirname(__file__)) - if static : - vasp_name = 'vasp-static-k%.2f' % kspacing - else : - vasp_name = 'vasp-k%.2f' % kspacing - meam_name = 'meam' - confs = glob.glob(os.path.join(test_dir, "confs")) - params = glob.glob(os.path.join(test_dir, "param.json")) - cmpts = glob.glob(os.path.join(test_dir, "cmpt_*.py")) - gens = glob.glob(os.path.join(test_dir, "gen_*.py")) - vasp = glob.glob(os.path.join(test_dir, "0*/*/*/" + vasp_name)) - meam = glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name)) + \ - glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name + '-static')) + \ - glob.glob(os.path.join(test_dir, "0*/*/*/" + meam_name + '-reprod-k0.08')) - cwd = os.getcwd() - os.chdir(test_dir) - vasp_dirs = glob.glob( "0*/*/*/" + vasp_name) - meam_dirs = glob.glob( "0*/*/*/" + meam_name) + \ - glob.glob( "0*/*/*/" + meam_name + '-static') + \ - glob.glob( "0*/*/*/" + meam_name + '-reprod-k0.16') - os.chdir(cwd) - for res,ii in zip(vasp,vasp_dirs) : - dir_ii = os.path.dirname(ii) - os.makedirs(dir_ii, exist_ok = True) - os.chdir(dir_ii) - if os.path.islink(vasp_name) : - os.remove(vasp_name) - os.symlink(os.path.relpath(res), vasp_name) - os.chdir(cwd) - - for res,ii in zip(meam,meam_dirs) : - dir_ii = os.path.dirname(ii) - os.makedirs(dir_ii, exist_ok = True) - os.chdir(dir_ii) - tmp_name = os.path.basename(res) - if os.path.islink(tmp_name) : - os.remove(tmp_name) - os.symlink(os.path.relpath(res), tmp_name) - os.chdir(cwd) - - os.makedirs('results', exist_ok = True) - for ii in cmpts : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in gens : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in confs : - fname_ii = os.path.basename(ii) - if os.path.islink(fname_ii) : - os.remove(fname_ii) - os.symlink(os.path.relpath(ii), fname_ii) - for ii in params : - fname_ii = os.path.basename(ii) - if os.path.isfile(fname_ii) : - os.remove(fname_ii) - shutil.copy2(os.path.relpath(ii), fname_ii) - -copy(0.08) -copy(0.08, static = True) -copy(0.16) From 7a091b3152607b617667e36f4412aacaf35e458a Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Wed, 1 Jul 2020 20:06:54 +0800 Subject: [PATCH 085/154] fix lammps stress bug --- dpgen/auto_test/Lammps.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index c7c0d1b02..351eebd0f 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -281,9 +281,9 @@ def compute(self, virial.append([]) energy.append(float(line[1])) # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 - stress[-1].append([float(line[2])/1000, float(line[5])/1000, float(line[6])/1000]) - stress[-1].append([float(line[5])/1000, float(line[3])/1000, float(line[7])/1000]) - stress[-1].append([float(line[6])/1000, float(line[7])/1000, float(line[4])/1000]) + stress[-1].append([float(line[2])/1000.0, float(line[5])/1000.0, float(line[6])/1000.0]) + stress[-1].append([float(line[5])/1000.0, float(line[3])/1000.0, float(line[7])/1000.0]) + stress[-1].append([float(line[6])/1000.0, float(line[7])/1000.0, float(line[4])/1000.0]) stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, float(line[6]) * stress_to_virial]) From b8a3c666666fa13e9840e6844933cc2de9f4d214 Mon Sep 17 00:00:00 2001 From: haidi Date: Thu, 2 Jul 2020 13:14:03 +0800 Subject: [PATCH 086/154] fix VASP forwards files --- dpgen/auto_test/VASP.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index 3a660573c..f7e3cb5ce 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -200,7 +200,7 @@ def compute(self, return outcar_dict def forward_files(self, property_type='relaxation'): - return ['INCAR, POSCAR', 'KPOINTS', 'POTCAR'] + return ['INCAR', 'POSCAR', 'KPOINTS', 'POTCAR'] def forward_common_files(self, property_type='relaxation'): potcar_not_link_list = ['vacancy', 'interstitial'] From e0ba969305024304543439f99ac1ff32d72a81da Mon Sep 17 00:00:00 2001 From: haidi Date: Thu, 2 Jul 2020 13:41:44 +0800 Subject: [PATCH 087/154] update print info autotest --- dpgen/auto_test/common_prop.py | 1 + dpgen/auto_test/run.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index d98cc43a3..e03a86193 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -108,6 +108,7 @@ def run_property(confs, task_list = [] work_path_list = [] for ii in conf_dirs: + sepline(ch=ii,screen=True) for jj in property_list: # determine the suffix: from scratch or refine # ... diff --git a/dpgen/auto_test/run.py b/dpgen/auto_test/run.py index 1fedb7f10..89e4fa988 100644 --- a/dpgen/auto_test/run.py +++ b/dpgen/auto_test/run.py @@ -28,9 +28,15 @@ def run_task(step, param_file, machine_file=None): make_property(confs, inter_parameter, property_list) elif step == 'run' and 'relaxation' in jdata: + if machine_file is None: + print('Please supply the machine.json, exit now!') + return run_equi(confs, inter_parameter, mdata) elif step == 'run' and 'properties' in jdata: + if machine_file is None: + print('Please supply the machine.json, exit now!') + return property_list = jdata['properties'] run_property(confs, inter_parameter, property_list, mdata) From a155df0b75e2e303656f62d711513bb8162fcb97 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Thu, 2 Jul 2020 16:03:55 +0800 Subject: [PATCH 088/154] fix post refine bug and make refine is much faster --- dpgen/auto_test/EOS.py | 74 ++++++++++++++++++++------------- dpgen/auto_test/Interstitial.py | 40 +++++++++--------- dpgen/auto_test/Surface.py | 33 +++++++++------ dpgen/auto_test/Vacancy.py | 21 +++++----- 4 files changed, 96 insertions(+), 72 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index d53a74530..5045124e7 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -1,6 +1,7 @@ import glob import json import os +import re import numpy as np from monty.serialization import loadfn, dumpfn @@ -78,12 +79,6 @@ def make_confs(self, cwd = os.getcwd() task_list = [] - if refine: - print('EOS refine starts') - task_list = make_refine(self.parameter['init_from_suffix'], - self.parameter['output_suffix'], - path_to_work) - os.chdir(cwd) if self.reprod: print('eos reproduce starts') if 'vasp_lmp_path' not in self.parameter: @@ -91,30 +86,51 @@ def make_confs(self, vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) os.chdir(cwd) + else: - print('gen eos from ' + str(self.vol_start) + ' to ' + str(self.vol_end) + ' by every ' + str(self.vol_step)) - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - vol_to_poscar = vasp.poscar_vol(equi_contcar) / vasp.poscar_natoms(equi_contcar) - self.parameter['scale2equi'] = [] - for vol in np.arange(self.vol_start, self.vol_end, self.vol_step): - task_num = (vol - self.vol_start) / self.vol_step - output_task = os.path.join(path_to_work, 'task.%06d' % task_num) - os.makedirs(output_task, exist_ok=True) - os.chdir(output_task) - for ii in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: - if os.path.exists(ii): - os.remove(ii) - task_list.append(output_task) - os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') - # scale = (vol / vol_to_poscar) ** (1. / 3.) - scale = vol ** (1. / 3.) - eos_params = {'volume': vol * vol_to_poscar, 'scale': scale} - dumpfn(eos_params, 'eos.json', indent=4) - self.parameter['scale2equi'].append(scale) # 06/22 - vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) - os.chdir(cwd) + if refine: + print('eos refine starts') + task_list = make_refine(self.parameter['init_from_suffix'], + self.parameter['output_suffix'], + path_to_work) + os.chdir(cwd) + + init_from_path = re.sub(self.parameter['output_suffix'][::-1], + self.parameter['init_from_suffix'][::-1], + path_to_work[::-1], count=1)[::-1] + task_list_basename = list(map(os.path.basename, task_list)) + + for ii in task_list_basename: + init_from_task = os.path.join(init_from_path, ii) + output_task = os.path.join(path_to_work, ii) + os.chdir(output_task) + os.symlink(os.path.relpath(os.path.join(init_from_task, 'eos.json')), 'eos.json') + os.chdir(cwd) + + else: + print('gen eos from ' + str(self.vol_start) + ' to ' + str(self.vol_end) + ' by every ' + str(self.vol_step)) + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + vol_to_poscar = vasp.poscar_vol(equi_contcar) / vasp.poscar_natoms(equi_contcar) + self.parameter['scale2equi'] = [] + for vol in np.arange(self.vol_start, self.vol_end, self.vol_step): + task_num = (vol - self.vol_start) / self.vol_step + output_task = os.path.join(path_to_work, 'task.%06d' % task_num) + os.makedirs(output_task, exist_ok=True) + os.chdir(output_task) + for ii in ['INCAR', 'POTCAR', 'POSCAR.orig', 'POSCAR', 'conf.lmp', 'in.lammps']: + if os.path.exists(ii): + os.remove(ii) + task_list.append(output_task) + os.symlink(os.path.relpath(equi_contcar), 'POSCAR.orig') + # scale = (vol / vol_to_poscar) ** (1. / 3.) + scale = vol ** (1. / 3.) + eos_params = {'volume': vol * vol_to_poscar, 'scale': scale} + dumpfn(eos_params, 'eos.json', indent=4) + self.parameter['scale2equi'].append(scale) # 06/22 + vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) + os.chdir(cwd) return task_list def post_process(self, task_list): diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index f18ec2ed1..c49207487 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -84,26 +84,6 @@ def make_confs(self, os.chdir(cwd) else: - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - - ss = Structure.from_file(equi_contcar) - # gen defects - dss = [] - for ii in self.insert_ele: - vds = InterstitialGenerator(ss, ii) - for jj in vds: - temp = jj.generate_defect_structure(self.supercell) - smallest_distance = list(set(temp.distance_matrix.ravel()))[1] - if 'conf_filters' in self.parameter and 'min_dist' in self.parameter['conf_filters']: - min_dist = self.parameter['conf_filters']['min_dist'] - if smallest_distance >= min_dist: - dss.append(temp) - else: - dss.append(temp) - # dss.append(jj.generate_defect_structure(self.supercell)) - if refine: print('interstitial refine starts') task_list = make_refine(self.parameter['init_from_suffix'], @@ -116,6 +96,26 @@ def make_confs(self, os.chdir(cwd) else: + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + # gen defects + dss = [] + for ii in self.insert_ele: + vds = InterstitialGenerator(ss, ii) + for jj in vds: + temp = jj.generate_defect_structure(self.supercell) + smallest_distance = list(set(temp.distance_matrix.ravel()))[1] + if 'conf_filters' in self.parameter and 'min_dist' in self.parameter['conf_filters']: + min_dist = self.parameter['conf_filters']['min_dist'] + if smallest_distance >= min_dist: + dss.append(temp) + else: + dss.append(temp) + # dss.append(jj.generate_defect_structure(self.supercell)) + print('gen interstitial with supercell ' + str(self.supercell) + ' with element ' + str(self.insert_ele)) os.chdir(path_to_work) if os.path.isfile('POSCAR'): diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 5c081d283..3582eac09 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -1,6 +1,7 @@ import glob import json import os +import re import numpy as np from monty.serialization import loadfn, dumpfn @@ -93,27 +94,35 @@ def make_confs(self, os.chdir(cwd) else: - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - ptypes = vasp.get_poscar_types(equi_contcar) - # gen structure - ss = Structure.from_file(equi_contcar) - # gen slabs - all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) - if refine: print('surface refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work) + os.chdir(cwd) # record miller - for ii in range(len(task_list)): - os.chdir(task_list[ii]) - dumpfn(all_slabs[ii].miller_index, 'miller.json') + init_from_path = re.sub(self.parameter['output_suffix'][::-1], + self.parameter['init_from_suffix'][::-1], + path_to_work[::-1], count=1)[::-1] + task_list_basename = list(map(os.path.basename, task_list)) + + for ii in task_list_basename: + init_from_task = os.path.join(init_from_path, ii) + output_task = os.path.join(path_to_work, ii) + os.chdir(output_task) + os.symlink(os.path.relpath(os.path.join(init_from_task, 'miller.json')), 'miller.json') os.chdir(cwd) else: + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + ptypes = vasp.get_poscar_types(equi_contcar) + # gen structure + ss = Structure.from_file(equi_contcar) + # gen slabs + all_slabs = generate_all_slabs(ss, self.miller, self.min_slab_size, self.min_vacuum_size) + os.chdir(path_to_work) if os.path.isfile('POSCAR'): os.remove('POSCAR') diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 4a7980404..f242ccf25 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -88,16 +88,6 @@ def make_confs(self, os.chdir(cwd) else: - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - - ss = Structure.from_file(equi_contcar) - vds = VacancyGenerator(ss) - dss = [] - for jj in vds: - dss.append(jj.generate_defect_structure(self.supercell)) - if refine: print('vacancy refine starts') task_list = make_refine(self.parameter['init_from_suffix'], @@ -108,8 +98,17 @@ def make_confs(self, # np.savetxt('supercell.out', self.supercell, fmt='%d') dumpfn(self.supercell, 'supercell.json') os.chdir(cwd) - else: + equi_contcar = os.path.join(path_to_equi, 'CONTCAR') + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + vds = VacancyGenerator(ss) + dss = [] + for jj in vds: + dss.append(jj.generate_defect_structure(self.supercell)) + print('gen vacancy with supercell ' + str(self.supercell)) os.chdir(path_to_work) if os.path.isfile('POSCAR'): From d3409cff96ac62eb48ae44f52b3863232159e8de Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Thu, 2 Jul 2020 19:40:15 +0800 Subject: [PATCH 089/154] fix interstitial bug and make refine input concise --- dpgen/auto_test/EOS.py | 11 +++-- dpgen/auto_test/Elastic.py | 72 ++++++++++++++++++++------------- dpgen/auto_test/Interstitial.py | 54 ++++++++++++++++++++----- dpgen/auto_test/Surface.py | 20 ++++++--- dpgen/auto_test/Vacancy.py | 29 +++++++++---- 5 files changed, 131 insertions(+), 55 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 5045124e7..c5d7aa4a7 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -20,9 +20,10 @@ def __init__(self, parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] if not self.reprod: - self.vol_start = parameter['vol_start'] - self.vol_end = parameter['vol_end'] - self.vol_step = parameter['vol_step'] + if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): + self.vol_start = parameter['vol_start'] + self.vol_end = parameter['vol_end'] + self.vol_step = parameter['vol_step'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, @@ -104,6 +105,10 @@ def make_confs(self, init_from_task = os.path.join(init_from_path, ii) output_task = os.path.join(path_to_work, ii) os.chdir(output_task) + if os.path.isfile('eos.json'): + os.remove('eos.json') + if os.path.islink('eos.json'): + os.remove('eos.json') os.symlink(os.path.relpath(os.path.join(init_from_task, 'eos.json')), 'eos.json') os.chdir(cwd) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 472a439f4..44d6b12de 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -1,5 +1,7 @@ import glob import os +from shutil import copyfile +import re from monty.serialization import loadfn, dumpfn from pymatgen.analysis.elasticity.elastic import ElasticTensor @@ -18,12 +20,13 @@ class Elastic(Property): def __init__(self, parameter): - default_norm_def = 2e-3 - default_shear_def = 5e-3 - parameter['norm_deform'] = parameter.get('norm_deform', default_norm_def) - self.norm_deform = parameter['norm_deform'] - parameter['shear_deform'] = parameter.get('shear_deform', default_shear_def) - self.shear_deform = parameter['shear_deform'] + if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): + default_norm_def = 2e-3 + default_shear_def = 5e-3 + parameter['norm_deform'] = parameter.get('norm_deform', default_norm_def) + self.norm_deform = parameter['norm_deform'] + parameter['shear_deform'] = parameter.get('shear_deform', default_shear_def) + self.shear_deform = parameter['shear_deform'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, @@ -65,26 +68,13 @@ def make_confs(self, task_list = [] cwd = os.getcwd() - - norm_def = self.norm_deform - shear_def = self.shear_deform - norm_strains = [-norm_def, -0.5 * norm_def, 0.5 * norm_def, norm_def] - shear_strains = [-shear_def, -0.5 * shear_def, 0.5 * shear_def, shear_def] - equi_contcar = os.path.join(path_to_equi, 'CONTCAR') - if not os.path.exists(equi_contcar): - raise RuntimeError("please do relaxation first") - - ss = Structure.from_file(equi_contcar) - dfm_ss = DeformedStructureSet(ss, - symmetry=False, - norm_strains=norm_strains, - shear_strains=shear_strains) - n_dfm = len(dfm_ss) os.chdir(path_to_work) if os.path.isfile('POSCAR'): os.remove('POSCAR') + if os.path.islink('POSCAR'): + os.remove('POSCAR') os.symlink(os.path.relpath(equi_contcar), 'POSCAR') # task_poscar = os.path.join(output, 'POSCAR') @@ -95,28 +85,50 @@ def make_confs(self, equi_result = loadfn(os.path.join(path_to_equi, 'result.json')) equi_stress = equi_result['stress'][-1] dumpfn(equi_stress, 'equi.stress.json', indent=4) + os.chdir(cwd) if refine: print('elastic refine starts') task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work) - idid = -1 - for ii in task_list: - idid += 1 - os.chdir(ii) + + # record strain + # df = Strain.from_deformation(dfm_ss.deformations[idid]) + # dumpfn(df.as_dict(), 'strain.json', indent=4) + init_from_path = re.sub(self.parameter['output_suffix'][::-1], + self.parameter['init_from_suffix'][::-1], + path_to_work[::-1], count=1)[::-1] + task_list_basename = list(map(os.path.basename, task_list)) + + for ii in task_list_basename: + init_from_task = os.path.join(init_from_path, ii) + output_task = os.path.join(path_to_work, ii) + os.chdir(output_task) if os.path.isfile('strain.json'): os.remove('strain.json') - - # record strain - df = Strain.from_deformation(dfm_ss.deformations[idid]) - dumpfn(df.as_dict(), 'strain.json', indent=4) + copyfile(os.path.join(init_from_task, 'strain.json'), 'strain.json') #os.symlink(os.path.relpath( # os.path.join((re.sub(self.parameter['output_suffix'], self.parameter['init_from_suffix'], ii)), # 'strain.json')), # 'strain.json') os.chdir(cwd) else: + norm_def = self.norm_deform + shear_def = self.shear_deform + norm_strains = [-norm_def, -0.5 * norm_def, 0.5 * norm_def, norm_def] + shear_strains = [-shear_def, -0.5 * shear_def, 0.5 * shear_def, shear_def] + + if not os.path.exists(equi_contcar): + raise RuntimeError("please do relaxation first") + + ss = Structure.from_file(equi_contcar) + dfm_ss = DeformedStructureSet(ss, + symmetry=False, + norm_strains=norm_strains, + shear_strains=shear_strains) + n_dfm = len(dfm_ss) + print('gen with norm ' + str(norm_strains)) print('gen with shear ' + str(shear_strains)) for ii in range(n_dfm): @@ -152,6 +164,8 @@ def post_process(self, task_list): for ii in task_list: if os.path.isfile(os.path.join(ii, 'KPOINTS')): os.remove(os.path.join(ii, 'KPOINTS')) + if os.path.islink(os.path.join(ii, 'KPOINTS')): + os.remove(os.path.join(ii, 'KPOINTS')) os.chdir(ii) os.symlink(os.path.relpath(kpoints_universal), 'KPOINTS') os.chdir(cwd) diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index c49207487..75bdc089a 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -1,6 +1,7 @@ import glob import json import os +import re from monty.serialization import loadfn, dumpfn from pymatgen.analysis.defects.generators import InterstitialGenerator @@ -18,10 +19,11 @@ def __init__(self, parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] if not self.reprod: - default_supercell = [1, 1, 1] - parameter['supercell'] = parameter.get('supercell', default_supercell) - self.supercell = parameter['supercell'] - self.insert_ele = parameter['insert_ele'] + if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): + default_supercell = [1, 1, 1] + parameter['supercell'] = parameter.get('supercell', default_supercell) + self.supercell = parameter['supercell'] + self.insert_ele = parameter['insert_ele'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, @@ -89,10 +91,29 @@ def make_confs(self, task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work) - for ii in task_list: - os.chdir(ii) - # np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') + + init_from_path = re.sub(self.parameter['output_suffix'][::-1], + self.parameter['init_from_suffix'][::-1], + path_to_work[::-1], count=1)[::-1] + task_list_basename = list(map(os.path.basename, task_list)) + + os.chdir(path_to_work) + if os.path.isfile('element.out'): + os.remove('element.out') + if os.path.islink('element.out'): + os.remove('element.out') + os.symlink(os.path.relpath(os.path.join(init_from_path, 'element.out')), 'element.out') + os.chdir(cwd) + + for ii in task_list_basename: + init_from_task = os.path.join(init_from_path, ii) + output_task = os.path.join(path_to_work, ii) + os.chdir(output_task) + if os.path.isfile('supercell.json'): + os.remove('supercell.json') + if os.path.islink('supercell.json'): + os.remove('supercell.json') + os.symlink(os.path.relpath(os.path.join(init_from_task, 'supercell.json')), 'supercell.json') os.chdir(cwd) else: @@ -103,6 +124,10 @@ def make_confs(self, ss = Structure.from_file(equi_contcar) # gen defects dss = [] + insert_element_task = os.path.join(path_to_work, 'element.out') + if os.path.isfile(insert_element_task): + os.remove(insert_element_task) + for ii in self.insert_ele: vds = InterstitialGenerator(ss, ii) for jj in vds: @@ -112,14 +137,20 @@ def make_confs(self, min_dist = self.parameter['conf_filters']['min_dist'] if smallest_distance >= min_dist: dss.append(temp) + with open(insert_element_task, 'a+') as fout: + print(ii, file=fout) else: dss.append(temp) - # dss.append(jj.generate_defect_structure(self.supercell)) + with open(insert_element_task, 'a+') as fout: + print(ii, file=fout) + # dss.append(jj.generate_defect_structure(self.supercell)) print('gen interstitial with supercell ' + str(self.supercell) + ' with element ' + str(self.insert_ele)) os.chdir(path_to_work) if os.path.isfile('POSCAR'): os.remove('POSCAR') + if os.path.islink('POSCAR'): + os.remove('POSCAR') os.symlink(os.path.relpath(equi_contcar), 'POSCAR') # task_poscar = os.path.join(output, 'POSCAR') @@ -156,6 +187,8 @@ def _compute_lower(self, ptr_data = os.path.dirname(output_file) + '\n' if not self.reprod: + with open(os.path.join(os.path.dirname(output_file), 'element.out'), 'r') as fin: + fc = fin.read().split('\n') ptr_data += "Insert_ele-Struct: Inter_E(eV) E(eV) equi_E(eV)\n" idid = -1 for ii in all_tasks: @@ -169,7 +202,8 @@ def _compute_lower(self, evac = task_result['energies'][-1] - equi_epa * natoms supercell_index = loadfn(os.path.join(ii, 'supercell.json')) - insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] + # insert_ele = loadfn(os.path.join(ii, 'task.json'))['insert_ele'][0] + insert_ele = fc[idid] ptr_data += "%s: %7.3f %7.3f %7.3f \n" % ( insert_ele + '-' + str(supercell_index) + '-' + structure_dir, evac, task_result['energies'][-1], equi_epa * natoms) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 3582eac09..ab99fad4b 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -22,12 +22,14 @@ def __init__(self, parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] if not self.reprod: - self.min_slab_size = parameter['min_slab_size'] - self.min_vacuum_size = parameter['min_vacuum_size'] - self.pert_xz = parameter['pert_xz'] - default_max_miller = 2 - parameter['max_miller'] = parameter.get('max_miller', default_max_miller) - self.miller = parameter['max_miller'] + if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): + self.min_slab_size = parameter['min_slab_size'] + self.min_vacuum_size = parameter['min_vacuum_size'] + parameter['pert_xz'] = parameter.get('pert_xz', 0.01) + self.pert_xz = parameter['pert_xz'] + default_max_miller = 2 + parameter['max_miller'] = parameter.get('max_miller', default_max_miller) + self.miller = parameter['max_miller'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, @@ -110,6 +112,10 @@ def make_confs(self, init_from_task = os.path.join(init_from_path, ii) output_task = os.path.join(path_to_work, ii) os.chdir(output_task) + if os.path.isfile('miller.json'): + os.remove('miller.json') + if os.path.islink('miller.json'): + os.remove('miller.json') os.symlink(os.path.relpath(os.path.join(init_from_task, 'miller.json')), 'miller.json') os.chdir(cwd) @@ -126,6 +132,8 @@ def make_confs(self, os.chdir(path_to_work) if os.path.isfile('POSCAR'): os.remove('POSCAR') + if os.path.islink('POSCAR'): + os.remove('POSCAR') os.symlink(os.path.relpath(equi_contcar), 'POSCAR') # task_poscar = os.path.join(output, 'POSCAR') for ii in range(len(all_slabs)): diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index f242ccf25..0a7ef6a9b 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -1,6 +1,7 @@ import glob import json import os +import re from monty.serialization import loadfn, dumpfn from pymatgen.analysis.defects.generators import VacancyGenerator @@ -19,9 +20,10 @@ def __init__(self, parameter['reprod-opt'] = parameter.get('reprod-opt', False) self.reprod = parameter['reprod-opt'] if not self.reprod: - default_supercell = [1, 1, 1] - parameter['supercell'] = parameter.get('supercell', default_supercell) - self.supercell = parameter['supercell'] + if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): + default_supercell = [1, 1, 1] + parameter['supercell'] = parameter.get('supercell', default_supercell) + self.supercell = parameter['supercell'] parameter['cal_type'] = parameter.get('cal_type', 'relaxation') self.cal_type = parameter['cal_type'] default_cal_setting = {"relax_pos": True, @@ -93,10 +95,21 @@ def make_confs(self, task_list = make_refine(self.parameter['init_from_suffix'], self.parameter['output_suffix'], path_to_work) - for ii in task_list: - os.chdir(ii) - # np.savetxt('supercell.out', self.supercell, fmt='%d') - dumpfn(self.supercell, 'supercell.json') + + init_from_path = re.sub(self.parameter['output_suffix'][::-1], + self.parameter['init_from_suffix'][::-1], + path_to_work[::-1], count=1)[::-1] + task_list_basename = list(map(os.path.basename, task_list)) + + for ii in task_list_basename: + init_from_task = os.path.join(init_from_path, ii) + output_task = os.path.join(path_to_work, ii) + os.chdir(output_task) + if os.path.isfile('supercell.json'): + os.remove('supercell.json') + if os.path.islink('supercell.json'): + os.remove('supercell.json') + os.symlink(os.path.relpath(os.path.join(init_from_task, 'supercell.json')), 'supercell.json') os.chdir(cwd) else: equi_contcar = os.path.join(path_to_equi, 'CONTCAR') @@ -113,6 +126,8 @@ def make_confs(self, os.chdir(path_to_work) if os.path.isfile('POSCAR'): os.remove('POSCAR') + if os.path.islink('POSCAR'): + os.remove('POSCAR') os.symlink(os.path.relpath(equi_contcar), 'POSCAR') # task_poscar = os.path.join(output, 'POSCAR') From e79d8b3e3c71ac96ff39f2afd15c711adfe61462 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Fri, 3 Jul 2020 04:31:33 +0800 Subject: [PATCH 090/154] fix eos bug and triclinic dump to poscar bug --- dpgen/auto_test/EOS.py | 10 ++++- dpgen/auto_test/Lammps.py | 77 +++++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index c5d7aa4a7..a79d95fc8 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -119,8 +119,13 @@ def make_confs(self, raise RuntimeError("please do relaxation first") vol_to_poscar = vasp.poscar_vol(equi_contcar) / vasp.poscar_natoms(equi_contcar) self.parameter['scale2equi'] = [] - for vol in np.arange(self.vol_start, self.vol_end, self.vol_step): - task_num = (vol - self.vol_start) / self.vol_step + + task_num = 0 + while self.vol_start + self.vol_step * task_num < self.vol_end: + # for vol in np.arange(int(self.vol_start * 100), int(self.vol_end * 100), int(self.vol_step * 100)): + # vol = vol / 100.0 + vol = self.vol_start + task_num * self.vol_step + #task_num = int((vol - self.vol_start) / self.vol_step) output_task = os.path.join(path_to_work, 'task.%06d' % task_num) os.makedirs(output_task, exist_ok=True) os.chdir(output_task) @@ -135,6 +140,7 @@ def make_confs(self, dumpfn(eos_params, 'eos.json', indent=4) self.parameter['scale2equi'].append(scale) # 06/22 vasp.poscar_scale('POSCAR.orig', 'POSCAR', scale) + task_num += 1 os.chdir(cwd) return task_list diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 3344fc700..939d58b7a 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -188,16 +188,22 @@ def make_input_file(self, else: raise RuntimeError("not supported calculation type for LAMMPS") - with open(os.path.join(output_dir, '../in.lammps'), 'w') as fp: - fp.write(fc) - cwd = os.getcwd() - os.chdir(output_dir) - if not os.path.islink('in.lammps'): - os.symlink('../in.lammps', 'in.lammps') - elif not '../in.lammps' == os.readlink('in.lammps'): - os.remove('in.lammps') - os.symlink('../in.lammps', 'in.lammps') - os.chdir(cwd) + in_lammps_not_link_list = ['eos'] + if task_type not in in_lammps_not_link_list: + with open(os.path.join(output_dir, '../in.lammps'), 'w') as fp: + fp.write(fc) + cwd = os.getcwd() + os.chdir(output_dir) + if not (os.path.islink('in.lammps') or os.path.isfile('in.lammps')): + os.symlink('../in.lammps', 'in.lammps') + else: + os.remove('in.lammps') + os.symlink('../in.lammps', 'in.lammps') + os.chdir(cwd) + else: + with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: + fp.write(fc) + def compute(self, output_dir): @@ -227,29 +233,32 @@ def compute(self, force.append([]) dumptime.append(int(dump[idx + 1])) natom = int(dump[idx + 3]) - xlow = float(dump[idx + 5].split()[0]) - xx = float(dump[idx + 5].split()[1]) + xlo_bound = float(dump[idx + 5].split()[0]) + xhi_bound = float(dump[idx + 5].split()[1]) xy = float(dump[idx + 5].split()[2]) - ylow = float(dump[idx + 6].split()[0]) - yy = float(dump[idx + 6].split()[1]) + ylo_bound = float(dump[idx + 6].split()[0]) + yhi_bound = float(dump[idx + 6].split()[1]) xz = float(dump[idx + 6].split()[2]) - zlow = float(dump[idx + 7].split()[0]) - zz = float(dump[idx + 7].split()[1]) + zlo = float(dump[idx + 7].split()[0]) + zhi = float(dump[idx + 7].split()[1]) yz = float(dump[idx + 7].split()[2]) - box[-1].append([(xx - xlow + xy + xz), 0.0, 0.0]) - box[-1].append([xy, (yy - ylow + yz), 0.0]) - box[-1].append([xz, yz, (zz - zlow)]) - vol.append((xx - xlow + xy + xz) * (yy - ylow + yz) * (zz - zlow)) + xx = xhi_bound - max([0, xy, xz, xy + xz]) - (xlo_bound - min([0, xy, xz, xy + xz])) + yy = yhi_bound - max([0, yz]) - (ylo_bound - min([0, yz])) + zz = zhi - zlo + box[-1].append([xx, 0.0, 0.0]) + box[-1].append([xy, yy, 0.0]) + box[-1].append([xz, yz, zz]) + vol.append(xx * yy * zz) type_list = [] for jj in range(natom): type_list.append(int(dump[idx + 9 + jj].split()[1]) - 1) if 'xs ys zs' in dump[idx + 8]: - a_x = float(dump[idx + 9 + jj].split()[2]) * (xx - xlow + xy + xz) + float( + a_x = float(dump[idx + 9 + jj].split()[2]) * xx + float( dump[idx + 9 + jj].split()[3]) * xy \ + float(dump[idx + 9 + jj].split()[4]) * xz - a_y = float(dump[idx + 9 + jj].split()[3]) * (yy - ylow + yz) + float( + a_y = float(dump[idx + 9 + jj].split()[3]) * yy + float( dump[idx + 9 + jj].split()[4]) * yz - a_z = float(dump[idx + 9 + jj].split()[4]) * (zz - zlow) + a_z = float(dump[idx + 9 + jj].split()[4]) * zz else: a_x = float(dump[idx + 9 + jj].split()[2]) a_y = float(dump[idx + 9 + jj].split()[3]) @@ -281,9 +290,9 @@ def compute(self, virial.append([]) energy.append(float(line[1])) # virials = stress * vol * 1e5 *1e-30 * 1e19/1.6021766208 - stress[-1].append([float(line[2])/1000.0, float(line[5])/1000.0, float(line[6])/1000.0]) - stress[-1].append([float(line[5])/1000.0, float(line[3])/1000.0, float(line[7])/1000.0]) - stress[-1].append([float(line[6])/1000.0, float(line[7])/1000.0, float(line[4])/1000.0]) + stress[-1].append([float(line[2]) / 1000.0, float(line[5]) / 1000.0, float(line[6]) / 1000.0]) + stress[-1].append([float(line[5]) / 1000.0, float(line[3]) / 1000.0, float(line[7]) / 1000.0]) + stress[-1].append([float(line[6]) / 1000.0, float(line[7]) / 1000.0, float(line[4]) / 1000.0]) stress_to_virial = vol[idid] * 1e5 * 1e-30 * 1e19 / 1.6021766208 virial[-1].append([float(line[2]) * stress_to_virial, float(line[5]) * stress_to_virial, float(line[6]) * stress_to_virial]) @@ -354,15 +363,21 @@ def compute(self, def forward_files(self, property_type='relaxation'): if self.inter_type == 'meam': - return ['conf.lmp','in.lammps', list(map(os.path.basename, self.model))] + return ['conf.lmp', 'in.lammps'] + list(map(os.path.basename, self.model)) else: - return ['conf.lmp','in.lammps', os.path.basename(self.model)] + return ['conf.lmp', 'in.lammps', os.path.basename(self.model)] def forward_common_files(self, property_type='relaxation'): - if self.inter_type == 'meam': - return ['in.lammps', list(map(os.path.basename, self.model))] + if property_type not in ['eos']: + if self.inter_type == 'meam': + return ['in.lammps'] + list(map(os.path.basename, self.model)) + else: + return ['in.lammps', os.path.basename(self.model)] else: - return ['in.lammps', os.path.basename(self.model)] + if self.inter_type == 'meam': + return list(map(os.path.basename, self.model)) + else: + return [os.path.basename(self.model)] def backward_files(self, property_type='relaxation'): return ['log.lammps', 'outlog', 'dump.relax'] From d2a7550f06fec2b677289f7c2d08de31a1f57963 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sat, 4 Jul 2020 16:03:24 +0800 Subject: [PATCH 091/154] support to only reproduce last frame --- dpgen/auto_test/EOS.py | 22 +++++----- dpgen/auto_test/Elastic.py | 4 +- dpgen/auto_test/Interstitial.py | 22 +++++----- dpgen/auto_test/Surface.py | 22 +++++----- dpgen/auto_test/Vacancy.py | 22 +++++----- dpgen/auto_test/common_prop.py | 11 ++--- dpgen/auto_test/reproduce.py | 75 +++++++++++++++++++-------------- 7 files changed, 99 insertions(+), 79 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index a79d95fc8..1d2ed4cc8 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -17,8 +17,8 @@ class EOS(Property): def __init__(self, parameter): - parameter['reprod-opt'] = parameter.get('reprod-opt', False) - self.reprod = parameter['reprod-opt'] + parameter['reproduce'] = parameter.get('reproduce', False) + self.reprod = parameter['reproduce'] if not self.reprod: if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): self.vol_start = parameter['vol_start'] @@ -82,10 +82,11 @@ def make_confs(self, task_list = [] if self.reprod: print('eos reproduce starts') - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + task_list = make_repro(init_data_path, self.init_from_suffix, + path_to_work, self.parameter.get('last_frame', True)) os.chdir(cwd) else: @@ -172,10 +173,11 @@ def _compute_lower(self, # ptr_data += '%7.3f %8.4f \n' % (vol, all_res[ii]['energy'] / len(all_res[ii]['force'])) else: - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], + all_tasks, ptr_data, self.parameter.get('last_frame', True)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index 44d6b12de..e3be012f5 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -41,8 +41,8 @@ def __init__(self, elif "relax_vol" not in parameter['cal_setting']: parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] - parameter['reprod-opt'] = False - self.reprod = parameter['reprod-opt'] + # parameter['reproduce'] = False + # self.reprod = parameter['reproduce'] self.parameter = parameter def make_confs(self, diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 75bdc089a..be0e1c077 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -16,8 +16,8 @@ class Interstitial(Property): def __init__(self, parameter): - parameter['reprod-opt'] = parameter.get('reprod-opt', False) - self.reprod = parameter['reprod-opt'] + parameter['reproduce'] = parameter.get('reproduce', False) + self.reprod = parameter['reproduce'] if not self.reprod: if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): default_supercell = [1, 1, 1] @@ -79,10 +79,11 @@ def make_confs(self, if self.reprod: print('interstitial reproduce starts') - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + task_list = make_repro(init_data_path, self.init_from_suffix, + path_to_work, self.parameter.get('last_frame', False)) os.chdir(cwd) else: @@ -212,10 +213,11 @@ def _compute_lower(self, equi_epa * natoms] else: - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], + all_tasks, ptr_data, self.parameter.get('last_frame', False)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index ab99fad4b..70b485156 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -19,8 +19,8 @@ class Surface(Property): def __init__(self, parameter): - parameter['reprod-opt'] = parameter.get('reprod-opt', False) - self.reprod = parameter['reprod-opt'] + parameter['reproduce'] = parameter.get('reproduce', False) + self.reprod = parameter['reproduce'] if not self.reprod: if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): self.min_slab_size = parameter['min_slab_size'] @@ -89,10 +89,11 @@ def make_confs(self, if self.reprod: print('surface reproduce starts') - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + task_list = make_repro(init_data_path, self.init_from_suffix, + path_to_work, self.parameter.get('last_frame', True)) os.chdir(cwd) else: @@ -195,10 +196,11 @@ def _compute_lower(self, res_data[str(miller_index) + '-' + structure_dir] = [evac, epa, equi_epa] else: - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], + all_tasks, ptr_data, self.parameter.get('last_frame', True)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 0a7ef6a9b..cc152ac5b 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -17,8 +17,8 @@ class Vacancy(Property): def __init__(self, parameter): - parameter['reprod-opt'] = parameter.get('reprod-opt', False) - self.reprod = parameter['reprod-opt'] + parameter['reproduce'] = parameter.get('reproduce', False) + self.reprod = parameter['reproduce'] if not self.reprod: if not ('init_from_suffix' in parameter and 'output_suffix' in parameter): default_supercell = [1, 1, 1] @@ -83,10 +83,11 @@ def make_confs(self, if self.reprod: print('vacancy reproduce starts') - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - task_list = make_repro(vasp_lmp_path, self.init_from_suffix, path_to_work) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + task_list = make_repro(init_data_path, self.init_from_suffix, + path_to_work, self.parameter.get('last_frame', False)) os.chdir(cwd) else: @@ -182,10 +183,11 @@ def _compute_lower(self, equi_epa * natoms] else: - if 'vasp_lmp_path' not in self.parameter: - raise RuntimeError("please provide the vasp_lmp_path for reproduction") - vasp_lmp_path = os.path.abspath(self.parameter['vasp_lmp_path']) - res_data, ptr_data = post_repro(vasp_lmp_path, self.parameter['init_from_suffix'], all_tasks, ptr_data) + if 'init_data_path' not in self.parameter: + raise RuntimeError("please provide the initial data path to reproduce") + init_data_path = os.path.abspath(self.parameter['init_data_path']) + res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], + all_tasks, ptr_data, self.parameter.get('last_frame', False)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index e03a86193..281cfc22c 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -47,14 +47,14 @@ def make_property(confs, conf_dirs.extend(glob.glob(conf)) conf_dirs.sort() for ii in conf_dirs: - sepline(ch=ii,screen=True) + sepline(ch=ii, screen=True) for jj in property_list: if jj.get("skip", False): continue if 'init_from_suffix' and 'output_suffix' in jj: do_refine = True suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: + elif 'reproduce' in jj and jj['reproduce']: do_refine = False suffix = 'reprod' else: @@ -108,7 +108,7 @@ def run_property(confs, task_list = [] work_path_list = [] for ii in conf_dirs: - sepline(ch=ii,screen=True) + sepline(ch=ii, screen=True) for jj in property_list: # determine the suffix: from scratch or refine # ... @@ -116,7 +116,7 @@ def run_property(confs, continue if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: + elif 'reproduce' in jj and jj['reproduce']: suffix = 'reprod' else: suffix = '00' @@ -170,6 +170,7 @@ def run_property(confs, outlog='outlog', errlog='errlog') + def post_property(confs, # inter_param, property_list): @@ -190,7 +191,7 @@ def post_property(confs, continue if 'init_from_suffix' and 'output_suffix' in jj: suffix = jj['output_suffix'] - elif 'reprod-opt' in jj and jj['reprod-opt']: + elif 'reproduce' in jj and jj['reproduce']: suffix = 'reprod' else: suffix = '00' diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 38aaa4dbf..2f0bdbdba 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -5,15 +5,15 @@ from monty.serialization import loadfn -def make_repro(vasp_lmp_path, init_from_suffix, path_to_work): +def make_repro(init_data_path, init_from_suffix, path_to_work, last_frame=True): path_to_work = os.path.abspath(path_to_work) property_type = path_to_work.split('/')[-1].split('_')[0] - vasp_lmp_path = os.path.join(vasp_lmp_path, '*', property_type + '_' + init_from_suffix) - vasp_lmp_path_list = glob.glob(vasp_lmp_path) - vasp_lmp_path_list.sort() + init_data_path = os.path.join(init_data_path, '*', property_type + '_' + init_from_suffix) + init_data_path_list = glob.glob(init_data_path) + init_data_path_list.sort() cwd = os.getcwd() struct_init_name_list = [] - for ii in vasp_lmp_path_list: + for ii in init_data_path_list: struct_init_name_list.append(ii.split('/')[-2]) struct_output_name = path_to_work.split('/')[-2] @@ -23,21 +23,21 @@ def make_repro(vasp_lmp_path, init_from_suffix, path_to_work): if ii == struct_output_name: label = idx - vasp_lmp_path_todo = vasp_lmp_path_list[label] + init_data_path_todo = init_data_path_list[label] - if not os.path.exists(vasp_lmp_path_todo): - raise RuntimeError("please do VASP or LAMMPS calcualtions first") - - vasp_lmp_task_todo = glob.glob(os.path.join(vasp_lmp_path_todo, 'task.[0-9]*[0-9]')) - assert len(vasp_lmp_task_todo) > 0, "Please do VASP or LAMMPS calculations first" - vasp_lmp_task_todo.sort() + init_data_task_todo = glob.glob(os.path.join(init_data_path_todo, 'task.[0-9]*[0-9]')) + assert len(init_data_task_todo) > 0, "There is no task in previous calculations path" + init_data_task_todo.sort() task_list = [] task_num = 0 - for ii in vasp_lmp_task_todo: + for ii in init_data_task_todo: # get frame number task_result = loadfn(os.path.join(ii, 'result_task.json')) - nframe = len(task_result['energies']) + if last_frame: + nframe = 1 + else: + nframe = len(task_result['energies']) for jj in range(nframe): output_task = os.path.join(path_to_work, 'task.%06d' % task_num) task_num += 1 @@ -49,22 +49,25 @@ def make_repro(vasp_lmp_path, init_from_suffix, path_to_work): if os.path.exists(kk): os.remove(kk) # make conf - task_result.to('vasp/poscar', 'POSCAR', frame_idx=jj) + if last_frame: + task_result.to('vasp/poscar', 'POSCAR', frame_idx=-1) + else: + task_result.to('vasp/poscar', 'POSCAR', frame_idx=jj) os.chdir(cwd) return task_list -def post_repro(vasp_lmp_path, init_from_suffix, all_tasks, ptr_data): +def post_repro(init_data_path, init_from_suffix, all_tasks, ptr_data, last_frame=True): ptr_data += "Reproduce: Initial_path Init_E(eV/atom) Reprod_E(eV/atom) Difference(eV/atom)\n" struct_output_name = all_tasks[0].split('/')[-3] property_type = all_tasks[0].split('/')[-2].split('_')[0] - vasp_lmp_path = os.path.join(vasp_lmp_path, '*', property_type + '_' + init_from_suffix) - vasp_lmp_path_list = glob.glob(vasp_lmp_path) - vasp_lmp_path_list.sort() + init_data_path = os.path.join(init_data_path, '*', property_type + '_' + init_from_suffix) + init_data_path_list = glob.glob(init_data_path) + init_data_path_list.sort() # cwd = os.getcwd() struct_init_name_list = [] - for ii in vasp_lmp_path_list: + for ii in init_data_path_list: struct_init_name_list.append(ii.split('/')[-2]) assert struct_output_name in struct_init_name_list @@ -73,23 +76,29 @@ def post_repro(vasp_lmp_path, init_from_suffix, all_tasks, ptr_data): if ii == struct_output_name: label = idx - vasp_lmp_path_todo = vasp_lmp_path_list[label] + init_data_path_todo = init_data_path_list[label] - vasp_lmp_task_todo = glob.glob(os.path.join(vasp_lmp_path_todo, 'task.[0-9]*[0-9]')) - assert len(vasp_lmp_task_todo) > 0, "Please do VASP or LAMMPS calcualtions first" - vasp_lmp_task_todo.sort() + init_data_task_todo = glob.glob(os.path.join(init_data_path_todo, 'task.[0-9]*[0-9]')) + assert len(init_data_task_todo) > 0, "There is no task in previous calculations path" + init_data_task_todo.sort() idid = 0 init_ener_tot = [] output_ener_tot = [] res_data = {} - for ii in vasp_lmp_task_todo: + for ii in init_data_task_todo: init_task_result = loadfn(os.path.join(ii, 'result_task.json')) - nframe = len(init_task_result['energies']) + if last_frame: + nframe = 1 + else: + nframe = len(init_task_result['energies']) # idid += nframe natoms = init_task_result['atom_numbs'][0] - init_ener = init_task_result['energies'] + if last_frame: + init_ener = init_task_result['energies'][-1:] + else: + init_ener = init_task_result['energies'] init_ener_tot.extend(list(init_ener)) output_ener = [] for jj in range(idid, idid + nframe): @@ -99,17 +108,19 @@ def post_repro(vasp_lmp_path, init_from_suffix, all_tasks, ptr_data): output_ener_tot.extend(output_task_result['energies']) init_epa = init_ener[jj - idid] / natoms - ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, init_epa, - output_epa, output_epa - init_epa) + ptr_data += '%s %7.3f %7.3f %7.3f\n' % (ii, init_epa, output_epa, output_epa - init_epa) idid += nframe output_ener = np.array(output_ener) output_ener = np.reshape(output_ener, [-1, 1]) init_ener = np.reshape(init_ener, [-1, 1]) / natoms - error_start = 1 - output_ener -= output_ener[-1] - init_ener[-1] + if last_frame: + error_start = 0 + else: + error_start = 1 + output_ener -= output_ener[-1] - init_ener[-1] diff = output_ener - init_ener diff = diff[error_start:] - error = np.linalg.norm(diff) / np.sqrt(np.size(output_ener) - 1) + error = np.linalg.norm(diff) / np.sqrt(np.size(output_ener) - error_start) res_data[ii] = {'nframes': len(init_ener), 'error': error} if not len(init_ener_tot) == len(output_ener_tot): From 4a32f3602095604862d9ac7a51dcfb8abaf83828 Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 5 Jul 2020 13:45:59 +0800 Subject: [PATCH 092/154] run properties by multi processes --- dpgen/auto_test/common_prop.py | 66 ++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 281cfc22c..90a27cfe3 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -1,6 +1,6 @@ import glob import os - +from multiprocessing import Pool import dpgen.auto_test.lib.util as util from dpgen import dlog from dpgen.util import sepline @@ -96,11 +96,14 @@ def make_property(confs, def run_property(confs, inter_param, property_list, - mdata): + mdata, + processes=2): # find all POSCARs and their name like mp-xxx # ... # conf_dirs = glob.glob(confs) # conf_dirs.sort() + pool=Pool(processes=processes) + print("Submit job via %d processes"%processes) conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) @@ -156,19 +159,52 @@ def run_property(confs, if len(run_tasks) == 0: return else: - run_tasks = [os.path.basename(ii) for ii in all_task] - machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) - disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - disp.run_jobs(resources, - command, - work_path, - run_tasks, - group_size, - forward_common_files, - forward_files, - backward_files, - outlog='outlog', - errlog='errlog') + ret=pool.apply_async(worker,(work_path, + all_task, + forward_common_files, + forward_files, + backward_files, + mdata, + inter_type, + )) + # run_tasks = [os.path.basename(ii) for ii in all_task] + # machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + # disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + # disp.run_jobs(resources, + # command, + # work_path, + # run_tasks, + # group_size, + # forward_common_files, + # forward_files, + # backward_files, + # outlog='outlog', + # errlog='errlog') + pool.close() + pool.join() + if ret.successful(): + print('finished') + +def worker(work_path, + all_task, + forward_common_files, + forward_files, + backward_files, + mdata, + inter_type): + run_tasks = [os.path.basename(ii) for ii in all_task] + machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + disp.run_jobs(resources, + command, + work_path, + run_tasks, + group_size, + forward_common_files, + forward_files, + backward_files, + outlog='outlog', + errlog='errlog') def post_property(confs, From 2e11c4d9861e80ba72179a74526323f5ce386e11 Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 5 Jul 2020 14:41:20 +0800 Subject: [PATCH 093/154] fix bug unittest vasp --- tests/auto_test/equi/vasp/outcar.json | 4671 +++++++++++++++++++++++++ tests/auto_test/test_vasp.py | 65 +- tests/auto_test/test_vasp_equi.py | 4 +- 3 files changed, 4729 insertions(+), 11 deletions(-) create mode 100644 tests/auto_test/equi/vasp/outcar.json diff --git a/tests/auto_test/equi/vasp/outcar.json b/tests/auto_test/equi/vasp/outcar.json new file mode 100644 index 000000000..9866ee2d3 --- /dev/null +++ b/tests/auto_test/equi/vasp/outcar.json @@ -0,0 +1,4671 @@ +{ + "@module": "dpdata.system", + "@class": "LabeledSystem", + "data": { + "atom_numbs": [ + 40 + ], + "atom_names": [ + "Li" + ], + "atom_types": { + "@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "orig": { + "@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": [ + 0, + 0, + 0 + ] + }, + "cells": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 6.788599968, + 0.0, + 0.0 + ], + [ + 0.0, + 8.062199593, + 0.0 + ], + [ + 0.0, + 0.0, + 5.014100075 + ] + ], + [ + [ + 6.919013948, + 0.0, + 0.0 + ], + [ + 0.0, + 8.216841856, + 0.0 + ], + [ + 0.0, + 0.0, + 5.101021816 + ] + ], + [ + [ + 6.88163237, + 0.0, + 0.0 + ], + [ + 0.0, + 8.172515536, + 0.0 + ], + [ + 0.0, + 0.0, + 5.076106758 + ] + ], + [ + [ + 6.881799927, + 0.0, + 0.0 + ], + [ + 0.0, + 8.172714222, + 0.0 + ], + [ + 0.0, + 0.0, + 5.076218436 + ] + ], + [ + [ + 6.88457676, + 0.0, + 0.0 + ], + [ + 0.0, + 8.171094924, + 0.0 + ], + [ + 0.0, + 0.0, + 5.076661641 + ] + ], + [ + [ + 6.887867809, + 0.0, + 0.0 + ], + [ + 0.0, + 8.169175765, + 0.0 + ], + [ + 0.0, + 0.0, + 5.077186918 + ] + ], + [ + [ + 6.89116219, + 0.0, + 0.0 + ], + [ + 0.0, + 8.166632104, + 0.0 + ], + [ + 0.0, + 0.0, + 5.076456596 + ] + ], + [ + [ + 6.895686318, + 0.0, + 0.0 + ], + [ + 0.0, + 8.163138929, + 0.0 + ], + [ + 0.0, + 0.0, + 5.075453655 + ] + ], + [ + [ + 6.899471416, + 0.0, + 0.0 + ], + [ + 0.0, + 8.160776364, + 0.0 + ], + [ + 0.0, + 0.0, + 5.074656493 + ] + ], + [ + [ + 6.90188056, + 0.0, + 0.0 + ], + [ + 0.0, + 8.159272636, + 0.0 + ], + [ + 0.0, + 0.0, + 5.074149114 + ] + ] + ] + }, + "coords": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 0.63229, + 0.93771, + 0.0 + ], + [ + 6.15631, + 7.12449, + 0.0 + ], + [ + 4.02659, + 3.09339, + 0.0 + ], + [ + 2.76201, + 4.96881, + 0.0 + ], + [ + 0.63229, + 4.96881, + 2.50705 + ], + [ + 6.15631, + 3.09339, + 2.50705 + ], + [ + 4.02659, + 7.12449, + 2.50705 + ], + [ + 2.76201, + 0.93771, + 2.50705 + ], + [ + 5.85856, + 7.28129, + 1.57337 + ], + [ + 0.93004, + 0.7809, + 1.57337 + ], + [ + 2.46426, + 4.812, + 1.57337 + ], + [ + 4.32434, + 3.2502, + 1.57337 + ], + [ + 5.85856, + 3.2502, + 4.08042 + ], + [ + 0.93004, + 4.812, + 4.08042 + ], + [ + 2.46426, + 0.7809, + 4.08042 + ], + [ + 4.32434, + 7.28129, + 4.08042 + ], + [ + 6.57021, + 0.94255, + 2.97873 + ], + [ + 0.21839, + 7.11965, + 2.97873 + ], + [ + 3.17591, + 3.08855, + 2.97873 + ], + [ + 3.61269, + 4.97365, + 2.97873 + ], + [ + 6.57021, + 4.97365, + 0.47168 + ], + [ + 0.21839, + 3.08855, + 0.47168 + ], + [ + 3.17591, + 7.11965, + 0.47168 + ], + [ + 3.61269, + 0.94255, + 0.47168 + ], + [ + 2.38477, + 2.16131, + 0.88183 + ], + [ + 4.40383, + 5.90089, + 0.88183 + ], + [ + 5.77907, + 1.86979, + 0.88183 + ], + [ + 1.00953, + 6.19241, + 0.88183 + ], + [ + 2.38477, + 6.19241, + 3.38888 + ], + [ + 4.40383, + 1.86979, + 3.38888 + ], + [ + 5.77907, + 5.90089, + 3.38888 + ], + [ + 1.00953, + 2.16131, + 3.38888 + ], + [ + 1.96917, + 7.35152, + 1.89057 + ], + [ + 4.81943, + 0.71068, + 1.89057 + ], + [ + 5.36347, + 4.74178, + 1.89057 + ], + [ + 1.42513, + 3.32042, + 1.89057 + ], + [ + 1.96917, + 3.32042, + 4.39762 + ], + [ + 4.81943, + 4.74178, + 4.39762 + ], + [ + 5.36347, + 0.71068, + 4.39762 + ], + [ + 1.42513, + 7.35152, + 4.39762 + ] + ], + [ + [ + 0.64551, + 0.95478, + 0.00397 + ], + [ + 6.27351, + 7.26206, + 0.00397 + ], + [ + 4.10501, + 3.15364, + 0.00397 + ], + [ + 2.814, + 5.0632, + 0.00397 + ], + [ + 0.64551, + 5.0632, + 2.55448 + ], + [ + 6.27351, + 3.15364, + 2.55448 + ], + [ + 4.10501, + 7.26206, + 2.55448 + ], + [ + 2.814, + 0.95478, + 2.55448 + ], + [ + 5.97226, + 7.42102, + 1.59728 + ], + [ + 0.94676, + 0.79582, + 1.59728 + ], + [ + 2.51275, + 4.90424, + 1.59728 + ], + [ + 4.40626, + 3.3126, + 1.59728 + ], + [ + 5.97226, + 3.3126, + 4.14779 + ], + [ + 0.94676, + 4.90424, + 4.14779 + ], + [ + 2.51275, + 0.79582, + 4.14779 + ], + [ + 4.40626, + 7.42102, + 4.14779 + ], + [ + 6.69814, + 0.96158, + 3.03039 + ], + [ + 0.22088, + 7.25527, + 3.03039 + ], + [ + 3.23863, + 3.14684, + 3.03039 + ], + [ + 3.68038, + 5.07, + 3.03039 + ], + [ + 6.69814, + 5.07, + 0.47988 + ], + [ + 0.22088, + 3.14684, + 0.47988 + ], + [ + 3.23863, + 7.25527, + 0.47988 + ], + [ + 3.68038, + 0.96158, + 0.47988 + ], + [ + 2.43045, + 2.20288, + 0.89797 + ], + [ + 4.48857, + 6.01396, + 0.89797 + ], + [ + 5.88995, + 1.90554, + 0.89797 + ], + [ + 1.02906, + 6.3113, + 0.89797 + ], + [ + 2.43045, + 6.3113, + 3.44848 + ], + [ + 4.48857, + 1.90554, + 3.44848 + ], + [ + 5.88995, + 6.01396, + 3.44848 + ], + [ + 1.02906, + 2.20288, + 3.44848 + ], + [ + 2.00721, + 7.4919, + 1.92187 + ], + [ + 4.9118, + 0.72494, + 1.92187 + ], + [ + 5.46672, + 4.83336, + 1.92187 + ], + [ + 1.4523, + 3.38348, + 1.92187 + ], + [ + 2.00721, + 3.38348, + 4.47238 + ], + [ + 4.9118, + 4.83336, + 4.47238 + ], + [ + 5.46672, + 0.72494, + 4.47238 + ], + [ + 1.4523, + 7.4919, + 4.47238 + ] + ], + [ + [ + 0.64172, + 0.94989, + 0.00284 + ], + [ + 6.23991, + 7.22263, + 0.00284 + ], + [ + 4.08254, + 3.13637, + 0.00284 + ], + [ + 2.7991, + 5.03614, + 0.00284 + ], + [ + 0.64172, + 5.03614, + 2.54089 + ], + [ + 6.23991, + 3.13637, + 2.54089 + ], + [ + 4.08254, + 7.22263, + 2.54089 + ], + [ + 2.7991, + 0.94989, + 2.54089 + ], + [ + 5.93967, + 7.38097, + 1.59042 + ], + [ + 0.94196, + 0.79154, + 1.59042 + ], + [ + 2.49885, + 4.8778, + 1.59042 + ], + [ + 4.38278, + 3.29472, + 1.59042 + ], + [ + 5.93967, + 3.29472, + 4.12848 + ], + [ + 0.94196, + 4.8778, + 4.12848 + ], + [ + 2.49885, + 0.79154, + 4.12848 + ], + [ + 4.38278, + 7.38097, + 4.12848 + ], + [ + 6.66147, + 0.95612, + 3.01558 + ], + [ + 0.22016, + 7.21639, + 3.01558 + ], + [ + 3.22065, + 3.13013, + 3.01558 + ], + [ + 3.66098, + 5.04238, + 3.01558 + ], + [ + 6.66147, + 5.04238, + 0.47753 + ], + [ + 0.22016, + 3.13013, + 0.47753 + ], + [ + 3.22065, + 7.21639, + 0.47753 + ], + [ + 3.66098, + 0.95612, + 0.47753 + ], + [ + 2.41735, + 2.19097, + 0.89334 + ], + [ + 4.46428, + 5.98155, + 0.89334 + ], + [ + 5.85817, + 1.89529, + 0.89334 + ], + [ + 1.02346, + 6.27723, + 0.89334 + ], + [ + 2.41735, + 6.27723, + 3.4314 + ], + [ + 4.46428, + 1.89529, + 3.4314 + ], + [ + 5.85817, + 5.98155, + 3.4314 + ], + [ + 1.02346, + 2.19097, + 3.4314 + ], + [ + 1.99631, + 7.45166, + 1.91289 + ], + [ + 4.88533, + 0.72085, + 1.91289 + ], + [ + 5.43712, + 4.80711, + 1.91289 + ], + [ + 1.44451, + 3.3654, + 1.91289 + ], + [ + 1.99631, + 3.3654, + 4.45095 + ], + [ + 4.88533, + 4.80711, + 4.45095 + ], + [ + 5.43712, + 0.72085, + 4.45095 + ], + [ + 1.44451, + 7.45166, + 4.45095 + ] + ], + [ + [ + 0.64174, + 0.94991, + 0.00284 + ], + [ + 6.24006, + 7.22281, + 0.00284 + ], + [ + 4.08264, + 3.13645, + 0.00284 + ], + [ + 2.79916, + 5.03626, + 0.00284 + ], + [ + 0.64174, + 5.03626, + 2.54095 + ], + [ + 6.24006, + 3.13645, + 2.54095 + ], + [ + 4.08264, + 7.22281, + 2.54095 + ], + [ + 2.79916, + 0.94991, + 2.54095 + ], + [ + 5.93982, + 7.38115, + 1.59045 + ], + [ + 0.94198, + 0.79156, + 1.59045 + ], + [ + 2.49891, + 4.87792, + 1.59045 + ], + [ + 4.38288, + 3.2948, + 1.59045 + ], + [ + 5.93982, + 3.2948, + 4.12856 + ], + [ + 0.94198, + 4.87792, + 4.12856 + ], + [ + 2.49891, + 0.79156, + 4.12856 + ], + [ + 4.38288, + 7.38115, + 4.12856 + ], + [ + 6.66164, + 0.95615, + 3.01565 + ], + [ + 0.22016, + 7.21657, + 3.01565 + ], + [ + 3.22074, + 3.13021, + 3.01565 + ], + [ + 3.66106, + 5.04251, + 3.01565 + ], + [ + 6.66164, + 5.04251, + 0.47754 + ], + [ + 0.22016, + 3.13021, + 0.47754 + ], + [ + 3.22074, + 7.21657, + 0.47754 + ], + [ + 3.66106, + 0.95615, + 0.47754 + ], + [ + 2.41741, + 2.19102, + 0.89336 + ], + [ + 4.46439, + 5.98169, + 0.89336 + ], + [ + 5.85831, + 1.89534, + 0.89336 + ], + [ + 1.02349, + 6.27738, + 0.89336 + ], + [ + 2.41741, + 6.27738, + 3.43147 + ], + [ + 4.46439, + 1.89534, + 3.43147 + ], + [ + 5.85831, + 5.98169, + 3.43147 + ], + [ + 1.02349, + 2.19102, + 3.43147 + ], + [ + 1.99635, + 7.45184, + 1.91293 + ], + [ + 4.88545, + 0.72087, + 1.91293 + ], + [ + 5.43725, + 4.80723, + 1.91293 + ], + [ + 1.44455, + 3.36548, + 1.91293 + ], + [ + 1.99635, + 3.36548, + 4.45104 + ], + [ + 4.88545, + 4.80723, + 4.45104 + ], + [ + 5.43725, + 0.72087, + 4.45104 + ], + [ + 1.44455, + 7.45184, + 4.45104 + ] + ], + [ + [ + 0.64135, + 0.95019, + 0.00056 + ], + [ + 6.24323, + 7.2209, + 0.00056 + ], + [ + 4.08364, + 3.13535, + 0.00056 + ], + [ + 2.80094, + 5.03574, + 0.00056 + ], + [ + 0.64135, + 5.03574, + 2.53889 + ], + [ + 6.24323, + 3.13535, + 2.53889 + ], + [ + 4.08364, + 7.2209, + 2.53889 + ], + [ + 2.80094, + 0.95019, + 2.53889 + ], + [ + 5.94229, + 7.37924, + 1.59165 + ], + [ + 0.94228, + 0.79186, + 1.59165 + ], + [ + 2.5, + 4.8774, + 1.59165 + ], + [ + 4.38457, + 3.29369, + 1.59165 + ], + [ + 5.94229, + 3.29369, + 4.12998 + ], + [ + 0.94228, + 4.8774, + 4.12998 + ], + [ + 2.5, + 0.79186, + 4.12998 + ], + [ + 4.38457, + 7.37924, + 4.12998 + ], + [ + 6.66329, + 0.95592, + 3.01613 + ], + [ + 0.22128, + 7.21517, + 3.01613 + ], + [ + 3.22101, + 3.12962, + 3.01613 + ], + [ + 3.66357, + 5.04147, + 3.01613 + ], + [ + 6.66329, + 5.04147, + 0.47779 + ], + [ + 0.22128, + 3.12962, + 0.47779 + ], + [ + 3.22101, + 7.21517, + 0.47779 + ], + [ + 3.66357, + 0.95592, + 0.47779 + ], + [ + 2.41738, + 2.19045, + 0.89434 + ], + [ + 4.4672, + 5.98065, + 0.89434 + ], + [ + 5.85966, + 1.8951, + 0.89434 + ], + [ + 1.02491, + 6.27599, + 0.89434 + ], + [ + 2.41738, + 6.27599, + 3.43267 + ], + [ + 4.4672, + 1.8951, + 3.43267 + ], + [ + 5.85966, + 5.98065, + 3.43267 + ], + [ + 1.02491, + 2.19045, + 3.43267 + ], + [ + 1.9982, + 7.44972, + 1.91321 + ], + [ + 4.88637, + 0.72138, + 1.91321 + ], + [ + 5.44049, + 4.80692, + 1.91321 + ], + [ + 1.44408, + 3.36417, + 1.91321 + ], + [ + 1.9982, + 3.36417, + 4.45155 + ], + [ + 4.88637, + 4.80692, + 4.45155 + ], + [ + 5.44049, + 0.72138, + 4.45155 + ], + [ + 1.44408, + 7.44972, + 4.45155 + ] + ], + [ + [ + 0.64089, + 0.95053, + -0.00214 + ], + [ + 6.24697, + 7.21864, + -0.00214 + ], + [ + 4.08483, + 3.13405, + -0.00214 + ], + [ + 2.80304, + 5.03512, + -0.00214 + ], + [ + 0.64089, + 5.03512, + 2.53645 + ], + [ + 6.24697, + 3.13405, + 2.53645 + ], + [ + 4.08483, + 7.21864, + 2.53645 + ], + [ + 2.80304, + 0.95053, + 2.53645 + ], + [ + 5.94523, + 7.37697, + 1.59306 + ], + [ + 0.94264, + 0.79221, + 1.59306 + ], + [ + 2.5013, + 4.8768, + 1.59306 + ], + [ + 4.38657, + 3.29238, + 1.59306 + ], + [ + 5.94523, + 3.29238, + 4.13166 + ], + [ + 0.94264, + 4.8768, + 4.13166 + ], + [ + 2.5013, + 0.79221, + 4.13166 + ], + [ + 4.38657, + 7.37697, + 4.13166 + ], + [ + 6.66526, + 0.95566, + 3.01669 + ], + [ + 0.22261, + 7.21352, + 3.01669 + ], + [ + 3.22132, + 3.12893, + 3.01669 + ], + [ + 3.66654, + 5.04025, + 3.01669 + ], + [ + 6.66526, + 5.04025, + 0.4781 + ], + [ + 0.22261, + 3.12893, + 0.4781 + ], + [ + 3.22132, + 7.21352, + 0.4781 + ], + [ + 3.66654, + 0.95566, + 0.4781 + ], + [ + 2.41733, + 2.18976, + 0.89549 + ], + [ + 4.47054, + 5.97941, + 0.89549 + ], + [ + 5.86126, + 1.89483, + 0.89549 + ], + [ + 1.0266, + 6.27435, + 0.89549 + ], + [ + 2.41733, + 6.27435, + 3.43409 + ], + [ + 4.47054, + 1.89483, + 3.43409 + ], + [ + 5.86126, + 5.97941, + 3.43409 + ], + [ + 1.0266, + 2.18976, + 3.43409 + ], + [ + 2.0004, + 7.4472, + 1.91355 + ], + [ + 4.88747, + 0.72197, + 1.91355 + ], + [ + 5.44433, + 4.80656, + 1.91355 + ], + [ + 1.44354, + 3.36262, + 1.91355 + ], + [ + 2.0004, + 3.36262, + 4.45214 + ], + [ + 4.88747, + 4.80656, + 4.45214 + ], + [ + 5.44433, + 0.72197, + 4.45214 + ], + [ + 1.44354, + 7.4472, + 4.45214 + ] + ], + [ + [ + 0.64081, + 0.95039, + -0.00237 + ], + [ + 6.25036, + 7.21624, + -0.00237 + ], + [ + 4.08639, + 3.13292, + -0.00237 + ], + [ + 2.80478, + 5.03371, + -0.00237 + ], + [ + 0.64081, + 5.03371, + 2.53586 + ], + [ + 6.25036, + 3.13292, + 2.53586 + ], + [ + 4.08639, + 7.21624, + 2.53586 + ], + [ + 2.80478, + 0.95039, + 2.53586 + ], + [ + 5.94913, + 7.37461, + 1.59277 + ], + [ + 0.94204, + 0.79202, + 1.59277 + ], + [ + 2.50354, + 4.87534, + 1.59277 + ], + [ + 4.38762, + 3.29129, + 1.59277 + ], + [ + 5.94913, + 3.29129, + 4.131 + ], + [ + 0.94204, + 4.87534, + 4.131 + ], + [ + 2.50354, + 0.79202, + 4.131 + ], + [ + 4.38762, + 7.37461, + 4.131 + ], + [ + 6.66743, + 0.95564, + 3.0152 + ], + [ + 0.22373, + 7.211, + 3.0152 + ], + [ + 3.22185, + 3.12768, + 3.0152 + ], + [ + 3.66931, + 5.03895, + 3.0152 + ], + [ + 6.66743, + 5.03895, + 0.47697 + ], + [ + 0.22373, + 3.12768, + 0.47697 + ], + [ + 3.22185, + 7.211, + 0.47697 + ], + [ + 3.66931, + 0.95564, + 0.47697 + ], + [ + 2.41807, + 2.18928, + 0.89606 + ], + [ + 4.47309, + 5.97735, + 0.89606 + ], + [ + 5.86365, + 1.89404, + 0.89606 + ], + [ + 1.02751, + 6.2726, + 0.89606 + ], + [ + 2.41807, + 6.2726, + 3.43429 + ], + [ + 4.47309, + 1.89404, + 3.43429 + ], + [ + 5.86365, + 5.97735, + 3.43429 + ], + [ + 1.02751, + 2.18928, + 3.43429 + ], + [ + 2.00201, + 7.44528, + 1.91392 + ], + [ + 4.88915, + 0.72136, + 1.91392 + ], + [ + 5.4476, + 4.80467, + 1.91392 + ], + [ + 1.44357, + 3.36196, + 1.91392 + ], + [ + 2.00201, + 3.36196, + 4.45215 + ], + [ + 4.88915, + 4.80467, + 4.45215 + ], + [ + 5.4476, + 0.72136, + 4.45215 + ], + [ + 1.44357, + 7.44528, + 4.45215 + ] + ], + [ + [ + 0.64068, + 0.9502, + -0.00267 + ], + [ + 6.255, + 7.21294, + -0.00267 + ], + [ + 4.08853, + 3.13137, + -0.00267 + ], + [ + 2.80716, + 5.03177, + -0.00267 + ], + [ + 0.64068, + 5.03177, + 2.53505 + ], + [ + 6.255, + 3.13137, + 2.53505 + ], + [ + 4.08853, + 7.21294, + 2.53505 + ], + [ + 2.80716, + 0.9502, + 2.53505 + ], + [ + 5.95448, + 7.37137, + 1.59237 + ], + [ + 0.94121, + 0.79177, + 1.59237 + ], + [ + 2.50663, + 4.87334, + 1.59237 + ], + [ + 4.38905, + 3.2898, + 1.59237 + ], + [ + 5.95448, + 3.2898, + 4.13009 + ], + [ + 0.94121, + 4.87334, + 4.13009 + ], + [ + 2.50663, + 0.79177, + 4.13009 + ], + [ + 4.38905, + 7.37137, + 4.13009 + ], + [ + 6.67041, + 0.95561, + 3.01315 + ], + [ + 0.22528, + 7.20753, + 3.01315 + ], + [ + 3.22257, + 3.12596, + 3.01315 + ], + [ + 3.67312, + 5.03718, + 3.01315 + ], + [ + 6.67041, + 5.03718, + 0.47542 + ], + [ + 0.22528, + 3.12596, + 0.47542 + ], + [ + 3.22257, + 7.20753, + 0.47542 + ], + [ + 3.67312, + 0.95561, + 0.47542 + ], + [ + 2.41908, + 2.18862, + 0.89684 + ], + [ + 4.4766, + 5.97452, + 0.89684 + ], + [ + 5.86693, + 1.89295, + 0.89684 + ], + [ + 1.02876, + 6.27019, + 0.89684 + ], + [ + 2.41908, + 6.27019, + 3.43457 + ], + [ + 4.4766, + 1.89295, + 3.43457 + ], + [ + 5.86693, + 5.97452, + 3.43457 + ], + [ + 1.02876, + 2.18862, + 3.43457 + ], + [ + 2.00424, + 7.44263, + 1.91444 + ], + [ + 4.89145, + 0.72051, + 1.91444 + ], + [ + 5.45208, + 4.80208, + 1.91444 + ], + [ + 1.44361, + 3.36106, + 1.91444 + ], + [ + 2.00424, + 3.36106, + 4.45217 + ], + [ + 4.89145, + 4.80208, + 4.45217 + ], + [ + 5.45208, + 0.72051, + 4.45217 + ], + [ + 1.44361, + 7.44263, + 4.45217 + ] + ], + [ + [ + 0.64138, + 0.94998, + -0.00285 + ], + [ + 6.25809, + 7.2108, + -0.00285 + ], + [ + 4.09112, + 3.13041, + -0.00285 + ], + [ + 2.80835, + 5.03037, + -0.00285 + ], + [ + 0.64138, + 5.03037, + 2.53448 + ], + [ + 6.25809, + 3.13041, + 2.53448 + ], + [ + 4.09112, + 7.2108, + 2.53448 + ], + [ + 2.80835, + 0.94998, + 2.53448 + ], + [ + 5.95796, + 7.36874, + 1.59187 + ], + [ + 0.94151, + 0.79204, + 1.59187 + ], + [ + 2.50823, + 4.87243, + 1.59187 + ], + [ + 4.39124, + 3.28835, + 1.59187 + ], + [ + 5.95796, + 3.28835, + 4.12919 + ], + [ + 0.94151, + 4.87243, + 4.12919 + ], + [ + 2.50823, + 0.79204, + 4.12919 + ], + [ + 4.39124, + 7.36874, + 4.12919 + ], + [ + 6.67363, + 0.95595, + 3.01191 + ], + [ + 0.22584, + 7.20483, + 3.01191 + ], + [ + 3.22389, + 3.12444, + 3.01191 + ], + [ + 3.67558, + 5.03633, + 3.01191 + ], + [ + 6.67363, + 5.03633, + 0.47459 + ], + [ + 0.22584, + 3.12444, + 0.47459 + ], + [ + 3.22389, + 7.20483, + 0.47459 + ], + [ + 3.67558, + 0.95595, + 0.47459 + ], + [ + 2.41979, + 2.18696, + 0.89725 + ], + [ + 4.47969, + 5.97381, + 0.89725 + ], + [ + 5.86952, + 1.89343, + 0.89725 + ], + [ + 1.02995, + 6.26735, + 0.89725 + ], + [ + 2.41979, + 6.26735, + 3.43458 + ], + [ + 4.47969, + 1.89343, + 3.43458 + ], + [ + 5.86952, + 5.97381, + 3.43458 + ], + [ + 1.02995, + 2.18696, + 3.43458 + ], + [ + 2.00687, + 7.44196, + 1.91477 + ], + [ + 4.8926, + 0.71882, + 1.91477 + ], + [ + 5.45661, + 4.79921, + 1.91477 + ], + [ + 1.44286, + 3.36157, + 1.91477 + ], + [ + 2.00687, + 3.36157, + 4.4521 + ], + [ + 4.8926, + 4.79921, + 4.4521 + ], + [ + 5.45661, + 0.71882, + 4.4521 + ], + [ + 1.44286, + 7.44196, + 4.4521 + ] + ], + [ + [ + 0.64182, + 0.94984, + -0.00296 + ], + [ + 6.26006, + 7.20943, + -0.00296 + ], + [ + 4.09276, + 3.1298, + -0.00296 + ], + [ + 2.80912, + 5.02947, + -0.00296 + ], + [ + 0.64182, + 5.02947, + 2.53412 + ], + [ + 6.26006, + 3.1298, + 2.53412 + ], + [ + 4.09276, + 7.20943, + 2.53412 + ], + [ + 2.80912, + 0.94984, + 2.53412 + ], + [ + 5.96019, + 7.36706, + 1.59155 + ], + [ + 0.9417, + 0.79221, + 1.59155 + ], + [ + 2.50924, + 4.87185, + 1.59155 + ], + [ + 4.39264, + 3.28742, + 1.59155 + ], + [ + 5.96019, + 3.28742, + 4.12862 + ], + [ + 0.9417, + 4.87185, + 4.12862 + ], + [ + 2.50924, + 0.79221, + 4.12862 + ], + [ + 4.39264, + 7.36706, + 4.12862 + ], + [ + 6.67567, + 0.95616, + 3.01113 + ], + [ + 0.22621, + 7.20311, + 3.01113 + ], + [ + 3.22473, + 3.12347, + 3.01113 + ], + [ + 3.67715, + 5.0358, + 3.01113 + ], + [ + 6.67567, + 5.0358, + 0.47406 + ], + [ + 0.22621, + 3.12347, + 0.47406 + ], + [ + 3.22473, + 7.20311, + 0.47406 + ], + [ + 3.67715, + 0.95616, + 0.47406 + ], + [ + 2.42023, + 2.18591, + 0.89752 + ], + [ + 4.48165, + 5.97336, + 0.89752 + ], + [ + 5.87117, + 1.89373, + 0.89752 + ], + [ + 1.03071, + 6.26555, + 0.89752 + ], + [ + 2.42023, + 6.26555, + 3.43459 + ], + [ + 4.48165, + 1.89373, + 3.43459 + ], + [ + 5.87117, + 5.97336, + 3.43459 + ], + [ + 1.03071, + 2.18591, + 3.43459 + ], + [ + 2.00855, + 7.44153, + 1.91498 + ], + [ + 4.89333, + 0.71774, + 1.91498 + ], + [ + 5.45949, + 4.79738, + 1.91498 + ], + [ + 1.44239, + 3.36189, + 1.91498 + ], + [ + 2.00855, + 3.36189, + 4.45205 + ], + [ + 4.89333, + 4.79738, + 4.45205 + ], + [ + 5.45949, + 0.71774, + 4.45205 + ], + [ + 1.44239, + 7.44153, + 4.45205 + ] + ] + ] + }, + "energies": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + -11.72779781, + -18.74957786, + -16.81305218, + -16.82186583, + -16.85980028, + -16.90364003, + -16.90701204, + -16.91112674, + -16.92426788, + -16.93243126 + ] + }, + "forces": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 0.018125, + -0.015652, + 0.067435 + ], + [ + -0.018125, + 0.015652, + 0.067435 + ], + [ + 0.018125, + 0.015652, + 0.067435 + ], + [ + -0.018125, + -0.015652, + 0.067435 + ], + [ + 0.018125, + -0.015652, + 0.067435 + ], + [ + -0.018125, + 0.015652, + 0.067435 + ], + [ + 0.018125, + 0.015652, + 0.067435 + ], + [ + -0.018125, + -0.015652, + 0.067435 + ], + [ + 0.019454, + 0.001121, + -0.057246 + ], + [ + -0.019454, + -0.001121, + -0.057246 + ], + [ + 0.019454, + -0.001121, + -0.057246 + ], + [ + -0.019454, + 0.001121, + -0.057246 + ], + [ + 0.019454, + 0.001121, + -0.057246 + ], + [ + -0.019454, + -0.001121, + -0.057246 + ], + [ + 0.019454, + -0.001121, + -0.057246 + ], + [ + -0.019454, + 0.001121, + -0.057246 + ], + [ + 0.028951, + 0.016017, + 0.000384 + ], + [ + -0.028951, + -0.016017, + 0.000384 + ], + [ + 0.028951, + -0.016017, + 0.000384 + ], + [ + -0.028951, + 0.016017, + 0.000384 + ], + [ + 0.028951, + 0.016017, + 0.000384 + ], + [ + -0.028951, + -0.016017, + 0.000384 + ], + [ + 0.028951, + -0.016017, + 0.000384 + ], + [ + -0.028951, + 0.016017, + 0.000384 + ], + [ + -0.002262, + 0.001907, + 0.014428 + ], + [ + 0.002262, + -0.001907, + 0.014428 + ], + [ + -0.002262, + -0.001907, + 0.014428 + ], + [ + 0.002262, + 0.001907, + 0.014428 + ], + [ + -0.002262, + 0.001907, + 0.014428 + ], + [ + 0.002262, + -0.001907, + 0.014428 + ], + [ + -0.002262, + -0.001907, + 0.014428 + ], + [ + 0.002262, + 0.001907, + 0.014428 + ], + [ + 0.00358, + -0.010594, + -0.025001 + ], + [ + -0.00358, + 0.010594, + -0.025001 + ], + [ + 0.00358, + 0.010594, + -0.025001 + ], + [ + -0.00358, + -0.010594, + -0.025001 + ], + [ + 0.00358, + -0.010594, + -0.025001 + ], + [ + -0.00358, + 0.010594, + -0.025001 + ], + [ + 0.00358, + 0.010594, + -0.025001 + ], + [ + -0.00358, + -0.010594, + -0.025001 + ] + ], + [ + [ + -0.023002, + 0.017697, + -0.083409 + ], + [ + 0.023002, + -0.017697, + -0.083409 + ], + [ + -0.023002, + -0.017697, + -0.083409 + ], + [ + 0.023002, + 0.017697, + -0.083409 + ], + [ + -0.023002, + 0.017697, + -0.083409 + ], + [ + 0.023002, + -0.017697, + -0.083409 + ], + [ + -0.023002, + -0.017697, + -0.083409 + ], + [ + 0.023002, + 0.017697, + -0.083409 + ], + [ + -0.005499, + -0.011367, + 0.048982 + ], + [ + 0.005499, + 0.011367, + 0.048982 + ], + [ + -0.005499, + 0.011367, + 0.048982 + ], + [ + 0.005499, + -0.011367, + 0.048982 + ], + [ + -0.005499, + -0.011367, + 0.048982 + ], + [ + 0.005499, + 0.011367, + 0.048982 + ], + [ + -0.005499, + 0.011367, + 0.048982 + ], + [ + 0.005499, + -0.011367, + 0.048982 + ], + [ + -0.036614, + -0.006836, + 0.005045 + ], + [ + 0.036614, + 0.006836, + 0.005045 + ], + [ + -0.036614, + 0.006836, + 0.005045 + ], + [ + 0.036614, + -0.006836, + 0.005045 + ], + [ + -0.036614, + -0.006836, + 0.005045 + ], + [ + 0.036614, + 0.006836, + 0.005045 + ], + [ + -0.036614, + 0.006836, + 0.005045 + ], + [ + 0.036614, + -0.006836, + 0.005045 + ], + [ + -0.024331, + -0.004231, + 0.017007 + ], + [ + 0.024331, + 0.004231, + 0.017007 + ], + [ + -0.024331, + 0.004231, + 0.017007 + ], + [ + 0.024331, + -0.004231, + 0.017007 + ], + [ + -0.024331, + -0.004231, + 0.017007 + ], + [ + 0.024331, + 0.004231, + 0.017007 + ], + [ + -0.024331, + 0.004231, + 0.017007 + ], + [ + 0.024331, + -0.004231, + 0.017007 + ], + [ + 0.024759, + -0.011876, + 0.012375 + ], + [ + -0.024759, + 0.011876, + 0.012375 + ], + [ + 0.024759, + 0.011876, + 0.012375 + ], + [ + -0.024759, + -0.011876, + 0.012375 + ], + [ + 0.024759, + -0.011876, + 0.012375 + ], + [ + -0.024759, + 0.011876, + 0.012375 + ], + [ + 0.024759, + 0.011876, + 0.012375 + ], + [ + -0.024759, + -0.011876, + 0.012375 + ] + ], + [ + [ + -0.011795, + 0.008703, + -0.041811 + ], + [ + 0.011795, + -0.008703, + -0.041811 + ], + [ + -0.011795, + -0.008703, + -0.041811 + ], + [ + 0.011795, + 0.008703, + -0.041811 + ], + [ + -0.011795, + 0.008703, + -0.041811 + ], + [ + 0.011795, + -0.008703, + -0.041811 + ], + [ + -0.011795, + -0.008703, + -0.041811 + ], + [ + 0.011795, + 0.008703, + -0.041811 + ], + [ + 0.001473, + -0.008279, + 0.019357 + ], + [ + -0.001473, + 0.008279, + 0.019357 + ], + [ + 0.001473, + 0.008279, + 0.019357 + ], + [ + -0.001473, + -0.008279, + 0.019357 + ], + [ + 0.001473, + -0.008279, + 0.019357 + ], + [ + -0.001473, + 0.008279, + 0.019357 + ], + [ + 0.001473, + 0.008279, + 0.019357 + ], + [ + -0.001473, + -0.008279, + 0.019357 + ], + [ + -0.018852, + -0.000651, + 0.003959 + ], + [ + 0.018852, + 0.000651, + 0.003959 + ], + [ + -0.018852, + 0.000651, + 0.003959 + ], + [ + 0.018852, + -0.000651, + 0.003959 + ], + [ + -0.018852, + -0.000651, + 0.003959 + ], + [ + 0.018852, + 0.000651, + 0.003959 + ], + [ + -0.018852, + 0.000651, + 0.003959 + ], + [ + 0.018852, + -0.000651, + 0.003959 + ], + [ + -0.018503, + -0.002603, + 0.016386 + ], + [ + 0.018503, + 0.002603, + 0.016386 + ], + [ + -0.018503, + 0.002603, + 0.016386 + ], + [ + 0.018503, + -0.002603, + 0.016386 + ], + [ + -0.018503, + -0.002603, + 0.016386 + ], + [ + 0.018503, + 0.002603, + 0.016386 + ], + [ + -0.018503, + 0.002603, + 0.016386 + ], + [ + 0.018503, + -0.002603, + 0.016386 + ], + [ + 0.019077, + -0.011806, + 0.002108 + ], + [ + -0.019077, + 0.011806, + 0.002108 + ], + [ + 0.019077, + 0.011806, + 0.002108 + ], + [ + -0.019077, + -0.011806, + 0.002108 + ], + [ + 0.019077, + -0.011806, + 0.002108 + ], + [ + -0.019077, + 0.011806, + 0.002108 + ], + [ + 0.019077, + 0.011806, + 0.002108 + ], + [ + -0.019077, + -0.011806, + 0.002108 + ] + ], + [ + [ + -0.01185, + 0.008745, + -0.042001 + ], + [ + 0.01185, + -0.008745, + -0.042001 + ], + [ + -0.01185, + -0.008745, + -0.042001 + ], + [ + 0.01185, + 0.008745, + -0.042001 + ], + [ + -0.01185, + 0.008745, + -0.042001 + ], + [ + 0.01185, + -0.008745, + -0.042001 + ], + [ + -0.01185, + -0.008745, + -0.042001 + ], + [ + 0.01185, + 0.008745, + -0.042001 + ], + [ + 0.001443, + -0.008294, + 0.019492 + ], + [ + -0.001443, + 0.008294, + 0.019492 + ], + [ + 0.001443, + 0.008294, + 0.019492 + ], + [ + -0.001443, + -0.008294, + 0.019492 + ], + [ + 0.001443, + -0.008294, + 0.019492 + ], + [ + -0.001443, + 0.008294, + 0.019492 + ], + [ + 0.001443, + 0.008294, + 0.019492 + ], + [ + -0.001443, + -0.008294, + 0.019492 + ], + [ + -0.018936, + -0.000677, + 0.003963 + ], + [ + 0.018936, + 0.000677, + 0.003963 + ], + [ + -0.018936, + 0.000677, + 0.003963 + ], + [ + 0.018936, + -0.000677, + 0.003963 + ], + [ + -0.018936, + -0.000677, + 0.003963 + ], + [ + 0.018936, + 0.000677, + 0.003963 + ], + [ + -0.018936, + 0.000677, + 0.003963 + ], + [ + 0.018936, + -0.000677, + 0.003963 + ], + [ + -0.01853, + -0.002608, + 0.01639 + ], + [ + 0.01853, + 0.002608, + 0.01639 + ], + [ + -0.01853, + 0.002608, + 0.01639 + ], + [ + 0.01853, + -0.002608, + 0.01639 + ], + [ + -0.01853, + -0.002608, + 0.01639 + ], + [ + 0.01853, + 0.002608, + 0.01639 + ], + [ + -0.01853, + 0.002608, + 0.01639 + ], + [ + 0.01853, + -0.002608, + 0.01639 + ], + [ + 0.019103, + -0.011809, + 0.002156 + ], + [ + -0.019103, + 0.011809, + 0.002156 + ], + [ + 0.019103, + 0.011809, + 0.002156 + ], + [ + -0.019103, + -0.011809, + 0.002156 + ], + [ + 0.019103, + -0.011809, + 0.002156 + ], + [ + -0.019103, + 0.011809, + 0.002156 + ], + [ + 0.019103, + 0.011809, + 0.002156 + ], + [ + -0.019103, + -0.011809, + 0.002156 + ] + ], + [ + [ + -0.007592, + 0.004656, + -0.018902 + ], + [ + 0.007592, + -0.004656, + -0.018902 + ], + [ + -0.007592, + -0.004656, + -0.018902 + ], + [ + 0.007592, + 0.004656, + -0.018902 + ], + [ + -0.007592, + 0.004656, + -0.018902 + ], + [ + 0.007592, + -0.004656, + -0.018902 + ], + [ + -0.007592, + -0.004656, + -0.018902 + ], + [ + 0.007592, + 0.004656, + -0.018902 + ], + [ + 0.007725, + -0.003861, + 0.007617 + ], + [ + -0.007725, + 0.003861, + 0.007617 + ], + [ + 0.007725, + 0.003861, + 0.007617 + ], + [ + -0.007725, + -0.003861, + 0.007617 + ], + [ + 0.007725, + -0.003861, + 0.007617 + ], + [ + -0.007725, + 0.003861, + 0.007617 + ], + [ + 0.007725, + 0.003861, + 0.007617 + ], + [ + -0.007725, + -0.003861, + 0.007617 + ], + [ + -0.014709, + 0.001577, + -0.005528 + ], + [ + 0.014709, + -0.001577, + -0.005528 + ], + [ + -0.014709, + -0.001577, + -0.005528 + ], + [ + 0.014709, + 0.001577, + -0.005528 + ], + [ + -0.014709, + 0.001577, + -0.005528 + ], + [ + 0.014709, + -0.001577, + -0.005528 + ], + [ + -0.014709, + -0.001577, + -0.005528 + ], + [ + 0.014709, + 0.001577, + -0.005528 + ], + [ + -0.010477, + 0.00026, + 0.01151 + ], + [ + 0.010477, + -0.00026, + 0.01151 + ], + [ + -0.010477, + -0.00026, + 0.01151 + ], + [ + 0.010477, + 0.00026, + 0.01151 + ], + [ + -0.010477, + 0.00026, + 0.01151 + ], + [ + 0.010477, + -0.00026, + 0.01151 + ], + [ + -0.010477, + -0.00026, + 0.01151 + ], + [ + 0.010477, + 0.00026, + 0.01151 + ], + [ + 0.012369, + -0.002232, + 0.005303 + ], + [ + -0.012369, + 0.002232, + 0.005303 + ], + [ + 0.012369, + 0.002232, + 0.005303 + ], + [ + -0.012369, + -0.002232, + 0.005303 + ], + [ + 0.012369, + -0.002232, + 0.005303 + ], + [ + -0.012369, + 0.002232, + 0.005303 + ], + [ + 0.012369, + 0.002232, + 0.005303 + ], + [ + -0.012369, + -0.002232, + 0.005303 + ] + ], + [ + [ + -0.002526, + -0.000161, + 0.008466 + ], + [ + 0.002526, + 0.000161, + 0.008466 + ], + [ + -0.002526, + 0.000161, + 0.008466 + ], + [ + 0.002526, + -0.000161, + 0.008466 + ], + [ + -0.002526, + -0.000161, + 0.008466 + ], + [ + 0.002526, + 0.000161, + 0.008466 + ], + [ + -0.002526, + 0.000161, + 0.008466 + ], + [ + 0.002526, + -0.000161, + 0.008466 + ], + [ + 0.015138, + 0.001425, + -0.00638 + ], + [ + -0.015138, + -0.001425, + -0.00638 + ], + [ + 0.015138, + -0.001425, + -0.00638 + ], + [ + -0.015138, + 0.001425, + -0.00638 + ], + [ + 0.015138, + 0.001425, + -0.00638 + ], + [ + -0.015138, + -0.001425, + -0.00638 + ], + [ + 0.015138, + -0.001425, + -0.00638 + ], + [ + -0.015138, + 0.001425, + -0.00638 + ], + [ + -0.009743, + 0.004258, + -0.01683 + ], + [ + 0.009743, + -0.004258, + -0.01683 + ], + [ + -0.009743, + -0.004258, + -0.01683 + ], + [ + 0.009743, + 0.004258, + -0.01683 + ], + [ + -0.009743, + 0.004258, + -0.01683 + ], + [ + 0.009743, + -0.004258, + -0.01683 + ], + [ + -0.009743, + -0.004258, + -0.01683 + ], + [ + 0.009743, + 0.004258, + -0.01683 + ], + [ + -0.000973, + 0.003679, + 0.005681 + ], + [ + 0.000973, + -0.003679, + 0.005681 + ], + [ + -0.000973, + -0.003679, + 0.005681 + ], + [ + 0.000973, + 0.003679, + 0.005681 + ], + [ + -0.000973, + 0.003679, + 0.005681 + ], + [ + 0.000973, + -0.003679, + 0.005681 + ], + [ + -0.000973, + -0.003679, + 0.005681 + ], + [ + 0.000973, + 0.003679, + 0.005681 + ], + [ + 0.004404, + 0.009108, + 0.009063 + ], + [ + -0.004404, + -0.009108, + 0.009063 + ], + [ + 0.004404, + -0.009108, + 0.009063 + ], + [ + -0.004404, + 0.009108, + 0.009063 + ], + [ + 0.004404, + 0.009108, + 0.009063 + ], + [ + -0.004404, + -0.009108, + 0.009063 + ], + [ + 0.004404, + -0.009108, + 0.009063 + ], + [ + -0.004404, + 0.009108, + 0.009063 + ] + ], + [ + [ + 0.002194, + -0.000492, + 0.004955 + ], + [ + -0.002194, + 0.000492, + 0.004955 + ], + [ + 0.002194, + 0.000492, + 0.004955 + ], + [ + -0.002194, + -0.000492, + 0.004955 + ], + [ + 0.002194, + -0.000492, + 0.004955 + ], + [ + -0.002194, + 0.000492, + 0.004955 + ], + [ + 0.002194, + 0.000492, + 0.004955 + ], + [ + -0.002194, + -0.000492, + 0.004955 + ], + [ + 0.005173, + -0.001582, + -0.004768 + ], + [ + -0.005173, + 0.001582, + -0.004768 + ], + [ + 0.005173, + 0.001582, + -0.004768 + ], + [ + -0.005173, + -0.001582, + -0.004768 + ], + [ + 0.005173, + -0.001582, + -0.004768 + ], + [ + -0.005173, + 0.001582, + -0.004768 + ], + [ + 0.005173, + 0.001582, + -0.004768 + ], + [ + -0.005173, + -0.001582, + -0.004768 + ], + [ + -0.003399, + 0.004525, + -0.00899 + ], + [ + 0.003399, + -0.004525, + -0.00899 + ], + [ + -0.003399, + -0.004525, + -0.00899 + ], + [ + 0.003399, + 0.004525, + -0.00899 + ], + [ + -0.003399, + 0.004525, + -0.00899 + ], + [ + 0.003399, + -0.004525, + -0.00899 + ], + [ + -0.003399, + -0.004525, + -0.00899 + ], + [ + 0.003399, + 0.004525, + -0.00899 + ], + [ + -0.002013, + -0.004248, + 0.00314 + ], + [ + 0.002013, + 0.004248, + 0.00314 + ], + [ + -0.002013, + 0.004248, + 0.00314 + ], + [ + 0.002013, + -0.004248, + 0.00314 + ], + [ + -0.002013, + -0.004248, + 0.00314 + ], + [ + 0.002013, + 0.004248, + 0.00314 + ], + [ + -0.002013, + 0.004248, + 0.00314 + ], + [ + 0.002013, + -0.004248, + 0.00314 + ], + [ + 0.007778, + 0.011456, + 0.005663 + ], + [ + -0.007778, + -0.011456, + 0.005663 + ], + [ + 0.007778, + -0.011456, + 0.005663 + ], + [ + -0.007778, + 0.011456, + 0.005663 + ], + [ + 0.007778, + 0.011456, + 0.005663 + ], + [ + -0.007778, + -0.011456, + 0.005663 + ], + [ + 0.007778, + -0.011456, + 0.005663 + ], + [ + -0.007778, + 0.011456, + 0.005663 + ] + ], + [ + [ + 0.008641, + -0.000956, + 0.000165 + ], + [ + -0.008641, + 0.000956, + 0.000165 + ], + [ + 0.008641, + 0.000956, + 0.000165 + ], + [ + -0.008641, + -0.000956, + 0.000165 + ], + [ + 0.008641, + -0.000956, + 0.000165 + ], + [ + -0.008641, + 0.000956, + 0.000165 + ], + [ + 0.008641, + 0.000956, + 0.000165 + ], + [ + -0.008641, + -0.000956, + 0.000165 + ], + [ + -0.008512, + -0.005726, + -0.002518 + ], + [ + 0.008512, + 0.005726, + -0.002518 + ], + [ + -0.008512, + 0.005726, + -0.002518 + ], + [ + 0.008512, + -0.005726, + -0.002518 + ], + [ + -0.008512, + -0.005726, + -0.002518 + ], + [ + 0.008512, + 0.005726, + -0.002518 + ], + [ + -0.008512, + 0.005726, + -0.002518 + ], + [ + 0.008512, + -0.005726, + -0.002518 + ], + [ + 0.005279, + 0.004878, + 0.001777 + ], + [ + -0.005279, + -0.004878, + 0.001777 + ], + [ + 0.005279, + -0.004878, + 0.001777 + ], + [ + -0.005279, + 0.004878, + 0.001777 + ], + [ + 0.005279, + 0.004878, + 0.001777 + ], + [ + -0.005279, + -0.004878, + 0.001777 + ], + [ + 0.005279, + -0.004878, + 0.001777 + ], + [ + -0.005279, + 0.004878, + 0.001777 + ], + [ + -0.003445, + -0.01513, + -0.000403 + ], + [ + 0.003445, + 0.01513, + -0.000403 + ], + [ + -0.003445, + 0.01513, + -0.000403 + ], + [ + 0.003445, + -0.01513, + -0.000403 + ], + [ + -0.003445, + -0.01513, + -0.000403 + ], + [ + 0.003445, + 0.01513, + -0.000403 + ], + [ + -0.003445, + 0.01513, + -0.000403 + ], + [ + 0.003445, + -0.01513, + -0.000403 + ], + [ + 0.012408, + 0.014672, + 0.00098 + ], + [ + -0.012408, + -0.014672, + 0.00098 + ], + [ + 0.012408, + -0.014672, + 0.00098 + ], + [ + -0.012408, + 0.014672, + 0.00098 + ], + [ + 0.012408, + 0.014672, + 0.00098 + ], + [ + -0.012408, + -0.014672, + 0.00098 + ], + [ + 0.012408, + -0.014672, + 0.00098 + ], + [ + -0.012408, + 0.014672, + 0.00098 + ] + ], + [ + [ + 0.002637, + 0.002022, + 0.001604 + ], + [ + -0.002637, + -0.002022, + 0.001604 + ], + [ + 0.002637, + -0.002022, + 0.001604 + ], + [ + -0.002637, + 0.002022, + 0.001604 + ], + [ + 0.002637, + 0.002022, + 0.001604 + ], + [ + -0.002637, + -0.002022, + 0.001604 + ], + [ + 0.002637, + -0.002022, + 0.001604 + ], + [ + -0.002637, + 0.002022, + 0.001604 + ], + [ + -0.002306, + -0.002705, + 0.0005 + ], + [ + 0.002306, + 0.002705, + 0.0005 + ], + [ + -0.002306, + 0.002705, + 0.0005 + ], + [ + 0.002306, + -0.002705, + 0.0005 + ], + [ + -0.002306, + -0.002705, + 0.0005 + ], + [ + 0.002306, + 0.002705, + 0.0005 + ], + [ + -0.002306, + 0.002705, + 0.0005 + ], + [ + 0.002306, + -0.002705, + 0.0005 + ], + [ + 0.001774, + 0.001278, + -7.6e-05 + ], + [ + -0.001774, + -0.001278, + -7.6e-05 + ], + [ + 0.001774, + -0.001278, + -7.6e-05 + ], + [ + -0.001774, + 0.001278, + -7.6e-05 + ], + [ + 0.001774, + 0.001278, + -7.6e-05 + ], + [ + -0.001774, + -0.001278, + -7.6e-05 + ], + [ + 0.001774, + -0.001278, + -7.6e-05 + ], + [ + -0.001774, + 0.001278, + -7.6e-05 + ], + [ + -0.003448, + -0.004554, + -0.001114 + ], + [ + 0.003448, + 0.004554, + -0.001114 + ], + [ + -0.003448, + 0.004554, + -0.001114 + ], + [ + 0.003448, + -0.004554, + -0.001114 + ], + [ + -0.003448, + -0.004554, + -0.001114 + ], + [ + 0.003448, + 0.004554, + -0.001114 + ], + [ + -0.003448, + 0.004554, + -0.001114 + ], + [ + 0.003448, + -0.004554, + -0.001114 + ], + [ + 0.008581, + 0.006044, + -0.000914 + ], + [ + -0.008581, + -0.006044, + -0.000914 + ], + [ + 0.008581, + -0.006044, + -0.000914 + ], + [ + -0.008581, + 0.006044, + -0.000914 + ], + [ + 0.008581, + 0.006044, + -0.000914 + ], + [ + -0.008581, + -0.006044, + -0.000914 + ], + [ + 0.008581, + -0.006044, + -0.000914 + ], + [ + -0.008581, + 0.006044, + -0.000914 + ] + ], + [ + [ + -0.001197, + 0.003913, + 0.002522 + ], + [ + 0.001197, + -0.003913, + 0.002522 + ], + [ + -0.001197, + -0.003913, + 0.002522 + ], + [ + 0.001197, + 0.003913, + 0.002522 + ], + [ + -0.001197, + 0.003913, + 0.002522 + ], + [ + 0.001197, + -0.003913, + 0.002522 + ], + [ + -0.001197, + -0.003913, + 0.002522 + ], + [ + 0.001197, + 0.003913, + 0.002522 + ], + [ + 0.001641, + -0.000771, + 0.002435 + ], + [ + -0.001641, + 0.000771, + 0.002435 + ], + [ + 0.001641, + 0.000771, + 0.002435 + ], + [ + -0.001641, + -0.000771, + 0.002435 + ], + [ + 0.001641, + -0.000771, + 0.002435 + ], + [ + -0.001641, + 0.000771, + 0.002435 + ], + [ + 0.001641, + 0.000771, + 0.002435 + ], + [ + -0.001641, + -0.000771, + 0.002435 + ], + [ + -0.000455, + -0.001015, + -0.001248 + ], + [ + 0.000455, + 0.001015, + -0.001248 + ], + [ + -0.000455, + 0.001015, + -0.001248 + ], + [ + 0.000455, + -0.001015, + -0.001248 + ], + [ + -0.000455, + -0.001015, + -0.001248 + ], + [ + 0.000455, + 0.001015, + -0.001248 + ], + [ + -0.000455, + 0.001015, + -0.001248 + ], + [ + 0.000455, + -0.001015, + -0.001248 + ], + [ + -0.003444, + 0.002186, + -0.001587 + ], + [ + 0.003444, + -0.002186, + -0.001587 + ], + [ + -0.003444, + -0.002186, + -0.001587 + ], + [ + 0.003444, + 0.002186, + -0.001587 + ], + [ + -0.003444, + 0.002186, + -0.001587 + ], + [ + 0.003444, + -0.002186, + -0.001587 + ], + [ + -0.003444, + -0.002186, + -0.001587 + ], + [ + 0.003444, + 0.002186, + -0.001587 + ], + [ + 0.006137, + 0.000518, + -0.002121 + ], + [ + -0.006137, + -0.000518, + -0.002121 + ], + [ + 0.006137, + -0.000518, + -0.002121 + ], + [ + -0.006137, + 0.000518, + -0.002121 + ], + [ + 0.006137, + 0.000518, + -0.002121 + ], + [ + -0.006137, + -0.000518, + -0.002121 + ], + [ + 0.006137, + -0.000518, + -0.002121 + ], + [ + -0.006137, + 0.000518, + -0.002121 + ] + ] + ] + }, + "virials": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 133.17237272523727, + 0.0, + 0.0 + ], + [ + 0.0, + 133.15193342555057, + 0.0 + ], + [ + 0.0, + 0.0, + 131.87665164338097 + ] + ], + [ + [ + 121.84179940211985, + 0.0, + 0.0 + ], + [ + 0.0, + 121.24763954542269, + 0.0 + ], + [ + 0.0, + 0.0, + 122.0307094090781 + ] + ], + [ + [ + 125.01101213929674, + 0.0, + 0.0 + ], + [ + 0.0, + 124.5709219622052, + 0.0 + ], + [ + 0.0, + 0.0, + 124.78095937229163 + ] + ], + [ + [ + 124.99670515632627, + 0.0, + 0.0 + ], + [ + 0.0, + 124.55589782634846, + 0.0 + ], + [ + 0.0, + 0.0, + 124.76854817773383 + ] + ], + [ + [ + 125.0059291530467, + 0.0, + 0.0 + ], + [ + 0.0, + 124.60954955602742, + 0.0 + ], + [ + 0.0, + 0.0, + 124.74358690985343 + ] + ], + [ + [ + 125.01717101735687, + 0.0, + 0.0 + ], + [ + 0.0, + 124.67342848162906, + 0.0 + ], + [ + 0.0, + 0.0, + 124.71382462199215 + ] + ], + [ + [ + 124.96636463960836, + 0.0, + 0.0 + ], + [ + 0.0, + 124.73098286015673, + 0.0 + ], + [ + 0.0, + 0.0, + 124.75254638746581 + ] + ], + [ + [ + 124.89699498451381, + 0.0, + 0.0 + ], + [ + 0.0, + 124.81062230390356, + 0.0 + ], + [ + 0.0, + 0.0, + 124.8057951914397 + ] + ], + [ + [ + 124.80974746277437, + 0.0, + 0.0 + ], + [ + 0.0, + 124.88528781441615, + 0.0 + ], + [ + 0.0, + 0.0, + 124.78671869463729 + ] + ], + [ + [ + 124.75427781922642, + 0.0, + 0.0 + ], + [ + 0.0, + 124.9326932361144, + 0.0 + ], + [ + 0.0, + 0.0, + 124.77471666362935 + ] + ] + ] + }, + "stress": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 777.49529, + 0.0, + 0.0 + ], + [ + 0.0, + 777.37596, + 0.0 + ], + [ + 0.0, + 0.0, + 769.93053 + ] + ], + [ + [ + 673.13222, + 0.0, + 0.0 + ], + [ + 0.0, + 669.8497, + 0.0 + ], + [ + 0.0, + 0.0, + 674.17588 + ] + ], + [ + [ + 701.58564, + 0.0, + 0.0 + ], + [ + 0.0, + 699.11577, + 0.0 + ], + [ + 0.0, + 0.0, + 700.29454 + ] + ], + [ + [ + 701.45578, + 0.0, + 0.0 + ], + [ + 0.0, + 698.98206, + 0.0 + ], + [ + 0.0, + 0.0, + 700.17541 + ] + ], + [ + [ + 701.30233, + 0.0, + 0.0 + ], + [ + 0.0, + 699.07858, + 0.0 + ], + [ + 0.0, + 0.0, + 699.83055 + ] + ], + [ + [ + 701.12243, + 0.0, + 0.0 + ], + [ + 0.0, + 699.19465, + 0.0 + ], + [ + 0.0, + 0.0, + 699.4212 + ] + ], + [ + [ + 700.82145, + 0.0, + 0.0 + ], + [ + 0.0, + 699.50141, + 0.0 + ], + [ + 0.0, + 0.0, + 699.62234 + ] + ], + [ + [ + 700.41079, + 0.0, + 0.0 + ], + [ + 0.0, + 699.92642, + 0.0 + ], + [ + 0.0, + 0.0, + 699.89935 + ] + ], + [ + [ + 699.84997, + 0.0, + 0.0 + ], + [ + 0.0, + 700.27355, + 0.0 + ], + [ + 0.0, + 0.0, + 699.72084 + ] + ], + [ + [ + 699.49357, + 0.0, + 0.0 + ], + [ + 0.0, + 700.49394, + 0.0 + ], + [ + 0.0, + 0.0, + 699.60817 + ] + ] + ] + } + } +} \ No newline at end of file diff --git a/tests/auto_test/test_vasp.py b/tests/auto_test/test_vasp.py index bd8936690..ccaa5fc6c 100644 --- a/tests/auto_test/test_vasp.py +++ b/tests/auto_test/test_vasp.py @@ -2,7 +2,6 @@ import dpdata import numpy as np import unittest -from dpgen.generator.lib.vasp import incar_upper from dpdata import LabeledSystem from pymatgen.io.vasp import Incar from monty.serialization import loadfn, dumpfn @@ -13,7 +12,8 @@ from .context import make_kspacing_kpoints from .context import setUpModule -from dpgen.auto_test.VASP import VASP +from dpgen.auto_test.VASP import VASP +from dpgen.generator.lib.vasp import incar_upper class TestVASP(unittest.TestCase): @@ -36,14 +36,14 @@ def setUp(self): } self.conf_path = 'confs/hp-Li' - self.equi_path = 'confs/hp-Li/relaxation' + self.equi_path = 'confs/hp-Li/relaxation/relax_task' self.source_path = 'equi/vasp' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) self.confs = self.jdata["structures"] inter_param = self.jdata["interaction"] - self.tasl_param = self.jdata["relaxation"] + self.task_param = self.jdata["relaxation"] self.VASP = VASP(inter_param, os.path.join(self.conf_path, 'POSCAR')) def tearDown(self): @@ -63,20 +63,67 @@ def test_make_potential_files(self): self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "POTCAR"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, 'inter.json'))) - def test_make_input_file(self): - self.VASP.make_input_file(self.equi_path,'relaxation',self.tasl_param) + def test_make_input_file_1(self): + param=self.task_param.copy() + param["cal_setting"]= {"relax_pos":True, + "relax_shape":True, + "relax_vol":False} + self.VASP.make_input_file(self.equi_path,'relaxation',param) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],4) + + def test_make_input_file_2(self): + self.VASP.make_input_file(self.equi_path,'relaxation',self.task_param) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "task.json"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "KPOINTS"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, "INCAR"))) incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) self.assertTrue(incar['ISIF'],3) + def test_make_input_file_3(self): + param=self.task_param.copy() + param["cal_setting"]= {"relax_pos":True, + "relax_shape":False, + "relax_vol":False} + self.VASP.make_input_file(self.equi_path,'relaxation',param) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],2) + + def test_make_input_file_4(self): + param=self.task_param.copy() + param["cal_setting"]= {"relax_pos":False, + "relax_shape":True, + "relax_vol":False} + self.VASP.make_input_file(self.equi_path,'relaxation',param) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],5) + + def test_make_input_file_5(self): + param=self.task_param.copy() + param["cal_setting"]= {"relax_pos":False, + "relax_shape":True, + "relax_vol":True} + self.VASP.make_input_file(self.equi_path,'relaxation',param) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],6) + + def test_make_input_file_5(self): + param=self.task_param.copy() + param["cal_setting"]= {"relax_pos":False, + "relax_shape":True, + "relax_vol":True, + "kspacing":0.01} + self.VASP.make_input_file(self.equi_path,'relaxation',param) + incar=incar_upper(Incar.from_file(os.path.join(self.equi_path, "INCAR"))) + self.assertTrue(incar['ISIF'],6) + self.assertTrue(incar['KSPACING'],0.01) + def test_compuate(self): ret=self.VASP.compute(os.path.join(self.conf_path,'relaxation')) self.assertIsNone(ret) shutil.copy(os.path.join(self.source_path, 'OUTCAR'), os.path.join(self.equi_path, 'OUTCAR')) - ret=self.VASP.compute(os.path.join(self.conf_path,'relaxation')) - ret_ref=LabeledSystem(os.path.join(self.source_path, 'OUTCAR')) + ret=self.VASP.compute(self.equi_path) + ret_ref=loadfn(os.path.join(self.source_path, 'outcar.json')) self.assertTrue(ret,ret_ref.as_dict()) def test_backward_files(self): diff --git a/tests/auto_test/test_vasp_equi.py b/tests/auto_test/test_vasp_equi.py index f47c3b531..59b78c2f1 100644 --- a/tests/auto_test/test_vasp_equi.py +++ b/tests/auto_test/test_vasp_equi.py @@ -40,7 +40,7 @@ def test_make_equi(self): relax_param = self.jdata["relaxation"] make_equi(confs, inter_param, relax_param) - target_path = 'confs/hp-Li/relaxation' + target_path = 'confs/hp-Li/relaxation/relax_task' source_path = 'vasp_input' incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR')) @@ -71,7 +71,7 @@ def test_post_equi(self): confs = self.jdata["structures"] inter_param = self.jdata["interaction"] relax_param = self.jdata["relaxation"] - target_path = 'confs/hp-Li/relaxation' + target_path = 'confs/hp-Li/relaxation/relax_task' source_path = 'equi/vasp' poscar = os.path.join(source_path, 'POSCAR') From 711f6fb14daec4a1f2dac9f6fb16b878d542f95f Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sun, 5 Jul 2020 16:27:41 +0800 Subject: [PATCH 094/154] fix input bugs in cal_setting --- dpgen/auto_test/EOS.py | 26 ++++++++++++++------------ dpgen/auto_test/Elastic.py | 13 +++++++------ dpgen/auto_test/Interstitial.py | 26 ++++++++++++++------------ dpgen/auto_test/Surface.py | 26 ++++++++++++++------------ dpgen/auto_test/Vacancy.py | 26 ++++++++++++++------------ 5 files changed, 63 insertions(+), 54 deletions(-) diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 1d2ed4cc8..7fc327c88 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -31,12 +31,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' @@ -46,12 +47,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') self.init_from_suffix = parameter['init_from_suffix'] diff --git a/dpgen/auto_test/Elastic.py b/dpgen/auto_test/Elastic.py index e3be012f5..f3e0a64ca 100644 --- a/dpgen/auto_test/Elastic.py +++ b/dpgen/auto_test/Elastic.py @@ -34,12 +34,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] # parameter['reproduce'] = False # self.reprod = parameter['reproduce'] diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index be0e1c077..03f35c6c0 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -31,12 +31,13 @@ def __init__(self, "relax_vol": True} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' @@ -46,12 +47,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') self.init_from_suffix = parameter['init_from_suffix'] diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index 70b485156..fed2438a6 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -37,12 +37,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' @@ -52,12 +53,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') self.init_from_suffix = parameter['init_from_suffix'] diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index cc152ac5b..5d4fda7f1 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -31,12 +31,13 @@ def __init__(self, "relax_vol": True} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] else: parameter['cal_type'] = 'static' @@ -46,12 +47,13 @@ def __init__(self, "relax_vol": False} if 'cal_setting' not in parameter: parameter['cal_setting'] = default_cal_setting - elif "relax_pos" not in parameter['cal_setting']: - parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] - elif "relax_shape" not in parameter['cal_setting']: - parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] - elif "relax_vol" not in parameter['cal_setting']: - parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] + else: + if "relax_pos" not in parameter['cal_setting']: + parameter['cal_setting']['relax_pos'] = default_cal_setting['relax_pos'] + if "relax_shape" not in parameter['cal_setting']: + parameter['cal_setting']['relax_shape'] = default_cal_setting['relax_shape'] + if "relax_vol" not in parameter['cal_setting']: + parameter['cal_setting']['relax_vol'] = default_cal_setting['relax_vol'] self.cal_setting = parameter['cal_setting'] parameter['init_from_suffix'] = parameter.get('init_from_suffix', '00') self.init_from_suffix = parameter['init_from_suffix'] From 294eb4343ec1828bc3befc89cabad63c5aafd10c Mon Sep 17 00:00:00 2001 From: haidi Date: Sun, 5 Jul 2020 19:06:13 +0800 Subject: [PATCH 095/154] update autotest unittest --- tests/auto_test/equi/lammps/Al-fcc.vasp | 9 + tests/auto_test/equi/vasp/Al-fcc.json | 270 ++++++++++++++++++++ tests/auto_test/equi/vasp/CONTCAR_Al_fcc | 10 + tests/auto_test/lammps_input/in.lammps_high | 40 +++ tests/auto_test/test_elastic.py | 24 +- tests/auto_test/test_eos.py | 41 +-- tests/auto_test/test_lammps.py | 54 ++-- tests/auto_test/test_make_prop.py | 52 ++-- tests/auto_test/test_refine.py | 100 ++++++++ tests/auto_test/test_surface.py | 10 +- tests/auto_test/test_vacancy.py | 4 +- tests/auto_test/test_vasp_equi_std.py | 73 ++++++ tests/auto_test/vasp_input/POT_Al | 1 + 13 files changed, 608 insertions(+), 80 deletions(-) create mode 100644 tests/auto_test/equi/lammps/Al-fcc.vasp create mode 100644 tests/auto_test/equi/vasp/Al-fcc.json create mode 100644 tests/auto_test/equi/vasp/CONTCAR_Al_fcc create mode 100644 tests/auto_test/lammps_input/in.lammps_high create mode 100644 tests/auto_test/test_refine.py create mode 100644 tests/auto_test/test_vasp_equi_std.py create mode 100644 tests/auto_test/vasp_input/POT_Al diff --git a/tests/auto_test/equi/lammps/Al-fcc.vasp b/tests/auto_test/equi/lammps/Al-fcc.vasp new file mode 100644 index 000000000..5eb349b25 --- /dev/null +++ b/tests/auto_test/equi/lammps/Al-fcc.vasp @@ -0,0 +1,9 @@ +Al1 +1.0 +0.000000 2.025000 2.025000 +2.025000 0.000000 2.025000 +2.025000 2.025000 0.000000 +Al +1 +direct +0.000000 0.000000 0.000000 Al diff --git a/tests/auto_test/equi/vasp/Al-fcc.json b/tests/auto_test/equi/vasp/Al-fcc.json new file mode 100644 index 000000000..ad921e693 --- /dev/null +++ b/tests/auto_test/equi/vasp/Al-fcc.json @@ -0,0 +1,270 @@ +{ + "@module": "dpdata.system", + "@class": "LabeledSystem", + "data": { + "atom_numbs": [ + 1 + ], + "atom_names": [ + "Al" + ], + "atom_types": { + "@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": [ + 0 + ] + }, + "orig": { + "@module": "numpy", + "@class": "array", + "dtype": "int64", + "data": [ + 0, + 0, + 0 + ] + }, + "cells": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 8.5913473914, + 0.0, + 0.0 + ], + [ + 1.4318912319, + 4.133513941, + 0.0 + ], + [ + 1.4318912319, + 0.8267027882, + 2.3382685902 + ] + ], + [ + [ + 8.564762399405534, + 0.0, + 0.0 + ], + [ + 1.4274603999009239, + 4.120723230762804, + 0.0 + ], + [ + 1.4274603999009212, + 0.8241446461525599, + 2.331033071844216 + ] + ], + [ + [ + 8.56476236490165, + 0.0, + 0.0 + ], + [ + 1.427460394144466, + 4.120723214157234, + 0.0 + ], + [ + 1.427460394154763, + 0.8241446428350139, + 2.331033062460779 + ] + ] + ] + }, + "coords": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + 0.0, + 0.0, + 0.0 + ] + ], + [ + [ + 3.54097967990023e-19, + 1.0221907253462537e-19, + -4.336817099174009e-19 + ] + ], + [ + [ + -3.957728155168494e-18, + 1.3433821404444925e-18, + 4.336817081716405e-19 + ] + ] + ] + }, + "energies": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + -3.745029, + -3.7453815, + -3.7453815 + ] + }, + "forces": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + -6.93889e-18, + 6.93889e-18, + 3.46945e-18 + ] + ], + [ + [ + 0.0, + 2.08167e-17, + 2.08167e-17 + ] + ], + [ + [ + 1.38778e-17, + -1.04083e-17, + -1.73472e-17 + ] + ] + ] + }, + "virials": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + -0.3767496035827169, + 4.3198677141453125e-17, + 6.938893551782067e-17 + ], + [ + 4.3198677141453125e-17, + -0.3767496035827169, + 2.30785512013288e-11 + ], + [ + 6.938893551782067e-17, + 2.30785512013288e-11, + -0.3767496035827169 + ] + ], + [ + [ + -4.989497145228832e-07, + -1.6982263769876438e-14, + 4.358221352248373e-15 + ], + [ + -1.6982263769876438e-14, + -4.995687706833335e-07, + 2.739537581420478e-11 + ], + [ + 4.358221352248373e-15, + 2.739537581420478e-11, + -4.986748979526501e-07 + ] + ], + [ + [ + 7.534702606349575e-11, + 5.5759993875532046e-11, + -4.1159485187417307e-11 + ], + [ + 5.5759993875532046e-11, + -3.2588327714261293e-10, + -3.1685352979309946e-11 + ], + [ + -4.1159485187417307e-11, + -3.1685352979309946e-11, + 2.500573554831436e-10 + ] + ] + ] + }, + "stress": { + "@module": "numpy", + "@class": "array", + "dtype": "float64", + "data": [ + [ + [ + -7.2692250000000005, + 8.3350029e-16, + 1.3388303e-15 + ], + [ + 8.3350029e-16, + -7.2692250000000005, + 4.4529093000000003e-10 + ], + [ + 1.3388303e-15, + 4.4529093000000003e-10, + -7.2692250000000005 + ] + ], + [ + [ + -9.71695e-06, + -3.3072633e-13, + 8.4875525e-14 + ], + [ + -3.3072633e-13, + -9.729006000000001e-06, + 5.3351969e-10 + ], + [ + 8.4875525e-14, + 5.3351969e-10, + -9.711598e-06 + ] + ], + [ + [ + 1.4673689e-09, + 1.0859151999999998e-09, + -8.0157309e-10 + ], + [ + 1.0859151999999998e-09, + -6.3465143999999996e-09, + -6.170661800000001e-10 + ], + [ + -8.0157309e-10, + -6.170661800000001e-10, + 4.8698191e-09 + ] + ] + ] + } + } +} \ No newline at end of file diff --git a/tests/auto_test/equi/vasp/CONTCAR_Al_fcc b/tests/auto_test/equi/vasp/CONTCAR_Al_fcc new file mode 100644 index 000000000..f8284d0e1 --- /dev/null +++ b/tests/auto_test/equi/vasp/CONTCAR_Al_fcc @@ -0,0 +1,10 @@ +Al1 +1.0 +0.000000 2.025000 2.025000 +2.025000 0.000000 2.025000 +2.025000 2.025000 0.000000 +Al +1 +direct +0.000000 0.000000 0.000000 Al +~ diff --git a/tests/auto_test/lammps_input/in.lammps_high b/tests/auto_test/lammps_input/in.lammps_high new file mode 100644 index 000000000..d5c1fcf4f --- /dev/null +++ b/tests/auto_test/lammps_input/in.lammps_high @@ -0,0 +1,40 @@ +clear +units metal +dimension 3 +boundary p p p +atom_style atomic +box tilt large +read_data conf.lmp +mass 1 1 +neigh_modify every 1 delay 0 check no +pair_style deepmd frozen_model.pb +pair_coeff +compute mype all pe +thermo 100 +thermo_style custom step pe pxx pyy pzz pxy pxz pyz lx ly lz vol c_mype +dump 1 all custom 100 dump.relax id type xs ys zs fx fy fz +min_style cg +fix 1 all box/relax iso 0.0 +minimize 1.000000e-16 1.000000e-10 5000 500000 +fix 1 all box/relax aniso 0.0 +minimize 1.000000e-16 1.000000e-10 5000 500000 +variable N equal count(all) +variable V equal vol +variable E equal "c_mype" +variable tmplx equal lx +variable tmply equal ly +variable Pxx equal pxx +variable Pyy equal pyy +variable Pzz equal pzz +variable Pxy equal pxy +variable Pxz equal pxz +variable Pyz equal pyz +variable Epa equal ${E}/${N} +variable Vpa equal ${V}/${N} +variable AA equal (${tmplx}*${tmply}) +print "All done" +print "Total number of atoms = ${N}" +print "Final energy per atoms = ${Epa}" +print "Final volume per atoms = ${Vpa}" +print "Final Base area = ${AA}" +print "Final Stress (xx yy zz xy xz yz) = ${Pxx} ${Pyy} ${Pzz} ${Pxy} ${Pxz} ${Pyz}" diff --git a/tests/auto_test/test_elastic.py b/tests/auto_test/test_elastic.py index 335309f84..b8f464571 100644 --- a/tests/auto_test/test_elastic.py +++ b/tests/auto_test/test_elastic.py @@ -21,15 +21,16 @@ class TestElastic(unittest.TestCase): def setUp(self): _jdata = { - "structures": ["confs/hp-*"], + "structures": ["confs/std-fcc"], "interaction": { "type": "vasp", "incar": "vasp_input/INCAR.rlx", "potcar_prefix": ".", - "potcars": {"Li": "vasp_input/POTCAR"} + "potcars": {"Al": "vasp_input/POT_Al"} }, "properties": [ { + "skip":False, "type": "elastic", "norm_deform": 2e-2, "shear_deform": 5e-2 @@ -37,11 +38,11 @@ def setUp(self): ] } - self.equi_path = 'confs/hp-Li/relaxation' + self.equi_path = 'confs/std-fcc/relaxation/task_relax' self.source_path = 'equi/vasp' - self.target_path = 'confs/hp-Li/elastic_00' + self.target_path = 'confs/std-fcc/elastic_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) self.confs = _jdata["structures"] self.inter_param = _jdata["interaction"] @@ -50,14 +51,12 @@ def setUp(self): self.elastic = Elastic(_jdata['properties'][0]) def tearDown(self): + if os.path.exists(os.path.join(self.equi_path,'..')): + shutil.rmtree(self.equi_path) if os.path.exists(self.equi_path): shutil.rmtree(self.equi_path) if os.path.exists(self.target_path): shutil.rmtree(self.target_path) - if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') - if os.path.exists('inter.json'): - os.remove('inter.json') def test_task_type(self): self.assertEqual('elastic', self.elastic.task_type()) @@ -65,11 +64,13 @@ def test_task_type(self): def test_task_param(self): self.assertEqual(self.prop_param[0], self.elastic.task_param()) - def test_make_confs_0(self): + def test_make_confs(self): + + shutil.copy(os.path.join(self.source_path, 'Al-fcc.json'), os.path.join(self.equi_path, 'result.json')) if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): with self.assertRaises(RuntimeError): self.elastic.make_confs(self.target_path, self.equi_path) - shutil.copy(os.path.join(self.source_path, 'CONTCAR'), os.path.join(self.equi_path, 'CONTCAR')) + shutil.copy(os.path.join(self.source_path, 'CONTCAR_Al_fcc'), os.path.join(self.equi_path, 'CONTCAR')) task_list = self.elastic.make_confs(self.target_path, self.equi_path) dfm_dirs = glob.glob(os.path.join(self.target_path, 'task.*')) @@ -85,4 +86,3 @@ def test_make_confs_0(self): self.assertTrue(os.path.isfile(st_file)) strain_json_file = os.path.join(ii, 'strain.json') self.assertTrue(os.path.isfile(strain_json_file)) - strain_json = loadfn(strain_json_file) diff --git a/tests/auto_test/test_eos.py b/tests/auto_test/test_eos.py index b0e1c877a..6dfb31f6e 100644 --- a/tests/auto_test/test_eos.py +++ b/tests/auto_test/test_eos.py @@ -19,7 +19,7 @@ class TestEOS(unittest.TestCase): def setUp(self): _jdata = { - "structures": ["confs/hp-*"], + "structures": ["confs/std-fcc"], "interaction": { "type": "vasp", "incar": "vasp_input/INCAR.rlx", @@ -27,25 +27,31 @@ def setUp(self): "potcars": {"Li": "vasp_input/POTCAR"} }, "properties": [ - { - "type": "eos", - "vol_start": 10, - "vol_end": 30, - "vol_step": 3, - "cal_type": "relaxation", - "cal_setting": {"relax_pos": True, - "relax_shape": True, - "relax_vol": False, - "input_prop": ""} - } + { + "type": "eos", + "skip": False, + "vol_start": 0.8, + "vol_end": 1.2, + "vol_step": 0.01, + "cal_setting": { + "relax_pos": True, + "relax_shape": True, + "relax_vol": False, + "overwrite_interaction":{ + "type": "deepmd", + "model": "lammps_input/frozen_model.pb", + "type_map":{"Al": 0} + } + } + } ] } - self.equi_path = 'confs/hp-Li/relaxation' + self.equi_path = 'confs/std-fcc/relaxation/relax_task' self.source_path = 'equi/vasp' - self.target_path = 'confs/hp-Li/eos_00' + self.target_path = 'confs/std-fcc/eos_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) self.confs = _jdata["structures"] self.inter_param = _jdata["interaction"] @@ -58,10 +64,6 @@ def tearDown(self): shutil.rmtree(self.equi_path) if os.path.exists(self.target_path): shutil.rmtree(self.target_path) - if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') - if os.path.exists('inter.json'): - os.remove('inter.json') def test_task_type(self): self.assertEqual('eos', self.eos.task_type()) @@ -70,6 +72,7 @@ def test_task_param(self): self.assertEqual(self.prop_param[0], self.eos.task_param()) def test_make_confs_0(self): + if not os.path.exists(os.path.join(self.equi_path, 'CONTCAR')): with self.assertRaises(RuntimeError): self.eos.make_confs(self.target_path, self.equi_path) diff --git a/tests/auto_test/test_lammps.py b/tests/auto_test/test_lammps.py index c4adedf1f..517757e13 100644 --- a/tests/auto_test/test_lammps.py +++ b/tests/auto_test/test_lammps.py @@ -18,12 +18,12 @@ class TestLammps(unittest.TestCase): def setUp(self): self.jdata = { - "structures": ["confs/hp-*"], + "structures": ["confs/std-fcc"], "interaction": { "type": "deepmd", "model": "lammps_input/frozen_model.pb", "deepmd_version": "1.1.0", - "type_map": {"Li": 0} + "type_map": {"Al": 0} }, "relaxation": { "cal_type": "relaxation", @@ -33,22 +33,24 @@ def setUp(self): } } - self.equi_path = 'confs/hp-Li/relaxation' - self.source_path = 'equi/vasp' + self.equi_path = 'confs/std-fcc/relaxation/relax_task' + self.source_path = 'equi/lammps' + if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) + + if not os.path.isfile(os.path.join(self.equi_path,'POSCAR')): + shutil.copy(os.path.join(self.source_path, 'Al-fcc.vasp'), os.path.join('confs/std-fcc','POSCAR')) + self.confs = self.jdata["structures"] - inter_param = self.jdata["interaction"] - self.Lammps = Lammps(inter_param, os.path.join(self.source_path, 'POSCAR')) + self.inter_param = self.jdata["interaction"] + self.relax_param = self.jdata["relaxation"] + self.Lammps = Lammps(self.inter_param, os.path.join(self.source_path, 'Al-fcc.vasp')) def tearDown(self): - if os.path.exists('confs/hp-Li/relaxation'): - shutil.rmtree('confs/hp-Li/relaxation') - if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') - if os.path.exists('inter.json'): - os.remove('inter.json') + if os.path.exists('confs/std-fcc/relaxation'): + shutil.rmtree('confs/std-fcc/relaxation') def test_set_inter_type_func(self): self.Lammps.set_inter_type_func() @@ -57,18 +59,32 @@ def test_set_inter_type_func(self): def test_set_model_param(self): self.Lammps.set_model_param() model_param = {'model_name': ['frozen_model.pb'], - 'param_type': {"Li": 0}, + 'param_type': {"Al": 0}, 'deepmd_version': '1.1.0'} self.assertEqual(model_param, self.Lammps.model_param) def test_make_potential_files(self): - self.Lammps.make_potential_files(".") - self.assertTrue(os.path.islink("frozen_model.pb")) - self.assertTrue(os.path.isfile('inter.json')) - - self.Lammps.make_potential_files(self.equi_path) + cwd=os.getcwd() + abs_equi_path=os.path.abspath(self.equi_path) + self.Lammps.make_potential_files(abs_equi_path) self.assertTrue(os.path.islink(os.path.join(self.equi_path, "frozen_model.pb"))) self.assertTrue(os.path.isfile(os.path.join(self.equi_path, 'inter.json'))) + ret=loadfn(os.path.join(self.equi_path, 'inter.json')) + self.assertTrue(self.inter_param,ret) + os.chdir(cwd) + + def test_make_input_file(self): + cwd=os.getcwd() + abs_equi_path=os.path.abspath('confs/std-fcc/relaxation/relax_task') + shutil.copy(os.path.join('confs/std-fcc','POSCAR'), os.path.join(self.equi_path, 'POSCAR')) + self.Lammps.make_input_file(abs_equi_path,'relaxation', self.relax_param) + self.assertTrue(os.path.isfile(os.path.join(abs_equi_path, "conf.lmp"))) + self.assertTrue(os.path.islink(os.path.join(abs_equi_path, "in.lammps"))) + self.assertTrue(os.path.isfile(os.path.join(abs_equi_path, "task.json"))) + + def test_forward_common_files(self): + fc_files = ['in.lammps', 'frozen_model.pb'] + self.assertEqual(self.Lammps.forward_common_files(), fc_files) def test_backward_files(self): backward_files = ['log.lammps', 'outlog', 'dump.relax'] diff --git a/tests/auto_test/test_make_prop.py b/tests/auto_test/test_make_prop.py index 08fc0d963..ed733236d 100644 --- a/tests/auto_test/test_make_prop.py +++ b/tests/auto_test/test_make_prop.py @@ -16,45 +16,53 @@ class TestMakeProperty(unittest.TestCase): jdata = { - "structures": ["confs/hp-*"], + "structures": ["confs/std-fcc"], "interaction": { "type": "vasp", "incar": "vasp_input/INCAR.rlx", - "potcar_prefix": ".", - "potcars": {"Li": "vasp_input/POTCAR"} + "potcar_prefix": "vasp_input", + "potcars": {"Al": "POT_Al"} }, "properties": [ - { - "type": "eos", - "vol_start": 10, - "vol_end": 30, - "vol_step": 3, - "cal_type": "relaxation", - "cal_setting": {"relax_pos": True, - "relax_shape": True, - "relax_vol": False} - } + { + "type": "eos", + "skip": False, + "vol_start": 0.8, + "vol_end": 1.2, + "vol_step": 0.01, + "cal_setting": { + "relax_pos": True, + "relax_shape": True, + "relax_vol": False, + "overwrite_interaction":{ + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":"vasp_input", + "potcars": {"Al": "POT_Al"} + } + } + } ] } def tearDown(self): - if os.path.exists('confs/hp-Li/eos_00'): - shutil.rmtree('confs/hp-Li/eos_00') - if os.path.exists('confs/hp-Li/relaxation'): - shutil.rmtree('confs/hp-Li/relaxation') + if os.path.exists('confs/std-fcc/eos_00'): + shutil.rmtree('confs/std-fcc/eos_00') + if os.path.exists('confs/std-fcc/relaxation'): + shutil.rmtree('confs/std-fcc/relaxation') def test_make_eos(self): confs = self.jdata["structures"] inter_param = self.jdata["interaction"] property_list = self.jdata["properties"] - target_path = 'confs/hp-Li/eos_00' - equi_path = 'confs/hp-Li/relaxation' + target_path = 'confs/std-fcc/eos_00' + equi_path = 'confs/std-fcc/relaxation/relax_task' source_path = 'equi/vasp' if not os.path.exists(equi_path): - os.mkdir(equi_path) - shutil.copy(os.path.join(source_path, 'CONTCAR'), os.path.join(equi_path, 'CONTCAR')) + os.makedirs(equi_path) + shutil.copy(os.path.join(source_path, 'CONTCAR_Al_fcc'), os.path.join(equi_path, 'CONTCAR')) make_property(confs, inter_param, property_list) @@ -63,7 +71,7 @@ def test_make_eos(self): incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR.rlx')) incar0['ISIF'] = 4 - with open(os.path.join('vasp_input', 'POTCAR')) as fp: + with open(os.path.join('vasp_input', 'POT_Al')) as fp: pot0 = fp.read() for ii in dfm_dirs: self.assertTrue(os.path.isfile(os.path.join(ii, 'KPOINTS'))) diff --git a/tests/auto_test/test_refine.py b/tests/auto_test/test_refine.py new file mode 100644 index 000000000..e758ca7ba --- /dev/null +++ b/tests/auto_test/test_refine.py @@ -0,0 +1,100 @@ +import os, sys, json, glob, shutil +import dpdata +import numpy as np +import unittest +from monty.serialization import loadfn, dumpfn +from pymatgen.io.vasp import Incar + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' + +from .context import make_kspacing_kpoints +from .context import setUpModule + +from dpgen.auto_test.common_prop import make_property +from dpgen.auto_test.refine import make_refine + + +class TestMakeProperty(unittest.TestCase): + jdata = { + "structures": ["confs/std-fcc"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": "vasp_input", + "potcars": {"Al": "POT_Al"} + }, + "properties": [ + { + "type": "eos", + "skip": False, + "vol_start": 0.8, + "vol_end": 1.2, + "vol_step": 0.01, + "cal_setting": { + "relax_pos": True, + "relax_shape": True, + "relax_vol": False, + "overwrite_interaction":{ + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix":"vasp_input", + "potcars": {"Al": "POT_Al"} + } + } + } + ] + } + + def tearDown(self): + if os.path.exists('confs/std-fcc/eos_00'): + shutil.rmtree('confs/std-fcc/eos_00') + if os.path.exists('confs/std-fcc/eos_02'): + shutil.rmtree('confs/std-fcc/eos_02') + if os.path.exists('confs/std-fcc/relaxation'): + shutil.rmtree('confs/std-fcc/relaxation') + + def test_make_eos(self): + + pwd=os.getcwd() + confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + property_list = self.jdata["properties"] + + target_path_0 = 'confs/std-fcc/eos_00' + target_path_2 = 'confs/std-fcc/eos_02' + equi_path = 'confs/std-fcc/relaxation/relax_task' + source_path = 'equi/vasp' + + if not os.path.exists(equi_path): + os.makedirs(equi_path) + shutil.copy(os.path.join(source_path, 'CONTCAR_Al_fcc'), os.path.join(equi_path, 'CONTCAR')) + + make_property(confs, inter_param, property_list) + + dfm_dirs_0 = glob.glob(os.path.join(target_path_0, 'task.*')) + + for ii in dfm_dirs_0: + self.assertTrue(os.path.isfile(os.path.join(ii, 'POSCAR'))) + shutil.copy(os.path.join(ii, 'POSCAR'),os.path.join(ii, 'CONTCAR')) + + path_to_work = os.path.abspath(target_path_0) + new_prop_list=[ + { + "type": "eos", + "init_from_suffix": "00", + "output_suffix": "02", + "cal_setting": { + "relax_pos": True, + "relax_shape": True, + "relax_vol": False, + "input_prop": "lammps_input/lammps_high"} + } + ] + #ret=make_refine('00', '02', path_to_work) + #self.assertEqual(len(ret),len(dfm_dirs_0)) + make_property(confs, inter_param, new_prop_list) + self.assertTrue(os.path.isdir(path_to_work.replace('00','02'))) + os.chdir(pwd) + dfm_dirs_2 = glob.glob(os.path.join(target_path_2, 'task.*')) + self.assertEqual(len(dfm_dirs_2),len(dfm_dirs_0)) diff --git a/tests/auto_test/test_surface.py b/tests/auto_test/test_surface.py index 920490719..7e02bc880 100644 --- a/tests/auto_test/test_surface.py +++ b/tests/auto_test/test_surface.py @@ -40,11 +40,11 @@ def setUp(self): ] } - self.equi_path = 'confs/mp-141/relaxation' + self.equi_path = 'confs/mp-141/relaxation/relax_task' self.source_path = 'equi/vasp' self.target_path = 'confs/mp-141/surface_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) self.confs = _jdata["structures"] self.inter_param = _jdata["interaction"] @@ -53,14 +53,12 @@ def setUp(self): self.surface = Surface(_jdata['properties'][0]) def tearDown(self): + if os.path.exists(os.path.abspath(os.path.join(self.equi_path,'..'))): + shutil.rmtree(os.path.abspath(os.path.join(self.equi_path,'..'))) if os.path.exists(self.equi_path): shutil.rmtree(self.equi_path) if os.path.exists(self.target_path): shutil.rmtree(self.target_path) - if os.path.exists('frozen_model.pb'): - os.remove('frozen_model.pb') - if os.path.exists('inter.json'): - os.remove('inter.json') def test_task_type(self): self.assertEqual('surface', self.surface.task_type()) diff --git a/tests/auto_test/test_vacancy.py b/tests/auto_test/test_vacancy.py index 517f923ad..cb27bccd0 100644 --- a/tests/auto_test/test_vacancy.py +++ b/tests/auto_test/test_vacancy.py @@ -37,11 +37,11 @@ def setUp(self): ] } - self.equi_path = 'confs/hp-Li/relaxation' + self.equi_path = 'confs/hp-Li/relaxation/relax_task' self.source_path = 'equi/vasp' self.target_path = 'confs/hp-Li/vacancy_00' if not os.path.exists(self.equi_path): - os.mkdir(self.equi_path) + os.makedirs(self.equi_path) self.confs = _jdata["structures"] self.inter_param = _jdata["interaction"] diff --git a/tests/auto_test/test_vasp_equi_std.py b/tests/auto_test/test_vasp_equi_std.py new file mode 100644 index 000000000..34f44a9b0 --- /dev/null +++ b/tests/auto_test/test_vasp_equi_std.py @@ -0,0 +1,73 @@ +import os, sys, json, glob, shutil +import dpdata +import numpy as np +from monty.serialization import loadfn, dumpfn +import unittest + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) +__package__ = 'auto_test' + +from .context import make_kspacing_kpoints +from .context import setUpModule + +from pymatgen.io.vasp import Incar +from dpgen.auto_test.common_equi import make_equi, post_equi +from dpgen.auto_test.calculator import make_calculator + + +class TestEqui(unittest.TestCase): + jdata = { + "structures": ["confs/std-fcc"], + "interaction": { + "type": "vasp", + "incar": "vasp_input/INCAR.rlx", + "potcar_prefix": ".", + "potcars": {"Al": "vasp_input/POT_Al"} + }, + "relaxation": { + "cal_type": "relaxation", + "cal_setting":{"input_prop": "vasp_input/INCAR"} + } + } + + def tearDown(self): + if os.path.isfile('confs/std-fcc/POSCAR'): + os.remove('confs/std-fcc/POSCAR') + if os.path.exists('confs/std-fcc/relaxation'): + shutil.rmtree('confs/std-fcc/relaxation') + + def test_make_equi(self): + confs = self.jdata["structures"] + inter_param = self.jdata["interaction"] + relax_param = self.jdata["relaxation"] + make_equi(confs, inter_param, relax_param) + + self.assertTrue(os.path.isfile("confs/std-fcc/POSCAR")) + + target_path = 'confs/std-fcc/relaxation/relax_task' + source_path = 'vasp_input' + + incar0 = Incar.from_file(os.path.join('vasp_input', 'INCAR')) + incar1 = Incar.from_file(os.path.join(target_path, 'INCAR')) + self.assertTrue(incar0 == incar1) + + with open(os.path.join('vasp_input', 'POT_Al')) as fp: + pot0 = fp.read() + with open(os.path.join(target_path, 'POTCAR')) as fp: + pot1 = fp.read() + self.assertEqual(pot0, pot1) + + self.assertTrue(os.path.isfile(os.path.join(target_path, 'KPOINTS'))) + + task_json_file = os.path.join(target_path, 'task.json') + self.assertTrue(os.path.isfile(task_json_file)) + task_json = loadfn(task_json_file) + self.assertEqual(task_json, relax_param) + + inter_json_file = os.path.join(target_path, 'inter.json') + self.assertTrue(os.path.isfile(inter_json_file)) + inter_json = loadfn(inter_json_file) + self.assertEqual(inter_json, inter_param) + + self.assertTrue(os.path.islink(os.path.join(target_path, 'POSCAR'))) + diff --git a/tests/auto_test/vasp_input/POT_Al b/tests/auto_test/vasp_input/POT_Al new file mode 100644 index 000000000..b6ee454ab --- /dev/null +++ b/tests/auto_test/vasp_input/POT_Al @@ -0,0 +1 @@ +Al POTCAR PBE From 2355860f5a658c8ef42e1c2fbbd4f91019b440fc Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sun, 5 Jul 2020 22:00:37 +0800 Subject: [PATCH 096/154] add atom mass in lammps input and fix refine path --- dpgen/auto_test/Lammps.py | 19 ++-- dpgen/auto_test/common_prop.py | 53 ++++----- dpgen/auto_test/lib/lammps.py | 197 ++++++++++++++++++++------------- dpgen/auto_test/refine.py | 2 + 4 files changed, 154 insertions(+), 117 deletions(-) diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 939d58b7a..4640c06a7 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -162,28 +162,28 @@ def make_input_file(self, relax_vol = cal_setting['relax_vol'] if [relax_pos, relax_shape, relax_vol] == [True, False, False]: - fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, etol, ftol, maxiter, maxeval, False) elif [relax_pos, relax_shape, relax_vol] == [True, True, True]: - fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, etol, ftol, maxiter, maxeval, True) elif [relax_pos, relax_shape, relax_vol] == [True, True, False]: if 'scale2equi' in task_param: scale2equi = task_param['scale2equi'] - fc = lammps.make_lammps_press_relax('conf.lmp', ntypes, scale2equi[int(output_dir[-6:])], + fc = lammps.make_lammps_press_relax('conf.lmp', self.type_map, scale2equi[int(output_dir[-6:])], self.inter_func, self.model_param, B0, bp, etol, ftol, maxiter, maxeval) else: - fc = lammps.make_lammps_equi('conf.lmp', ntypes, self.inter_func, self.model_param, + fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, etol, ftol, maxiter, maxeval, True) elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: - fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + fc = lammps.make_lammps_eval('conf.lmp', self.type_map, self.inter_func, self.model_param) else: raise RuntimeError("not supported calculation setting for LAMMPS") elif cal_type == 'static': - fc = lammps.make_lammps_eval('conf.lmp', ntypes, self.inter_func, self.model_param) + fc = lammps.make_lammps_eval('conf.lmp', self.type_map, self.inter_func, self.model_param) else: raise RuntimeError("not supported calculation type for LAMMPS") @@ -204,7 +204,6 @@ def make_input_file(self, with open(os.path.join(output_dir, 'in.lammps'), 'w') as fp: fp.write(fc) - def compute(self, output_dir): log_lammps = os.path.join(output_dir, 'log.lammps') @@ -304,11 +303,7 @@ def compute(self, _tmp = self.type_map dlog.debug(_tmp) - type_map = {k: v for v, k in _tmp.items()} - dlog.debug(type_map) - type_map_list = [] - for ii in range(len(type_map)): - type_map_list.append(type_map[ii]) + type_map_list = lammps.element_list(self.type_map) # d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) # d_dump.to('vasp/poscar', contcar, frame_idx=-1) diff --git a/dpgen/auto_test/common_prop.py b/dpgen/auto_test/common_prop.py index 90a27cfe3..0ffe1e60d 100644 --- a/dpgen/auto_test/common_prop.py +++ b/dpgen/auto_test/common_prop.py @@ -96,14 +96,14 @@ def make_property(confs, def run_property(confs, inter_param, property_list, - mdata, - processes=2): + mdata): # find all POSCARs and their name like mp-xxx # ... # conf_dirs = glob.glob(confs) # conf_dirs.sort() - pool=Pool(processes=processes) - print("Submit job via %d processes"%processes) + processes = len(property_list) + pool = Pool(processes=processes) + print("Submit job via %d processes" % processes) conf_dirs = [] for conf in confs: conf_dirs.extend(glob.glob(conf)) @@ -159,31 +159,32 @@ def run_property(confs, if len(run_tasks) == 0: return else: - ret=pool.apply_async(worker,(work_path, - all_task, - forward_common_files, - forward_files, - backward_files, - mdata, - inter_type, - )) - # run_tasks = [os.path.basename(ii) for ii in all_task] - # machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) - # disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) - # disp.run_jobs(resources, - # command, - # work_path, - # run_tasks, - # group_size, - # forward_common_files, - # forward_files, - # backward_files, - # outlog='outlog', - # errlog='errlog') + ret = pool.apply_async(worker, (work_path, + all_task, + forward_common_files, + forward_files, + backward_files, + mdata, + inter_type, + )) + # run_tasks = [os.path.basename(ii) for ii in all_task] + # machine, resources, command, group_size = util.get_machine_info(mdata, inter_type) + # disp = make_dispatcher(machine, resources, work_path, run_tasks, group_size) + # disp.run_jobs(resources, + # command, + # work_path, + # run_tasks, + # group_size, + # forward_common_files, + # forward_files, + # backward_files, + # outlog='outlog', + # errlog='errlog') pool.close() pool.join() if ret.successful(): - print('finished') + print('finished') + def worker(work_path, all_task, diff --git a/dpgen/auto_test/lib/lammps.py b/dpgen/auto_test/lib/lammps.py index 5c0650a7f..eacc3dabe 100644 --- a/dpgen/auto_test/lib/lammps.py +++ b/dpgen/auto_test/lib/lammps.py @@ -5,8 +5,10 @@ import subprocess as sp import dpgen.auto_test.lib.util as util from distutils.version import LooseVersion +from dpdata.periodic_table import Element -def cvt_lammps_conf(fin, fout, ofmt = 'lammps/data'): + +def cvt_lammps_conf(fin, fout, ofmt='lammps/data'): """ Format convert from fin to fout, specify the output format by ofmt Imcomplete situation @@ -14,23 +16,24 @@ def cvt_lammps_conf(fin, fout, ofmt = 'lammps/data'): supp_ofmt = ['lammps/dump', 'lammps/data', 'vasp/poscar'] supp_exts = ['dump', 'lmp', 'poscar/POSCAR'] - if 'dump' in fout : + if 'dump' in fout: ofmt = 'lammps/dump' - elif 'lmp' in fout : + elif 'lmp' in fout: ofmt = 'lammps/data' - elif 'poscar' in fout or 'POSCAR' in fout : + elif 'poscar' in fout or 'POSCAR' in fout: ofmt = 'vasp/poscar' - if not ofmt in supp_ofmt : - raise RuntimeError ("output format " + ofmt + " is not supported. use one of " + str(supp_ofmt)) + if not ofmt in supp_ofmt: + raise RuntimeError("output format " + ofmt + " is not supported. use one of " + str(supp_ofmt)) - if 'lmp' in fout : - d_poscar=dpdata.System(fin, fmt = 'vasp/poscar') + if 'lmp' in fout: + d_poscar = dpdata.System(fin, fmt='vasp/poscar') d_poscar.to_lammps_lmp(fout, frame_idx=0) elif 'poscar' in fout or 'POSCAR' in fout: - d_dump=dpdata.System(fin, fmt = 'lammps/dump') + d_dump = dpdata.System(fin, fmt='lammps/dump') d_dump.to_vasp_poscar(fout, frame_idx=-1) -def apply_type_map(conf_file, deepmd_type_map, ptypes) : + +def apply_type_map(conf_file, deepmd_type_map, ptypes): """ apply type map. conf_file: conf file converted from POSCAR @@ -46,51 +49,54 @@ def apply_type_map(conf_file, deepmd_type_map, ptypes) : new_lines = lines # revise ntypes idx_ntypes = -1 - for idx, ii in enumerate(lines) : - if 'atom types' in ii : + for idx, ii in enumerate(lines): + if 'atom types' in ii: idx_ntypes = idx - if idx_ntypes == -1 : + if idx_ntypes == -1: raise RuntimeError("cannot find the entry 'atom types' in ", conf_file) words = lines[idx_ntypes].split() words[0] = str(ntypes) new_lines[idx_ntypes] = " ".join(words) # find number of atoms idx_atom_entry = -1 - for idx, ii in enumerate(lines) : - if 'Atoms' in ii : + for idx, ii in enumerate(lines): + if 'Atoms' in ii: idx_atom_entry = idx - if idx_atom_entry == -1 : + if idx_atom_entry == -1: raise RuntimeError("cannot find the entry 'Atoms' in ", conf_file) # revise atom type - for idx in range(idx_atom_entry+2, idx_atom_entry+2+natoms) : + for idx in range(idx_atom_entry + 2, idx_atom_entry + 2 + natoms): ii = lines[idx] words = ii.split() - assert(len(words) >= 5) + assert (len(words) >= 5) old_id = int(words[1]) - new_id = deepmd_type_map.index(ptypes[old_id-1])+1 + new_id = deepmd_type_map.index(ptypes[old_id - 1]) + 1 words[1] = str(new_id) ii = " ".join(words) new_lines[idx] = ii with open(conf_file, 'w') as fp: fp.write("\n".join(new_lines)) -def _get_ntype(conf) : + +def _get_ntype(conf): with open(conf, 'r') as fp: lines = fp.read().split('\n') - for ii in lines : - if "atom types" in ii : + for ii in lines: + if "atom types" in ii: return int(ii.split()[0]) raise RuntimeError("cannot find line indicate atom types in ", conf) -def _get_conf_natom(conf) : + +def _get_conf_natom(conf): with open(conf, 'r') as fp: lines = fp.read().split('\n') - for ii in lines : - if "atoms" in ii : + for ii in lines: + if "atoms" in ii: return int(ii.split()[0]) raise RuntimeError("cannot find line indicate atom types in ", conf) -def inter_deepmd(param) : + +def inter_deepmd(param): models = param["model_name"] deepmd_version = param["deepmd_version"] ret = "pair_style deepmd " @@ -99,9 +105,9 @@ def inter_deepmd(param) : model_list += ii + " " if LooseVersion(deepmd_version) < LooseVersion('1'): ## DeePMD-kit version == 0.x - if len(models) > 1 : + if len(models) > 1: ret += '%s 10 model_devi.out\n' % model_list - else : + else: ret += models[0] + '\n' else: ## DeePMD-kit version >= 1 @@ -112,20 +118,22 @@ def inter_deepmd(param) : ret += "pair_coeff\n" return ret -def inter_meam(param) : + +def inter_meam(param): ret = "" line = "pair_style meam \n" - line+= "pair_coeff * * %s " % param['model_name'][0] - for ii in param['param_type'] : + line += "pair_coeff * * %s " % param['model_name'][0] + for ii in param['param_type']: line += ii + ' ' - line+= "%s " % param['model_name'][1] - for ii in param['param_type'] : + line += "%s " % param['model_name'][1] + for ii in param['param_type']: line += ii + ' ' - line+= '\n' + line += '\n' ret += line return ret -def inter_eam_fs(param) : #06/08 eam.fs interaction + +def inter_eam_fs(param): # 06/08 eam.fs interaction ret = "" line = "pair_style eam/fs \n" line += "pair_coeff * * %s " % param['model_name'] @@ -135,7 +143,8 @@ def inter_eam_fs(param) : #06/08 eam.fs interaction ret += line return ret -def inter_eam_alloy(param) : #06/08 eam.alloy interaction + +def inter_eam_alloy(param): # 06/08 eam.alloy interaction ret = "" line = "pair_style eam/alloy \n" line += "pair_coeff * * %s " % param['model_name'] @@ -145,9 +154,22 @@ def inter_eam_alloy(param) : #06/08 eam.alloy interaction ret += line return ret -def make_lammps_eval(conf, ntypes, interaction, param) : + +def element_list(type_map): + type_map_reverse = {k: v for v, k in type_map.items()} + type_map_list = [] + tmp_list = list(type_map_reverse.keys()) + tmp_list.sort() + for ii in tmp_list: + type_map_list.append(type_map_reverse[ii]) + return type_map_list + + +def make_lammps_eval(conf, type_map, interaction, param): + type_map_list = element_list(type_map) + """ - make lammps input for equilibritation + make lammps input for static calcualtion """ ret = "" ret += "clear\n" @@ -157,14 +179,14 @@ def make_lammps_eval(conf, ntypes, interaction, param) : ret += "atom_style atomic\n" ret += "box tilt large\n" ret += "read_data %s\n" % conf - for ii in range(ntypes) : - ret += "mass %d 1\n" % (ii+1) + for ii in range(len(type_map)): + ret += "mass %d %.3f\n" % (ii + 1, Element(type_map_list[ii]).mass) ret += "neigh_modify every 1 delay 0 check no\n" ret += interaction(param) ret += "compute mype all pe\n" ret += "thermo 100\n" ret += "thermo_style custom step pe pxx pyy pzz pxy pxz pyz lx ly lz vol c_mype\n" - ret += "dump 1 all custom 100 dump.relax id type xs ys zs fx fy fz\n" #06/09 give dump.relax + ret += "dump 1 all custom 100 dump.relax id type xs ys zs fx fy fz\n" # 06/09 give dump.relax ret += "run 0\n" ret += "variable N equal count(all)\n" ret += "variable V equal vol\n" @@ -189,10 +211,12 @@ def make_lammps_eval(conf, ntypes, interaction, param) : return ret -def make_lammps_equi(conf, ntypes, interaction, param, +def make_lammps_equi(conf, type_map, interaction, param, etol=1e-12, ftol=1e-6, maxiter=5000, maxeval=500000, - change_box = True) : + change_box=True): + type_map_list = element_list(type_map) + """ make lammps input for equilibritation """ @@ -204,8 +228,8 @@ def make_lammps_equi(conf, ntypes, interaction, param, ret += "atom_style atomic\n" ret += "box tilt large\n" ret += "read_data %s\n" % conf - for ii in range(ntypes) : - ret += "mass %d 1\n" % (ii+1) + for ii in range(len(type_map)): + ret += "mass %d %.3f\n" % (ii + 1, Element(type_map_list[ii]).mass) ret += "neigh_modify every 1 delay 0 check no\n" ret += interaction(param) ret += "compute mype all pe\n" @@ -213,7 +237,7 @@ def make_lammps_equi(conf, ntypes, interaction, param, ret += "thermo_style custom step pe pxx pyy pzz pxy pxz pyz lx ly lz vol c_mype\n" ret += "dump 1 all custom 100 dump.relax id type xs ys zs fx fy fz\n" ret += "min_style cg\n" - if change_box : + if change_box: ret += "fix 1 all box/relax iso 0.0 \n" ret += "minimize %e %e %d %d\n" % (etol, ftol, maxiter, maxeval) ret += "fix 1 all box/relax aniso 0.0 \n" @@ -240,9 +264,12 @@ def make_lammps_equi(conf, ntypes, interaction, param, ret += "print \"Final Stress (xx yy zz xy xz yz) = ${Pxx} ${Pyy} ${Pzz} ${Pxy} ${Pxz} ${Pyz}\"\n" return ret -def make_lammps_elastic(conf, ntypes, interaction, param, + +def make_lammps_elastic(conf, type_map, interaction, param, etol=1e-12, ftol=1e-6, - maxiter=5000, maxeval=500000) : + maxiter=5000, maxeval=500000): + type_map_list = element_list(type_map) + """ make lammps input for elastic calculation """ @@ -254,8 +281,8 @@ def make_lammps_elastic(conf, ntypes, interaction, param, ret += "atom_style atomic\n" ret += "box tilt large\n" ret += "read_data %s\n" % conf - for ii in range(ntypes) : - ret += "mass %d 1\n" % (ii+1) + for ii in range(len(type_map)): + ret += "mass %d %.3f\n" % (ii + 1, Element(type_map_list[ii]).mass) ret += "neigh_modify every 1 delay 0 check no\n" ret += interaction(param) ret += "compute mype all pe\n" @@ -282,10 +309,13 @@ def make_lammps_elastic(conf, ntypes, interaction, param, ret += "print \"Final Stress (xx yy zz xy xz yz) = ${Pxx} ${Pyy} ${Pzz} ${Pxy} ${Pxz} ${Pyz}\"\n" return ret -def make_lammps_press_relax(conf, ntypes, scale2equi, interaction, param, - B0 = 70, bp = 0, + +def make_lammps_press_relax(conf, type_map, scale2equi, interaction, param, + B0=70, bp=0, etol=1e-12, ftol=1e-6, - maxiter=5000, maxeval=500000) : + maxiter=5000, maxeval=500000): + type_map_list = element_list(type_map) + """ make lammps input for relaxation at a certain volume scale2equi: the volume scale with respect to equilibrium volume @@ -305,8 +335,8 @@ def make_lammps_press_relax(conf, ntypes, scale2equi, interaction, param, ret += "atom_style atomic\n" ret += "box tilt large\n" ret += "read_data %s\n" % conf - for ii in range(ntypes) : - ret += "mass %d 1\n" % (ii+1) + for ii in range(len(type_map)): + ret += "mass %d %.3f\n" % (ii + 1, Element(type_map_list[ii]).mass) ret += "neigh_modify every 1 delay 0 check no\n" ret += interaction(param) ret += "compute mype all pe\n" @@ -337,9 +367,10 @@ def make_lammps_press_relax(conf, ntypes, scale2equi, interaction, param, ret += "print \"Final Stress (xx yy zz xy xz yz) = ${Pxx} ${Pyy} ${Pzz} ${Pxy} ${Pxz} ${Pyz}\"\n" return ret + def make_lammps_phonon(conf, masses, interaction, param, - etol=1e-12, ftol=1e-6, - maxiter=5000, maxeval=500000): + etol=1e-12, ftol=1e-6, + maxiter=5000, maxeval=500000): """ make lammps input for elastic calculation """ @@ -351,32 +382,36 @@ def make_lammps_phonon(conf, masses, interaction, param, ret += "atom_style atomic\n" ret += "box tilt large\n" ret += "read_data %s\n" % conf - ntypes=len(masses) - for ii in range(ntypes) : - ret += "mass %d %f\n" % (ii+1,masses[ii]) + ntypes = len(masses) + for ii in range(ntypes): + ret += "mass %d %f\n" % (ii + 1, masses[ii]) ret += "neigh_modify every 1 delay 0 check no\n" ret += interaction(param) return ret -def _get_epa (lines) : + +def _get_epa(lines): for ii in lines: if ("Final energy per atoms" in ii) and (not 'print' in ii): return float(ii.split('=')[1].split()[0]) raise RuntimeError("cannot find key \"Final energy per atoms\" in lines, something wrong") -def _get_vpa (lines) : - for ii in lines : + +def _get_vpa(lines): + for ii in lines: if ("Final volume per atoms" in ii) and (not 'print' in ii): return float(ii.split('=')[1].split()[0]) raise RuntimeError("cannot find key \"Final volume per atoms\" in lines, something wrong") -def _get_natoms (lines) : + +def _get_natoms(lines): for ii in lines: if ("Total number of atoms" in ii) and (not 'print' in ii): return int(ii.split('=')[1].split()[0]) raise RuntimeError("cannot find key \"Total number of atoms\" in lines, something wrong") -def get_nev (log) : + +def get_nev(log): """ get natoms, energy_per_atom and volume_per_atom from lammps log """ @@ -387,7 +422,8 @@ def get_nev (log) : natoms = _get_natoms(lines) return natoms, epa, vpa -def get_base_area (log) : + +def get_base_area(log): """ get base area """ @@ -397,29 +433,31 @@ def get_base_area (log) : if ("Final Base area" in ii) and (not 'print' in ii): return float(ii.split('=')[1].split()[0]) -def get_stress(log) : + +def get_stress(log): """ get stress from lammps log """ - with open(log, 'r') as fp : + with open(log, 'r') as fp: lines = fp.read().split('\n') - for ii in lines : + for ii in lines: if ('Final Stress' in ii) and (not 'print' in ii): vstress = [float(jj) for jj in ii.split('=')[1].split()] stress = util.voigt_to_stress(vstress) return stress -def poscar_from_last_dump(dump, poscar_out, deepmd_type_map) : + +def poscar_from_last_dump(dump, poscar_out, deepmd_type_map): """ get poscar from the last frame of a lammps MD traj (dump format) """ - with open(dump, 'r') as fp : + with open(dump, 'r') as fp: lines = fp.read().split('\n') step_idx = -1 - for idx,ii in enumerate(lines) : - if 'ITEM: TIMESTEP' in ii : + for idx, ii in enumerate(lines): + if 'ITEM: TIMESTEP' in ii: step_idx = idx - if step_idx == -1 : + if step_idx == -1: raise RuntimeError("cannot find timestep in lammps dump, something wrong") with open('tmp_dump', 'w') as fp: fp.write("\n".join(lines[step_idx:])) @@ -427,21 +465,22 @@ def poscar_from_last_dump(dump, poscar_out, deepmd_type_map) : os.remove('tmp_dump') with open(poscar_out, 'r') as fp: lines = fp.read().split('\n') - types = [ deepmd_type_map[int(ii.split('_')[1])] for ii in lines[5].split()] + types = [deepmd_type_map[int(ii.split('_')[1])] for ii in lines[5].split()] lines[5] = " ".join(types) with open(poscar_out, 'w') as fp: lines = fp.write("\n".join(lines)) -def check_finished_new(fname,keyword): - with open(fname, 'r') as fp : +def check_finished_new(fname, keyword): + with open(fname, 'r') as fp: lines = fp.read().split('\n') - flag=False + flag = False for jj in lines: if (keyword in jj) and (not 'print' in jj): - flag=True + flag = True return flag + def check_finished(fname): with open(fname, 'r') as fp: return 'Total wall time:' in fp.read() diff --git a/dpgen/auto_test/refine.py b/dpgen/auto_test/refine.py index 688c6fbe1..dd7146604 100644 --- a/dpgen/auto_test/refine.py +++ b/dpgen/auto_test/refine.py @@ -4,6 +4,7 @@ def make_refine(init_from_suffix, output_suffix, path_to_work): + cwd = os.getcwd() init_from = re.sub(output_suffix[::-1], init_from_suffix[::-1], path_to_work[::-1], count=1)[::-1] if not os.path.exists(init_from): raise FileNotFoundError("the initial directory does not exist for refine") @@ -33,5 +34,6 @@ def make_refine(init_from_suffix, output_suffix, path_to_work): os.symlink(os.path.relpath(init_poscar), 'POSCAR') else: raise FileNotFoundError("no CONTCAR or POSCAR in the init_from directory") + os.chdir(cwd) return task_list From cfb95ed97f95f783d3660df6e0f2fde6944acba4 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Sun, 5 Jul 2020 23:06:34 +0800 Subject: [PATCH 097/154] renew the dispatcher files --- dpgen/dispatcher/ALI.py | 715 +++++++++++++---------------- dpgen/dispatcher/Dispatcher.py | 26 +- dpgen/dispatcher/DispatcherList.py | 193 ++++---- 3 files changed, 459 insertions(+), 475 deletions(-) diff --git a/dpgen/dispatcher/ALI.py b/dpgen/dispatcher/ALI.py index f6e2c12ce..1e3b9b6a7 100644 --- a/dpgen/dispatcher/ALI.py +++ b/dpgen/dispatcher/ALI.py @@ -1,5 +1,7 @@ from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest from aliyunsdkcore.client import AcsClient +import aliyunsdkcore.request +aliyunsdkcore.request.set_default_protocol_type("https") from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest @@ -14,95 +16,214 @@ from aliyunsdkecs.request.v20140526.CreateLaunchTemplateRequest import CreateLaunchTemplateRequest from aliyunsdkecs.request.v20140526.DescribeImagesRequest import DescribeImagesRequest from aliyunsdkecs.request.v20140526.DescribeSecurityGroupsRequest import DescribeSecurityGroupsRequest -import time, json, os, glob, string, random +from aliyunsdkvpc.request.v20160428.DescribeVSwitchesRequest import DescribeVSwitchesRequest +import time, json, os, glob, string, random, sys from dpgen.dispatcher.Dispatcher import Dispatcher, _split_tasks, JobRecord from dpgen.dispatcher.SSHContext import SSHSession +from dpgen.dispatcher.DispatcherList import DispatcherList, Entity from os.path import join from dpgen import dlog from hashlib import sha1 +# cloud_resources = {"AccessKey_ID":"", +# "AccessKey_Secret":"", +# "regionID": "cn-shenzhen", +# "img_name": "kit", +# "machine_type_price": [ +# {"machine_type": "ecs.gn6v-c8g1.2xlarge", "price_limit": 20.00, "numb": 1, "priority": 0}, +# {"machine_type": "ecs.gn5-c4g1.xlarge", "price_limit": 20.00, "numb": 1, "priority": 1} +# ], +# "instance_name": "CH4_test_username", +# "pay_strategy": "spot" +# "apg_id": apg_id, +# "template_id": template_id, +# "vsw_id": vsw_id, +# "region_id": region_id, +# "client": client} + +def manual_create(stage, num): + '''running this function in your project root path, which contains machine-ali.json. + please ensure your machine name is machine-ali.json + This will create a subdir named manual, which includes apg_id.json''' + root_path = os.getcwd() + fp = open("machine-ali.json") + data = json.load(fp) + if not os.path.exists("manual"): + os.mkdir("manual") + os.chdir("manual") + mdata_machine = data[stage][0]["machine"] + mdata_resources = data[stage][0]["resources"] + cloud_resources = mdata_machine["cloud_resources"] + ali = ALI(mdata_machine, mdata_resources, "work_path", [1], 1, cloud_resources) + img_id = ali.get_image_id(ali.cloud_resources["img_name"]) + sg_id, vpc_id = ali.get_sg_vpc_id() + ali.cloud_resources["template_id"] = ali.create_template(img_id, sg_id, vpc_id) + ali.cloud_resources["vsw_id"] = ali.get_vsw_id(vpc_id) + ali.nchunks_limit = num + ali.cloud_resources["apg_id"] = ali.create_apg() + time.sleep(90) + instance_list = ali.describe_apg_instances() + ip_list = ali.get_ip(instance_list) + print(instance_list) + print(ip_list) + def manual_delete(stage): - with open('machine-ali.json') as fp1: - mdata = json.load(fp1) - adata = mdata[stage][0]['machine']['ali_auth'] - mdata_resources = mdata[stage][0]['resources'] - mdata_machine = mdata[stage][0]['machine'] - ali = ALI(adata, mdata_resources, mdata_machine, 0) - with open('apg_id.json', 'r') as fp2: - apg_id = json.load(fp2) - ali.apg_id = apg_id['apg_id'] - ali.delete_apg() + '''running this function in your project root path, which contains machine-ali.json. ''' + if os.path.exists("manual"): + fp = open("machine-ali.json") + data = json.load(fp) + mdata_machine = data[stage][0]["machine"] + mdata_resources = data[stage][0]["resources"] + cloud_resources = mdata_machine["cloud_resources"] + ali = ALI(mdata_machine, mdata_resources, "work_path", [1], 1, cloud_resources) + os.chdir("manual") + fp = open("apg_id.json") + data = json.load(fp) + ali.cloud_resources["apg_id"] = data["apg_id"] + ali.delete_apg() + os.remove("apg_id.json") + print("delete successfully!") -def manual_create(stage, machine_number): - with open('machine-ali.json') as fp: - mdata = json.load(fp) - adata = mdata[stage][0]['machine']['ali_auth'] - mdata_resources = mdata[stage][0]['resources'] - mdata_machine = mdata[stage][0]['machine'] - ali = ALI(adata, mdata_resources, mdata_machine, machine_number) - ali.create_ess() - print(ali.ip_list) +class ALI(DispatcherList): + def __init__(self, mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources=None): + super().__init__(mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources) + self.client = AcsClient(cloud_resources["AccessKey_ID"], cloud_resources["AccessKey_Secret"], cloud_resources["regionID"]) -class ALI(): - def __init__(self, adata, mdata_resources, mdata_machine, nchunks): - self.ip_list = ["unalloc" for i in range(nchunks)] - self.instance_list = ["unalloc" for i in range(nchunks)] - self.dispatchers = [[None, "unalloc"] for i in range(nchunks)] - self.job_handlers = ["unalloc" for i in range(nchunks)] - self.task_chunks = None - self.adata = adata - self.apg_id = None - self.template_id = None - self.vsw_id = None - self.regionID = adata["regionID"] - self.client = AcsClient(adata["AccessKey_ID"], adata["AccessKey_Secret"], self.regionID) - self.mdata_resources = mdata_resources - self.mdata_machine = mdata_machine - self.nchunks = nchunks + def init(self): + self.prepare() + for ii in range(self.nchunks): + self.create(ii) - def init(self, work_path, tasks, group_size): - if self.check_restart(work_path, tasks, group_size): - pass + def create(self, ii): + if self.dispatcher_list[ii]["dispatcher_status"] == "unallocated" and len(self.ip_pool) > 0: + self.dispatcher_list[ii]["entity"] = Entity(self.ip_pool.pop(0), self.server_pool.pop(0)) + self.make_dispatcher(ii) + + # Derivate + def delete(self, ii): + '''delete one machine''' + request = DeleteInstancesRequest() + request.set_accept_format('json') + request.set_InstanceIds([self.dispatcher_list[ii]["entity"].instance_id]) + request.set_Force(True) + count = 0 + flag = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + flag = 1 + break + except ServerException as e: + time.sleep(10) + count += 1 + + if flag: + status_list = [item["dispatcher_status"] for item in self.dispatcher_list] + running_num = status_list.count("running") + running_num += status_list.count("unsubmitted") + self.change_apg_capasity(running_num) else: - self.create_ess() - self.make_dispatchers() + dlog.info("delete failed, exit") + sys.exit() - def create_ess(self): - img_id = self.get_image_id(self.adata["img_name"]) - sg_id, vpc_id = self.get_sg_vpc_id() - self.template_id = self.create_template(img_id, sg_id, vpc_id) - self.vsw_id = self.get_vsw_id(vpc_id) - self.apg_id = self.create_apg() - dlog.info("begin to create ess, please wait two minutes") - time.sleep(120) - new_server_list = self.describe_apg_instances() - new_ip_list = self.get_ip(new_server_list) - for ii in range(len(new_server_list)): - profile = self.mdata_machine.copy() - profile['hostname'] = new_ip_list[ii] - profile['instance_id'] = new_server_list[ii] - if self.check_server(profile): - self.instance_list[ii] = new_server_list[ii] - self.ip_list[ii] = new_ip_list[ii] + def update(self): + if len(self.server_pool) == 0: + self.server_pool = self.get_server_pool() + self.ip_pool = self.get_ip(self.server_pool) + else: pass + + # Derivate + def catch_dispatcher_exception(self, ii): + '''everything is okay: return 0 + ssh not active : return 1 + machine callback : return 2''' + if self.check_spot_callback(self.dispatcher_list[ii]["entity"].instance_id): + dlog.info("machine %s callback, ip: %s" % (self.dispatcher_list[ii]["entity"].instance_id, self.dispatcher_list[ii]["entity"].ip)) + return 2 + elif not self.dispatcher_list[ii]["dispatcher"].session._check_alive(): + try: + self.dispatcher_list[ii]["dispatcher"].session.ensure_alive() + return 0 + except RuntimeError: + return 1 + else: return 0 + + def get_server_pool(self): + running_server = self.describe_apg_instances() + allocated_server = [] + for ii in range(self.nchunks): + if self.dispatcher_list[ii]["dispatcher_status"] == "running" or self.dispatcher_list[ii]["dispatcher_status"] == "unsubmitted": + allocated_server.append(self.dispatcher_list[ii]["entity"].instance_id) + return list(set(running_server) - set(allocated_server)) + def clean(self): + self.delete_apg() + self.delete_template() + os.remove("apg_id.json") + + def prepare(self): + restart = False + if os.path.exists('apg_id.json'): + with open('apg_id.json') as fp: + apg = json.load(fp) + self.cloud_resources["apg_id"] = apg["apg_id"] + task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] + task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] + for ii in range(self.nchunks): + fn = 'jr.%.06d.json' % ii + if os.path.exists(os.path.join(os.path.abspath(self.work_path), fn)): + cur_hash = task_hashes[ii] + job_record = JobRecord(self.work_path, self.task_chunks[ii], fn) + if not job_record.check_finished(cur_hash): + if not self.check_spot_callback(job_record.record[cur_hash]['context']['instance_id']): + self.dispatcher_list[ii]["entity"] = Entity(job_record.record[cur_hash]['context']['ip'], job_record.record[cur_hash]['context']['instance_id'], job_record) + self.make_dispatcher(ii) + self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" + else: + os.remove(os.path.join(os.path.abspath(self.work_path), fn)) + else: + self.dispatcher_list[ii]["dispatcher_status"] = "finished" + self.server_pool = self.get_server_pool() + self.ip_pool = self.get_ip(self.server_pool) + restart = True + img_id = self.get_image_id(self.cloud_resources["img_name"]) + sg_id, vpc_id = self.get_sg_vpc_id() + self.cloud_resources["template_id"] = self.create_template(img_id, sg_id, vpc_id) + self.cloud_resources["vsw_id"] = self.get_vsw_id(vpc_id) + if not restart: + dlog.info("begin to create apg") + self.cloud_resources["apg_id"] = self.create_apg() + time.sleep(120) + self.server_pool = self.get_server_pool() + self.ip_pool = self.get_ip(self.server_pool) + else: dlog.info("restart dpgen") + def delete_apg(self): request = DeleteAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.apg_id) + request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) request.set_TerminateInstances(True) - try: - response = self.client.do_action_with_exception(request) - except ServerException as e: - dlog.info(e) - except ClientException as e: - dlog.info(e) + count = 0 + flag = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + flag = 1 + break + except ServerException as e: + time.sleep(10) + count += 1 + if not flag: + dlog.info("delete apg failed, exit") + sys.exit() + def create_apg(self): request = CreateAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_TotalTargetCapacity(str(self.nchunks)) - request.set_LaunchTemplateId(self.template_id) - request.set_AutoProvisioningGroupName(self.adata["instance_name"] + ''.join(random.choice(string.ascii_uppercase) for _ in range(20))) + request.set_TotalTargetCapacity(str(self.nchunks_limit)) + request.set_LaunchTemplateId(self.cloud_resources["template_id"]) + request.set_AutoProvisioningGroupName(self.cloud_resources["instance_name"] + ''.join(random.choice(string.ascii_uppercase) for _ in range(20))) request.set_AutoProvisioningGroupType("maintain") request.set_SpotAllocationStrategy("lowest-price") request.set_SpotInstanceInterruptionBehavior("terminate") @@ -110,9 +231,10 @@ def create_apg(self): request.set_ExcessCapacityTerminationPolicy("termination") request.set_TerminateInstances(True) request.set_PayAsYouGoTargetCapacity("0") - request.set_SpotTargetCapacity(str(self.nchunks)) + request.set_SpotTargetCapacity(str(self.nchunks_limit)) config = self.generate_config() request.set_LaunchTemplateConfigs(config) + try: response = self.client.do_action_with_exception(request) response = json.loads(response) @@ -120,34 +242,50 @@ def create_apg(self): json.dump({'apg_id': response["AutoProvisioningGroupId"]}, fp, indent=4) return response["AutoProvisioningGroupId"] except ServerException as e: - dlog.info(e) + dlog.info("create apg failed, err msg: %s" % e) + sys.exit() except ClientException as e: - dlog.info(e) - - def update_server_list(self): - instance_list = self.describe_apg_instances() - return list(set(instance_list) - set(self.instance_list)) + dlog.info("create apg failed, err msg: %s" % e) + sys.exit() def describe_apg_instances(self): request = DescribeAutoProvisioningGroupInstancesRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.apg_id) + request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) request.set_PageSize(100) iteration = self.nchunks // 100 instance_list = [] for i in range(iteration + 1): request.set_PageNumber(i+1) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - for ins in response["Instances"]["Instance"]: - instance_list.append(ins["InstanceId"]) + count = 0 + flag = 0 + err_msg = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + response = json.loads(response) + for ins in response["Instances"]["Instance"]: + instance_list.append(ins["InstanceId"]) + flag = 1 + break + except ServerException as e: + # dlog.info(e) + err_msg = e + count += 1 + except ClientException as e: + # dlog.info(e) + err_msg = e + count += 1 + if not flag: + dlog.info("describe_apg_instances failed, err msg: %s" %err_msg) + sys.exit() return instance_list def generate_config(self): - machine_config = self.adata["machine_type_price"] + machine_config = self.cloud_resources["machine_type_price"] config = [] for conf in machine_config: - for vsw in self.vsw_id: + for vsw in self.cloud_resources["vsw_id"]: tmp = { "InstanceType": conf["machine_type"], "MaxPrice": str(conf["price_limit"] * conf["numb"]), @@ -166,11 +304,11 @@ def create_template(self, image_id, sg_id, vpc_id): request.set_ImageOwnerAlias("self") request.set_PasswordInherit(True) request.set_InstanceType("ecs.c6.large") - request.set_InstanceName(self.adata["instance_name"]) + request.set_InstanceName(self.cloud_resources["instance_name"]) request.set_SecurityGroupId(sg_id) request.set_VpcId(vpc_id) request.set_SystemDiskCategory("cloud_efficiency") - request.set_SystemDiskSize(40) + request.set_SystemDiskSize(100) request.set_IoOptimized("optimized") request.set_InstanceChargeType("PostPaid") request.set_NetworkType("vpc") @@ -182,24 +320,48 @@ def create_template(self, image_id, sg_id, vpc_id): return response["LaunchTemplateId"] except ServerException as e: dlog.info(e) + sys.exit() except ClientException as e: dlog.info(e) + sys.exit() def delete_template(self): request = DeleteLaunchTemplateRequest() request.set_accept_format('json') - request.set_LaunchTemplateId(self.template_id) - response = self.client.do_action_with_exception(request) - + count = 0 + flag = 0 + while count < 10: + try: + request.set_LaunchTemplateId(self.cloud_resources["template_id"]) + response = self.client.do_action_with_exception(request) + flag = 1 + break + except: + count += 1 + # count = 10 and still failed, continue + def get_image_id(self, img_name): request = DescribeImagesRequest() request.set_accept_format('json') request.set_ImageOwnerAlias("self") - response = self.client.do_action_with_exception(request) - response = json.loads(response) - for img in response["Images"]["Image"]: - if img["ImageName"] == img_name: - return img["ImageId"] + request.set_PageSize(100) + count = 0 + flag = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + response = json.loads(response) + for img in response["Images"]["Image"]: + if img["ImageName"] == img_name: + return img["ImageId"] + flag = 1 + break + except: + count += 1 + time.sleep(10) + if not flag: + dlog.info("get image failed, exit") + sys.exit() def get_sg_vpc_id(self): request = DescribeSecurityGroupsRequest() @@ -218,321 +380,102 @@ def get_vsw_id(self, vpc_id): response = json.loads(response) for vpc in response["Vpcs"]["Vpc"]: if vpc["VpcId"] == vpc_id: - return vpc["VSwitchIds"]["VSwitchId"] + vswitchids = vpc["VSwitchIds"]["VSwitchId"] + break + vswitchid_option = [] + if "zone" in self.cloud_resources and self.cloud_resources['zone']: + for zone in self.cloud_resources['zone']: + for vswitchid in vswitchids: + request = DescribeVSwitchesRequest() + request.set_accept_format('json') + request.set_VSwitchId(vswitchid) + zoneid = self.cloud_resources['regionID']+"-"+zone + request.set_ZoneId(zoneid) + response = self.client.do_action_with_exception(request) + response = json.loads(response) + if(response["TotalCount"] == 1): + vswitchid_option.append(vswitchid) + continue + if(vswitchid_option): + return vswitchid_option + else: + return vswitchids def change_apg_capasity(self, capasity): request = ModifyAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.apg_id) + request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) request.set_TotalTargetCapacity(str(capasity)) request.set_SpotTargetCapacity(str(capasity)) request.set_PayAsYouGoTargetCapacity("0") - response = self.client.do_action_with_exception(request) + count = 0 + flag = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + flag = 1 + break + except: + count += 1 + time.sleep(10) + if not flag: + dlog.info("change_apg_capasity failed, exit") + sys.exit() def check_spot_callback(self, instance_id): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds([instance_id]) status = False - try: - response = self.client.do_action_with_exception(request) - response = json.loads(response) - if len(response["Instances"]["Instance"]) == 1 and "Recycling" in response["Instances"]["Instance"][0]["OperationLocks"]["LockReason"]: - status = True - if instance_id not in self.describe_apg_instances(): - status = True - except: - pass + count = 0 + while count < 10: + try: + response = self.client.do_action_with_exception(request) + response = json.loads(response) + if len(response["Instances"]["Instance"]) == 1 and "Recycling" in response["Instances"]["Instance"][0]["OperationLocks"]["LockReason"]: + status = True + if instance_id not in self.describe_apg_instances(): + status = True + break + except ServerException as e: + # dlog.info(e) + count += 1 + time.sleep(10) + except ClientException as e: + # dlog.info(e) + count += 1 + time.sleep(10) return status - def check_restart(self, work_path, tasks, group_size): - if os.path.exists('apg_id.json'): - with open('apg_id.json') as fp: - apg = json.load(fp) - self.apg_id = apg["apg_id"] - self.task_chunks = _split_tasks(tasks, group_size) - task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] - task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] - nchunks = len(self.task_chunks) - for ii in range(nchunks): - fn = 'jr.%.06d.json' % ii - if not os.path.exists(os.path.join(os.path.abspath(work_path), fn)): - pass - else: - job_record = JobRecord(work_path, self.task_chunks[ii], fname = fn) - cur_chunk = self.task_chunks[ii] - cur_hash = task_hashes[ii] - if not job_record.check_finished(cur_hash): - with open(os.path.join(work_path, fn)) as fp: - jr = json.load(fp) - ip = jr[cur_hash]['context'][3] - instance_id = jr[cur_hash]['context'][4] - profile = self.mdata_machine.copy() - profile['hostname'] = ip - profile['instance_id'] = instance_id - if self.check_server(profile): - disp = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) - self.dispatchers[ii] = [disp, "working"] - self.ip_list[ii] = ip - self.instance_list[ii] = instance_id - # spot callback - else: - os.remove(os.path.join(work_path, fn)) - else: - self.ip_list[ii] = "finished" - self.instance_list[ii] = "finished" - self.dispatchers[ii] = [None, "finished"] - return True - else: - self.task_chunks = _split_tasks(tasks, group_size) - return False - def get_ip(self, instance_list): request = DescribeInstancesRequest() request.set_accept_format('json') ip_list = [] - if len(instance_list) <= 10: - for i in range(len(instance_list)): - request.set_InstanceIds([instance_list[i]]) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - else: - iteration = len(instance_list) // 10 - for i in range(iteration): - for j in range(10): - request.set_InstanceIds([instance_list[i*10+j]]) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - if len(instance_list) - iteration * 10 != 0: - for j in range(len(instance_list) - iteration * 10): - request.set_InstanceIds([instance_list[iteration*10+j]]) + if len(instance_list) == 0: return ip_list + try: + if len(instance_list) <= 10: + for i in range(len(instance_list)): + request.set_InstanceIds([instance_list[i]]) response = self.client.do_action_with_exception(request) response = json.loads(response) ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - return ip_list - - def get_finished_job_num(self): - finished_num = 0 - for ii in range(len(self.dispatchers)): - if self.dispatchers[ii][1] == "finished": - finished_num += 1 - return finished_num - - def resubmission(self, machine_exception_num): - if self.adata["img_name"] == "kit": - new_ip_list = [] - try: - new_server_list = self.update_server_list() - new_ip_list = self.get_ip(new_server_list) - except: - pass - for ii in range(self.nchunks): - if len(new_ip_list) == 0: - break - if self.dispatchers[ii][1] == "exception": - self.ip_list[ii] = new_ip_list.pop() - self.instance_list[ii] = new_server_list.pop() - profile = self.mdata_machine.copy() - profile["hostname"] = self.ip_list[ii] - profile["instance_id"] = self.instance_list[ii] - self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record="jr.%.06d.json" % ii), "working"] - dlog.info(self.ip_list[ii]) - job_handler = self.dispatchers[ii][0].submit_jobs(resources, - command, - work_path, - self.task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.job_handlers[ii] = job_handler - elif self.adata["img_name"] == "vasp": - if machine_exception_num / self.nchunks > 0.05: - self.change_apg_capasity(self.nchunks - self.get_finished_job_num() + machine_exception_num) - time.sleep(120) - new_ip_list = [] - try: - new_server_list = self.update_server_list() - new_ip_list = self.get_ip(new_server_list) - except: - pass - if len(new_ip_list) == machine_exception_num: - dlog.info("new submission of callback machine") - for ii in range(self.nchunks): - self.ip_list[ii] = new_ip_list.pop() - self.instance_list[ii] = new_server_list.pop() - profile = self.mdata_machine.copy() - profile["hostname"] = self.ip_list[ii] - profile["instance_id"] = self.instance_list[ii] - self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record="jr.%.06d.json" % ii), "working"] - dlog.info(self.ip_list[ii]) - job_handler = self.dispatchers[ii][0].submit_jobs(resources, - command, - work_path, - self.task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.job_handlers[ii] = job_handler - - #@profile(precision=6) - def run_jobs(self, - resources, - command, - work_path, - tasks, - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference = True, - mark_failure = False, - outlog = 'log', - errlog = 'err'): - for ii in range(self.nchunks): - if self.dispatchers[ii][1] == "working": - dlog.info(self.ip_list[ii]) - job_handler = self.dispatchers[ii][0].submit_jobs(resources, - command, - work_path, - self.task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.job_handlers[ii] = job_handler - machine_exception_num = 0 - while True: - new_ip_list = [] - try: - new_server_list = self.update_server_list() - new_ip_list = self.get_ip(new_server_list) - except: - pass - if machine_exception_num > 0: - self.resubmission(machine_exception_num) - for ii in range(self.nchunks): - if self.dispatchers[ii][1] == "working": - if self.check_spot_callback(self.instance_list[ii]): - machine_exception_num += 1 - dlog.info("machine %s callback" % self.instance_list[ii]) - os.remove(self.job_handlers[ii]["job_record"].fname) - self.job_handlers[ii] = "exception" - self.ip_list[ii] = "exception" - self.instance_list[ii] = "exception" - self.dispatchers[ii][1] = "exception" - if self.adata["img_name"] == "vasp": - self.change_apg_capasity(self.nchunks - self.get_finished_job_num() - machine_exception_num) - continue - if self.check_server(self.dispatchers[ii][0].remote_profile): - if self.dispatchers[ii][0].all_finished(self.job_handlers[ii], mark_failure, False): - self.delete(ii) - self.dispatchers[ii][1] = "finished" - self.ip_list[ii] = "finished" - self.instance_list[ii] = "finished" - self.change_apg_capasity(self.nchunks - self.get_finished_job_num()) - else: - dlog.info("ssh exception accured in %s" % self.ip_list[ii]) - elif self.dispatchers[ii][1] == "finished": - continue - elif self.dispatchers[ii][1] == "unalloc": - if new_ip_list: - profile = self.mdata_machine.copy() - profile["hostname"] = new_ip_list[0] - profile["instance_id"] = new_server_list[0] - if self.check_server(profile): - self.ip_list[ii] = new_ip_list.pop(0) - self.instance_list[ii] = new_server_list.pop(0) - self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] - dlog.info(self.ip_list[ii]) - job_handler = self.dispatchers[ii][0].submit_jobs(resources, - command, - work_path, - self.task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.job_handlers[ii] = job_handler - if self.check_dispatcher_finished(): - os.remove('apg_id.json') - self.delete_template() - self.delete_apg() - break + # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) else: - time.sleep(10) - -# status = ["unalloc", "working", "finished", "exception"] - def check_server(self, profile): - try: - session = SSHSession(profile) - session.close() - return True - except: - return False - - def check_dispatcher_finished(self): - count = 0 - flag = True - for ii in range(len(self.dispatchers)): - if self.dispatchers[ii][1] == "unalloc" or self.dispatchers[ii][1] == "working": flag = False - if self.dispatchers[ii][1] == "exception": count += 1 - if self.adata["img_name"] == "vasp" and count / self.nchunks > 0.05: flag = False - elif self.adata["img_name"] == "kit" and count > 0: flag = False - return flag - - def delete(self, ii): - request = DeleteInstancesRequest() - request.set_accept_format('json') - request.set_InstanceIds([self.instance_list[ii]]) - request.set_Force(True) - response = self.client.do_action_with_exception(request) - - def make_dispatchers(self): - for ii in range(self.nchunks): - if self.ip_list[ii] != "unalloc": - profile = self.mdata_machine.copy() - profile['hostname'] = self.ip_list[ii] - profile['instance_id'] = self.instance_list[ii] - if self.check_server(profile): - self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] - else: - continue - #self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] + iteration = len(instance_list) // 10 + for i in range(iteration): + for j in range(10): + request.set_InstanceIds([instance_list[i*10+j]]) + response = self.client.do_action_with_exception(request) + response = json.loads(response) + ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) + # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) + if len(instance_list) - iteration * 10 != 0: + for j in range(len(instance_list) - iteration * 10): + request.set_InstanceIds([instance_list[iteration*10+j]]) + response = self.client.do_action_with_exception(request) + response = json.loads(response) + ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) + # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) + return ip_list + except: return [] - def delete_machine(self): - request = DeleteInstancesRequest() - request.set_accept_format('json') - if len(self.instance_list) <= 100: - request.set_InstanceIds(self.instance_list) - request.set_Force(True) - response = self.client.do_action_with_exception(request) - else: - iteration = len(self.instance_list) // 100 - for i in range(iteration): - request.set_InstanceIds(self.instance_list[i*100:(i+1)*100]) - request.set_Force(True) - response = self.client.do_action_with_exception(request) - if len(self.instance_list) - iteration * 100 != 0: - request.set_InstanceIds(self.instance_list[iteration*100:]) - request.set_Force(True) - response = self.client.do_action_with_exception(request) - self.instance_list = [] - self.ip_list = [] - os.remove('machine_record.json') - dlog.debug("Successfully free the machine!") diff --git a/dpgen/dispatcher/Dispatcher.py b/dpgen/dispatcher/Dispatcher.py index 444f3431e..58112c120 100644 --- a/dpgen/dispatcher/Dispatcher.py +++ b/dpgen/dispatcher/Dispatcher.py @@ -157,7 +157,7 @@ def submit_jobs(self, job_list.append(rjob) ip = None instance_id = None - if 'ali_auth' in self.remote_profile: + if 'cloud_resources' in self.remote_profile: ip = self.remote_profile['hostname'] instance_id = self.remote_profile['instance_id'] job_record.record_remote_context(cur_hash, @@ -253,11 +253,17 @@ def record_remote_context(self, ip=None, instance_id=None): self.valid_hash(chunk_hash) - self.record[chunk_hash]['context'] = [local_root, remote_root, job_uuid, ip, instance_id] + # self.record[chunk_hash]['context'] = [local_root, remote_root, job_uuid, ip, instance_id] + self.record[chunk_hash]['context'] = {} + self.record[chunk_hash]['context']['local_root'] = local_root + self.record[chunk_hash]['context']['remote_root'] = remote_root + self.record[chunk_hash]['context']['job_uuid'] = job_uuid + self.record[chunk_hash]['context']['ip'] = ip + self.record[chunk_hash]['context']['instance_id'] = instance_id def get_uuid(self, chunk_hash): self.valid_hash(chunk_hash) - return self.record[chunk_hash]['context'][2] + return self.record[chunk_hash]['context']['job_uuid'] def check_finished(self, chunk_hash): self.valid_hash(chunk_hash) @@ -305,12 +311,14 @@ def _new_record(self): def make_dispatcher(mdata, mdata_resource=None, work_path=None, run_tasks=None, group_size=None): - if 'ali_auth' in mdata: - from dpgen.dispatcher.ALI import ALI - nchunks = len(_split_tasks(run_tasks, group_size)) - dispatcher = ALI(mdata['ali_auth'], mdata_resource, mdata, nchunks) - dispatcher.init(work_path, run_tasks, group_size) - return dispatcher + if 'cloud_resources' in mdata: + if mdata['cloud_resources']['cloud_platform'] == 'ali': + from dpgen.dispatcher.ALI import ALI + dispatcher = ALI(mdata, mdata_resource, work_path, run_tasks, group_size, mdata['cloud_resources']) + dispatcher.init() + return dispatcher + elif mdata['cloud_resources']['cloud_platform'] == 'ucloud': + pass else: hostname = mdata.get('hostname', None) #use_uuid = mdata.get('use_uuid', False) diff --git a/dpgen/dispatcher/DispatcherList.py b/dpgen/dispatcher/DispatcherList.py index a62bd2107..84b438fa3 100644 --- a/dpgen/dispatcher/DispatcherList.py +++ b/dpgen/dispatcher/DispatcherList.py @@ -1,22 +1,31 @@ from dpgen.dispatcher.Dispatcher import Dispatcher, _split_tasks, JobRecord - +from paramiko.ssh_exception import NoValidConnectionsError +import os, time +from dpgen import dlog class Entity(): - def __init__(self, ip, instance_id, job_handler=None): + def __init__(self, ip, instance_id, job_record=None, job_handler=None): self.ip = ip self.instance_id = instance_id + self.job_record = job_record self.job_handler = job_handler class DispatcherList(): - def __init__(self, mdata_machine, mdata_resources, nchunks, cloud_resources=None): + def __init__(self, mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources=None): self.mdata_machine = mdata_machine self.mdata_resources = mdata_resources - self.nchunks = nchunks + self.task_chunks = _split_tasks(run_tasks, group_size) + self.nchunks = len(self.task_chunks) + self.nchunks_limit = int(self.mdata_machine.get("machine_upper_bound", self.nchunks)) + self.work_path = work_path self.cloud_resources = cloud_resources + self.server_pool = [] + self.ip_pool = [] self.dispatcher_list = list({"dispatcher": None, "dispatcher_status": "unallocated", - "entity": None} for ii in range(nchunks)) - # Base + "entity": None} for ii in range(self.nchunks)) + # Derivate def init(self): + # do something necessary for ii in range(self.nchunks): self.create(ii) @@ -34,116 +43,140 @@ def run_jobs(self, mark_failure = False, outlog = 'log', errlog = 'err'): - task_chunks = _split_tasks(tasks, group_size) + ratio_failure = self.mdata_resources.get("ratio_failue", 0) while True: - if self.check_all_dispatchers_finished(): + if self.check_all_dispatchers_finished(ratio_failure): + self.clean() break - ratio_failure = self.mdata_resources["ratio_failure"] self.exception_handling(ratio_failure) for ii in range(self.nchunks): dispatcher_status = self.check_dispatcher_status(ii) if dispatcher_status == "unsubmitted": - self.dispatcher_list[ii]["job_handler"] = self.dispatcher_list[ii]["dispatcher"].submit_jobs(resources, - command, - work_path, - task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.dispatcher_list[ii]["dispatcher_status"] == "running" - elif dispatcher_status == "finished": - # to do + dlog.info(self.dispatcher_list[ii]["entity"].ip) + self.dispatcher_list[ii]["entity"].job_handler = self.dispatcher_list[ii]["dispatcher"].submit_jobs(resources, + command, + work_path, + self.task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.dispatcher_list[ii]["entity"].job_record = self.dispatcher_list[ii]["entity"].job_handler["job_record"] + self.dispatcher_list[ii]["dispatcher_status"] = "running" + elif dispatcher_status == "finished" and self.dispatcher_list[ii]["entity"]: # no jobs in queue, delete current machine - # else allocate current machine to unalloc dispatcher - pass + # else add current machine to server_pool + entity = self.dispatcher_list[ii]["entity"] + status_list = [item["dispatcher_status"] for item in self.dispatcher_list] + flag = "unallocated" in status_list + if not flag: self.delete(ii) + else: + self.dispatcher_list[ii]["entity"] = None + self.server_pool.append(entity.instance_id) + self.ip_pool.append(entity.ip) elif dispatcher_status == "running": pass elif dispatcher_status == "unallocated": - # to do: if we can create machine, then make dispatcher - # else pass - pass + # if len(server_pool) > 0: make_dispatcher + # else: pass + self.create(ii) elif dispatcher_status == "terminated": pass + self.update() # Derivate def create(self, ii): - '''if jr.json existed and job not finished, use jr.json to rebuild dispatcher - else create one machine, then make_dispatcher, change status from unallocated to unsubmitted''' - if not os.path.exists(os.path.join(os.path.abspath(work_path), "jr.%.06d.json" % ii)): - # to do: create machine, make dispatcher, change status from unallocated to unsubmitted - pass - else: - task_chunks = _split_tasks(tasks, group_size) - task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] - task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] - job_record = JobRecord(work_path, task_chunks[ii], fname = "jr.%.06d.json" % ii) - cur_chunk = self.task_chunks[ii] - cur_hash = task_hashes[ii] - if not job_record.check_finished(cur_hash): - with open(os.path.join(work_path, fn)) as fp: - jr = json.load(fp) - self.dispatcher_list[ii]["entity"] = Entity(jr[cur_hash]['context'][3], jr[cur_hash]['context'][4]) - self.make_dispatcher(ii) + '''case1: use existed machine(finished) to make_dispatcher + case2: create one machine, then make_dispatcher, change status from unallocated to unsubmitted''' + pass + + # Derivate + def delete(self, ii): + '''delete one machine + if entity is none, means this machine is used by another dispatcher, shouldn't be deleted''' + pass + + # Derivate, delete config like templates, etc. + def clean(self): + pass + # Derivate - def delete(self): - '''delete one machine''' + def update(): pass # Base - def check_all_dispatchers_finished(self, ratio_failure=0): - exception_num = 0 - for ii in range(self.nchunks): - if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": - exception_num += 1 - if exception_num / self.nchunks > ratio_failure: return False + def check_all_dispatchers_finished(self, ratio_failure): + status_list = [item["dispatcher_status"] for item in self.dispatcher_list] + finished_num = status_list.count("finished") + if finished_num / self.nchunks < (1 - ratio_failure): return False else: return True # Base def exception_handling(self, ratio_failure): - terminated_num = 0 - for ii in range(self.nchunks): - if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": - terminated_num += 1 + status_list = [item["dispatcher_status"] for item in self.dispatcher_list] + terminated_num = status_list.count("terminated") if terminated_num / self.nchunks > ratio_failure: - self.resubmit() - - # Derivate - def resubmit(self): - '''create machines - make dispatcher - change status from terminated to unsubmitted''' - pass - + # self.dispatcher_list = [lambda item["dispatcher_status"]: "finished" for item in self.dispatcher_list if item["dispatcher_status"] == "terminated"] + for ii in range(self.nchunks): + if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": + self.dispatcher_list[ii]["dispatcher_status"] = "unallocated" # Base def make_dispatcher(self, ii): - '''use entity to distinguish machine, for example if ip isn't None, means we can make_dispatcher - change status from unallocated to unsubmitted''' entity = self.dispatcher_list[ii]["entity"] - if entity.ip: - profile = self.mdata_machine.copy() - profile['hostname'] = entity.ip - profile['instance_id'] = entity.instance_id - self.dispatcher_list[ii]["dispatcher"] = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) - self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" + profile = self.mdata_machine.copy() + profile['hostname'] = entity.ip + profile['instance_id'] = entity.instance_id + count = 0 + flag = 0 + while count < 3: + try: + self.dispatcher_list[ii]["dispatcher"] = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) + self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" + flag = 1 + break + except: + count += 1 + time.sleep(60) + if not flag: + # give up this machine, wait other machine in sever_pool. + # this machine will be append into server_pool next time when update apg_instances. + self.dispatcher_list[ii]["entity"] = None + # Base - def check_dispatcher_status(self, ii): + def check_dispatcher_status(self, ii, allow_failue=False): '''catch running dispatcher exception if no exception occured, check finished''' if self.dispatcher_list[ii]["dispatcher_status"] == "running": - if not self.catch_dispatcher_exception(): - if self.dispatcher_list[ii]["dispatcher"].all_finished(): - self.dispatcher_list[ii]["dispatcher_status"] = "finished" - else: + status = self.catch_dispatcher_exception(ii) + if status == 0: + # param clean: delete remote work_dir or not. + clean = self.mdata_resources.get("clean", False) + try: + # avoid raising ssh exception in download proceess + finished = self.dispatcher_list[ii]["dispatcher"].all_finished(self.dispatcher_list[ii]["entity"].job_handler, allow_failue, clean) + if finished: + self.dispatcher_list[ii]["dispatcher_status"] = "finished" + except: + pass + elif status == 1: + # self.dispatcher_list[ii]["dispatcher_status"] = "terminated" + pass + elif status == 2: + self.dispatcher_list[ii]["dispatcher"] = None self.dispatcher_list[ii]["dispatcher_status"] = "terminated" + self.dispatcher_list[ii]["entity"] = None + os.remove(os.path.join(self.work_path, "jr.%.06d.json" % ii)) return self.dispatcher_list[ii]["dispatcher_status"] # Derivate - def catch_dispatcher_exception(self): + def catch_dispatcher_exception(self, ii): + '''everything is okay: return 0 + ssh not active : return 1 + machine callback : return 2''' pass From fe13224aac45530aa669d0a29b2d7c0ea0d71488 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Mon, 6 Jul 2020 21:41:21 +0800 Subject: [PATCH 098/154] revise the parameter to reprod_last_frame to decide whether to only reproduce last frame --- dpgen/auto_test/.DS_Store | Bin 0 -> 8196 bytes dpgen/auto_test/EOS.py | 4 ++-- dpgen/auto_test/Interstitial.py | 4 ++-- dpgen/auto_test/Surface.py | 4 ++-- dpgen/auto_test/Vacancy.py | 4 ++-- dpgen/auto_test/reproduce.py | 14 +++++++------- 6 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 dpgen/auto_test/.DS_Store diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..33d30d0b7c687ba533be7e0f9cfde4e2f79ce434 GIT binary patch literal 8196 zcmeHMUu+ab82`R&3$qKQ(*phD<>*PNDNx|9RH24H*K5I4i&UbvZk^!a7uh z2!sfP2!sfP2!sgy9}u83TO?NG+?Ty!86prOa7Q8__J=rSAya{zm(t%lsPL}{5Z8mr}X|2A2;EX2#%#g8u9@e%v<) zOi3A*Ap#)+D-jSspAxXZglx8Op300ng^Z_pc{i=) zhD57J^TxA5z1MN9rMi|qZW@JQzM;dhJwJDW`IZjL9DiMi(ZY+JIWIllM4#N3?1Y8sRKyGACaXJ((AJNt@^2!mY#DsGDK z!u9YhcdA1^Pek6xPRj7EE{3P5Yoc8bs@((TsAFf$8Dp4NxD;I%HG6W#6h+cM>R9;+ z+a2bWqnb6Ew=~aaw=7}o4tT~HPt;DhPR{G_4Tm|;yT&nt?93^nldQ?LN{n=L(lZ^~ zJ#OS&k`1YZ{AlIk+KsWz_iRtxd;h`Ch4OV3ys}DFPY^D)XP!2VTwlS|z41ZK9W`v- zw8#3VOxMg>Mz5_+7?pTfQ5MRpYijH6ibji>4&<}u6M55{<_(N3@O2gCYJK!>g@43O z>hy(299_($`#sV6Xd`1oLf?@ysFZ58DY{MJ8tZi_UOB`Lb(g|jrT1}KRO#BHwlc0O zeU_FrEUDU~wlV&Y(my4`mdbtV0al64%D|{IF+p*Ypm1@b)WK$Gg?-QigP=nJ&cloF61)i);SzidpTRfq z9sB@S;41tKzri2y7e=rY%WxG|Ajc|Pk8#|J+i*MX!4$S*2XWaw;c*;79St1A zakR03XK)5*@o7Ad&*Jm=0$#wk@NIkt-^EM#30}r8@Jsv(zsFzjSNXk>MbaLT?ZpzW zQ7!mQ5@~}swaDpPkv4Yt0X6-flJ>{7lBw%AY~0k)w4-IuzV@ZXylMSzq>|4bNe`bk zi?r~$ylf>GB&F3@AF<0gQ;gYswcru+t?T2l7#9SR%`J`8j1b3VbL+O4%1emBif_Dg zmm1?`L{{0myH!InAI2VhgjhI) zr*IfYP{YU2A`Ut@iPOZvIXsI`;WK#7=i+ntGI8-$d<|bGHhypu_qrBYCnbJ(oqJQ6 zoNYPw7-<%ny4*Ny-QEb4$j`48_y0r1-~Vs#Aj7W@5eO0ZM+C66Gt-$SlVaPvxNFBL zk5Cp#*v(7nyHK(0A%NOTe;86dPNu>q707uhNki#he+Z}x&wpAj2|hr0{`)Mv^NPO# D-wocx literal 0 HcmV?d00001 diff --git a/dpgen/auto_test/EOS.py b/dpgen/auto_test/EOS.py index 7fc327c88..b69db6e1c 100644 --- a/dpgen/auto_test/EOS.py +++ b/dpgen/auto_test/EOS.py @@ -88,7 +88,7 @@ def make_confs(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) task_list = make_repro(init_data_path, self.init_from_suffix, - path_to_work, self.parameter.get('last_frame', True)) + path_to_work, self.parameter.get('reprod_last_frame', True)) os.chdir(cwd) else: @@ -179,7 +179,7 @@ def _compute_lower(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], - all_tasks, ptr_data, self.parameter.get('last_frame', True)) + all_tasks, ptr_data, self.parameter.get('reprod_last_frame', True)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Interstitial.py b/dpgen/auto_test/Interstitial.py index 03f35c6c0..56e29ac6d 100644 --- a/dpgen/auto_test/Interstitial.py +++ b/dpgen/auto_test/Interstitial.py @@ -85,7 +85,7 @@ def make_confs(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) task_list = make_repro(init_data_path, self.init_from_suffix, - path_to_work, self.parameter.get('last_frame', False)) + path_to_work, self.parameter.get('reprod_last_frame', False)) os.chdir(cwd) else: @@ -219,7 +219,7 @@ def _compute_lower(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], - all_tasks, ptr_data, self.parameter.get('last_frame', False)) + all_tasks, ptr_data, self.parameter.get('reprod_last_frame', False)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Surface.py b/dpgen/auto_test/Surface.py index fed2438a6..478845d11 100644 --- a/dpgen/auto_test/Surface.py +++ b/dpgen/auto_test/Surface.py @@ -95,7 +95,7 @@ def make_confs(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) task_list = make_repro(init_data_path, self.init_from_suffix, - path_to_work, self.parameter.get('last_frame', True)) + path_to_work, self.parameter.get('reprod_last_frame', True)) os.chdir(cwd) else: @@ -202,7 +202,7 @@ def _compute_lower(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], - all_tasks, ptr_data, self.parameter.get('last_frame', True)) + all_tasks, ptr_data, self.parameter.get('reprod_last_frame', True)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/Vacancy.py b/dpgen/auto_test/Vacancy.py index 5d4fda7f1..c0e8c3893 100644 --- a/dpgen/auto_test/Vacancy.py +++ b/dpgen/auto_test/Vacancy.py @@ -89,7 +89,7 @@ def make_confs(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) task_list = make_repro(init_data_path, self.init_from_suffix, - path_to_work, self.parameter.get('last_frame', False)) + path_to_work, self.parameter.get('reprod_last_frame', False)) os.chdir(cwd) else: @@ -189,7 +189,7 @@ def _compute_lower(self, raise RuntimeError("please provide the initial data path to reproduce") init_data_path = os.path.abspath(self.parameter['init_data_path']) res_data, ptr_data = post_repro(init_data_path, self.parameter['init_from_suffix'], - all_tasks, ptr_data, self.parameter.get('last_frame', False)) + all_tasks, ptr_data, self.parameter.get('reprod_last_frame', False)) with open(output_file, 'w') as fp: json.dump(res_data, fp, indent=4) diff --git a/dpgen/auto_test/reproduce.py b/dpgen/auto_test/reproduce.py index 2f0bdbdba..e49579863 100644 --- a/dpgen/auto_test/reproduce.py +++ b/dpgen/auto_test/reproduce.py @@ -5,7 +5,7 @@ from monty.serialization import loadfn -def make_repro(init_data_path, init_from_suffix, path_to_work, last_frame=True): +def make_repro(init_data_path, init_from_suffix, path_to_work, reprod_last_frame=True): path_to_work = os.path.abspath(path_to_work) property_type = path_to_work.split('/')[-1].split('_')[0] init_data_path = os.path.join(init_data_path, '*', property_type + '_' + init_from_suffix) @@ -34,7 +34,7 @@ def make_repro(init_data_path, init_from_suffix, path_to_work, last_frame=True): for ii in init_data_task_todo: # get frame number task_result = loadfn(os.path.join(ii, 'result_task.json')) - if last_frame: + if reprod_last_frame: nframe = 1 else: nframe = len(task_result['energies']) @@ -49,7 +49,7 @@ def make_repro(init_data_path, init_from_suffix, path_to_work, last_frame=True): if os.path.exists(kk): os.remove(kk) # make conf - if last_frame: + if reprod_last_frame: task_result.to('vasp/poscar', 'POSCAR', frame_idx=-1) else: task_result.to('vasp/poscar', 'POSCAR', frame_idx=jj) @@ -58,7 +58,7 @@ def make_repro(init_data_path, init_from_suffix, path_to_work, last_frame=True): return task_list -def post_repro(init_data_path, init_from_suffix, all_tasks, ptr_data, last_frame=True): +def post_repro(init_data_path, init_from_suffix, all_tasks, ptr_data, reprod_last_frame=True): ptr_data += "Reproduce: Initial_path Init_E(eV/atom) Reprod_E(eV/atom) Difference(eV/atom)\n" struct_output_name = all_tasks[0].split('/')[-3] property_type = all_tasks[0].split('/')[-2].split('_')[0] @@ -89,13 +89,13 @@ def post_repro(init_data_path, init_from_suffix, all_tasks, ptr_data, last_frame for ii in init_data_task_todo: init_task_result = loadfn(os.path.join(ii, 'result_task.json')) - if last_frame: + if reprod_last_frame: nframe = 1 else: nframe = len(init_task_result['energies']) # idid += nframe natoms = init_task_result['atom_numbs'][0] - if last_frame: + if reprod_last_frame: init_ener = init_task_result['energies'][-1:] else: init_ener = init_task_result['energies'] @@ -113,7 +113,7 @@ def post_repro(init_data_path, init_from_suffix, all_tasks, ptr_data, last_frame output_ener = np.array(output_ener) output_ener = np.reshape(output_ener, [-1, 1]) init_ener = np.reshape(init_ener, [-1, 1]) / natoms - if last_frame: + if reprod_last_frame: error_start = 0 else: error_start = 1 From f130df62808d1887af4bec92e8e47bf37481e5bf Mon Sep 17 00:00:00 2001 From: Tongqi Wen <31176774+kevinwenminion@users.noreply.github.com> Date: Tue, 7 Jul 2020 14:50:52 +0800 Subject: [PATCH 099/154] Delete .DS_Store --- dpgen/auto_test/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dpgen/auto_test/.DS_Store diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store deleted file mode 100644 index 33d30d0b7c687ba533be7e0f9cfde4e2f79ce434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMUu+ab82`R&3$qKQ(*phD<>*PNDNx|9RH24H*K5I4i&UbvZk^!a7uh z2!sfP2!sfP2!sgy9}u83TO?NG+?Ty!86prOa7Q8__J=rSAya{zm(t%lsPL}{5Z8mr}X|2A2;EX2#%#g8u9@e%v<) zOi3A*Ap#)+D-jSspAxXZglx8Op300ng^Z_pc{i=) zhD57J^TxA5z1MN9rMi|qZW@JQzM;dhJwJDW`IZjL9DiMi(ZY+JIWIllM4#N3?1Y8sRKyGACaXJ((AJNt@^2!mY#DsGDK z!u9YhcdA1^Pek6xPRj7EE{3P5Yoc8bs@((TsAFf$8Dp4NxD;I%HG6W#6h+cM>R9;+ z+a2bWqnb6Ew=~aaw=7}o4tT~HPt;DhPR{G_4Tm|;yT&nt?93^nldQ?LN{n=L(lZ^~ zJ#OS&k`1YZ{AlIk+KsWz_iRtxd;h`Ch4OV3ys}DFPY^D)XP!2VTwlS|z41ZK9W`v- zw8#3VOxMg>Mz5_+7?pTfQ5MRpYijH6ibji>4&<}u6M55{<_(N3@O2gCYJK!>g@43O z>hy(299_($`#sV6Xd`1oLf?@ysFZ58DY{MJ8tZi_UOB`Lb(g|jrT1}KRO#BHwlc0O zeU_FrEUDU~wlV&Y(my4`mdbtV0al64%D|{IF+p*Ypm1@b)WK$Gg?-QigP=nJ&cloF61)i);SzidpTRfq z9sB@S;41tKzri2y7e=rY%WxG|Ajc|Pk8#|J+i*MX!4$S*2XWaw;c*;79St1A zakR03XK)5*@o7Ad&*Jm=0$#wk@NIkt-^EM#30}r8@Jsv(zsFzjSNXk>MbaLT?ZpzW zQ7!mQ5@~}swaDpPkv4Yt0X6-flJ>{7lBw%AY~0k)w4-IuzV@ZXylMSzq>|4bNe`bk zi?r~$ylf>GB&F3@AF<0gQ;gYswcru+t?T2l7#9SR%`J`8j1b3VbL+O4%1emBif_Dg zmm1?`L{{0myH!InAI2VhgjhI) zr*IfYP{YU2A`Ut@iPOZvIXsI`;WK#7=i+ntGI8-$d<|bGHhypu_qrBYCnbJ(oqJQ6 zoNYPw7-<%ny4*Ny-QEb4$j`48_y0r1-~Vs#Aj7W@5eO0ZM+C66Gt-$SlVaPvxNFBL zk5Cp#*v(7nyHK(0A%NOTe;86dPNu>q707uhNki#he+Z}x&wpAj2|hr0{`)Mv^NPO# D-wocx From 42477e033248b9df39a0d371d7e5df7d59cdb2ca Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Tue, 7 Jul 2020 15:21:10 +0800 Subject: [PATCH 100/154] dispatcher back to atest-refact branch --- dpgen/auto_test/.DS_Store | Bin 8196 -> 0 bytes dpgen/dispatcher/ALI.py | 715 ++++++++++++++++------------- dpgen/dispatcher/Dispatcher.py | 26 +- dpgen/dispatcher/DispatcherList.py | 193 ++++---- 4 files changed, 475 insertions(+), 459 deletions(-) delete mode 100644 dpgen/auto_test/.DS_Store diff --git a/dpgen/auto_test/.DS_Store b/dpgen/auto_test/.DS_Store deleted file mode 100644 index 33d30d0b7c687ba533be7e0f9cfde4e2f79ce434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMUu+ab82`R&3$qKQ(*phD<>*PNDNx|9RH24H*K5I4i&UbvZk^!a7uh z2!sfP2!sfP2!sgy9}u83TO?NG+?Ty!86prOa7Q8__J=rSAya{zm(t%lsPL}{5Z8mr}X|2A2;EX2#%#g8u9@e%v<) zOi3A*Ap#)+D-jSspAxXZglx8Op300ng^Z_pc{i=) zhD57J^TxA5z1MN9rMi|qZW@JQzM;dhJwJDW`IZjL9DiMi(ZY+JIWIllM4#N3?1Y8sRKyGACaXJ((AJNt@^2!mY#DsGDK z!u9YhcdA1^Pek6xPRj7EE{3P5Yoc8bs@((TsAFf$8Dp4NxD;I%HG6W#6h+cM>R9;+ z+a2bWqnb6Ew=~aaw=7}o4tT~HPt;DhPR{G_4Tm|;yT&nt?93^nldQ?LN{n=L(lZ^~ zJ#OS&k`1YZ{AlIk+KsWz_iRtxd;h`Ch4OV3ys}DFPY^D)XP!2VTwlS|z41ZK9W`v- zw8#3VOxMg>Mz5_+7?pTfQ5MRpYijH6ibji>4&<}u6M55{<_(N3@O2gCYJK!>g@43O z>hy(299_($`#sV6Xd`1oLf?@ysFZ58DY{MJ8tZi_UOB`Lb(g|jrT1}KRO#BHwlc0O zeU_FrEUDU~wlV&Y(my4`mdbtV0al64%D|{IF+p*Ypm1@b)WK$Gg?-QigP=nJ&cloF61)i);SzidpTRfq z9sB@S;41tKzri2y7e=rY%WxG|Ajc|Pk8#|J+i*MX!4$S*2XWaw;c*;79St1A zakR03XK)5*@o7Ad&*Jm=0$#wk@NIkt-^EM#30}r8@Jsv(zsFzjSNXk>MbaLT?ZpzW zQ7!mQ5@~}swaDpPkv4Yt0X6-flJ>{7lBw%AY~0k)w4-IuzV@ZXylMSzq>|4bNe`bk zi?r~$ylf>GB&F3@AF<0gQ;gYswcru+t?T2l7#9SR%`J`8j1b3VbL+O4%1emBif_Dg zmm1?`L{{0myH!InAI2VhgjhI) zr*IfYP{YU2A`Ut@iPOZvIXsI`;WK#7=i+ntGI8-$d<|bGHhypu_qrBYCnbJ(oqJQ6 zoNYPw7-<%ny4*Ny-QEb4$j`48_y0r1-~Vs#Aj7W@5eO0ZM+C66Gt-$SlVaPvxNFBL zk5Cp#*v(7nyHK(0A%NOTe;86dPNu>q707uhNki#he+Z}x&wpAj2|hr0{`)Mv^NPO# D-wocx diff --git a/dpgen/dispatcher/ALI.py b/dpgen/dispatcher/ALI.py index 1e3b9b6a7..f6e2c12ce 100644 --- a/dpgen/dispatcher/ALI.py +++ b/dpgen/dispatcher/ALI.py @@ -1,7 +1,5 @@ from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest from aliyunsdkcore.client import AcsClient -import aliyunsdkcore.request -aliyunsdkcore.request.set_default_protocol_type("https") from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest @@ -16,214 +14,95 @@ from aliyunsdkecs.request.v20140526.CreateLaunchTemplateRequest import CreateLaunchTemplateRequest from aliyunsdkecs.request.v20140526.DescribeImagesRequest import DescribeImagesRequest from aliyunsdkecs.request.v20140526.DescribeSecurityGroupsRequest import DescribeSecurityGroupsRequest -from aliyunsdkvpc.request.v20160428.DescribeVSwitchesRequest import DescribeVSwitchesRequest -import time, json, os, glob, string, random, sys +import time, json, os, glob, string, random from dpgen.dispatcher.Dispatcher import Dispatcher, _split_tasks, JobRecord from dpgen.dispatcher.SSHContext import SSHSession -from dpgen.dispatcher.DispatcherList import DispatcherList, Entity from os.path import join from dpgen import dlog from hashlib import sha1 -# cloud_resources = {"AccessKey_ID":"", -# "AccessKey_Secret":"", -# "regionID": "cn-shenzhen", -# "img_name": "kit", -# "machine_type_price": [ -# {"machine_type": "ecs.gn6v-c8g1.2xlarge", "price_limit": 20.00, "numb": 1, "priority": 0}, -# {"machine_type": "ecs.gn5-c4g1.xlarge", "price_limit": 20.00, "numb": 1, "priority": 1} -# ], -# "instance_name": "CH4_test_username", -# "pay_strategy": "spot" -# "apg_id": apg_id, -# "template_id": template_id, -# "vsw_id": vsw_id, -# "region_id": region_id, -# "client": client} - -def manual_create(stage, num): - '''running this function in your project root path, which contains machine-ali.json. - please ensure your machine name is machine-ali.json - This will create a subdir named manual, which includes apg_id.json''' - root_path = os.getcwd() - fp = open("machine-ali.json") - data = json.load(fp) - if not os.path.exists("manual"): - os.mkdir("manual") - os.chdir("manual") - mdata_machine = data[stage][0]["machine"] - mdata_resources = data[stage][0]["resources"] - cloud_resources = mdata_machine["cloud_resources"] - ali = ALI(mdata_machine, mdata_resources, "work_path", [1], 1, cloud_resources) - img_id = ali.get_image_id(ali.cloud_resources["img_name"]) - sg_id, vpc_id = ali.get_sg_vpc_id() - ali.cloud_resources["template_id"] = ali.create_template(img_id, sg_id, vpc_id) - ali.cloud_resources["vsw_id"] = ali.get_vsw_id(vpc_id) - ali.nchunks_limit = num - ali.cloud_resources["apg_id"] = ali.create_apg() - time.sleep(90) - instance_list = ali.describe_apg_instances() - ip_list = ali.get_ip(instance_list) - print(instance_list) - print(ip_list) - def manual_delete(stage): - '''running this function in your project root path, which contains machine-ali.json. ''' - if os.path.exists("manual"): - fp = open("machine-ali.json") - data = json.load(fp) - mdata_machine = data[stage][0]["machine"] - mdata_resources = data[stage][0]["resources"] - cloud_resources = mdata_machine["cloud_resources"] - ali = ALI(mdata_machine, mdata_resources, "work_path", [1], 1, cloud_resources) - os.chdir("manual") - fp = open("apg_id.json") - data = json.load(fp) - ali.cloud_resources["apg_id"] = data["apg_id"] - ali.delete_apg() - os.remove("apg_id.json") - print("delete successfully!") + with open('machine-ali.json') as fp1: + mdata = json.load(fp1) + adata = mdata[stage][0]['machine']['ali_auth'] + mdata_resources = mdata[stage][0]['resources'] + mdata_machine = mdata[stage][0]['machine'] + ali = ALI(adata, mdata_resources, mdata_machine, 0) + with open('apg_id.json', 'r') as fp2: + apg_id = json.load(fp2) + ali.apg_id = apg_id['apg_id'] + ali.delete_apg() -class ALI(DispatcherList): - def __init__(self, mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources=None): - super().__init__(mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources) - self.client = AcsClient(cloud_resources["AccessKey_ID"], cloud_resources["AccessKey_Secret"], cloud_resources["regionID"]) +def manual_create(stage, machine_number): + with open('machine-ali.json') as fp: + mdata = json.load(fp) + adata = mdata[stage][0]['machine']['ali_auth'] + mdata_resources = mdata[stage][0]['resources'] + mdata_machine = mdata[stage][0]['machine'] + ali = ALI(adata, mdata_resources, mdata_machine, machine_number) + ali.create_ess() + print(ali.ip_list) - def init(self): - self.prepare() - for ii in range(self.nchunks): - self.create(ii) +class ALI(): + def __init__(self, adata, mdata_resources, mdata_machine, nchunks): + self.ip_list = ["unalloc" for i in range(nchunks)] + self.instance_list = ["unalloc" for i in range(nchunks)] + self.dispatchers = [[None, "unalloc"] for i in range(nchunks)] + self.job_handlers = ["unalloc" for i in range(nchunks)] + self.task_chunks = None + self.adata = adata + self.apg_id = None + self.template_id = None + self.vsw_id = None + self.regionID = adata["regionID"] + self.client = AcsClient(adata["AccessKey_ID"], adata["AccessKey_Secret"], self.regionID) + self.mdata_resources = mdata_resources + self.mdata_machine = mdata_machine + self.nchunks = nchunks - def create(self, ii): - if self.dispatcher_list[ii]["dispatcher_status"] == "unallocated" and len(self.ip_pool) > 0: - self.dispatcher_list[ii]["entity"] = Entity(self.ip_pool.pop(0), self.server_pool.pop(0)) - self.make_dispatcher(ii) - - # Derivate - def delete(self, ii): - '''delete one machine''' - request = DeleteInstancesRequest() - request.set_accept_format('json') - request.set_InstanceIds([self.dispatcher_list[ii]["entity"].instance_id]) - request.set_Force(True) - count = 0 - flag = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - flag = 1 - break - except ServerException as e: - time.sleep(10) - count += 1 - - if flag: - status_list = [item["dispatcher_status"] for item in self.dispatcher_list] - running_num = status_list.count("running") - running_num += status_list.count("unsubmitted") - self.change_apg_capasity(running_num) + def init(self, work_path, tasks, group_size): + if self.check_restart(work_path, tasks, group_size): + pass else: - dlog.info("delete failed, exit") - sys.exit() - - def update(self): - if len(self.server_pool) == 0: - self.server_pool = self.get_server_pool() - self.ip_pool = self.get_ip(self.server_pool) - else: pass - - # Derivate - def catch_dispatcher_exception(self, ii): - '''everything is okay: return 0 - ssh not active : return 1 - machine callback : return 2''' - if self.check_spot_callback(self.dispatcher_list[ii]["entity"].instance_id): - dlog.info("machine %s callback, ip: %s" % (self.dispatcher_list[ii]["entity"].instance_id, self.dispatcher_list[ii]["entity"].ip)) - return 2 - elif not self.dispatcher_list[ii]["dispatcher"].session._check_alive(): - try: - self.dispatcher_list[ii]["dispatcher"].session.ensure_alive() - return 0 - except RuntimeError: - return 1 - else: return 0 - - def get_server_pool(self): - running_server = self.describe_apg_instances() - allocated_server = [] - for ii in range(self.nchunks): - if self.dispatcher_list[ii]["dispatcher_status"] == "running" or self.dispatcher_list[ii]["dispatcher_status"] == "unsubmitted": - allocated_server.append(self.dispatcher_list[ii]["entity"].instance_id) - return list(set(running_server) - set(allocated_server)) + self.create_ess() + self.make_dispatchers() - def clean(self): - self.delete_apg() - self.delete_template() - os.remove("apg_id.json") - - def prepare(self): - restart = False - if os.path.exists('apg_id.json'): - with open('apg_id.json') as fp: - apg = json.load(fp) - self.cloud_resources["apg_id"] = apg["apg_id"] - task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] - task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] - for ii in range(self.nchunks): - fn = 'jr.%.06d.json' % ii - if os.path.exists(os.path.join(os.path.abspath(self.work_path), fn)): - cur_hash = task_hashes[ii] - job_record = JobRecord(self.work_path, self.task_chunks[ii], fn) - if not job_record.check_finished(cur_hash): - if not self.check_spot_callback(job_record.record[cur_hash]['context']['instance_id']): - self.dispatcher_list[ii]["entity"] = Entity(job_record.record[cur_hash]['context']['ip'], job_record.record[cur_hash]['context']['instance_id'], job_record) - self.make_dispatcher(ii) - self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" - else: - os.remove(os.path.join(os.path.abspath(self.work_path), fn)) - else: - self.dispatcher_list[ii]["dispatcher_status"] = "finished" - self.server_pool = self.get_server_pool() - self.ip_pool = self.get_ip(self.server_pool) - restart = True - img_id = self.get_image_id(self.cloud_resources["img_name"]) + def create_ess(self): + img_id = self.get_image_id(self.adata["img_name"]) sg_id, vpc_id = self.get_sg_vpc_id() - self.cloud_resources["template_id"] = self.create_template(img_id, sg_id, vpc_id) - self.cloud_resources["vsw_id"] = self.get_vsw_id(vpc_id) - if not restart: - dlog.info("begin to create apg") - self.cloud_resources["apg_id"] = self.create_apg() - time.sleep(120) - self.server_pool = self.get_server_pool() - self.ip_pool = self.get_ip(self.server_pool) - else: dlog.info("restart dpgen") - + self.template_id = self.create_template(img_id, sg_id, vpc_id) + self.vsw_id = self.get_vsw_id(vpc_id) + self.apg_id = self.create_apg() + dlog.info("begin to create ess, please wait two minutes") + time.sleep(120) + new_server_list = self.describe_apg_instances() + new_ip_list = self.get_ip(new_server_list) + for ii in range(len(new_server_list)): + profile = self.mdata_machine.copy() + profile['hostname'] = new_ip_list[ii] + profile['instance_id'] = new_server_list[ii] + if self.check_server(profile): + self.instance_list[ii] = new_server_list[ii] + self.ip_list[ii] = new_ip_list[ii] + def delete_apg(self): request = DeleteAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) + request.set_AutoProvisioningGroupId(self.apg_id) request.set_TerminateInstances(True) - count = 0 - flag = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - flag = 1 - break - except ServerException as e: - time.sleep(10) - count += 1 - if not flag: - dlog.info("delete apg failed, exit") - sys.exit() + try: + response = self.client.do_action_with_exception(request) + except ServerException as e: + dlog.info(e) + except ClientException as e: + dlog.info(e) - def create_apg(self): request = CreateAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_TotalTargetCapacity(str(self.nchunks_limit)) - request.set_LaunchTemplateId(self.cloud_resources["template_id"]) - request.set_AutoProvisioningGroupName(self.cloud_resources["instance_name"] + ''.join(random.choice(string.ascii_uppercase) for _ in range(20))) + request.set_TotalTargetCapacity(str(self.nchunks)) + request.set_LaunchTemplateId(self.template_id) + request.set_AutoProvisioningGroupName(self.adata["instance_name"] + ''.join(random.choice(string.ascii_uppercase) for _ in range(20))) request.set_AutoProvisioningGroupType("maintain") request.set_SpotAllocationStrategy("lowest-price") request.set_SpotInstanceInterruptionBehavior("terminate") @@ -231,10 +110,9 @@ def create_apg(self): request.set_ExcessCapacityTerminationPolicy("termination") request.set_TerminateInstances(True) request.set_PayAsYouGoTargetCapacity("0") - request.set_SpotTargetCapacity(str(self.nchunks_limit)) + request.set_SpotTargetCapacity(str(self.nchunks)) config = self.generate_config() request.set_LaunchTemplateConfigs(config) - try: response = self.client.do_action_with_exception(request) response = json.loads(response) @@ -242,50 +120,34 @@ def create_apg(self): json.dump({'apg_id': response["AutoProvisioningGroupId"]}, fp, indent=4) return response["AutoProvisioningGroupId"] except ServerException as e: - dlog.info("create apg failed, err msg: %s" % e) - sys.exit() + dlog.info(e) except ClientException as e: - dlog.info("create apg failed, err msg: %s" % e) - sys.exit() + dlog.info(e) + + def update_server_list(self): + instance_list = self.describe_apg_instances() + return list(set(instance_list) - set(self.instance_list)) def describe_apg_instances(self): request = DescribeAutoProvisioningGroupInstancesRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) + request.set_AutoProvisioningGroupId(self.apg_id) request.set_PageSize(100) iteration = self.nchunks // 100 instance_list = [] for i in range(iteration + 1): request.set_PageNumber(i+1) - count = 0 - flag = 0 - err_msg = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - response = json.loads(response) - for ins in response["Instances"]["Instance"]: - instance_list.append(ins["InstanceId"]) - flag = 1 - break - except ServerException as e: - # dlog.info(e) - err_msg = e - count += 1 - except ClientException as e: - # dlog.info(e) - err_msg = e - count += 1 - if not flag: - dlog.info("describe_apg_instances failed, err msg: %s" %err_msg) - sys.exit() + response = self.client.do_action_with_exception(request) + response = json.loads(response) + for ins in response["Instances"]["Instance"]: + instance_list.append(ins["InstanceId"]) return instance_list def generate_config(self): - machine_config = self.cloud_resources["machine_type_price"] + machine_config = self.adata["machine_type_price"] config = [] for conf in machine_config: - for vsw in self.cloud_resources["vsw_id"]: + for vsw in self.vsw_id: tmp = { "InstanceType": conf["machine_type"], "MaxPrice": str(conf["price_limit"] * conf["numb"]), @@ -304,11 +166,11 @@ def create_template(self, image_id, sg_id, vpc_id): request.set_ImageOwnerAlias("self") request.set_PasswordInherit(True) request.set_InstanceType("ecs.c6.large") - request.set_InstanceName(self.cloud_resources["instance_name"]) + request.set_InstanceName(self.adata["instance_name"]) request.set_SecurityGroupId(sg_id) request.set_VpcId(vpc_id) request.set_SystemDiskCategory("cloud_efficiency") - request.set_SystemDiskSize(100) + request.set_SystemDiskSize(40) request.set_IoOptimized("optimized") request.set_InstanceChargeType("PostPaid") request.set_NetworkType("vpc") @@ -320,48 +182,24 @@ def create_template(self, image_id, sg_id, vpc_id): return response["LaunchTemplateId"] except ServerException as e: dlog.info(e) - sys.exit() except ClientException as e: dlog.info(e) - sys.exit() def delete_template(self): request = DeleteLaunchTemplateRequest() request.set_accept_format('json') - count = 0 - flag = 0 - while count < 10: - try: - request.set_LaunchTemplateId(self.cloud_resources["template_id"]) - response = self.client.do_action_with_exception(request) - flag = 1 - break - except: - count += 1 - # count = 10 and still failed, continue - + request.set_LaunchTemplateId(self.template_id) + response = self.client.do_action_with_exception(request) + def get_image_id(self, img_name): request = DescribeImagesRequest() request.set_accept_format('json') request.set_ImageOwnerAlias("self") - request.set_PageSize(100) - count = 0 - flag = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - response = json.loads(response) - for img in response["Images"]["Image"]: - if img["ImageName"] == img_name: - return img["ImageId"] - flag = 1 - break - except: - count += 1 - time.sleep(10) - if not flag: - dlog.info("get image failed, exit") - sys.exit() + response = self.client.do_action_with_exception(request) + response = json.loads(response) + for img in response["Images"]["Image"]: + if img["ImageName"] == img_name: + return img["ImageId"] def get_sg_vpc_id(self): request = DescribeSecurityGroupsRequest() @@ -380,102 +218,321 @@ def get_vsw_id(self, vpc_id): response = json.loads(response) for vpc in response["Vpcs"]["Vpc"]: if vpc["VpcId"] == vpc_id: - vswitchids = vpc["VSwitchIds"]["VSwitchId"] - break - vswitchid_option = [] - if "zone" in self.cloud_resources and self.cloud_resources['zone']: - for zone in self.cloud_resources['zone']: - for vswitchid in vswitchids: - request = DescribeVSwitchesRequest() - request.set_accept_format('json') - request.set_VSwitchId(vswitchid) - zoneid = self.cloud_resources['regionID']+"-"+zone - request.set_ZoneId(zoneid) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - if(response["TotalCount"] == 1): - vswitchid_option.append(vswitchid) - continue - if(vswitchid_option): - return vswitchid_option - else: - return vswitchids + return vpc["VSwitchIds"]["VSwitchId"] def change_apg_capasity(self, capasity): request = ModifyAutoProvisioningGroupRequest() request.set_accept_format('json') - request.set_AutoProvisioningGroupId(self.cloud_resources["apg_id"]) + request.set_AutoProvisioningGroupId(self.apg_id) request.set_TotalTargetCapacity(str(capasity)) request.set_SpotTargetCapacity(str(capasity)) request.set_PayAsYouGoTargetCapacity("0") - count = 0 - flag = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - flag = 1 - break - except: - count += 1 - time.sleep(10) - if not flag: - dlog.info("change_apg_capasity failed, exit") - sys.exit() + response = self.client.do_action_with_exception(request) def check_spot_callback(self, instance_id): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds([instance_id]) status = False - count = 0 - while count < 10: - try: - response = self.client.do_action_with_exception(request) - response = json.loads(response) - if len(response["Instances"]["Instance"]) == 1 and "Recycling" in response["Instances"]["Instance"][0]["OperationLocks"]["LockReason"]: - status = True - if instance_id not in self.describe_apg_instances(): - status = True - break - except ServerException as e: - # dlog.info(e) - count += 1 - time.sleep(10) - except ClientException as e: - # dlog.info(e) - count += 1 - time.sleep(10) + try: + response = self.client.do_action_with_exception(request) + response = json.loads(response) + if len(response["Instances"]["Instance"]) == 1 and "Recycling" in response["Instances"]["Instance"][0]["OperationLocks"]["LockReason"]: + status = True + if instance_id not in self.describe_apg_instances(): + status = True + except: + pass return status + def check_restart(self, work_path, tasks, group_size): + if os.path.exists('apg_id.json'): + with open('apg_id.json') as fp: + apg = json.load(fp) + self.apg_id = apg["apg_id"] + self.task_chunks = _split_tasks(tasks, group_size) + task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] + task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] + nchunks = len(self.task_chunks) + for ii in range(nchunks): + fn = 'jr.%.06d.json' % ii + if not os.path.exists(os.path.join(os.path.abspath(work_path), fn)): + pass + else: + job_record = JobRecord(work_path, self.task_chunks[ii], fname = fn) + cur_chunk = self.task_chunks[ii] + cur_hash = task_hashes[ii] + if not job_record.check_finished(cur_hash): + with open(os.path.join(work_path, fn)) as fp: + jr = json.load(fp) + ip = jr[cur_hash]['context'][3] + instance_id = jr[cur_hash]['context'][4] + profile = self.mdata_machine.copy() + profile['hostname'] = ip + profile['instance_id'] = instance_id + if self.check_server(profile): + disp = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) + self.dispatchers[ii] = [disp, "working"] + self.ip_list[ii] = ip + self.instance_list[ii] = instance_id + # spot callback + else: + os.remove(os.path.join(work_path, fn)) + else: + self.ip_list[ii] = "finished" + self.instance_list[ii] = "finished" + self.dispatchers[ii] = [None, "finished"] + return True + else: + self.task_chunks = _split_tasks(tasks, group_size) + return False + def get_ip(self, instance_list): request = DescribeInstancesRequest() request.set_accept_format('json') ip_list = [] - if len(instance_list) == 0: return ip_list - try: - if len(instance_list) <= 10: - for i in range(len(instance_list)): - request.set_InstanceIds([instance_list[i]]) + if len(instance_list) <= 10: + for i in range(len(instance_list)): + request.set_InstanceIds([instance_list[i]]) + response = self.client.do_action_with_exception(request) + response = json.loads(response) + ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) + else: + iteration = len(instance_list) // 10 + for i in range(iteration): + for j in range(10): + request.set_InstanceIds([instance_list[i*10+j]]) response = self.client.do_action_with_exception(request) response = json.loads(response) ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) + if len(instance_list) - iteration * 10 != 0: + for j in range(len(instance_list) - iteration * 10): + request.set_InstanceIds([instance_list[iteration*10+j]]) + response = self.client.do_action_with_exception(request) + response = json.loads(response) + ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) + return ip_list + + def get_finished_job_num(self): + finished_num = 0 + for ii in range(len(self.dispatchers)): + if self.dispatchers[ii][1] == "finished": + finished_num += 1 + return finished_num + + def resubmission(self, machine_exception_num): + if self.adata["img_name"] == "kit": + new_ip_list = [] + try: + new_server_list = self.update_server_list() + new_ip_list = self.get_ip(new_server_list) + except: + pass + for ii in range(self.nchunks): + if len(new_ip_list) == 0: + break + if self.dispatchers[ii][1] == "exception": + self.ip_list[ii] = new_ip_list.pop() + self.instance_list[ii] = new_server_list.pop() + profile = self.mdata_machine.copy() + profile["hostname"] = self.ip_list[ii] + profile["instance_id"] = self.instance_list[ii] + self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record="jr.%.06d.json" % ii), "working"] + dlog.info(self.ip_list[ii]) + job_handler = self.dispatchers[ii][0].submit_jobs(resources, + command, + work_path, + self.task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.job_handlers[ii] = job_handler + elif self.adata["img_name"] == "vasp": + if machine_exception_num / self.nchunks > 0.05: + self.change_apg_capasity(self.nchunks - self.get_finished_job_num() + machine_exception_num) + time.sleep(120) + new_ip_list = [] + try: + new_server_list = self.update_server_list() + new_ip_list = self.get_ip(new_server_list) + except: + pass + if len(new_ip_list) == machine_exception_num: + dlog.info("new submission of callback machine") + for ii in range(self.nchunks): + self.ip_list[ii] = new_ip_list.pop() + self.instance_list[ii] = new_server_list.pop() + profile = self.mdata_machine.copy() + profile["hostname"] = self.ip_list[ii] + profile["instance_id"] = self.instance_list[ii] + self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record="jr.%.06d.json" % ii), "working"] + dlog.info(self.ip_list[ii]) + job_handler = self.dispatchers[ii][0].submit_jobs(resources, + command, + work_path, + self.task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.job_handlers[ii] = job_handler + + #@profile(precision=6) + def run_jobs(self, + resources, + command, + work_path, + tasks, + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference = True, + mark_failure = False, + outlog = 'log', + errlog = 'err'): + for ii in range(self.nchunks): + if self.dispatchers[ii][1] == "working": + dlog.info(self.ip_list[ii]) + job_handler = self.dispatchers[ii][0].submit_jobs(resources, + command, + work_path, + self.task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.job_handlers[ii] = job_handler + machine_exception_num = 0 + while True: + new_ip_list = [] + try: + new_server_list = self.update_server_list() + new_ip_list = self.get_ip(new_server_list) + except: + pass + if machine_exception_num > 0: + self.resubmission(machine_exception_num) + for ii in range(self.nchunks): + if self.dispatchers[ii][1] == "working": + if self.check_spot_callback(self.instance_list[ii]): + machine_exception_num += 1 + dlog.info("machine %s callback" % self.instance_list[ii]) + os.remove(self.job_handlers[ii]["job_record"].fname) + self.job_handlers[ii] = "exception" + self.ip_list[ii] = "exception" + self.instance_list[ii] = "exception" + self.dispatchers[ii][1] = "exception" + if self.adata["img_name"] == "vasp": + self.change_apg_capasity(self.nchunks - self.get_finished_job_num() - machine_exception_num) + continue + if self.check_server(self.dispatchers[ii][0].remote_profile): + if self.dispatchers[ii][0].all_finished(self.job_handlers[ii], mark_failure, False): + self.delete(ii) + self.dispatchers[ii][1] = "finished" + self.ip_list[ii] = "finished" + self.instance_list[ii] = "finished" + self.change_apg_capasity(self.nchunks - self.get_finished_job_num()) + else: + dlog.info("ssh exception accured in %s" % self.ip_list[ii]) + elif self.dispatchers[ii][1] == "finished": + continue + elif self.dispatchers[ii][1] == "unalloc": + if new_ip_list: + profile = self.mdata_machine.copy() + profile["hostname"] = new_ip_list[0] + profile["instance_id"] = new_server_list[0] + if self.check_server(profile): + self.ip_list[ii] = new_ip_list.pop(0) + self.instance_list[ii] = new_server_list.pop(0) + self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] + dlog.info(self.ip_list[ii]) + job_handler = self.dispatchers[ii][0].submit_jobs(resources, + command, + work_path, + self.task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.job_handlers[ii] = job_handler + if self.check_dispatcher_finished(): + os.remove('apg_id.json') + self.delete_template() + self.delete_apg() + break else: - iteration = len(instance_list) // 10 - for i in range(iteration): - for j in range(10): - request.set_InstanceIds([instance_list[i*10+j]]) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) - if len(instance_list) - iteration * 10 != 0: - for j in range(len(instance_list) - iteration * 10): - request.set_InstanceIds([instance_list[iteration*10+j]]) - response = self.client.do_action_with_exception(request) - response = json.loads(response) - ip_list.append(response["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]['IpAddress'][0]) - # ip_list.append(response["Instances"]["Instance"][0]["PublicIpAddress"]["IpAddress"][0]) - return ip_list - except: return [] + time.sleep(10) + +# status = ["unalloc", "working", "finished", "exception"] + def check_server(self, profile): + try: + session = SSHSession(profile) + session.close() + return True + except: + return False + + def check_dispatcher_finished(self): + count = 0 + flag = True + for ii in range(len(self.dispatchers)): + if self.dispatchers[ii][1] == "unalloc" or self.dispatchers[ii][1] == "working": flag = False + if self.dispatchers[ii][1] == "exception": count += 1 + if self.adata["img_name"] == "vasp" and count / self.nchunks > 0.05: flag = False + elif self.adata["img_name"] == "kit" and count > 0: flag = False + return flag + + def delete(self, ii): + request = DeleteInstancesRequest() + request.set_accept_format('json') + request.set_InstanceIds([self.instance_list[ii]]) + request.set_Force(True) + response = self.client.do_action_with_exception(request) + + def make_dispatchers(self): + for ii in range(self.nchunks): + if self.ip_list[ii] != "unalloc": + profile = self.mdata_machine.copy() + profile['hostname'] = self.ip_list[ii] + profile['instance_id'] = self.instance_list[ii] + if self.check_server(profile): + self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] + else: + continue + #self.dispatchers[ii] = [Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii), "working"] + def delete_machine(self): + request = DeleteInstancesRequest() + request.set_accept_format('json') + if len(self.instance_list) <= 100: + request.set_InstanceIds(self.instance_list) + request.set_Force(True) + response = self.client.do_action_with_exception(request) + else: + iteration = len(self.instance_list) // 100 + for i in range(iteration): + request.set_InstanceIds(self.instance_list[i*100:(i+1)*100]) + request.set_Force(True) + response = self.client.do_action_with_exception(request) + if len(self.instance_list) - iteration * 100 != 0: + request.set_InstanceIds(self.instance_list[iteration*100:]) + request.set_Force(True) + response = self.client.do_action_with_exception(request) + self.instance_list = [] + self.ip_list = [] + os.remove('machine_record.json') + dlog.debug("Successfully free the machine!") diff --git a/dpgen/dispatcher/Dispatcher.py b/dpgen/dispatcher/Dispatcher.py index 58112c120..444f3431e 100644 --- a/dpgen/dispatcher/Dispatcher.py +++ b/dpgen/dispatcher/Dispatcher.py @@ -157,7 +157,7 @@ def submit_jobs(self, job_list.append(rjob) ip = None instance_id = None - if 'cloud_resources' in self.remote_profile: + if 'ali_auth' in self.remote_profile: ip = self.remote_profile['hostname'] instance_id = self.remote_profile['instance_id'] job_record.record_remote_context(cur_hash, @@ -253,17 +253,11 @@ def record_remote_context(self, ip=None, instance_id=None): self.valid_hash(chunk_hash) - # self.record[chunk_hash]['context'] = [local_root, remote_root, job_uuid, ip, instance_id] - self.record[chunk_hash]['context'] = {} - self.record[chunk_hash]['context']['local_root'] = local_root - self.record[chunk_hash]['context']['remote_root'] = remote_root - self.record[chunk_hash]['context']['job_uuid'] = job_uuid - self.record[chunk_hash]['context']['ip'] = ip - self.record[chunk_hash]['context']['instance_id'] = instance_id + self.record[chunk_hash]['context'] = [local_root, remote_root, job_uuid, ip, instance_id] def get_uuid(self, chunk_hash): self.valid_hash(chunk_hash) - return self.record[chunk_hash]['context']['job_uuid'] + return self.record[chunk_hash]['context'][2] def check_finished(self, chunk_hash): self.valid_hash(chunk_hash) @@ -311,14 +305,12 @@ def _new_record(self): def make_dispatcher(mdata, mdata_resource=None, work_path=None, run_tasks=None, group_size=None): - if 'cloud_resources' in mdata: - if mdata['cloud_resources']['cloud_platform'] == 'ali': - from dpgen.dispatcher.ALI import ALI - dispatcher = ALI(mdata, mdata_resource, work_path, run_tasks, group_size, mdata['cloud_resources']) - dispatcher.init() - return dispatcher - elif mdata['cloud_resources']['cloud_platform'] == 'ucloud': - pass + if 'ali_auth' in mdata: + from dpgen.dispatcher.ALI import ALI + nchunks = len(_split_tasks(run_tasks, group_size)) + dispatcher = ALI(mdata['ali_auth'], mdata_resource, mdata, nchunks) + dispatcher.init(work_path, run_tasks, group_size) + return dispatcher else: hostname = mdata.get('hostname', None) #use_uuid = mdata.get('use_uuid', False) diff --git a/dpgen/dispatcher/DispatcherList.py b/dpgen/dispatcher/DispatcherList.py index 84b438fa3..a62bd2107 100644 --- a/dpgen/dispatcher/DispatcherList.py +++ b/dpgen/dispatcher/DispatcherList.py @@ -1,31 +1,22 @@ from dpgen.dispatcher.Dispatcher import Dispatcher, _split_tasks, JobRecord -from paramiko.ssh_exception import NoValidConnectionsError -import os, time -from dpgen import dlog + class Entity(): - def __init__(self, ip, instance_id, job_record=None, job_handler=None): + def __init__(self, ip, instance_id, job_handler=None): self.ip = ip self.instance_id = instance_id - self.job_record = job_record self.job_handler = job_handler class DispatcherList(): - def __init__(self, mdata_machine, mdata_resources, work_path, run_tasks, group_size, cloud_resources=None): + def __init__(self, mdata_machine, mdata_resources, nchunks, cloud_resources=None): self.mdata_machine = mdata_machine self.mdata_resources = mdata_resources - self.task_chunks = _split_tasks(run_tasks, group_size) - self.nchunks = len(self.task_chunks) - self.nchunks_limit = int(self.mdata_machine.get("machine_upper_bound", self.nchunks)) - self.work_path = work_path + self.nchunks = nchunks self.cloud_resources = cloud_resources - self.server_pool = [] - self.ip_pool = [] self.dispatcher_list = list({"dispatcher": None, "dispatcher_status": "unallocated", - "entity": None} for ii in range(self.nchunks)) - # Derivate + "entity": None} for ii in range(nchunks)) + # Base def init(self): - # do something necessary for ii in range(self.nchunks): self.create(ii) @@ -43,140 +34,116 @@ def run_jobs(self, mark_failure = False, outlog = 'log', errlog = 'err'): - ratio_failure = self.mdata_resources.get("ratio_failue", 0) + task_chunks = _split_tasks(tasks, group_size) while True: - if self.check_all_dispatchers_finished(ratio_failure): - self.clean() + if self.check_all_dispatchers_finished(): break + ratio_failure = self.mdata_resources["ratio_failure"] self.exception_handling(ratio_failure) for ii in range(self.nchunks): dispatcher_status = self.check_dispatcher_status(ii) if dispatcher_status == "unsubmitted": - dlog.info(self.dispatcher_list[ii]["entity"].ip) - self.dispatcher_list[ii]["entity"].job_handler = self.dispatcher_list[ii]["dispatcher"].submit_jobs(resources, - command, - work_path, - self.task_chunks[ii], - group_size, - forward_common_files, - forward_task_files, - backward_task_files, - forward_task_deference, - outlog, - errlog) - self.dispatcher_list[ii]["entity"].job_record = self.dispatcher_list[ii]["entity"].job_handler["job_record"] - self.dispatcher_list[ii]["dispatcher_status"] = "running" - elif dispatcher_status == "finished" and self.dispatcher_list[ii]["entity"]: + self.dispatcher_list[ii]["job_handler"] = self.dispatcher_list[ii]["dispatcher"].submit_jobs(resources, + command, + work_path, + task_chunks[ii], + group_size, + forward_common_files, + forward_task_files, + backward_task_files, + forward_task_deference, + outlog, + errlog) + self.dispatcher_list[ii]["dispatcher_status"] == "running" + elif dispatcher_status == "finished": + # to do # no jobs in queue, delete current machine - # else add current machine to server_pool - entity = self.dispatcher_list[ii]["entity"] - status_list = [item["dispatcher_status"] for item in self.dispatcher_list] - flag = "unallocated" in status_list - if not flag: self.delete(ii) - else: - self.dispatcher_list[ii]["entity"] = None - self.server_pool.append(entity.instance_id) - self.ip_pool.append(entity.ip) + # else allocate current machine to unalloc dispatcher + pass elif dispatcher_status == "running": pass elif dispatcher_status == "unallocated": - # if len(server_pool) > 0: make_dispatcher - # else: pass - self.create(ii) + # to do: if we can create machine, then make dispatcher + # else pass + pass elif dispatcher_status == "terminated": pass - self.update() # Derivate def create(self, ii): - '''case1: use existed machine(finished) to make_dispatcher - case2: create one machine, then make_dispatcher, change status from unallocated to unsubmitted''' - pass - - # Derivate - def delete(self, ii): - '''delete one machine - if entity is none, means this machine is used by another dispatcher, shouldn't be deleted''' - pass - - # Derivate, delete config like templates, etc. - def clean(self): - pass - + '''if jr.json existed and job not finished, use jr.json to rebuild dispatcher + else create one machine, then make_dispatcher, change status from unallocated to unsubmitted''' + if not os.path.exists(os.path.join(os.path.abspath(work_path), "jr.%.06d.json" % ii)): + # to do: create machine, make dispatcher, change status from unallocated to unsubmitted + pass + else: + task_chunks = _split_tasks(tasks, group_size) + task_chunks_str = ['+'.join(ii) for ii in self.task_chunks] + task_hashes = [sha1(ii.encode('utf-8')).hexdigest() for ii in task_chunks_str] + job_record = JobRecord(work_path, task_chunks[ii], fname = "jr.%.06d.json" % ii) + cur_chunk = self.task_chunks[ii] + cur_hash = task_hashes[ii] + if not job_record.check_finished(cur_hash): + with open(os.path.join(work_path, fn)) as fp: + jr = json.load(fp) + self.dispatcher_list[ii]["entity"] = Entity(jr[cur_hash]['context'][3], jr[cur_hash]['context'][4]) + self.make_dispatcher(ii) # Derivate - def update(): + def delete(self): + '''delete one machine''' pass # Base - def check_all_dispatchers_finished(self, ratio_failure): - status_list = [item["dispatcher_status"] for item in self.dispatcher_list] - finished_num = status_list.count("finished") - if finished_num / self.nchunks < (1 - ratio_failure): return False + def check_all_dispatchers_finished(self, ratio_failure=0): + exception_num = 0 + for ii in range(self.nchunks): + if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": + exception_num += 1 + if exception_num / self.nchunks > ratio_failure: return False else: return True # Base def exception_handling(self, ratio_failure): - status_list = [item["dispatcher_status"] for item in self.dispatcher_list] - terminated_num = status_list.count("terminated") + terminated_num = 0 + for ii in range(self.nchunks): + if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": + terminated_num += 1 if terminated_num / self.nchunks > ratio_failure: - # self.dispatcher_list = [lambda item["dispatcher_status"]: "finished" for item in self.dispatcher_list if item["dispatcher_status"] == "terminated"] - for ii in range(self.nchunks): - if self.dispatcher_list[ii]["dispatcher_status"] == "terminated": - self.dispatcher_list[ii]["dispatcher_status"] = "unallocated" + self.resubmit() + + # Derivate + def resubmit(self): + '''create machines + make dispatcher + change status from terminated to unsubmitted''' + pass + # Base def make_dispatcher(self, ii): + '''use entity to distinguish machine, for example if ip isn't None, means we can make_dispatcher + change status from unallocated to unsubmitted''' entity = self.dispatcher_list[ii]["entity"] - profile = self.mdata_machine.copy() - profile['hostname'] = entity.ip - profile['instance_id'] = entity.instance_id - count = 0 - flag = 0 - while count < 3: - try: - self.dispatcher_list[ii]["dispatcher"] = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) - self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" - flag = 1 - break - except: - count += 1 - time.sleep(60) - if not flag: - # give up this machine, wait other machine in sever_pool. - # this machine will be append into server_pool next time when update apg_instances. - self.dispatcher_list[ii]["entity"] = None - + if entity.ip: + profile = self.mdata_machine.copy() + profile['hostname'] = entity.ip + profile['instance_id'] = entity.instance_id + self.dispatcher_list[ii]["dispatcher"] = Dispatcher(profile, context_type='ssh', batch_type='shell', job_record='jr.%.06d.json' % ii) + self.dispatcher_list[ii]["dispatcher_status"] = "unsubmitted" # Base - def check_dispatcher_status(self, ii, allow_failue=False): + def check_dispatcher_status(self, ii): '''catch running dispatcher exception if no exception occured, check finished''' if self.dispatcher_list[ii]["dispatcher_status"] == "running": - status = self.catch_dispatcher_exception(ii) - if status == 0: - # param clean: delete remote work_dir or not. - clean = self.mdata_resources.get("clean", False) - try: - # avoid raising ssh exception in download proceess - finished = self.dispatcher_list[ii]["dispatcher"].all_finished(self.dispatcher_list[ii]["entity"].job_handler, allow_failue, clean) - if finished: - self.dispatcher_list[ii]["dispatcher_status"] = "finished" - except: - pass - elif status == 1: - # self.dispatcher_list[ii]["dispatcher_status"] = "terminated" - pass - elif status == 2: - self.dispatcher_list[ii]["dispatcher"] = None + if not self.catch_dispatcher_exception(): + if self.dispatcher_list[ii]["dispatcher"].all_finished(): + self.dispatcher_list[ii]["dispatcher_status"] = "finished" + else: self.dispatcher_list[ii]["dispatcher_status"] = "terminated" - self.dispatcher_list[ii]["entity"] = None - os.remove(os.path.join(self.work_path, "jr.%.06d.json" % ii)) return self.dispatcher_list[ii]["dispatcher_status"] # Derivate - def catch_dispatcher_exception(self, ii): - '''everything is okay: return 0 - ssh not active : return 1 - machine callback : return 2''' + def catch_dispatcher_exception(self): pass From 692e9e5a993d70a9f41d335c7841ffce44d21698 Mon Sep 17 00:00:00 2001 From: Cloudac7 <812556867@qq.com> Date: Tue, 21 Jul 2020 11:13:14 +0800 Subject: [PATCH 101/154] add ignore_lost for lammpsrun --- dpgen/generator/lib/lammps.py | 3 +++ dpgen/generator/run.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/dpgen/generator/lib/lammps.py b/dpgen/generator/lib/lammps.py index 95dcb8568..87703e0fe 100644 --- a/dpgen/generator/lib/lammps.py +++ b/dpgen/generator/lib/lammps.py @@ -32,6 +32,7 @@ def make_lammps_input(ensemble, ele_temp_a = None, max_seed = 1000000, nopbc = False, + lost_ignore = False, deepmd_version = '0.1') : if (ele_temp_f is not None or ele_temp_a is not None) and LooseVersion(deepmd_version) < LooseVersion('1'): raise RuntimeError('the electron temperature is only supported by deepmd-kit >= 1.0.0, please upgrade your deepmd-kit') @@ -88,6 +89,8 @@ def make_lammps_input(ensemble, ret+= "\n" ret+= "thermo_style custom step temp pe ke etotal press vol lx ly lz xy xz yz\n" ret+= "thermo ${THERMO_FREQ}\n" + if lost_ignore == True: + ret += "thermo_modify lost ignore flush yes\n" ret+= "dump 1 all custom ${DUMP_FREQ} traj/*.lammpstrj id type x y z\n" ret+= "\n" if pka_e is None : diff --git a/dpgen/generator/run.py b/dpgen/generator/run.py index 728466440..3a1216778 100644 --- a/dpgen/generator/run.py +++ b/dpgen/generator/run.py @@ -856,6 +856,7 @@ def _make_model_devi_native(iter_index, jdata, mdata, conf_systems): model_devi_taup = jdata['model_devi_taup'] mass_map = jdata['mass_map'] nopbc = jdata.get('model_devi_nopbc', False) + lost_ignore = jdata.get('lost_ignore', False) iter_name = make_iter_name(iter_index) train_path = os.path.join(iter_name, train_name) @@ -928,6 +929,7 @@ def _make_model_devi_native(iter_index, jdata, mdata, conf_systems): ele_temp_f = te_f, ele_temp_a = te_a, nopbc = nopbc, + lost_ignore = lost_ignore, deepmd_version = deepmd_version) job = {} job["ensemble"] = ensemble From 5e485f05f1ad9f70707acc92dc766a0f80941798 Mon Sep 17 00:00:00 2001 From: TongqiWen <1368804623@qq.com> Date: Thu, 30 Jul 2020 20:13:38 +0800 Subject: [PATCH 102/154] fix bugs on lammps and vasp --- .DS_Store | Bin 0 -> 10244 bytes .idea/dpgen.iml | 12 +++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 7 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ .idea/workspace.xml | 91 ++++++++++++++++++ dpgen/.DS_Store | Bin 0 -> 12292 bytes dpgen/auto_test/Lammps.py | 21 +++- dpgen/auto_test/VASP.py | 2 +- tests/.DS_Store | Bin 0 -> 10244 bytes tests/database/.init.tar.gz.icloud | Bin 0 -> 161 bytes tests/database/init.tar.gz | Bin 2395367 -> 0 bytes tests/tools/.DS_Store | Bin 0 -> 8196 bytes tests/tools/run_report_test_output/.DS_Store | Bin 0 -> 8196 bytes 15 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 .DS_Store create mode 100644 .idea/dpgen.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 dpgen/.DS_Store create mode 100644 tests/.DS_Store create mode 100644 tests/database/.init.tar.gz.icloud delete mode 100644 tests/database/init.tar.gz create mode 100644 tests/tools/.DS_Store create mode 100644 tests/tools/run_report_test_output/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..254c4dcece84555f19e8fc7cdc724118d8e45ff1 GIT binary patch literal 10244 zcmeHMYiu0V6+WLI$;{2e;}AA$V>?S6D<;`EUO(d`PS%e+41`43N$kX6cD++)n)R;P zS=(`3w{C$x0D*X=4J`;oRa;2-!|Ml+A3RId3JDSM`axA_i$tZ0M$rUZ~gw8=vdrw)AjXlprEj*c+q0R z5QbPLuIW9Roa{|U(&KJtBy~jI?T@67Ml;ua$z*))IubqT*poxn%C2N09dQzNN;x|* zo4X7iauTuRWM^_b5p&gZdbPnYOv4rm?Cf z)ZTO5=+uenZ_RxBlpYl_GXs_6jq=|4LyWrICyY|&KJ2(?|H@mqO%ri?bE?-?;yRo5lTgSO&%S$Y= zLaaPA;kZsTZXcL*V(Fs;5qH>5#GJ&)VGdRz?R>+rQ)VfCV)i8>qxLy#dC4;0D!;#f zJnCFO?xd%zYQxaas_<8t*5k%tjNi658IztdW${<|*BHhTsqaeJ+-kL`@vk$jh|%Zr z57v)ZFM_7!ntjLk%W2n5B4k)G^FTZjwc}dVBw7sX3iHr}j+$1siLFK{f@c44a&(k` zx2x6L{b9p;*|=7|`^t!$-Zy3^`1NuWofUrnfYf)yVs^|hjOuW${<3PM)!}-5XL9B! zqdLwLduWg`JVsM=E8Rx7(@*K=be0~Wr|H-9GX0i*N3YV`^d9|*{!H)Fhx8GBLVp7w zumnrt$E8?~#4w5ku15;fxDhwu2lyd=j0f-# z&fqK_#uIo7FX*3EkcH&s`aav@MZU^m9YZp+YgTaWLXfQ7xoh`V1j)CSN*tE1xM=0Y zRn_Y@)HiS0G4~1czS=xs<)TReNFzicCyNY?SVn7E`6Z(A0AtENo{#b@`mMzhJ;piN zdv&0)(vq;zx8~YP!MHY+t#&Qj3Nn`9Mz$0(gtaZyAS$h5MyvK~X%)gMVmNE-)@^KE z#K6_oa0gpS63hJek$0NT(36b1*XT`phY|M|M%!ofcNC)pt5AjtRH6#&a2Ylrh>eW3 z&1l0GbSb>;#(rFlJ{-V73?YJH#+=QV8)MA5NMi=y!FTaJ+<;qg8}7iJxC?jVKAgsx zJlyqU5vL{2&d1$EZz>T_CPr8*ky=b?=8wy*o3oGmb;tt^jjh2zTdT|ip{C6(eBDz2 zALfC%A%0OF@G<9lawhEmcJ5zb%3mQ!$iUX=z*lB) z8kkE7YU;hD!YAf2R#8ZjJy7BE<fu0~Pe>o$y>gfKrHn3h~Yl+hY$qHVOF z2Dqk~og~S|CpZhdM6WO-U#B;im4Bdj>5rTV{z{*s2#c^721*qxSEH60xe4_M zF(Y@N1D(vvD{~k*0tes3F~!7L#l%~1FMh@hydS^Bukauq#bbB|&*6E^yD!KCxsd#q zd7zvjx$Y~4;Q4q_GOMtx+_~>cuM7*3DvzEN`qLZEY7jWFccM z($-GVZAw;Il$Q{61+ozG9^~rdSw`L4^n1qI2lO$cjTmXmx!S10YOXh`x!$N_w1v>X zHAg$PBg}}Cc-xDsI1dcqFxMQ{a2`0ys5^!@=YdHa#|f@JX7GKkK7NFoIS<@}lQ@+@ z;V-^q9+<;jULMe(^;$0iUIZ@W2o&nU1?2w!&d>k<|3VIdH#RQ<|Mw9*&;JZi V1)aD4&#U{q^?&X@@CCm9{|AaK=b-=q literal 0 HcmV?d00001 diff --git a/.idea/dpgen.iml b/.idea/dpgen.iml new file mode 100644 index 000000000..8b8c39547 --- /dev/null +++ b/.idea/dpgen.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..bc8e5ad67 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..964eaed7c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 000000000..1576bfbb8 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1592989824451 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dpgen/.DS_Store b/dpgen/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..db9bf2e9c39388e7d4d848f9f8cf8bd9cc0604ac GIT binary patch literal 12292 zcmeHNeQX>@6@Sn1$L{3A>yVyrFTVJ&VrnOLK8SPY+crzj zckb<;-Nbe477#`1C-gG~2?|1@2|_AO|3FBkLV{LJ%SQt(ty&2oK)@e>Kte@S@MdQ3 ze0RPhaX=*syVmaP%$xD6rD^)L$=Wyjq=XcxNY2F^Si@VJYn~XjuV=ew2Ye#>SxXv1Js*_uI2w}|Fmt! zW7a_^gJ&#bz}UvurImX7Oh7`U){O}SRFma)TT#E9AEEvAt;Fl$Ea6Nf_9 zq!Ejlv0KMxOv?;MjnPqoexKVi@{q9~%dzCmZB7U`;moQ_S+jE&xA#v+ zhKKMl9>EBH5~DbUF`UJ_@gBSvKZW<>WB4RKg{SeW_#8fu=kNu55x<8o;j4Hae}-@4 zJMuk?_ypz0K3Sx$`0k=ESzlyvh6vR*LlE}BQSwUDaFSGe5FUc3;cIXfo+IUc2rt8{ za2|dFZ^N(P*YF$oE&K`o41a;YA|k_;xC*`aQLMp@Sci?c72AcH-K6Gjq2_)ZCpC}Y zQBsqucsnL=4nK{b!O!A-_ym3#pT#qH7Qaafejm@v*H0^TV@e%a;%ii@5P~Gwv>GSq zYJkPP>CCjV8gI$B8vVO=53;=LrSQt6Cpo57a{PVvJGnL20b-sFq*nw6gq^!|LJwuANLU!K5S`|Y3T8Wglvu!Hz0j*d{yVwqeV82!> zr9CXDa>k;8tk?MlR7Jx@04%|LK`8$X!n!ZPYw%No@b41J{XP5*0TokHZA!Il?`L6Br^ef15zM(|8h3;hi{7p#DDm96|aA z@F54(e-XcgU&k|Yx~0+XQ1*+$u67)|I@q1FrW)gAF?!i6F zh5naH$}`sZ5_Ya3XW+hSXZZ;tyL<+&ttnsasr2YenfCfBPXVSKsPcF+SGB{mH`aM_ znD%vzxlDWW7Us!e+FRS1C$$fxnRaIv^Q1SFMW(&8$K%P_UIfz?T2y%k@-ywMjpY*A z>9^nj%A8^U)^Eri`#*6Ntj?#Z&f&Q zy{zBy8jFr1OT|l=i#!PQ9h!%4kmq=hA|!vH=*ast_sXzB%)Rv@08~%&uMsz4vxtp! z(H!i@0TBoq#*gC&j^aV`9C98S6eEd?D2Yv;<1SpFfDjJ{J%A76BQ!4`CC~9Jep_yg z1wF^}g|^Ea|B>Eb-5b{et_55RxE63N;94NV0wr{xC*yFna;!Y6UW{RRuONoS*0Obl zLJ}FdPl5YHP~d`OSYB^Bk4ZUAnPX&C-VGdfW?@3XwO# zG%|{6SgMGo$e~VPL$WN{M8OS?OH(XMHu4Y$XI5!2E}MJ2K^{cOLFPh>zACRbBa^9I zKB{%|f6K_sUnB_d;qfaOa?8!pr&fbjCV4s!+*JqsevMBfNvYJ0ekSttT-LCWWJQjo zshK1zL~5SPC=u`1N<y@YzyYf?nuAbQaCTtS?suLx@;`!%65t$ps1AIm~MZN*wyEk z#jo;gl{xGxCvJR&`Hap^ip#Zjw4?)bo$Z$qm*c1g2j|6PTD|0g=R z7uN!=1+GpDVDZ4nKp*Lr%1-2}$#d-iI*-%I58iJ literal 0 HcmV?d00001 diff --git a/dpgen/auto_test/Lammps.py b/dpgen/auto_test/Lammps.py index 4640c06a7..4d9869625 100644 --- a/dpgen/auto_test/Lammps.py +++ b/dpgen/auto_test/Lammps.py @@ -118,7 +118,7 @@ def make_input_file(self, task_param): lammps.cvt_lammps_conf(os.path.join(output_dir, 'POSCAR'), os.path.join(output_dir, 'conf.lmp')) - dumpfn(task_param, os.path.join(output_dir, 'task.json'), indent=4) + # dumpfn(task_param, os.path.join(output_dir, 'task.json'), indent=4) etol = 1e-12 ftol = 1e-6 @@ -167,7 +167,7 @@ def make_input_file(self, elif [relax_pos, relax_shape, relax_vol] == [True, True, True]: fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, etol, ftol, maxiter, maxeval, True) - elif [relax_pos, relax_shape, relax_vol] == [True, True, False]: + elif [relax_pos, relax_shape, relax_vol] == [True, True, False] and not task_type == 'eos': if 'scale2equi' in task_param: scale2equi = task_param['scale2equi'] fc = lammps.make_lammps_press_relax('conf.lmp', self.type_map, scale2equi[int(output_dir[-6:])], @@ -176,6 +176,10 @@ def make_input_file(self, else: fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, etol, ftol, maxiter, maxeval, True) + elif [relax_pos, relax_shape, relax_vol] == [True, True, False] and task_type == 'eos': + task_param['cal_setting']['relax_shape'] = False + fc = lammps.make_lammps_equi('conf.lmp', self.type_map, self.inter_func, self.model_param, + etol, ftol, maxiter, maxeval, False) elif [relax_pos, relax_shape, relax_vol] == [False, False, False]: fc = lammps.make_lammps_eval('conf.lmp', self.type_map, self.inter_func, self.model_param) @@ -188,6 +192,8 @@ def make_input_file(self, else: raise RuntimeError("not supported calculation type for LAMMPS") + dumpfn(task_param, os.path.join(output_dir, 'task.json'), indent=4) + in_lammps_not_link_list = ['eos'] if task_type not in in_lammps_not_link_list: with open(os.path.join(output_dir, '../in.lammps'), 'w') as fp: @@ -305,10 +311,19 @@ def compute(self, dlog.debug(_tmp) type_map_list = lammps.element_list(self.type_map) + type_list_set = set(type_list) + atom_numbs = [] + for ii in type_list_set: + count = 0 + for jj in type_list: + if jj == ii: + count += 1 + atom_numbs.append(count) + # d_dump = dpdata.System(dump_lammps, fmt='lammps/dump', type_map=type_map_list) # d_dump.to('vasp/poscar', contcar, frame_idx=-1) - result_dict = {"@module": "dpdata.system", "@class": "LabeledSystem", "data": {"atom_numbs": [natom], + result_dict = {"@module": "dpdata.system", "@class": "LabeledSystem", "data": {"atom_numbs": atom_numbs, "atom_names": type_map_list, "atom_types": { "@module": "numpy", diff --git a/dpgen/auto_test/VASP.py b/dpgen/auto_test/VASP.py index f7e3cb5ce..d8bc34082 100644 --- a/dpgen/auto_test/VASP.py +++ b/dpgen/auto_test/VASP.py @@ -211,5 +211,5 @@ def forward_common_files(self, property_type='relaxation'): else: return ['INCAR', 'POTCAR'] - def backward_files(self): + def backward_files(self, property_type='relaxation'): return ['OUTCAR', 'outlog', 'CONTCAR', 'OSZICAR', 'XDATCAR'] diff --git a/tests/.DS_Store b/tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ca61edaac6618397972900386c530c1223e13303 GIT binary patch literal 10244 zcmeHMYfKzf6h0r1c4qousMYSQY+0d5tyG~R6s>i6v=nXAMrffAi@WS-N0(jPSwM;? zYK@wxjgQ*;N{kv4ZT(}^A8Mi|KI0=%>pPklqelIqMiZma=(+dK;<8ZVBc?W)A#=~% zd+yn}_snY%Zp`gkIcJt^%(`D8cqbF^ZB)c5K)kn9|#C z@IByr!1sXf0pA0@2mTKpV9pkoHcLsr^gZBv!1us}2gLdi=3B^!C&!hPO9vNn3&667 zo8`sNybq8zVNXUpIj*EM<=<4h2Y9CNwir<6tPhLsEF+#AS5lc1lsUnBGrS!NQ z$#`nGB{i6gyYhEBl|s{WP46|2869nGY^n*@j@5)mo0{rt!prL$#>RAQK~>!u9q09r z>>Ryx?6SRTX7E-AD#@GaKCWw&H_e1Q)T*Xgus1u+_p;N}jagR5S;pEPr!ST4bavXk zW{JzQ?BME#v^~T#>h4P=2K$q4uUXm`P4o>Wq8Yn6kr18To{W7-Mm%kCQ|U~r?AU9X zgRXs!&HbDqyN!FZ={)gE>jyGUD(P;r(=N-(NUa*azJK=7p^D>AtUdL#GusZ%nOkC( z&NGZH?4M-DIp49<8;6~EX2<5J+h-@^PV$28A;)!M3A-y9?YB#@PuC9~vmh|X3R-1Z zRlbR4R%$(iG3VkzCo>}7v9R1Sw#9jL>r!#?mbm$trb|s_xn*q?n%1<^v9;c`11$v#{qIc+BdXGM#FXhoQeiCB7#+D#~O6t9CTwdwqPsbxDW~SBZ*;Ljw^5_uEO=$gMGLici=uef=BTf z9>>#o2G8OZyo$H+0X|gYEXcxkovLR`e8f-F!FIrd?e^(l8(iIPv>jI1zCT-G^{Dwr zFRWa=bXnty=812b_Z4&DBr&8wBEgddhy09_5GlU96+G4m9SYSO8GH66ngEbFQ}qr9 zD>TN8DM4cetAf=U1KTW+T4PC&dqy?0P<1}psM8pzX0g)N8x1-`*(_4pCgXIC5o^v+ z+LcB`7r|zds#gWubj?IQ4iAaK2k8-dmR_Sb8GRqoXY>{Q2!e*W2uS2rpb}L$2`8ft z%TSLqu#z#@j8?40I;_VA#^F|M!*=u{$~e48;&1>X*ojLq#(2CI*D)Gzz-|wZcj0b4 zfc<&s>&W6xNgS9CeM6n;WFnQkfOP`3#mpNi{!5T6PJKPrcsYy9!^Ikb(a~k6G}eTh z8U=0C)h}=0=Z4xTym7lX)ocLf^Tr*Mrc1T8NV{~%ZylPB>WV-0O1n+9lvnc+s-O?T4$bb#aXDSDA!qF3lu zdV@ZoPdPe2r!VMR`i{P*9{?Dbh1ndZ$Dsm?I7*k`6pm2A5-XS`R!f#xj~-?T5utGz znHM9CQS8FixP~KhFYduZ*pCBvnEByJJf|Qz!3k%ndbY&#Qy}@LY!F(-bZ~eeIf(|U zWfn8>3G=?%Bw*#D=}$R9t;S3PYPru(ZL;V$XR1U(kVbhp6fy;D6bDCY;7>An?{M*`Ny>u}QK) zA7jqutYm;O=OQE7Ae)`sh?{UTZo#e02KW9YHpp4+^LQW&Pha{T@I7#3c%V=XGc3;k zR~`EQ|3}7T{89QI@ICO4Jb6Q(oSelM(v+|5-=S G{{MIB&-Nbx literal 0 HcmV?d00001 diff --git a/tests/database/.init.tar.gz.icloud b/tests/database/.init.tar.gz.icloud new file mode 100644 index 0000000000000000000000000000000000000000..46c26866ddf1db10a74bd79e2f9ad0a82e7c8073 GIT binary patch literal 161 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?5QF=*+y#61|edBE9q~AqJJ6=kWqESk(rlrkCa<7IE;)=zE1lGk^gjBZOvP Jhte>r3IHpfEA0RP literal 0 HcmV?d00001 diff --git a/tests/database/init.tar.gz b/tests/database/init.tar.gz deleted file mode 100644 index 269c2fa61d2b79548eba0894090f43dc6b09ce86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2395367 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
    7cKhC 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

    Yzl(-jejm_X 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� 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

    ( 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

    (IGWI7`PVa!F)s%;>G9UTD?;Lzilc2&g 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 z zlyjwB@IHaK{sopJfR1=8+5u`!W|#&Y5$w7Gd^zLP04?YH=l=7Vc<`B4OIzYIe)}_K z+|EE0{>^PPi59xos0L*%{@RRXf-i9f?SS)Ake^TIKZAy5*^$LvB%Lt zf3nU#B=u?-z%aH%@zkQP6`qzQ}4W@OOC`g=)uw&s50??5C3jO5qPgP9hRE^4#Zy#`%zGp=1g=4 ze%j2Ht`}vXPu}hrWN}|fh1JPvbU#9TDeZs35|-_m)j}<)sFu4;iGxLedhNi8`V)Q3 zxN@Z~GS_?#cGCXgXO%&tc(B^^nQ>rHWzfm&Zj{pE>fJouJ7-f)MA@z1VOZ#4e8wXc zDv}QEUlkUIDPd3Ma=gSrz;eS@7E6Rc(yR|32q_@qDAis&1@BaucEf9={pUJ7I(p1w z{)a6hVT_zzU@c!9kpyi67abubBNqyB3Dd>Cl<#4L>YX=iAwv>- z-{v_4CXu|~4SxdA+g;YY<}})vwDybySNPaE9|gzK?cT8h97cz~pO(A_20Fj~HTi?f z1ZFT75nK|*&jxzW_11FSm}gjYSIS|hzL$=|%ViYe1~t4q)nGwg_@?~VgJDF^g`jg_ zu)R4xnzDRSHqP7UY&P>IzI(OyLJe=2U83T~&J>x;M8q(Bn++#mqDg)lj5qrOG_%Qn zm!&)w;E%$rW`Q?OE97`vTu)2M`l*T1jDHWPk%Q z_R)({PuCsD;-cxueWW+g8X(&iJ$3>$b8SyNOj0v5oY;$#CNlHNrHdx?5u6ZYWv?AW z26Yuy*P}_Xp$LrQ#XNwtvg($3`ylT<;*~NEcQ>H|@CK(CUVXe^3Go*8P=NY$iort7 z7ACN-81ICMn+~od&@iQS@6+5l5Hf)2qF%Lw!%z$qt?1+b7_&|0JcywZyF_`41wX#_rDoEv`}8_n3M8Y zPkt+|I{=1rIOthx!sJ)}pylnp2l0IdLmB1!16*}7ihex=W&&`*9}QQ)zbL)QiDG5n z#V)m)pDfOm9P!E&YQw_a1~hbV%;w}?0{Gv3kt`<}BGT36Ffw5-&^9Z#<2fuiizyBe z5nxeORef1y)YEcas!t@0Q?woDF;eypLu?_wbr#Cj^#c%}{r4!_*m|(KO?@PjYbaKm zdXoD6F-rN`S+WH_%093kl_E{aBHsYU@a8IVo)y^R#MA76nCyrJrc}s z%Ev-Q91hEEzNhrKoqsw`wOGlQ7x4?B9 zt#TKT3E5x3`*TYIzAvX48Dq?e&W&5(uDOuV< zVrOXii!0+^7yr`aAVbtZne{`CGE_&3^EmO|aaT3>o+O zst^)?@9odzipB1f0NR=|Lx!pyT?P-40^tno9h;9q70>!d5Cxd3Al(^-2Alq0BwxFB z0D4H2ctOha%>@TALMti*(QyNI_(fijQXhW@BTZ6Fjr86|8MwiSH9{<9bQ+LcEPz3L zL7AQmHR9`(ySRhoh>2OR_v1Q@3|Cl%v?hipH3RW86TY8*YzX0zHUuB+M~8tUVk1DE zTL={R(OwnDEt=?QYpRii7Ft=Tq3+w6PeALwtFDp0?0Kg@fCd>`UFA|uj0eSKPtnwZkh~ef=ii`8V!Qam<=)vDgazY_thGpW+z! z6|d>%Ow^>duPSL8iz^!L8xvGv11ID4jDj$HGkR;PjoEy6PakwH;tUPwep~y|E-Ry(ReH;b<#goLiAN* zxFH=*R55l=go3E}Lkr)@?!8J|_fmj5bNGtFG}1np4+8%0w;wfzm|gO=VCT=^s+np4 zOys&m1$dTKuml>){jm)3+#a!qRCD3qpEs+yc>Cs$D=X-AImx*?Oy)Yze^&4(>3{pk zg4-b@yQ;?#yIPv9W$aVfL}vo$A)=vh&B%Z2 z{z^+dy~?ZAjS)Cc{^F~{&Oww5)RaY zZ=e1b>Awo1qFaqBkPHJ~${8ywtb;>>di6x+3~I0c!-cy2WUSQ%9P*EMEh*V!$xYxCx)e_PQaOIgx7=ibS;!DZye2*M~MtQWowqU z`e^2LCrx?ALAs~^cHyIyg!y`50_L82T<}150@XsUe{>UA6c3Wpy)lBeRL2|!P{h7 z&F!X9LvZnhEK64q6KStL1{ceC7LoN7(5ph>n>f$j+Up4kKL5Z%NaK}(H$SDPkmKmo zDDVk2_j_Fe*c;Y1Ka)MH&78iN@5GxLPzS78q05C$GtLMZ{ zAv?gV{GoD)B?hbq8?YyB!OCEAA9TVT_r?bwwe?d=1e>k~f8OOcSiilvYKO4WZ+#4( zb|aF#N=ngGzB#_$jNdp4#?~HBZWtA((y9aiN98mwt*hu0VF{?sQk^Jxlz0(F&l|U}Mw5l;Je-!hQn0UNJTa(o6RpTbV+K$bj>$X|=!gd`wW| zj1{n)njAMUDgYsV_-+?)2W=3(8&jCZdW zz(@UUFu0NMK7bb^Rfv1m#U%x47G%SdW8 zAG{SlMObs9-jQ@4Z!@nyp^OU2j`@io{;pD}P-3!5V`Qdxz#d>@8y`MdbPZr$1YHpX zzpd_^xo=noq^M0r6wi=-r7>e4F3il>O|d<%#Qc2t%^(Z0;KB$LdGRQm;dT&MRrinI z0f&hzY*NuBW`885Mg{CXDNQ_E-L?acgXkaBO4dN;rM0AREFBb4o@fXLtU0+=v%NJ zLz3_8Au!=sa=VzKUnk?x6M3MzQf7Zdom=9lzsyI;sx>QyxXqOJ@;J8Yck2(8;Fd%P zg68}*lXHL4=d=RCpQ>Y{DXy1mtCpkC%6*gmBZ!HJvoDiCJ(=h;v42-o$>r!%2G16F zKQktx%TgxESZ&Ujw6Mb;_e>(O-S*t5Gf%BS<&#S+UQ8AYq*?GC04IP3ChTsh_rn~S z-Ywxoy0a0>s5cP&LlcnGltB2&jxZRYx>$tca@Wa5@XJIUjD0r~0)Bi|(>5*ROQq*w zW@-6hV9vHyZw9&JRG5^%emK%+!gv1aGJKX(^H{uR@_Ttf@sTAMS~qM3Z~k}A%RF^r z$72t(U_;83Kp@vqc?Bny8x%Ca8C^)o!of(ww z)pPJ051GRHfmmNtY3rD8C}Y2Lk?(w@)dN8-Wl$PnWQrj$KT;Mxf+3?pBiwj!>se39bTe#obLeU*9?R+VS{B( zX9)UK6eh)0HS+@uWA!?0O=b~K8!_Cc&)=BCB#}Ndy{SwES@XLGMsaEM``crd{%q<# zrF2*p+asRUayzEQ+HQT9Ka8~G@#)0K6!TpK5bL=8vjN%JcsXO=ulGg-P&V z;ephwPxpzths)h?6akdR{~vJ0l0(Svp2C?8w|PN zppmSn0rmi@A0KoVGX`pcKx;}_n#EqV7fRaD1UH8!SHzIo!O4axWTx|ra~_x?Xbv-- zS`!hrScm<-*eeJ%D;ffG#xLR|=feVsO3p&VhtC^)01>gj3<8h$3HLY<-kf!RKTp7d zs@!`(gC)4EsZLnj6hbrHG!2HAzy@`0ot|~g8ong^r@?^A?`>lYQXIg z2V9)2OY?N@<||Bbi(PXi?GH(Qpp8Q32QZui>DD<=55^GiJO-(pZks#b|G@g4I2FEu z)QE1{tyFuRM>w%Nt?Y%ASlN#MF+~nxTdE%cM2c!PiM(3!A(6cr0P;jp{bef01V{6psZjy9mXoLmkl7!lkY?rA4|OI@oy3$x=4POO@nA0o4+&?X z-Hrm~*VX3io$Xin!9e%4+k}p=Q2Peuj|l7q$fL$s>?HHtA&y7oo|P?qN`Y8d>&{p* zNX507ob}HTQ0P$tYiO}0$p33ce$+XMeStL|D_~3rwqU#I+CRKT`}_OQ=iTks4redr z1CTd)gh5e1Z3uk5_Xg1t9p4Oqw!?K9R$~*h3hGiQ3Krf6VVqixgWkuLTm- za*ZTdr}bj%0&ky**>baAlcDFC0FGNg$xS*O&2fW9f+ag_Tvr#Vk72B5bsuUoMYcFx zeEqa7zx{~34QM9?joB~*`Z#sj%EKKyPRCAJITQ*$X&R7Vqh=n|tL(WAFPR?hZ=R<9 zC3189l%>r{rx1Yn$d@f1M!rVPawoF5L3wGvs3{|-!>8sK9)R2y3I6+LK=~0YcO=1Y zENplYxO!g;)94jPfI3Fl4f8_uEd;3OVo;~o%V3pDF_O1S9d}; zmMmu>XQhs9Xa1$=3TS!=ZH-`*Mh_l_$*+BTTNe3PNck!oEM1X=8l zM<`dyzk3py$!2hF) zeUri9t}&I(ZY?Wh4Bxw>qZWtb#J9sN%*X;l<7pZw9bwOxq=@{V&v7D1{h`wgf$ud? z#MnCrsUB`Eer#1wj|{e|;b}T0O&eLuiQF~5wD_UZwkwMaG8JB*{;{pa38s`nk8BgPRdQ-%F)mwsGq_amQO zWS&gXLLh{H-QR#J1#_%U)MrLKfHZNjl^j$Y_SV^z%>hc!o=Tt`%&M?a!5!;L>Tk=9 z&!Ae%tDz!6Z=|A}9|Iy^4nD`gXQbGU)BFzryNHX;k6^kj!@A2hqM+GTvk z=^2C5zxTjKQ`;N^*&t?0RzPE$* z2^{)T??{xxN+9Fvb$NSeOI1%lI4k8bs_?m)% zwg^8~sElLazfTg?oMhroYRO%E6`7l*?(`m8#Ya9Geefv(Q5W<;_=yN*KY7vS`2aGR z8`cTfhEm%7SpzmIPNfWot|{Etmyzo}3xhWE_7eEFgsxbEsH*>5kxkN6D_v!k)G{gRy>tt_2hZ5iZ^BZ3Lt#s$OpfGAqrp#q4x2$q#)n-liO1tLQI+BsA7->TwM&hD_r?tL|KM8h z#*ip8HX-Z4*JSI2x(lDv&)R2El?|JHCE zZ(#b?FZ$n)u~gSH##&Tmd)SjSzMJY++AXKdF9g1-H)CD9IAg#T{R;dFO((`+kQ!ry zEX7go`()zLeXzO9{L11BFYClm&uX2A{I>=^q$NM>=mIzS8jink2E`RW4Os6b z$dMr-5`dt-NCs|!ez$?yGPJvdcggxQ0-@KT$26!%@t~fdq*@tl=5nCs1| zE?UANiHz#jlEX&c83wv;V;R_8gJ(cv2e%w@av;Cee8vp}D6YHWM8r;(Lx`2m(;Zm< zc9?)}exl7ry;|E3Ys9GIrPI&G3O{*S5IMJY2fz4O zYN>vz`8QJRRmdT)gjyWh;jPh}#-%`5JI>D|J-!Xo*%8;nG7%X$?G;!nNwvp@`XGH5 zjW5})hVDtEA1LobrNiXK6Q40`g1h}gkoWww=l;jrMgh0yCY@)DLl#x;Ruj1L2%;C} zIi<8H4gUtzq?fg{Zgv|OFDxe8?vX!@sYqjF`NKdlzAFxh?oIqSV*fwK53|X3Ps>qy zB4i$K6S0W3=It9uQNNZC&uX?LBqNU+P#!G1735|X?XFu0T?rh?_U>@s!<#5_Nh8-` z4&xD9AJMGQ9}}cC`Re?rSBLonI0I|=9bAar(N64Wp&}{hh>7RE1dNgd0$Kv|nH|y4 zfV2>hA~s>yFDq$;p0_q@{LH8+9)X%l4c*bD?r?Av{u4;AzG2Y|hKtaFu|gN$nJmaN zRK~zH^ohvIW~&19<;(&+PnmUQlsD`PCJqTp#jgXXQf?(MySoRXeub~BJL25mRf7aD zzJ#_KmmXhg{_z3C&DKPns(%|X1&DdA(jqAvv(l92&rtC}8>p^IxhVGm8+k(WHp#wmP_I%FNts7@?B|a|<0V&C+;^v&;eYHHJNJZQ zF^~o5lifDIp$jqVAz7hz{M!E`WVTtf8Vc16|1uL%&8 z{CjV&)SiNbgKGf6-|Q^FSfU>pKg?);A5TXNLYykH=|kNTw8niV2XA65Ip@>OF#DiF zd3$LpBwMbZge3`v`+YztJ4`}yD$ReHfiHqGP)9jYVHrAll}dwVOAjpuO7T>k*ahxH zW@*-GRJ(F+(HJ<%U$Kn^;)DXV;;KHZLY8x<(bcyI4}g8@D!av(?S{zgE};0 z#r^W@Fz-?CA}SlHq$_|9jx7vv1h}>jB!%pxeR&uKFVc;Fc?^ zXGx7VzrO@NyYqH)2-4`y3QTIVN;cqa8g0Ro3?MvCq}C6_JaT%6FJVU}rgTx20RDlh zdQ)$Fx9ly4!=~OG2tsHhDnD>I3{A?g{#6^KMQV8*c3esF#Fz}#aXQIGs|o5qgOq|x z-oUmey+ijw=t>Q0*zGlJ5EWLhjusHmK65D$&L*UVu9KK6!L8aK_&4W5j%{Rt4py?9~q&%21Vt z2M!1>3E;2KCIoPY@fr(kZF>P$*Uo+Bl?{abIeC%jW7|iuLIl#W-B;H5@B-nkz<8gJ zv%rVTr~@=W+8N#}Z(c;^@(!Q+#)5dw+nbFS$KBT4o!Fh78nTD*@n*>1YC-;Cug!|L zbvog?aPrqzK_R{JaDbM|S;*ueg6bo4kN;8vF9nGM*wHGKCHK^lL&VHfJNUDQG2rz3 z3|yY<6N8YE_yYyuG8UQd<0UX}AoMSzBo5T_WFlyv@zYLx_(1JE$%_C3yKHcaXwGWe zc}}+&kp6kV0;oS)jf==TRU6J6dwUyu7(X3B#&=+T`v=B=)pl4s7vg1Vdv2Cv9MH)R z`kdVEx#BYoMmyoH%Oa3XLuaD~X2;zf719;3Y~Oi2I8+8>roR<0s3uZ&AC`Z6XZ@io(U<{$JrrQ{5>L8- z8&Ca&?L&!{^YZZ-Z&k{6t4$Nh*E)LmrFFadoc^`rs4>N<&zK=}Im@ogvZb3nhr`^I zceex=IH<2Yl4a}69DosQru$N2SdH}Z^bXjg9)yiPU)Q*_tQY$gII7W6pr(IqTy)cfB=_V*62NMhySEd154(lGdVoI#+*THxD9 z0Xe$^V&^%#1X)apV_sCu#VMhWhQrN!JuQi1dIK_ z!ZE>)GGWi?7KtZ*9l*zZ)L=s+NybPRV^%8J@u#kgE{(m7hjf;Zv!tQfUG_i1h=taU z!+_G$iJBy@O1=g8-t{hAhIL}^8OYe%vWZRy4*#`vF1y0giU)eiCn|FZXr`FuLy1O* zomL*uMqSr)|H(@NS_c#@*JEsJKv5tvCrAD~>=rk|(uId)AS{7&^2amN%idtCItiKG z(a<(0>fuBJd%Y^**(F}`)h64-9V5HStUQW`fxyK%vb5(I5fBI;ihy5!*PRsCzqoc2 z;vb&(Z7>bKBvfTo_^%3Jam_zwj8DnkW@&)+;I{Oo<%vppXdD1|$6JAX~*EiE-oIlG&5^B}8G0>DB^gH1BDs+X{pxaEl+pr-+%}Anx}7_2?q5(Ws*b zzB4d&cZR(prt@hIPB&=@VWO`0(dm~xmD9qupJMG#&^ zpbtF#4jp(QS9+Xy6c+;%%T6+VR>&0KC)(WmEva^-ZJr1m81{eVd})0}hb&%xiAh@ZQw)SCOM+eGjz?3 zdfC%>3+~yEV&TS)wxXzGepNxxno8zCJs6OOYg^G}y-J_Gx#}49KV}deC|hL52W0k^ zNsV%xUR(ER|EM>R-9umUqA@9H^wA?mFU_qE=vFeH@+*xGd)Z<^rS(tS`yxK$huz1% z{C<>;-7bd0HJgu#d%dFbgDCIXn9-uXu)6jzfbH)BUHd;Ot)g-eLs~api1U=JLV0<9 z8O`nRmwCut&M$*i$SxDaLQ!5=@H#K#2GRDZjs_(9^Riu$LA3<+oJP%b-a~Pt9K^s% zps^oPmbN2jq28q9&tZF#j^CCtN_j&@YM!sG6VgkpT)w@(xCqHCh%R|N`gbkv!BFf_9C(>@v9@5Fq1T7;M7}Y>C7(PkX^2-pmTo|>_`19zQkce4Jl zkR5@#&VqzI&xXRIdRaK2Cwm*7Dm-QpB`R4Gx2E$ws3mL}(`Q3rrrymacP5lioB?@ML+n*gb z0xGHq@mo|Y1d%%rH(+}i+Z6%mJfr_YGRF{4-7m`>01cXaU=ey-1Qd-s9MtxwqOA48 z{FYoYN?Cdt4J%9g06IDB{^b8e*u>VLEj9!ZW``ZD#iqrK4crS45pn40G!-^fuYz?V z;B*vhGG$~oFlEmMo=tz|WTSFY7`naz1hbS6X>effIC}|Fscis) z3^oOqpmXP)g1U>Tr0Rj7ns+ezo|{Yb`l)d`Dk8UOSoIOODMTt;Qq~~_PZ1D1^M?=r z@d3QR(x4{0Yn@n3+XC(H>ig0mFTX(<=;oAEBf{vZ{PErdNSzKYGs;RtL{Grd--N+& zN0Jh&N(U4$cpGF-pc$Kv#ZN#R)5X$#%yFf(6zahWX>rBZA5i#~W57!_ZWBR_vdS`M zyM4eR-6(*i-%Flq--5j-{Ibr=LpiamF_=W3fcVpD?`KD{C7^pX)lvujp`Fu<`^@lC zrc+eF&&A(#%H%q5(igHNtGt--2=pnoo?qOLsN!$NWcco6D3}MzJh^JAJ{<6KY#wka z_9VtlSSsY3LeVCxno%7K>(I*Y$)D@?i?K^j9QKh&P{&N3x^eyQ9t=;mub_Pb$l5~* zR!NYXdFiVQlkI*L5xdpIuB@5R?HXAXc;LT!nDKp)?6F@B3P`XQ?cvOibG`EnYA~bp z;A`A^4;~wJqh|wTB`4hh#o?tS4H@IurY}3sM`v`u?}aGhj@sKKBaf8V5$N$6WbobG z%gf_lat$DjjEu}H`> zN#_FS>K683yL0iVHo;wzA|eyc^Y;0z1QNDYJc3HT%#XPXHBgFQI!%W$R0GA&2qI2hRZ=*&c)7!7q7Ga7{&y08|UKKa={qabZCV>00=#SOKV}sx*DDkfjEohMy-6`a|hp@eMg5KFVs^IwVcvXSUq%n3m!C0 z)MkY--);w;2Q>zn!Q4t3vG*XGT26u8t4j_6hrae47eWF{Qh=6H6DZK$I6izhYa5#0 zq@y9|V|6a89lFAcOw8+F8|8WJI**GCpoy18F2OzK?KeRG8I>Pe*i_{>{XwnT$jpEa ziq&03_FFB$3i?^+#CL#;10<|p>jL-!UNj&6m17nC|LW7-1yXiT<{v%^DY>7IpuNWC z*e!)r1HkqXgF&qeyLX$UlW_u?4)3PGpp|ew(Gf|oG)@H;_9yFN@M@qT*_9&m3wo_t znbPD>rlU)5`pH>Z9XC}0yMuzC&;Vcp2M+$$xtS66vjkS?azYc zuAT?bi;CM7k*sz-+O`KLWETS+UrA%iz619Le+~h1$QuZ|O;rvH;J4?oOO1+G1SEXf ztLs~Cln;bz5~Jdu{j{baZOG9juOMPfy7WfrVf+keD&S~5%30|A!(-XSSLIliNFsB< z-jyUIAqvz@$p>--#5c{CQ*LWYU>n%c1_PAyTM%-EC{A#3QBFJ=zl8gZtZi@n2nQ{OcVL6w(VXqHb1K32IIe>~HsirNufl{`76e5_sca;AKSf(`h?N^Hp z&AqWVQ_BYD63Crd2>#D(QQD|52eF44Y%vNr=0uw11S4?c zJH}j2vm~g){1Nn1=lwKScCbHQvJL>^ijVfu8PQlPfBfT;FlE%(7k`51h1DbKKBa_i z`6IyC`V`b1V=a`Q@~(4G?>OHPB#43&i3i~@yX4o@c6vuyJuTDo=wc1Yb6*ll z`CO(D?Cm(R*9~S||!NC&**z^>@Tu}YInpc^(dKW?V>l3`S8+x_QwY&m}|5GiG zeDzG)eGA`9Z2dCS?n{6E5xFh&OO4?y} z$W~vMLGo#emO%nk_3{`*{S7M|%S)vGrf@xQVec5N692P#_Mrs)fx? ziq}3>P|@w!pDd^r*n&^6T>KUp<@*R~(a-lw6}b3zb#U5~z?59;y>gR33;k&-;xm*z z%6O=pt-zsOx91hpxIS)!9!w1=VV0;mjLDoOaX68%ru&AxO8E!@TF+DO>?Z88_4?

    v;$R$3=7oFU0bCa#t=t%;>!94n0Osck9#3cRB4>gN+mX2=gDnd%=ka ztN4#4m9(%e;g!J4oQ~GZ)(0=(?$yvX!=XllckNO`oG$nN!vuhJNA83h{z{Ev^MzhG zO!e#3XIB;j1Dnkp{FH(EB-tg_+|c+&+}}+OtKtz4zqGcxCG9H;_sP7hVMArlD}G9Y zJbM*!_%1K`=rHNt{~j*h-KNzLGPcWvJ2aJ}K#JSe!-&;@JKVYZlkyNV63N=iHhI>rHCB4VrORvIW4qDr+!oX^3y z`GSl?813LUPOpCHU3h6Fy4G3F)iiWa-I>u-NjxMAU6&nPhj{C08n-mg9?ybiocm}p ztYrhZ4xMLL+?UD4yBq4*5ya9;{%JA_FTD_H z;Va^UJum~{3z;r}VSLJSW+fi2CZm3zgfV3YG|PU4IKx%Aowq3|98p7Ex(-+D$dGL! z1c_{0NbB{z*fzU7z9b$cyyVbiSQKe^wLc?QZ?(FVCU8-F13bdON6QdsOPK??d)zCs zHs$P`;?LKHX4&vBbmWeKFwiCbH^~0UMyl3J5gvIZ`3#NhuqEF&eCIe(@eT`c!X`|N zl`W{s@WM?cKd^J_;mumOA)}{Li(;rMtnSR-At)B1`qe=EfT%Kr;}3*-ySPY@P)Xp z0pdj&97)v4&(nMU^C5XCn}owL-jM}=X(>fK#vu=ePJz0$cz=E|Fq@-tBY@_o_fk;J zZ601rqn`o#CIl|+cZ~~hJg&1G1&0H~GFjLN;r& z{$FB-CBT`txc%*d?`dHZ*8 ziPf!)tAhrjk}EFLjKFx7F@tolg%uqUY&K$LL=0#$RLx_Ei-8&LJ-vWO+ff2#0G3d@ z&fu^E&yXW48m-lM3u^P?Q$5(Im3-ufLV9)M2xz-^~arHOMM{1-IJiN?SHmtasH}YjG7O ztY~M`=m?Ve_5!QN+w!Kaq<1~ncW`-sl;$}Jt&NV8;>8Vn!(UNm=DHgTw$(oJe|rL@ zT+Vuz@j`VMF-fJ+LV0q!3fA?R7*HT${i=r4B*kMjj1L4R|81lN8Z=TU(-@~+5d8BG zPoys_>$QpOtgdD`N;%DR(oG_EFNhwzyJ5=FK%5Q0bJ;vqMqPTxnhF%k(_sXvT)VTu zK^?iYX`~cvDgxm~;g&z%(irIHNbH9A{8Nfq*HLU_!S)jGGy|BDGSgUQOdR^a&k+2v zZyC8S9-O7Cik`2FWU6uox{XD_w>E~lR?OuHTBhgi2%*H{`ou0ExYoZVl zkf9FMTC8_Z8`$7PvVfJkxt9Ewmplv+`l-eUM28TMv3M`uDpB6C7oMn8uut`j^b|{Z ztlrO+(%>DNlhV*oJZg+|OSUolL|F^|M-j8l_CRTp}{xE5*#+t6@dt1-F z4&`h5)C5OH+eAye+qmpYFv}bOo*3`Hus+H@8>A-HS^Ua+vi(pdV8i$jT^s%<{t8cI zjEW~zjjVmX#(-5uF-<;fD1cTX=Sp^#?N8E|pl6qn z2Fn7+K4GcYawUU2Y+n=<+&Y>9O0T65$291FQDaae{MlSEK|vD*CWoNJYEG2|4uq2% zyGI`?ThwTHEox;U5T61>f2bk}07+^WxRjJ+iL9kB#3XRey$V!-<>U)-*%& zGvu((+g@$SXNh#g_0M;;!KHEylEq6OzEopYcu$+I1hyAHwPLR(gQE5B`Bc7#LJooI zkTZE|3Z5=y)M;)<>%YGJd(N&9zoRpr5#${+q##v$R~$O_QiS=krhG^U-K{#*jd+9M?{pEQc3*!fWB+~EM zZPJnP7%1~hc%2HxP1RL>t97)yv3u4Kzx#hw2DMS(4R_PwC-(?BkpBLUJxrdl;R1D- z4mqpUKRl}#+gOrrGK&pbe5Hc6IdYN(X|8G2IpPUn2mbYscp3X_f4mp3^xqaee%|v+ z&~{*~Ir9jdICZ)r1a6Gudu`O-2!IFb9F;}BlfP-Jq@nr21}bu+E`du#K^@A%X@&4! zdoc;>Y`a>So>`+Tdsq0Z0W7vUI9D-R|Bt3K4~MdE-+0!tX3G)^-N;&&>}s;kSWC!W zF;ZbHS+a)8l4zRAmMvK-L?L5MAq=7j$qdD$tl6dYca7)${r5h{`y9_(&J#n_9=u~(yw%m<};iGBye zEB%&uJq|!ZDsBjPZC8>Y3P2&G(LVJH>>ehLz%_gWd(CP^JBy-jumCA&l|Cg2Mi$X! z)xva5Nq#dQz2MCn{RKr;JKe`q;4er6)?d+%`Xoaa93hEn2nT~96-ZG29dNa%W>M?} zUxSwgBLrkA3mCBPJ)fqFE&=|4K>zUzplv#bf=sb;IWo=Vwl4fk1&v;TeFBK-;I&E~ z|2tTr<&tr*P(~hUGF=5E?54&Eq(K)$T zYZQ^52)>Y*x72&4yP8UN3^~rGRE+IA{YCPVyD_CG?y%1FMM%*(c`@tSTP(HDVmHjV ziJ<1=y3%hnmS$TG!P#0 z_X0bBEMfQnTbo8zEzC>fb0T+mG*dsD`y{2g4#8}pQSuXeN*aip_`oZAk?8=PIf(Gq%F6J zPpivMNRCfvWtmO5LyjTmIU3)X&u?FijpF-~vZ>URY11cu{yuU5Fm$0|;#=47fY&@` z4w*WY-2>YcI5T{2k|W6fSlmw1qtM@{qGKo!im5sv35k(cIYE(X^Evt+jj>-{sY$w8Ga5lv9Ltq5ETvYLNETA4| z{d?j8F-Y;iED^g`&0NwtFgw{Q7rVquAfMv-vBD5eTK#k*Y5kt;R#ekis?Z4r%>FDG ztB4GEL>V$Ub#iIw(1VUZ(?vJV)|yHG6I^$ zX@H)0$)ooWFMC03OosM9IKR>T#3H|kziwEm%F^rNc*wJO`*DINoL*PH0OocExP%mP z1|pcq0f9Hy z?^%pj#hYyPsk{T0sLI+dbfD70+w{aRN~trhnI^UjI-2*BORgya-^1zv3+R==1@;?_MThaIO`%bXqR#Rv(#uS89xRgPEmLB zUb4R} zY4K>aXOp-e`}IX`L7lO$Mr?IUHVp6X$pA*Nr}ye^9r6w4gIe_Gyrhe+H&l>iBRBZg zITTzgT36(=>Ew#&8cMJ0Ce}>P{uZG>SHPThxc#u*a`K9bB<@EmNcLbz7r)koBi+f) z=Dtx!)_WH+DdUhX#TKA;=d`!&Ufl;*(W+rN+gJznG?U^0GT5w?Ph^Y&I(RxGdxB_X?2m#jX7GB8xNLpjH_C#hzN6uYGrdC1WXn+&-$$4lq4397ME)8D9neWvT4#W(Umw)BZzN10tD z4(J&bfA$i=5$JcdQ{HkA0ow+pATd)7q6xqs=eThclec`GlOPBJOL&t>w{DV0t<_>^ zt&QTUvifGWPM;mCC%`=2cWr7~`%|li<|_D{ef0peIgb1((leJKlbhrr?dqE4PE6ZR zz=c*{GVhJAd>9Cbt}o^!+aD$(M{L2yipe?W_ni+JzShg`OK_|j`?u-5vbC>0nwjU@z{N3sKHfC^8?(w zfR3rR9KsKI*SpelJm$ibYzL_5Y zc65wTsutyulc0EqfQ>9E(k0;Tfn?9!oaWQZk2vQ`=~hE52SoM^FSPdMM-$cgolJ1_ z6}x)a6quFTqwnF&%Uz;%c{FpbDxbWV&N9PD@LHY9d$a&lqa&%whqZA$8sG-2s0S@) z+b16XSE(1EkFgtmq;8#W41Ab({EP&ZNr5XdMSt|phh#wpOs1W)`}*nQKer9TuEp~R zzy*ppez@Po1V)5R9za+U^@Tt_J*99RWU*vgg>>Apk9^J?-2H(0A$@)04k;!@YVS4u z`JV&G%DW&2Yb@`f$O!pDnz;z^1PH2;j_<~a*-bFS`!cKkTw2Qap@btSBqba(8`A|O z4jdb_wQjqgNM2V8{KZ8X^}R}2{>Y&qblF;_-)&@J7A5Pr$AP|>$gRxa2vyRdo5TTV z0U^&|u;o=EV!w!3e^}@`5gCIehC#NJ=I^KFApO*RMsbnBTyB2%zX%$-I9wVPUzr|7 zxU~ocbEPsk<1Go&`0OkYqNz1_mv6)ZS1Q+bUsr?p zl{e5IWH1IbJj>^`-r?|^;K!Y4C-R1M^HP@NW=TkByCnrcJ_`A>l zbKivtdse=AeR-wQey!pwhZuY8?|15$$=n7}JQQF~eY08I8++4+W9+johTcqrrA+H< zc1D7rb`az=>UqQZrAZdT-|ZQMw3nLXL05bb_#}NUqksRWgHsQXW>BS%nq?M2a7=!F zVg*rqVbL+Z0P%_1dZ&p++1LMt;1zkFq+FYdm)paDQEq`d{2YsiEUr8X4&_u)R)D6a z>zmC|H8_6&a%(sRuyy=&x>|h@kV|1K_A*V_u(({A_P00AcG5&655M|HX0#A_`a7XepAF7}0u?)DtXSmL6yF9e-%^83$9WQiS(HI~&jU*gS0OvN54semPYfVuB= zy2CKU9q8(yaf2fV(2Hv0-2ucU1#$4HrDn4dU_j8G;sNBLEX90oSc8ZG{aaP-C0AP2 z6}Ei_p^oy(?kh2VerA;GpU)B(CA67u*WCr>`?ZrQ=V}>#uo7H%zolG~MDaR^;rxNI zm$8w4U!k;E>S@&u^1`0y5H<8N=h@S-SYrcKjLBc&R#<(QfNjXT1z2Ha#acMZsc#k4 zFq{-eTh)03Vh2*2G5sS3u*6ra1SwQ3u-ZJEON@$*-^#=kG4C+3ewQH^0@dNlxcp=A=htQyawX$+V8@{1S-i&iwpfPNQEPAQgER zK$>sS(AD5NDhcVuSBtA~r}LKELHr&^3?4fQGgr^>p~fg3k!cCCc0Lo>FZ}!$!3v@p z{euqIpCUl--}QcXJJ&u|Kp8B}fln_HEhifZiF`Dvg{I~?p@FsBmI=h;j##HJ zsotdci1UM=rh!eh(i$Qs`TVQ?T2X#b>|-yy8sh*0#*5@&N7!Dp-%e-n}P}IW#AcAh5>#PVTbRv);Mb3 z>$lL+*B`bA%hoqOXzLHjw7)gn0vr(uR7%_jlvBDOz{hK z0CV#*bwjB?46KN2lt!w7DkS*T>Wx9}Z?A<)Fg^!e4G~)*CtXPgw$tMdyaM~(V9*a- zZSy$NqmjFxSVS!(ekWp|cJ{xY=YUbb^S5Us_#Zq{SGr^=`wtp9)mrI&XC7M+#Mldf z=VjMD4YUvh<#Su?=1T~U5!783YZ!AQ-aaC^tb`7 z2VhhaoEb!UDlUP>YLEY&Q9Fn=glJ~>m7DuO!{K?~4sxt!VXkB6Rrp9hMajVdHqfHAvx{r0pk^pTsqS%^v%;${h+kB}=tO6nc78Bb)Hy{adD$oj0sRTU4bMbdZ0_u^ zQ*POlTjV;VNlTh=Y#Pg>_KG7+x_BVHQ~?hs@GiX6klqefieasd;0S}U$Dz7`Z%r0% zKkBuB>?ziXd#oX%`48{Oih!P5A}d#3NQ}irYt+mAG5o)d!kX*@HwH_6IKMMAkC(6WytfWAR9S95&qR8Pya9;*McD|>w}tU=A}42| zDu(s9P7r|;vMVJnE?IgsVc^8(qc5hi6bGS&?k8fWT9!j~X&49=w;*s|on?jj30M82D}Oy5>5iKmrg&(K1XwQt@02+y0Pc@AD+KM@VD z@Oaoz;{xY&J_kCyXOAmLobpT{POV8kIdqI3UPQzEd2?LVr85103ks2Lz>)~8Dz3t` zZUqoA_twgZlm$zO8pwn|M_KKQE_bsLy0xjqll{aOG|zKso%C_oL}@$2$Mo_oup(s9 zo$G322k4wztKb02mA}F^%;^q$N>5(g_0@oqV{Cm2ugBCiEg@nmH*h=zE<+C?Vv7|a zEIWrbxAb~K787dqqvXqc`&2b3`a7RGcM)m(3|Yv|(UZRpK;h_^21sWq`6t4C0k(MB z4|cdchH4Ec*pkfabxCEIfyOf2e``rj#C2K`4OE;7C)9wK%g1=B!*?(2*1?>I_NL1< z5z4;7f{%P#FXTa7`nWEflyz8S1vx$LTN^%$Xy5q`@oPzGccZA>K-hnW>F|tdE7G?? z4V1%U3OyKK#(CHfx4+mEx|96i<0gF8ckSDifKuH3>Z0!1>acqG~Y$=*#?Fu1$lV^3*&8 zEAaV3Eqer%L+SgKyi?{3YK$2YI~!r zqt2oEkXQMc!Lp9_E831r@o%G0 zcpB<#&zv0S*1m*4f#CxW%qOCHi8a6SD?a$Pz^#@vYGK4BaoXA>6b z*P+K~y+ojFym)OnU>zPPfSd+qY{Up3q9S_gH7!2Oi%h&#w^3%LI@9?uO2B2%Zzt)55jxVjsa&9hcA$pKb8{zzvQlD8}e| zKyV)n!}gfUj(AKif^$|oP~&_)Vp+E`vHjYBAODv|JTL%5BeKH<=WCyfDHe<`3|S78 zK={sam78$B>{5iR7U9v7xsWdkt~<#W==j+zvCbSw!#<4y55VUZX_iFMg9$(50ePq~ zrEf)un3`k~HC0a*xD(=eH#XcRP7s=!>%%$f4k{7ma`;7)m`+|?KXGDS@o^&{ z`;{d3-#+~A2kgn^1Fwyhbb~8McHP1>G#BaFXy%;X5P4l7u4%3k7F~XqnmgJ=&#nq2 zoY+bJRv&OumJD;CjmEPgcVe(j<0jkty*bF-c_1u_0{{_wK--%hGm7GR{&U{R;jz$BCy(zPBZ2oNjKo6V_4ywZI@hGzErkzF?Sx$xF}^HB|7h~lF(-$N25;~ZdK{s6 zdJj=Y7o1FZH-o7a`4P!#<7dqkyTH6@pMIeSnSoT)W|oA<;&8;$$#{|1Rr`~&yM#=^ z%Z`4;O;B-3_WtkVAgJ^=(U5D>b%avH=jO z1#v#ldzaFb-ZjD#=4(}x<2`!3Ds#@@DE%0iFGE#5)rDsN=@qBr1Bb<>pl_2A2RfVE zC}3E6YAo^*@752ya*+cZdF_pFR%Zc@%FPe>K7jU|6(UxQr5?%$=dKY2urR=*BhuRU zjUEroHWi%PsJ(mCis0*cRgmb1>Je-Bz(}YT((_<)^$i1(&7zxn>K?fnA(#YSDB+l^)NI`t}<^>RaLnt_0 zwQ&}ZtuabYtAJf-`yq%XJh>m7HOuAncK=^GAl}_?fQ-8J9Y0tO^-V#eM3MQpr}2$Q zF8EAWKEV}+F<>M-3-qtl-T!RC2n}nFkBYbbx2z~Z5!i@6T+6jzh{%ny;98Jaqg3bC z_H+jmeB@BT--GjO^xVt{x~2|LlywYSV?-hX}T8ND7ZoELI6a^+&=^! zO3l#C|55p^uGlk>7c6~Y*AMVu57navI6~^F*Wk)OiB|oFWDv2_{SRu5teC;zUiTcj z_RH9@`$T|2WnCgPj9>Fc zPdhVW=*Fw562|NVfw++9iMF>tPT!tN3OPRr%lpr@kb@LnV1J7g1C5PxAfP&#T(5C_ zc;R~B9xmz;EniS%w9#&t?06zWu3N(Wn!fUS#vE=jGlmtSV>JlzxwD4gPTkx20%yu? zXwP=y{6QE_9k_a^6=%vC2}C8Ykcey~>-tXy-=wY82julJg;iw+)t{VZEbX-69N_^o zpTQ{VxEubf0nYqJu&&d|Kc1HdG3n#1OUev7R4P!c7L%ysBMYW%CnBzYHP1)Ka1I#m z^*@(h+itVOJ4p@cdauwZ?qC8GALldu|NC8>Qk}qBc4Hx?lUT`B2RJ|h3Ac|mN-EFL z5UIs6Ho=VaZ#K)pw3pQkJXSTg&@p1>H6Vim)rrJK1vRjc$y$Zed0t12d5NdpuG0(A zb;yVrRFk$IIJ?xvleRHWwNmo;E+7WwgsC&T+_D|f|0K0_ZYuU?yk5=44(5W!(m3^_ zFA>MV(ia5}c6y#A=|8D=k`vA1O~(YnZkX>r9gF-xwmslfe&K)x=|x{K!Bd(+UUMhF z6}HC!Kf!IH!g+>~V8H_m2399tqG(A1_$lTgg^TaHjD)u2Rlqu~z!{&q4gpw8Mr9H+ zS2{p109Ir&CqU+IsL26tb5NC$0Kzko^dl@}UwbDSX8NW=FJ zdP#2`#5`riX{H|pKru#cD-}B~JHv{v*&JWMbd}E{klP1hd=1WMDPkHJWc}W zMU%XQ$cK@_@rAFc*)n{P^)$Ef9C6?7GjY_~rfJB`lU&8(O&kpO zs}of?wY6^z;$RDz3pw{N8RX;-$KlQ=f8`B{;G+Of_X`h@3zkz%!3XdjHUmjsZoI_m z2{UocwA@((3KDc`reT5i<~o#akoW_IwCImBr(!nvD*q~4u!WOSG8#kYqeiN5`RA0C z7-X~I{$Hs-bURw~2X1cT@xd@zT&p@FtH81BQQ!6rA84N$ux>utv23Jp@}lD8FrcH(iNn8cdkkbUD(B#hJQ-0s z7vjLHsZpqIP9!`2IgAijy=I8C4Wo`EdsNlFUlwyqs~h71rxs9;wGz#A8w~d&sLbgn zWE$(Sc!1`K`WVU9&(~pyWuCIQ^DMh_>)4bJ;h?cqmnYKRxNC10m3KGG7Xb zJChLgleeBE#ZU^MbHM65n=mTRm+tDlBFF}NPEf9Z+K>KsKZby@Z|u*v8r}#HA=7x= z5kXC7QMsQ)F93n<$vkJ_e_mJyAqD&`wy&W>7*=(5NaS+vt=@|xK-k72v8ZzKI!d%q znhkGjqirazY2U>?hbw3tLoTijkSveF82gISdyML{nWxr-tziz}TR`@Re)X8rm-W$r z>dnDVzBSj16ci(1nj$M`4(<+9JSV&&1(`YDlK`&EW(6vJcbWMRhY*U<;y*|~ojYPI zD^icMkRi7-6RwbCpW92x>^^90qq2qIEQc4m*4~0y@APIQk@E?|UWPN^`4ioP=T!9C zRt-ZM+DsM|_t&opt$+@XGzV^Ve^V*3clM;btQK2i)cJ=WsXF1ZI2)eU_A%y@7p+zh zB}~jBZxvWs@HJf`0L!^JB$!J>rhrPnk7<+{5jU*`Mi#ky{CFVKoN<(4s@}U&tCgRt z+f>JCI|)ZF-3KtY=+uulpe(hk!hGHdZtPY+kn;DsmRS*wB|}boUKrgG7Yp4mWKKL% zzdey0gSD6^Zylf8xDL{o2)+e{_LSo+fQ4HHjB-UfG#1Zp^hyC}Td_PAyu&`XA)ydE z44zT`ztc4~8;A9qdO~NPL9Z@I6)Thk@jYEs(MG4OVfHsz5nP%ife#-ogfI7rf-%mwY?By)`+4^#iu{gFBxRfD zKWM2O`y5$@%i|1U#*G1!{i;|TZN2Ylnm^F-GsrAmdyMzMWi~tdFN;=DrUbL|qFOH!<&C@56na@(sCqJOP3< z%*!@_Q(&vk3F$aJ@Ax5BgaF2)Zcy>p8vV+#7`K%J0YZ`;K8jj#hmM-`=lcEsALM16 z$DJKF*q%a}7hicp9O*G?R|0Fbq$@nbroXz8EJzg{UWf~ClKd1mDD|tMSziH~w;n~! zjNok9xpPzi2wrF&qYKhNwW^(M0_-t0apgJD4;htw_hbC_g860GMqE?m>TEc14Jx9H zWfR?6>5cv>eKDV;zxdMU$%VT&Q?uP|-%kE+R(hv>E9FEk_SFoWc-5{Jgp$K$kU-F{ z>K8zP#W~a}%1JySW0@?CxeE<88?zt(pS0^$-w7&%JIQ-~S_Vc`Isj3eer1Gwssu`l z!+XtngV-BW9VQ!Blc!|PUQ7f0sO=v)v=u$%?arZmzO;^u-|xxJ)Y&f6v(f%JI79l z1l+$!+rjaMgvF1A905YbuQ>}E8}@!AFd#h#v+HGv&Ix2~*wQ%iXiA#qe0rbW#d9z< z8&gyP)XN?(05nykeAosAYi%s-#KgokntlDRdxS+}PYsCFVu7UBLfDapS*(M|IW&5B z;UzhPkpOx3hEZ+u)~bgilavAm)Ra<1OEOK^-WDo7qizQ#T-5Ux3#LY=nkD}UI(CMn z&yfe19*<-|@vVkosUeZ{U7YIM?uJ|_|AVvhZx|NOFUw`W@Ef~|lMuOW(Y+yMQQ#Iq z0^+entfV75)wOuXjhcJNlrIDIpCzhl*p3~q7CAy!3=9@%;d(Dok6!MW27v9tGyMW1QrP_LZOl*DBo1}>j}5pE~BSFefH zr3l1p0D2u=07USkNMVpt&S4>S>zu7m5|P9#iDRt%1A)QmHp&E@?Vf(N{w0s`u9({lFh?vJ*0Qnp zuyfGvkUtwF7V|zJ_BP4SHKc^^U?Ia;CMSkyLC6uV ztTpQN+ylS{y8?NJ*5oyS^gUop+aX74@in>+Dr{0wA17*H(O zL0C70J@mh~+DRr{8J_36zwq$yK^Z^OSKiirI|z56YZM?Js~lTMc;j6`K{CWOC0FRE zpZJp?;{iP6O4`)4&w6I%7*WdwC`*s*j}uPYLT>5`qIobHOET;!a(OZaKMSgA=>Uk8 zm%02QAV-$iInDhlxe%gu^iQE+E2u1_qV3EEYwrYX5T4V{`-K@;T;5ZbefgL=E#Dez zor*Ga4JRou=IG#NyVHe#tiU$^<+)3AUvU7iZNw_)C+m`W+rTN5dM$#k)qgHVSBSJ7 zt8e-$`!Bh94D|Jx?FLH#>zho6+6x47TI(jk1YWPQSLt07$+O65iLAN}A9xsZ5Lcqf zRIxQm^_Y2#K_&5?HNnF6g6+L8N%kLn?bGGa>1j&OO!PXxHTY&_EzWK9+Q4AZkT)v^ z+xvsl2EPVt%o3ull=m;=38-t2?Vt<=3|b@zqhut)bcRHb&^-vBQG0IMz(x_$JUBm7(uM#K1?f;3#Ty^@}6x*QGnR@J?jXL(qLflfMomYxy{wSksGFKvx72vb@|Z8RT8e6<`WRxd)k+mz6+nRyJ!Z1aKt0L4JP|Jy-Xl zZ=5U}zEYST$zypzSnMO8W4jWOhRqV}O!3&(hA5(e9SgmuNLy)WBXi?Z>3gC>NB$R{ zD_SA(5|BK+o^KclVUr($v|cY~44uUW`W%VBKM5w<#CwNaN%a>DUeo41fE?hF0QPn7 z(>f5@^71yIpA$3AGGKc4G{U5eCFrU2N;#xirVb1WNcUO!;lk(U}r@ z(0JfcO>2$CPIAEosjZ+xjB2INEygDxv4f^5#GXigq91*Etf!?N5_BI4F>EYDtt)dt z`~i&DN(`GZpr6AL?o17135sl|J+nXo_9Uk0^{>*Zu~_o{ddyFSx7*RC0Ia)3e*$VZ zCD&kGke6Lg4~?EI0zw!2T|F2IzYWf2V`LzUL38FF$bAERXHx}p40@3qBVZ%qgiCR8ruFAC)4`#C07HcNb6v{q#V%67b1%C;3tq9U_;zCd`hm`eKVxHD#Gw5T`K`QW^!l3m4?U zDmvB?J&nP&ae!MS^v8?6%s75XVAyT^6~18b^63B#tUd=nHQLz)HC zGo#Dr|CvsnufK&lPT;WFgQ%JQ0!5$f)D8kCx)MPxb~x)5(Y8bB1Jgp{GI3 zpD&=d28=RyIf*RBozWmS$%2B9piZPy%%5>H4~XbXN@UrY+@-4I1DYU-h2mxocH^Fe zxYl`b1DL=5`kVN6w$)EU#3f_LkwZW9gEnhkyjY!hoBoa6Mjn{ILQn%e27MlCK&4np z!qK5h8H6|9auOnXR)D5jxbsA!k=i0pLkD!^Ua{J(G5V0UKQNSeEF)?(3zkJbS1PPs(_-P3XaWXdgO&t-nBW7RF(;e^-ac)!&4PISx>}M^Rs{g?;$f zpEZ9Yz|_HXx`q-nbL3>2F?j^C z$0W_1mk6;`H_75R(_~b%)mp1?ejmLcoLh$I_hL7wS%x^^I4EmvPw!fZ7{XKyK>~F1 zgJB>6EI_|>MCe(*iI}F#81j?h`!33;y zanTOn#d|=V-+eO<`RY>^+L-H;)OVTX`mknB5aEbgHbkene|v`wjD{436k9lNU6#K; zkjR?Q#hLJYB&XMruffXB->GQZ49n{Bsi{;Bm5@z4$k=v)55W3zK_n}NgP%)6uvGhl zeUc}gAFz9epD7%0%D(hOFc-UDMps?@rqVP0bl>Y5|w)FdCid29Vz*3jtd~ zkld!}Q;|s4RMKLFJ^%0#`6mH)pI8!_Rf}P7bA=>5&A`0#d+p}K+IHbBMsJC%L5zi) z4(y3CnCw={-Bx==$~za1%mG@22FW zY9*0Hz>R37r7edJbd4?95r88I#;RypG6=aum(?06A0fsha|wvT0G;R2_ySSsS#Z`8 zu_eQSiCnQ?Z|M0UEfKgab%(A#=s?Maohhmuai%ZJaVuXvYFQ>r5-!HAf-&Lis1g(3 zef9pNGUl%J5viw=GJZZAYIvW#;z?DEa>&aTS(tX;gwUAg!#T;BlvP_r9rE8&q9QzJ zyl8HP{m$&K!A{j}_rdpt_6#xuJAzlQmz$gxWkclAcXoKXm2e@NH}yS9Sty%a?4&|& zEOwM~q{Z*s9r@Icr=IwAHBIkDyHyW8ej(}aUs*mDJCrFUGjaDGc$f}UXyR{u0iZxq znGllI;oT3CUkW+?jP*s<)*;=>{fu*%ZSJ~_Q#bO?;bBQiG`6RI%Q&(r{3K%S) zAdQbyDw}B>v8)8aTFpy%S4UZLZt+`G)ukiD>$l6-xq|tIU6NPX3CCeLS20&>emSmR z2b12ayr&VPb9#JuVcAHViZpx0sNtJD_(&32>6z6nvYd#w2O}9Zuqhj>ehn6x(Im(* zW`PyJV7v}a%n)EWVw&RckBdBxBtzpqAmeo)ccC}%gV2xA)V3pdilslylEqHSfIJV9 zqTgueg9;l-1QB1wH$pbn{k+rgLI+r|X)+k}urE%2MCx!qyNM&|d5Y}aA2rgcYvQ4Y z2B}{fAD9m>R5pcE_$zN`e!mBeMRu*I(dQ%k6eUDjNH1^y95H-peA%qwI=d!WOF{TF z$SkHFrDnI<1c0aI#To$Am?7vpIq}zbHYW1ke6{fje((cZJ-HkFD_i1e3#P#+2)sh7rFT|*FJH(Cb?ir{iTM>?R}E;~6b?Ei{NHJ}{6Q`~NeJ@154Rr{{k zZh1cH!PBu+#}H4F;{`-Q#JaYfYwXxpOkQGk$ShTvGNM+z<8$XtK20$Rz30;I6~$F! zmbEeg;7b|Th*`c=rHHP_q+hWv{Bv&_#AseKL2}aNWZDb&=5(`|NUf)1(s_)^W}fwc zHPp_B`W5sOa zx&HA$bPTP=_Q@-g55BTF0S*3PKN7S(0UkN<-#zx?BUal&;G*I?2!rh00|0WpL#^^M z$Eb*SW1_6e*0WvZRmCUZ5_c^HCP7eQ#h8oC`MHpQM*#lYI`65;b|R6p22yQZPeHU$ zPkRYAkl87KBIZXJxw0Y8Ab%iu-?{gwl{l^(kn&f=?5C(%2jY*lww>wXB4SCHD(*uI zOh~8xGbuG+iLe4-a+yz^$AL*fsxFqcUa(wBT$}QVz5D>~jMwbod;)(pJb?T~3_?D) z1@Pt8;TPyf!S#Ggf@sFg@-b0s*nXvAgq}&`XwyW%;Zrv}_Gy3M`y=D|=jv@UQP)I3 z#!SUGhREP)&i7-BCVngEVDeC^xV3wrY@3&Oj}7d*mYIF*$T2ibw?m-Phk;FRG&{aFqB9-Vfpyi~9i^j#I+$tYCx;3fKQRz| zv7BAByNma^n8+Vhrht|BLW-_W`N5WrtjbJvq5_3_6eLFL+s%)!(5O~30%^nDgOW$L z&jMD6q=X&WmWq5zH5M42)?pyQd90-3Hw>(avmPJ02+?cnO*hG%s&6)p>M z%R7%oPIu5qy}&^3o=D)+e5glm?`Cl&@iW04TdbO(tcg+nj)$XxA+us^w{>3w?rW#% z`YA?rKH1>>i*V)q4s{l3pm;ktqf|q~48MLljc&Ca zD+4}AT`vy^wwco7M6P+9fzDC)l&ibBPhB!}-#8q^gzGu80oJaf`vzazW$HejAGs#S zXqm(${)_H%?&hw<{E9S*30&hLjl?0({Y zMwUEhy7m3g*C{^pIb>8O6kXS{yB^a~|MqM%MrY$bOfgk%LGyTOQW`*p_ZZi_%=Ih? z6)IaE5+aik-xg5`@Rufpe&4|V)4#fZ`{S5OXuBy=Zd{Pak{?txpa_)M-ldwfK#a}T zv!L3ji*ABgJS8HQ={RzOS5TB}5tig=c&ebx|Tq zttS*VK3u@h54R73CLIzuv1g;M!@R&i)rWBFMoWAQ_D|LP0d7st9pte<9h~#flXb4* z#M5DQzNhiMYz$VYsxTLTc9%m+Zmm(MnarUyk1)`NZVoa>Op1P8uEp(dr#)Xf_Yzg* zTkl!0Z9<+;Z+-h=oYA36CSS0$*0K4KnPv*e)!j( zb1@PmC2~NTX<`{0M_b7J*JLjigZ+6)iP}})|EX^ILBQHMN0O^U@5xx^ zQ>|EpDVfz}sZ~&;2fGOqxxH9K zp5c9L;iDR1;JRa}kN7lut2oetMUR81@U&&liY`?idouPp{-w7`cmJar4df)r zmU27p9t&bv8^a+q`KJ<8HFmGAC^hfK`?Lk>C=Gh6ZYhVl3@_ZW5@H~q&{Bi{+0JuN zV)R7S(J?+qG5I87@-j&D(#sPR?5T%XSr0z?|r%_YR}uMn4K*vnGvdssadE3%_Rcj|kX3HJt1EB2&MN z2N&aJD?nrNmP;PhTw^|Hs=TbqcEWQMpla-gV1&kftf>SR1f079s^v^TBf2SE%AC0R z>7gD*L-{82w@eGS^WDA-rPnL*cBzL4{ z@4rdDBXI&xVV(wYpR5+__e&B0(q~={f8Mck?khZX?_o-pDklSmB4pS5^g1>Pew8qH zQvmg6ar3HZ3l&1Izi@NsO*#36c3ehpZ%xsTuwM3|Y~)OUoyF0u z7Q-uG7w5g^b)Y;{Fp$01On6Ba zgzO*e=SaV*1z=*pOZ*zznIhWBl5?61shn85Nbq_1mijT@Xn6Z!6Gw-$%EDoGu`EYbG4UWRK56}$ zmc?}a2KA_Ycdcc2Lo61110)iA_<{0(l`=$v_-~4<*(O)k5 z-yTnrbU@WzT?iejLN8wVb{MmvM-=ZLUpU?a?x56Q-3P@d{0O<#5;yAP<`;qaOryt$ z>k1Z$qTTjaCj{&I5w3G0p<)g2CTlzP|2HC_MP+=5qpizb^`{iIpD}EwWha6Ty`f&~ zW@ZkN3(nmIH4v!WJJbv$o;++o7pSkRmb;bt?gN&XPcv_||8>AAD{)P^B?CxnW)vE^ z$((o$GVKI}%i$3`az+(X_4D}X0vDZsUc>Z$qY2}-V?_Gz^CDQYPRlSK$C*P_PE`4?4poSpawkQ+c7GX`(*Gp&4H0eb9pXdf7H7#tWIpyKde`y z2Hs2&7~h*nJ&rx~=;9mVEm1n~I&TFznkC`@vDUeX~AGc@z~BcP-5Lb1I{B0?X7#^;rq+WfXVpqPYKB80p3t0Zxo24 zr@PNg{hBm4ytT5|U!}oQIENES{`z4T6TR+?!A|K`#$a^?V!zBCO1PUHgMG8>Oaso3 zo=DzqZw>L67w<^P9LmwUc=F9fVrum^O~l+)@A$AMY1HARZe6bqILqknxr%0^Q&n!0!oD zC(*ufc0$UbD5z$pdIdozEOIBd=n&=k0SWT*Whds2z9<&V-z6J7CluHYcX~$jV3IHZ zT;wP_R8_CKozv*T>>iUg$c4#wPyCg1_rTM!lQlO~Om|=^gV6T{?t6R>c?=jB0SRE( zqFM7G*?8=7+^+}&MrHQw{lU}?K+VSPk34e(U;afqWqZ1|zhZ3O=1#C~uDqv0#4!PA z1$Omr4kC_Ohu;M^2A%_df40_cXObxC$+rgT1e3C|a7r&8a?Rl;1$2TDrKV6xCGB5q zowiZ&7fX$j@-a%n(I;c*KcET(9_PqHpP3mHJl3#09WS?(hu0@m`DaVZ9^f)Pc&~YV zcrcvU3qmlT!*TLXtl2ce~1lbysGAaPH$_@AohqR-CEIDNrRQf5eZ2 z7^U$AE+vpj60KCF1%D(?l~mcf*u?x8c&JIX{98{!G*?SwXy@f&nb}4&m&WO6UQW(z zx_{x)C3698>aRLDpQxLwSO2oTYGWrz-_(-*s0t6S#7Begt4_@JjTMhn%6*gc`~SqA zxqk%TR6=13AFgfx;1~sQ5bXqTXm+0zV<+U!NHUN;JK$#l;D`ro7am9I;2}LqF!l(H zo=z}c-x&Z~{#t>XR)JHn13fV%2gxBTU!Vz2P4)&o-G>B__Akc6Q0iqoWV#4iS*D7* zby+gn!Z^5J8VtLeunc26@yX6H2+~%)zsSst&xszb={-m26}hZr$N1jb_^f3_putKR z^CPd=ckVcmv>j3ZZjD&+p8Da$4mGicZ0(}>8g6H79_<%UX-#)Zf>golH|&Mj-*^E~ z`p36F$f&gr*?X6sak1TWE}WfVcJMI2&W9+kbNmY+t^5-voQbNco|?{Z54?T|QU}4| zLw-VrQ>N`VBIC8_1X4d?9(<5RPZvU_UIhU}(m6P_Q)hTUQs9%A`CFm?Lkx|FIOPL1 zzExjVJ57%Tp6K+O*?>0jbA3%?_*V=6F`H_+AffdgkerZrgbTTxrN)|{E zwlXw;s#?G7ES1oJi87pe%FRUP`^Z%81t*v#q&Nr4-c-RWcD|)Lgmn-x1lfo6Q>=76 zTnZ(!n;6-QiGQU5#P=)dO2MACzYx;BS5ST}r(5d2Zj{QFY1k zxsZ2flip8u<48IIBU@p_-$rLG{I(7`^dRInDll7!gnlz;)Q|7}@gCZy)Kdn6#or5g zh;F+tp{Zm4@4bBfceXU-8HE0bC~I!l&N~S^zi*f#L77Nl+tQyfYBX1!u=a7q)!JM8Kex_Ru%&~UIbe~PljpT4AtiJ2oT;o8^kT99d*JNutLtpz1v z!H_62_w@WB36a6gbrpk`1~3WTTgs3Vnru~-^(82Rcx#`w2MgwE0~B5))Hza1%esD} z_#OD>Zq3iB;LAlv8>xu5b`se;Y{2k;O>~&$nO%xdqfN0*V^^+0TqM8aYg&qz9+)(@ zp3pEFtlpla(F7dG4;fnT$vVOZ>Ez0=+Z8aSq3Q=<&AjCoe&3p$QFgK-TKgOj)V{Bq zwSe0}e_dw8vMt;(wWt&%;+fs8&YP4Y-g^6uwtDIehe`F(^F ziNgLP#bTFWn{VAG+*&`2C1Q?IFfEaf}Q zsP=`EOpE8qjpFqm?T=T%VjM>h>wE}#Y*FNf+}YouVbhq@G*^@Oxl0n|3*Lsgx00dQQE=lJN_Wtn0hZ0a8zzi|*UjOiV}B+f%8}`U{`p7N^BVhE zk*u5~MMskBl_!4Rws%$Wef&8yNQ6ggJF4m-F|$d_Dp?(WE4C#bHU;QmOWCmIDM;ve z*RX*zx6sX~*TL;Q?ID7;@0Y?ckvm!ySjd+2C7UrF%;85dgcydYF6@CgL9%Chp2VV#OjBsWnY{&brxSP)_?#Y1tiy;6BV5GzBBG9)N z@|NIrorjMliGEQ%X87RE40xup0i{T8mpl&~DPLO@fzAVZUKnf%H3Bs=276T&H*ie* z85-@Aw62b^&x6wjjuN-a?(QcWW01{O3kfn#gn`_l1_P}?7-k(E))c7lhm2u&`V1k| zP#$eU-(pT54Nm;^kog-Ud1ie6RRI6WrpD|sC9OHc@utzW8~bLICDnoPapEDHi-b7Mwz;yDib+A3pi{$xa zA{jf$5-O5t%tT~sL&}mRV^1J z$LK^DNKMY$HjJ3#skP#w=T3-VLsp%?cz*_Nh%|YM#ZL*_pI>R-NxvYBc23M5Fx>yG zsu@dz_MNS6M$*!Qy4*~}TLmgv-3$Uc?*OwjfhJ%-GP<`-P;?>k0a^cw;k6n<-f zdCUJGDEmJYq-|_i3JD4$1T@G&B$zn3;Kv}nZh^h6$FhjHlfF~h0O`k18 zGxBZCVncS~QiN3>KZ@UWO;H%u`Nr?&j`B5Fuu6JAz@-p+7Q*6Y~{iqu)($rMN$FPAtMXQ6P>;X7-=YZs_Q+pJ)noJz!#piEW?Yk_k7B{ z&;Le-CPDkaYB}Lb!wFCgW`wvHsCm`)1}h>L-~0d2A>u_mc*#H`i$>-d_aZg!ejp#z z0q7^C)YE23fC(U&f-K^eYg>R{dFir%$j$h%)316^yk0NilaL@B05g8N zufVAYk8)CcH^xeOF`)oKvoN|48JMZxxh2?WYrg--++pUDRW8@C-=tS*LR)t^19Rs- zEv-FB7R|_dI)9(6YUzZ0aMS2kJ)Y}_Mf}Rxo~H7n-er~Dq~@-kykZ5u zy@73<`IwtH+HkTx74A_-hIlTzID8U$w=7K2~ z_en5U+l5W*W_Zm=%4&Rs%5aMIA>-e5x+bcqdggb5_jl+ExQ=vo`H+H=)SJ1G%o&B_ za@5u}J0|Mu`U)^X>iDY%v;iyZVnPg`JUp~EWg(+?W>_clW&Pv`?`x z#-DwHx%EpvTxSlYf`wRbA1kRw$`Nu9(7*6i>Q^ruBro-Y#IiL1i#zrQeNE8kL1)Nx z;7J#G_;4&pXiN3R$y&=Bp~7B_vpIa=C}lWpk!Z*U!NL) z!h^G6hY_+)kR4>jvs$JGl!QN<-NLgqoYBVjS!4Li&@NThzQs+ z+74RDBxgpL$~8R~X^O)|U+D8RD}o^4;>+9b2$TK6bs8#-H+{}fe3f2Zu_Ib7g;ad4 z{u}#xZAAf<0T+>hs8B3}X|i{tk@@x_ZM(f|i0p}))lkH;(TcMWc!7s|t2M78nuI7e zQVP?id>faQAM}f4eF9+woitcZ2t0rHCRItN;+T0O)Gi+RfY$m3w~24ptyQ(6BtfUM z9rtUfwA7|1$wLb0o5TrXkbE|NW7ZV->Gb?BFk z?3|E0mb{NowdM#gsRCPXW1~e*i4|l{888NIDeZLjc(Tp#=-;wXfD*RU#!(b5>?QvE z7Q{nT1|TiAoM>dA)|g18bu%cFA9F+q9VBw*e2j;{%2y+MA{fN4oQeoLq>+m$ua95c zP1L2xsxhl#zp=C`V zYpeEyjh|7Mp)sGvR&368I8p909E`-I-qbt%lx zRV%poJmW=OOPZCV?q0^pCqy5ZuQJq&?nm2BHy!@O_{DYDzj<5Ql_Gg_9Nbz#+1*=_ z^k_nq{Jj5I*)7QrxL>$NJ{TED$gO?`%)Uo}3kIehSv}BI-XeeKQ!HP^HE8^GHDf1+ zw|?H%b4ShgE<-=TdBYRYJwF1Gt7oNBb`-X% z4n8f?#>on+4e`FsT4q9JOxuMmRI{Zx*h10uJRcXb)Yzqm)wYC0(1>2xOcN*+3T;&_ zuQTqzIc{;eqLaQ5_|FIhTYk&2?42X!;G zda>^h9`S#A=h)&&m;;tvNZBFoODbMDbOANnTzEp`v5i`o6}*{H;;K}4i6SWbg_$HF z2ErTlpgz|-kCoL(uE>y5zI;qW7f5scawl8$`CRHb~04}>BcbKsG z7RO+1aKd@P@%&)cO)7c{WWtx~?Qmo$bw|~BDP+BwDuppd#xL{qCzib7cbF0M#;qz@ zxh>0H9|cgK<$eXY&Wo1szn!O%j%25AojBmljK{K|}o}$}TDicaU4nKR}ZbB|Mh?H|6mz8v89h*+q5RWJ^CW8NUF9s*?RL48Ia4?ZWOML+dhQ3$2RSGFgFNiis*I-tU-^$^6~@AW70#4{i5C-UA~F!2?S9yxY81`oa0Hf~Oyr#BTy3$#C`oCM z*LP-npR6i)pYRuWH-j4-0f@a(u(f2t8${ak8vhYjo4hiIGlv)Xg>0>1&Q$iE=a6sV zef=Z`?+e|tl7h1i6K5YE16#uZJ*|JY>`m zKq@^?#L>ww(illBRzhGtN+|_;)#d{R2Eny;_jJ|^5H@;5@w+*CbceG?x%Bg(h5GR& z!~O*%@WZP6E^XX_H|%3;GZq0ZVlxpE+~mOL*T#^mCa0}KHeQ5oOcs1Tc-Vn!YYQFGyZZU;|7O)a;Xi%A-s|u1g4N|<#89m`dgu!)=}n;K^~XED zfQ0b#>(=|R1^B22Y3D&+;Dar>JNIa4sonagYN}Wq@N7EjRQzvT6JmtY3jnMVm08A|uk18gd0(9TUeM>Nys(Al`Og zaV-Sz*>8vILCs2Z!n|sOH)xa=sJ6aVQW!=8B|C_ex|*PYJKJ{D?*rJTyn)oP!oRP@ zLMLyB>^req9<f;uZ%N=rH1kV)u7gliZP65PO6Iv)ND7U^MG9oO8tkf#7?UBmRb%~IAk5L=d$~6q(-DkBjU$E}z z6?uJZK{MuckAH8d%5|GIu2?cJ`paXoc|xx=Nbzp^^ufzyn;6|{L=HfXuf`h;J!*aM^+LA6JN3uTm7>JdSU%GBCoWo&%_frR zo+Kd1t+gSHRibP&(K>(XNS~d&Q^BOoZg1y_!+OJ^CojWI^>@R`sB1o3$sf3h7d0mp z>Kcr$Zs|#(aaTIX=9&41A8_`pCzlCzo@!yfJK2b4^vyl!`hi?&2KIMOf&WFEO$R6T-tfJ;(MM?~6&__cg8{-LmyJg!mTLe5ma-3W|S?(GIIz@VK98UNYK7877t z3o%PC?agp_>suPPA)>97tXD%uRXWe{AvzQR1co;52ScF7``O<;h0GNqzk%H?U zes{8o)}Y=kCs1sbLcB+3;q*Td{!o*^ZdSP$39|$ycNzN$0x5&Rl0drNtN^_`Q8QsQ zeXvh^n;Vq-(}}}5%?ixOTb(*rlS>JD{tL467HV>drlNQI4zui|CCyGQ3@>J(z?=8< zxpj2)XP}u*#Vx_ikF2vFzzq82;JSk8VGaaclKip@P`Y|L9HU3FpmIM5DB}p!_JZyT)l1TH)8R&hF;3gnD>ney#4(7;A~P1 z{`@Hq-=NBwUE0)*qkpM+bKJF}*MbTm)0=5SHG2Zn!U?efOc-fU3>2BxPY7x@_W?Kk zO0D}n3(A9HKR3bqN1rKIy_S~ZAs5`T!m_{bq3OloPq%gLc{9Zs0}_CUJ?#5Wt7Gs} zJ&JqD1#6j8z_k{Pi8Sqk*V0{kDhx0J*FT%JOo{eBxIvu{S6e@vMCeOblru4gqpM5U z!33(c4g8{2Hwvop?Nq9Na{?KNJqw?z{WqnaCTF&qnz~bZBi18AMsK~REp`2YzG65A zK*Ql^r2ZWTqWQ^8B2)25SisrP9k^USOIu<~+R+BwAG2SqH&uyz#dWmE5nfe z_>%62d+8Bq_(eC|vX~!mSFx+~aSmG(_)x}Npv=RhGJgjPAs4np(F<*ua-IG5+^RL< zrzmY%zjNe;jhTKL$cGg}BoQx^(GR`A108Nc8epcM6tQQ(=^rX&8G?a&;5cBuKoSRJU3Q^w;H&alJCagdOV}7eJQorEp>YNF`jZ!$pm%vE*_S ze{xo`l4ieEQ{QdO{hLn-WAi(t&ce+>O{R#994MQhoqdxNiw8Sw41RgvP3xr)h+jP3 zk+=4q#=*$Zd>6b6!d5;BE)!=^PHGMkz*Da;Rm6t$Yl4YHB@K?WOI0oPy_#cydz~$6 zwQb`XEBaU`J~p(VxYt#Ocu`ThuFCqnS>IDqgo>vUcG~y&7?$trUd1y_Yb`JV88d6h z-{GZo_0^N-BUwM6jQPa(-n9f7Tm;k|p7RjHb77DgTL@So-2GlJu&oE6gJoC7Ls7j; z-+p1wT#{q^H$#LV!Y!dRS(KC5+$VlSDc%Ou;I3QpV8v&VMa?oX702NBMQA_Atymfl z#p1hk1)*ACX4cGrq~$3?ke&emFj<4X(5?#A&L{gM=s#Z?#;6IV8L@$R9=PL~u@V8$ zNcp3!BNTS83G-lsyl*cU2TwKqWViMb;c#sCpY+XsEP1lOaSriR4_#XwD*=DrMg&I$ zFPaHiKKVqOD#oU9hqgEv`{-MUxi1V?eg~!96!q^#Plz$$W-7=xD@|`t7t?=5HZ==MPGvtX2#{cGS5J zyOVw<47dO}p$Av>a$WbHd>At|N!>Y!#CG*_B}5_lju?O6c@8}z( z`9QyssNjO!tmDICZCqR8^BDX^A!^=(xg0zbnj-o&I_aqQ3oU zgBQGs^1{U`AFl79PUTTm-cx`%#Fxs`+?%F(+BWshz#$+D`=0-msZF@_2lyZ|-6=RV zK>2<}ypIX(T?)~cCAW1Oh)&SP4$T6!?8uk3{~fF$7TO9@Pm!1{ar96i2bMsm5w|ab zwGZazhd~3{41}1fI|fr;cIhPeChx%jda^er7O`;!i-AlBGjiKw#nuUdWtE;6q#MT~ znM4J-5GHSxy@%U?t`}{SYAUE9ZjB&PXFFu=8)6Q8z_Gdo z%37&CCjmRNg8c-1!HM_5Be`&oS$W5WY<%-LiJ@CQWeALhU>i*Egg~}e7J@+2grbsv zuh99_>dzSt1}g}|)9hE!vIq2qU=qmG{uPDp(9!!T<|w$Q)+}4NtSaRg<~~;vZvRcm z;hs2as49#Nd3W$BOq`Z}r88RF+;8ccrjX|BmZ+#Pij5{X6sPM zBM=LA8u*}YP@TR%Zn22`(?plCyOt1)vV%1!STbbhuSTPq$-f=gxI=57Fh7Cbpvkxb zj4MT_@qry<3vx9Up@dr{XRhf|HA@P1oswgCy7@pA7d@s!h*L>1>oSs`wM;EnXqdqz z7d=?}6X#*uDuJx4>Bmf&FGLi;3Bv16j@4VlDe0KF6|-|HSVc3dy{H!&nUST2IbUN& zw&M=|mgo6vb;2nF0DCub4kqpP44cWEa<(0A^KWkShKioPbf_+5YuW?xj!kyb*c_RH z8rlMr6dZZ~c@4F$TECfUZ+V)o3+rNhx-Nu7WAO9xM9vJ+*HA6g7P*(~D*|bIWub*< z01PlS`T^resm5vC?wT+>Blrzda}N@gmoqf~ zSz0$sG3AFA(^8@nA?gEyZg%^yKc9bbW)KPF;N@piVIMI)*U6zHhpQZ+sf5VLZ+vMG zPQkZsH4FrY8*M-XTja$AO;8+KyZOoHqztHZkatRE5KQuZcac<-w1D*|EoYW3&d7{~%Q+0@`z`!sf8-J-8Z6MkQNVC^*;4>>8;=|A2} zj&iuaNu|GuM+Rn^fh;|2v2yvffwM=Ne%k4>dI$-Qoa0A05a|3A&Mw6BXu)Qy*EVL$`x5~Ipe9-L)=(a(pq0dE`r7= zwODx0+%6gs{^Dw5Dad7lYZ3IYH;0QnZlGzP zx2!z#r3ry#=X0r$r>-js*eP?WpQQEp1dja8108l63c<`lW-Y7egrZa5+BpeCd`$sz zc2`&3X_njTE&uKPtozX)@d4nQ1D0DvCR8Jxs)BZ=-eD+PN|iePs3$qKJcVxAtch&J zs2RIigA_DyVE+`@0UeF;C}GBT&&mlVjVBfT1LvyQIu*fI36p?`FL`cIFs`XU#`{W0 z9e>zEV$Uflgjig@zjxWVLQ(*^&oRY2!fAxpl{D^EE+CeHJYwsK^qSp(^2xZ;pW zDj&*hTnBu*k3(Kp?S+gsl}o)CT;rjTXU>`~p4XTM*(vh#F3v*V@B1eDb#dF=AD1GVP2&4*!} zLmcz*HE)Q1oC}54Uu+Uz3PH!QvT_5ofdNLTcc-dTHSV!l+5BgD!YndfNoAH|S7 z$8F^^gcy%8PJIv6jzQkt>mXG8g$F_%8V5nDeP!Og3&#PCJehISxQN zNo`5lW94;@7!&oqV-i%$CAswi@g>p@)`E%=nS^gc^C0B>I~;&!Q!+BkOv+I4tR)CS z;bko?Oe8fp9B%0IA+329aJ=XTtgK%7H~8xkB_eFfM?=-EW?&H5^mq*BrczFnd4*5X znjl3HN2hY%);6%sL$rVL)G44X^}xvg-h}YVNd=u3jO$+=*xs+oE{1yqs+Lq4x6vS!5+lM}z3vKwPOO)Gk9YPPIaH zrGh^>3@Rv#>diU)Z8RBSN*U2f9xdvC9;|)4&rr~Zi%drk&U&C`!HNS%Dy<;+G!uY= z1ehQxg0{{TBnU0Nr!<-c)zMeHZ?EmbD9iWM;X+kLlA<~y`mR8vx| zK3#MrQ|J5CvjK?wJK4Y5CQn&W$WFfIa|sYA`Q$*Nj61+Ujpq7nI(m_L7SQBwbAaWb zSbxC%k$3#(rG`O)2Ae*;39Kju*24wJXjB6s5VKBXoHE(p4Q}}>8A#-%HNx$00gvNB z7%a%dn?gJa8zR7#z`XA}^b)U2q^7kh1_g{7S!RLEJ30&(uCz?hn)T+8EgnR;$d2(R zx02q#0tfQKhBiV^6P^#8fJ)b366fN^qYZcQByde!Y1qnrmdBO^#30e5_rZa9)&N`t zeu1}e(Iu&0RX%wr_ok%Y0qLR09~`=PdN0SM2u$7^Ym#mH zp`~Nn@~x{jY!BAW1m`Prh>8B5*LP#_uV1>b;Nq_(n3EcshIx0sWMS3xA5{(;rw=_g z&8`#VapRDl{!9%ky|abiFD6HoI7O!NK|2AQ2M8T*aG~K9Wod{d2$E{@=IFrt{BpI36O!$=`v6uE&84C;|;iUEM|)?Q`U9%W+NjE1<@RF z))@$&N!4s^S6{L@Y4ZW>oXYP7iJhavm#*S#8f`R=v~DDH@J6vvy}VbC zG*L}0Z5T-a;e(0VliVQO4Sl_ zp-3|>2#RAUOdW`mhM)=LS$V;h6O%VlPC##ilkv0G<^ZO=Wv!|u#k{*_68@A`6TZT7 zyA&C}tMkDKA}mS@U?*7@d>8~AF0N-bp!nJQv~+%?AzqhyY;|qz8sGtB#=*uU#{m~x zU6!XRfa!w=D26_HT@eS%xjwv%v{hR<>YL&JtzE37Fg`=2s+McM(8#2D4hrCwyKqeV zHJ+72K`Oj3I+yon?+vN@@y-L45$2YyO%S@wjAXnOByxVy%h;TxYMGOwn#(!-dzX&~ zT%9`XEte*Zd&#nM8sy-!bMz^ziVTBbPA=qmxAmcFsv>3%37#%4Ddt5Lu)LK8YPV8= z_O6m*RL1MjU)#?|mWLoO{0;Ym&zptqeRI(7E&Yo$%Ov`wy(X?AKL-C}sio_CZ+*dz zFdO%a2Ib85K_b|GPaa2KtFD><4gkjelZ8O%G0!)3!e9G)ow@xs@m4e9)T8w&_SMNC zQc8n?qFft{ebxN1tq8->#5_yVEG9u;<%ud7P@;qj&S)3&-Y4Y`T;A4~`WEu1Cw=nLWHilk`B{wkiREz2@=pif`n0L36~=F5o~wu!ZQk?=!x(fG5w`l30Yr2wYO7tgyci#y=y%JMV-@~)^fh>1!z3SyyTPsrHNZ2>xEv&OaTdzB z9_}ShQJ$5I2nWYpChG!_pYN1Za%S}9Xc)a5e99pByG$BvQ9occIcM+G?~^v}orA2I z!T32$u?kn-$5%(w7=3Yx0`bX(KS3Zc|9BL<#Q|uWVrr=NehdfJ%{ewAiPwIjbv){K z8FOuAKiX)<_rA))<+u8n@+;BHVB}v@X(}1fmkKRLISqEm&xcGp**xqKyEzOn|BDLX zEbtGdKmsCwHNkX}k*1KbsgRxfF9r$&Jr3{^6z-ecOT3tzHvwDtUzHY%Hf)JP(A}#V zz^d?B;p>>1hvaWoCO^mdj*g0nqsN-8NHQuUFJT_? zmH139EGtLq5TsBEQSuBEspjB-ysVP4km!6v(5qnkXX7?|Xe&?U zf{ps==R5Mk9PggNZb=U|o;NjaAYNdg)(QF4vn6uOTa?@HjV-8z__$Z)m7@_K=oq+^=83aL% zknKr&RwO<5vvsIsZ^+3jq)bs#<}-p*A@?1Zd9R7fw?C^@v$0mqPyk69PUU(uszV zh*?0%O@C%V_zK`q+GX7~oL226?BG11<8M>)E=0~1f{dAQa|qhs8;)-gJNA-IE)oQZ zSueQytM_@VT)Wo@@`39OfE>3&VWM&OoB**iqc_yZe9Wm)1_rAk<>%ip+Vn8sv^iwPZ)95kup4UgfMqqu3)oht^xxD0 zHJ*Y~LpPqR+DNE!YUe_lrv+ea8%EEouJhMAZ+L;<`!TFz9g<2=_eDSG-(KZPc^eI9 zpwIk#*qqB0jy2XD$ij2hBx1E{@j!A);=Zp!kmy6j6}Rv10QMK9kiEjK46RlGezBZw)(;Jpmsa{i-U z+>M767i`Cm|MR`hrkgj;N>MWL`;?mmojsawJF!r^-Gr72CbxQQh*M2j)3~{LnZu_k zu66!j|L8aiJ}e&TQj+s2 zVJMxQ5Aj?ha-+9w6`XnBKI4J_LKwwHw`^pfGG@m)l#^0-JsO)F6qo~c9X%@`$RCFF z1loJUZHLpBlfP+r!>QDbnBRk6xgj{{WM0yw%1s`~FP+K(6v~&42desaO2y#~;cwbr zy4_k}L|)tYx^%)Jh0j744^g zb;_NjJjzu_p2~j#N5GXv0@QHcMa}9tNC;ssx4Bc6qh9arKY7oxN2eqJY^}E|03EWl z1cfL2uQ6c>XYb*_lvgd>*PTGy4e?t+O9;P?D))kwh<@Fi{@Dpu5kCSMKUaV&FXwg% zB1Nf#3s?8~=qQjgUlW^NN~5&u(%Fsjyp&5h%xs4b?!S4rp%(HG^-J|kcx5}6!G&LX z`mUuLizDo$Lc7eyfZ2C{;=Bt(-<^NnBoEQ}S5yR(S4KJ^j;`MYmqhR_L8-Ar2>2YP zn_y(~GS@zs^x5f_#y{iMPSPaO@qimFfjF`$JZwu~iBHNk9$aX}D3Pb+>|DU}lsyD7 z!_F9Mw)Zi##?zJlhtj#xTzs0TH2p!|-c?roKKqc&(gKjJmQVPi!e&?q^3>OoN{S2< zd*F3U56jRX*4y}2p`51cA7W5i4Y6v`cw0SRNK)-H`5<6_*C88ULRyPdk$aapRj{jb zT6$?xk>RPufk-)CQgUW|#LQbFxJ=Yx1vkFv()XU$`I(=UBn6A|)!U!E`Y`2(b;b8# z38(uoJqOnR=O8XXK~uA%Sph1;&6hMOS_%gT_H?&m=vg5{X0Xf+-sYC6j8aedFNuoI zvs08C=hxkZJ=>Uc!B)h~7fQ*zQeZ}~NN}g@X&5nNS%mnYWZV6 z`9P6#*1x_O*IJQ3jSJAc4rrv@_qY|?@lR@3Bw0ybg`%1C#o>r7LD%FCUA=n<)!|}K zVW8jj#pZ_S{#+O%HJC-S`d{VCvLs#C3IZ?0dyE`z_vY~lxkn#u49eA^Xb)#!@N{ze zKDqvMW%dg4w$)0#Yy^BwK{iz_%FdjP{wf~Z%JarnL7s+iMNsL+=IkYY>G<#}S z_4%D4I-!ff;Enk*U&xJKbu|Yt33voo!gC%=`mPV)0_q+8{+w{0kP8Ki`oZ`T2EnDV z1t|vYm?>6ATgE%-Phb~yUN>T_R0!Y8#;tP&?7z3kQ`U^OIwo@+2vzua2LWADagg{k zQ~wwfwf&8+qp3;G#w}Czm4%jSIbvvc8yPV7ayg1(1wwmpZjb)HO8cq=#~8Ub>dA15Qars$ zusBIt?i@X;?n9tE3793j$hth}7|~v6u(@^*=q+sPFn@Z+c8LL(#sf`YL3l6r_nw7U zOrzt{T~1fl%4XC%%TL;yyD54@IN@2_u}i$J}hR$Vd`3b|jFJVt`bC=?vW2JIh6}a@&s3?xa%zBNUJb=GhkK zGvsh_Kwm`v>J`Egc5499s-8H4I6eE5-K*yfSKUXz3A34g4XC)E7PrPNNm?=ya1k^+ zw<_lZVXJqwU9TG8wj2234sPXrnr6A=;2DTHwc?Hn_;nfw8V)_J^+_npkpLl zhibq(+GE0c(v=cs$-nd~|FQvrlyJs~H#MzB9wyZZ4z^H{8E>=8pKqBJJ&VvMemdpg z9#ac2$rFfKZo3I?t&R6Sq@rw=SwJ~|n}_T4H1YqzWo0t6q%;6LqCX21oi zeZ#1+q-8=LO2;T6vsID}9-aGezqjPQ@95;HKE%u8h1IaeSP z9$R1~2{KC%NYu}#EFbj3@9#9}&GB5)ikF#K;eUa=owa@v3OgCUCN96O8H6w;$y3u7|xJ5!gk;JmHt#=(M2#%-z+Z?Wj@g8@$WXlFwlc%f?MZFq%sgqNtKe(D!}Lf{B{`{cyfERe|+D{0!n0&)v1XKaUi; zVR=i^cd`EQj#d8@O7qSu~@C!VbP;%fI?-6_o@L?cPX{plQz9?H)!@3 z6#nUaFo=8&for@Ucme+z1G?0T#}?qmNe~+aKwx{nu``8f=NF4rE@h{?e^~F%mI7p{ z1c*x=kvAu*Gk*K#=AfzWX12s4HZgRlcJE-BnkHdFyj^35^cy?#s0LwR;s9-Zq=@X2 zAo`B$DkDh`n6U#s7BWYPK{2ZdtfVO1_&S|5TF#H_U+Ad3RW!mDI2cT`Ttd^ykIB_T zkHa|pD;VVAvh}teZtqeFpg0hOWeG&oan&$9{k*^0mo`{E5hYC+q{Bro=OXdBaWh6> z`75hGI(pF~tf{G2_qWrg2tX9&C-RNAEw5J(-M9wNy-Eo$TH?sqoocqgqIT2KKAfcW zAIL%4?SIU9?DVV1zs!&JxAaKA@$bFfyXskxM5FoG-b-h~ z4`35**)URA@6eIVoO?6yA;3_?kt4eTcTl~v!y^8-m>IHh3n;^yKID?RW4#xdRqy7t zah862LyqnJyhVUAwqR_5e?175oY}EvL;BP~C>@_)8&Oi1vR0N(`Ho0wd|e-Eh0^7iqA--P~I; zD`s@V^N;;@p$x`4f(pQCT{f1lS%-SJ=2o*sH2H-VJ zxN#xyb!}xGmM0cLh8CKIdPAq=oSqBgAsQG`bA!r6N47@rQ6RAkbIi}*pF>onjRm&3 zYd;Ei-EuesQwO)ykN!WR$hZDhS|mTZNrkI#k$xXe4W{5=@WW^Tb=aab7I8iWcP}V< z!H_HpLAo^GlQ4O9@$OF$FfI2!Ez~tAzdgzK`Ysd<{sJkiUdkE*jkl%F&e1HtWk9jf zDHSk(5ILcJCu9K-vddqf*z=+b82UUew*z0`2sM|!o$y6f5qt&QxvD??hL+=U?{kb) zraBrFJ`F5HtPmW|UJE9fDouQ4j*Rvq5Ev4>c z{I@LPe%Mb2{VQ&y{)k_i4(vV|oIE zXIlu6br2u{t;ghN;mng6 z;@d^;w9$XL5VXE+c_iwdPS(R)Vgtdn#xq8f$%NP-7F_6oDZ{vmIb?~l*=Ex3PHSv9 zv8NDxSW4dtQZlEc!{BuwkQT%8HZ}*oRlhpsxPpw3)wjW)+#}nl37Yq$V#&9oqs-e5 zcv|;@ADQzr+suE6fZ1U$+ONe`xpgU8n7%sO@t>S9%NBG?eY<7kS&J11K zA6V~`k;LJ>NG8c$zbK4kVYukw(lR9}^}E<#4B0)3R6OqD@4?y2@0jVL!T8XYV!mWW z6l>{HW;i)7Iy!N19e#$D?wy0BBa4vH#AQXikWF^_A!<=RfFs=74VbVW@FL$as^>%J zMrZvKieZ~fe=F?Rhzg6bnR)5LM6F606T-ULyn9u*pslR~q{Ftuu-{KMOMQARTV(t z&O8IsAm?ZXoDMFVGAQ;cylJ-R2@ecCiH}=G|&1U(y4_C0{m( zBJ&)Gb1t*`e-B?@44_vp=G2{GMw)&~U7b32<{VH{g2tOa2q5t7c|5k)|Nq=%r@^BI z5EG>#rBdHjSiY*`%GW<&Rzzx+OT56C9chA5(-vrTwmpd}YCS~!ww+xqe2q=VoD)I+ zy%~)kVtycu?Qf+Y8@l!G_SOQYEXl!Cp4yrt=1x)9`FM=cw&qnUW`%K{sm@h#py#HF zKX4UVEbc{GT4hh2fAzs3AOL=Ixb#Bp`YsH3?f5eqjpJG%1E2R0<>Y4voLAVM!Do2X zPm18!SK<*6>Oq+_K93}ewi%pP!`XMY@~aWuR`tgT(l*Lr;s5 zl`3BuXJ|shDPPng`m;&avs0|zU-%63xwC@FWL}kSb2Ntz($wFK_ zBI~q=IVO<#S!(Gscl3_Ry zoXJ6DMiSdrL2MI40RuRr{RG6ouLVKz(!se}*Y%+LEnM0}exxSFhH1a1svCU3!@H|m z@|Ei#HRore>S?Lsy|% zmcdSxx8X}65&;u@{x;x`fBRcR)BEP6+`Ikx@{m*rzGqN&V7rEJMfp0~pYQUVH~ae+ zEyI_?lB|Jm@bGS1T^PryKF!*mwwv?&o&Hc%a>Qd zI{%m3?-dBmqw1fYG4J{^O;$+>j)AzZn4vfCeYfgY#t262cmePImx<4{3BNBZ&R0!( z+4>{^HLiWg>@r#Td~epp1OVmeIuxwiF;3Zz5HqjXcSMO?T)dULeBq=|f@&noAHtzm zo;i%gLAc%SjWT*N6qG=l4MlxF|VA7o(^Q_1O`++Pb@(Dnk~x9?;m?JrJD;#f59WgzNd{LyPmyt z2|{HuHzDrp%np9P8ciD>p=OBvg}FgKJE>{U2b{#smp4Bq6Aa1)Kx}2_rcb_|QqBxi zwfuG)_j~nKMndQ^Mc&)9dk5*uhRljKp>w6`{mq`9Q7}Gp*n;#FEfUlZT$B+5?0qz4CD(dJD4I;Rzs~i8a zW%Zj5t*rK`W20i<1JFRy^h;k|c7(xiHAo{Ukbo^w#D&nL_x`2ttTPU5$KgY|4a;U) zx9}0()T(8j5g>1)(18E4J^b+VqS5{Fjt9VB zP`eyb*pAFPwy3}*Bj3<}G${E4#9_eS7xL#S^ApyPJpl00bNcn)5`D3=!qOw4n~gVQ z(zf%p)#7o)xv58R=~14?0(xLAP#bfZjM==0FusMW2Nd|KF-|@Ii`F^gBzmn zMqfN1$*EAiPTMc`)*I3f`VU$xj;TQ#Rf3)t{A*m&>Zx*yv$z zumY#uP?%>YCBW#6(e`=ixgMPMrUSIB^6UPyUO_HnR2kYs0;`{uk0i?u)BPsA_f@@X zq2O?t+I_+wAlXn?5|@>rej6scpNBaHpU^&XmbSC$MBjClw2_cVq-OV46D!VGp%IDq1TmI6VS*aChY@<5SE zu9!o}$arjl`$tEcXk+imBq^Cw`g*=3A0c_p#+!8xAjpmB{X7udOHmJbxXw?vl*9;yF+AWoX zA<-+XiZq*`_wKt6;0K^NgNYiIj=cT)%_y1=a0J6V#3|M=7HYoa!vT|ac2ej>s$}RS zh;mRE^TnZLE%(b_HmrvAiRpBQ?8l*E?CxMhCj-wY=@kyslMO&qE&Gl?kiuGR$(J|5 z(C6TT{y&<7GqpUODc+whs{rfyuMa9iiH;9Z^H(ml02gD+kJ`v;+;qE~xf4Y+>ipN* zY$qIjT);Ehzc6nS=1Td|UKSQSI^{nTnYtqhw^B_2OSgRX6dZnwMvB-!25&Hvk^;#= zH2q=T$VqckCrVwtC3%k$_7_UBMQdF3Tsa}!TAZKn@jSAg-F+l~ys95vsipDIV5uq> zbr7g<5+6Av;964E;_r`-uO350H%dTW(&0frsECK}VHElS=But4pZ@p3082=BGC}3T zBM++)UNr7DSW`HIjzd!~p(I(f@;w{Y?aI%qmOVb(d*Qt=Du-Fgrr3?lVB5fI`&e;9ZDy?eyX<@R7P4;F8aXuWmelNzJ`17^mT}uTFfYQfu6fi!O ziIx?6D`n-(f7m-q%UfEG`3SI4k#)O(i?Wy~zELF85Y%+&%{CYiR->d7wpK z0RBe1!ou8b&-^bUPgyUVD#RW^7au)sCRR!XIM+XWe&)!N1S-=&xVgtlZ>{T7H~LtWkl^B?RK{k=Q7&QY7}KFk8(FP>pXPyof6e&e z>07E-+~H8bRS{gdOZhu51YchB`tXp$^FufhPl#&348_$ZA@kNaRNuS}Z|i#UB8qf` zewdTnxp97g8JkHAfM-J20t@{kB4U1(W{pq5>mg`sAX zf!by-`aPuVmHvD_97OR;zsKwXEtn&>a_`)UZxl|$}H3O z{q_fmMdUwHqYq%%rzhVakpHo6p;55P>Z3{Z{An&E^0#TqrsmR}y~x##+W5_Mg3cgs z_S5Z>+vUNeTYMLP7cif1@6vG<1J{bvB=jN95a2$;UGot16*?g+L+!`-1g(1sI7y1# zdRj0Xw7T-)KM$IKoMK-cZ7>w}=1%S>VI&xu5jt8p5!WfuC_;;e)o=mG-Dv!(n6f)+ zNGb8!MUrx6;-lh`68dxj@6KyVrpjF5s=>vr;R4!2$HFP`5%KhlgG_S_L@$5V|FR+@ zjDQ@8Azy2$+j`GmG+!0CB6U)G6e&gbUis_Ey&Ixrs_WUu4!h{^1d&wcu7gLY1T`!7 z|9Cp{aH#kG|7VTRVo9YU#z;|7vP+?iwNi;J#iUa*Le?xp$x@^lM7BgETU2&(N@21U15Aa@AvEVd_ErcC3A{uhN4y;iOTuHc*rIiEF^Q5 z=^^7$?#!uGNU4RAvS;Pk05RT1hH*=CeC+>1^)_Oy7&Yq?Ytv?>@ZI%lb|44QdHoWQV72Dx8#Ea!*0!!%l4BS9=9HRsK%jwo!*Rps zdljELiQb(#3)^RATd^WCj{RZ;1oAYn=8;`SpRqXIikx-Rv%Mi=8-H%7*u)2H} z3`t)q>a$yB7b{33xe*Kgc6FzJZ_$+2P8mPN_H{fd!8vN<(RA6Gq3tIGqi#xnhhDX4 zUqM^e6B_(sa#D&>7dzt#|6}-a(>$-uaTE3l4g+r|xf-0l?eS@`49*c|*0ABX ze)ZhYv}vwZz8a~cO8mb6;jpt@B*W)R6Iz*E1iHwFywa*iKuY8~@@sXeuuRri0N z=5=eo7V+$3XhPfqYjO3Z;wPcDebh$ge=eg^Hp~5mk6oY;oT%F&Q5ugdAm6DKXmSj9 zo;JLB8};3bCFm7!$4bfqM!HHk>RloQUm4C!uM^+c>JUkb7QzIfl$F8+3&-;k18wDT z^FbehPL(OD+J-OF0*HV-kUElO;AlN8T7x4huXc|HQ1Bj%j2NnEPG13S}m=lzP#J0iJh zPEAZFR7o0i)BYaMahh0vW|Hzm_Y?*RaocfEb>%LQ9v8E0aoYQn7f1-z{SX;ZtUkFX zaLKc-8ZXGqyo&pEWlYn-q7L#rk3Kgm2;28sa?6=w^`-4V<_lbHA~0-qTAVx_SR3O< z(UW3J#kp+-k6F2y5z|4ByMZ1~hI0Nseo&~-nzme-_}+nIGtn`AYy*`XDVTA>+K=1H z%Ix%UpRJSbw2S+7w)ie+r4CLB%Z*i5uh6&Ap7Ws3>r?9jAE=#4Fr35j}5=Ha&c3yl*C8XRkl->lPASfkv| zXJ2Fd2=%=Uar0|V-G^?fE5qq-X+%lsrYl#vUV~+~u%7>aJlU;mb`4K~3E0qdnYklT z9i-yC6&OOvXo3uDY;!x1%wRc?8ViI;c$**Q;UEj1_0BYTe9y{R^x8L!%`dO5 ze>N#jWNh)s0M&>WuZ)+mZ?=~Ql0D~>@W;H~{||b`nK(7=`2||W%wslcoK>*-=V!3P zjlRxQkP0sQNie(9e5ZYMEy^g#=YCi?h2`13yjLWBaL=YkoDYHK$3;B}g04+DK|M{Z z>Y6@ve6DO^V1*i1Ypa#7&U?>(5Fvzg-a-USm@cIf7N_A7lO4(^t@MU&=>R5t6sJ8& zJtkam5F@3yRi@ThgGydk*mpIqqQDBr2{8xDS3Q}L35__(1YBU=Cx z3uBBGbH)IR2|85-2a7ow9WIG7TMw+WKOzZcIQ{V-H{_lAhNlcLi;P zGmlU3e%S5e%1ye|KHnb#Q04JF0EvZ!%Kbi&GU{{AOL#}@K|dDRrmqTEpvFSUMW&iX zwMXs1%1`QJ5vftN4=)3bhS8r)tst`f`;%>gr9DmnWEIsQaUsKa&teS-D~OP^3rk4u zm-;6{z_%l-EmVXYAE5D3qB#TUb~`<0v9^)h+!(?exI~axp$2M zt|ZSgYo9Cr&3^IH-0jscWVKSm67gLRo*_y9GMa}AkLxp*9rI6x(wm9VR z^#@(twA3^$JIms+G)#ee1~R!ur-HYSU)z~2uW)|UqfAeMou;?FY=<1jDZ571kLB2X zt(xd&Bj~)?c*vM7eB(8|)zob_Ix$DUopEW`&AWEz%JJ$zyY2}2X+lqM4Nn?WIy>%S>s>u7Lg@a(f9R56 zmxGYz8C)ykLoq_h3EG45jT~X9C_B*_QN>q6u;TRO98MyX!g{NC&ME`3;+aRekqP#r zMb2L94o6*_&Hr)}xy4NREiEz35j`962d^<<@juh;HW40$;MlW3^21>Z&b^^xxvrDb z$FR~cYaNtV2ImtPyDs9!v_{1{l^gUO8n!qbY!_~5dI;iY$3a$7Pi*)p3ThBT*gvIQ6NUj|(@D#)FPLJDI`BCfb?seYc>AnJa?szX!O#w(I;kP!LES0^W41 z&b(lm`mv}DZ%#}+qQA4gCzDwc&X~KpB_Ny;VlrM?b>`ung)_7Yv-MNTjGEVa93v0Kz0rQ}Kj>cNd8Sv+#etONPQ+oN}XG7ru`9@8J~{*g2u(!xpmfvb1V>j66` z4%ZztHu8_S%kv6*?d~lwsNX0C>G=1U2M2)4gTnIb#@(1z)Dy)Sj;n3=H%iCn&~1N; z?TD&4H+t*CLp-eB{1zGgqAWtc!fR$Y_O|y%ci(K;-h7*-E+N8#idLm}aY%Q@#GVUk zjAK&o@7|~L_l_w!M1ccp3Pp0})1%D_Dky$=c$!MUneJ^Pa?0-9O4N@M7BIxGJHAnQ z2S`*9`u#d9Q95ytN5Ak8X}>Fnrkx>wVgq6>?>j>9rs#i+qsPennp%OmlgDHRN>vYP z7veWuzPke$>eHXl!hMl-azE`9?Nj-tbDM_g%)GSl7ge`@h<0T}Zd0Apvf~;px@Eg* z_}&RK--8bX3L2;V=Cb5TFhp)`jjJkZW6BrRNc7zD?C>>4-o!oLq~j%(O1^Bh4mt+K z4q)RaGU!Jt+7?J=|FJX4L$$NqdHly~1w`p4gL@Oixd^HcTr7*RmI=|M^@3yI=@AOL z&hFisxoyj9jl0*Lw=V9+PwX-!<+gi*j0_v&)1@F_hV(oZfrp*uNg~X2sdyK=-2V)@ ziI9OaE#9vMF1^lq{}2M=m}@i+UHPLny(pFJOtZkCxp9;Kjn^s8QXn z4V9=O-p!@!oC1i9^vLUc$2|dok~qb6qkK8-gvth=@3M)4#kck(7tH9j zFT6MyQON}r|D#UU)Mt!qhb6#WwbCey)%YgBRJ@mT%b@)+i$C(dH1=RSp_%JZw}TL? zj?f__y)7cY1OtnU>gEdG_#B5O_&j64p@w!M|hnbE>S z%T5}CML7%PQ0iKHF-{)HRKPXx0w}df_PGz31i!P=7?#X1UjB`kBel3Uc_0A21yx*( z6Y{sfeemmn;61Y+l-@;c0VeZUTX^^Df_r-4cG!)pv@_8h@2JUzQoh zdqm1aBf2{UFiM#kZW8>ohglE`HE z9{~T@+(U%^B>QVk&)IH=y|u>qqesrW2+JWH*-c!6UeQWF!_GDFJC+j&WE#D9C5q5f zXbc^{6v82c?%ylQQb8JUxnEYLT$0s&aG&lK>-~l5w|`~2o`UOPenraCip|hC`bEvG{389-V3Svz~@2`m`O{A1I)iO=)f=4wbBjAq!YCk28# zt$vEB?QUYHxs}aWCrC(GxHpxYc1R**-r|%pB78rv>X1~$4>sCMrhGu#kyBOF^f}_6 zdB3f9&_)tDzx-y_{%XCX6Q3%GbQu#7)MhoL>7I9fS)zuu{oMZW?u-HmR|+o{O5o-A z$5tU~C^+?G^YGdGNq>7kj)oe#5Bv6tBXVF#GL{1+ zXGr6FNQLcIG7L`-^+-!gPA=XOo(dkv>R08Q|2&l*fAtYj!YUcKWwP$C?z)~}k4Uty z_+HZ5+He!zk}ucdj3X0p3OjC?dSm+4$GDT3WgpkQwB+n_HeKK;kKp<$IC}7Xfp}?A zP|vf;4%NtBpL03rndZe-2`>rLZ@oBaW%sNqFuUNGQL^uK82}hPJb{33l?PV$B|?xY zKmzI8O#Im|v%b6B#5Hm7TX;1M7m!h(;!Vpx!+W$n3-+)o8En1&%{qkOz0C@jCIp*a zQ*7<4x0f&6Hp4J;Fp#5sSZsIG!S-uX`qy7;t%ZGAHsWCWA7jsAyz*D38Ey1U zGgEJc%gaYs0i*ZRETlM=SnWDjl+*TTMSZ8oTb^=F^SWjn&6L;7Ph6Kr|DnV(T&UGH zp@)NT=xT)5o1N7GK|LW$$<(QYZ4~ssSp&0^Xn>}c16a17rWA>(de$Ze-Dts`x!APk z-T(FiSa*cW{X*`AXk>gb3~tZ0f}kJEFoNtqlRWx9V96#M@d)D`epq^beJj^|WHr+T z{fMRzaRm+N3=4{_del3Coqh=BPYh_MHO9SdA-lc{LZZ(1l}HrXF^x)ol&DUz8&CFX z-V=3sV;e?bHM_Q{F*E|&_vv`7e=Vv;H|3SS_NkUmX$v*9bbE@OOXqtE$lj7-C$Kt zIo9%b7`RCvomt_iA)XaaJm-YV65^KDCZ*e3LiHZ$oW@S$H?i!f_R!{HT&E%wiAmp~ zQ<5BsVT?nqikhi(U=O=W&d`&-3cdxRY8NTefr3l1KG6z}4ZinxSI~HO%buless`IVibs`oC48oIs2# zpy+l|prXDBB{Tc}*#&Q^=a!#k3(4$z7DeQU#}!Ih3WyT_3PI(oyUr*-NoTpH&<~XT zE*RDRNgvoFiUZb%Q~GR-_Aezs7H%&&zg2&;8TEku%X_$$YMXQHSn;+Vq6=%IZEWM? z3hJS4?#$*@6J6atbbils{gZuFi~5eqXX(`93} z@h~^sORBhqd|77#xBKbKj@x8NZ zc-1HJ_^D5esmH!rc0{?akaNj$UMCS29Ues1{&B?Piqyxo*t&N-`@!;)<8p-f@}@et zpZX*R&%EQ>famc(2s z^>rGk;Me!B(&?cL4E8iu=D+;cg{~ZQc@2FI)#oipxgS?hWoesh^`r3TtY8j@Wo;^u zKA1D`dG>l|43iLLQGLi}K2942u2yhg9hKQi+*IPj@WN z>h<|5`i~)hV5jEhPc`rPpJ8D)}qN>C>27fZ+=8oP%_bEA86_8GIevZ!nC`^5gO+--tGX zMxJutp?HFrtvud_qh4K1EfbnpDbiqF9kT*77sEwZ^bROu2~MuQ^YAI0<7bNbQp8zx z%ps5L#O|$wdqtgp7&p3b!PVrSz8jFlwYv75#)qc+O>fHzL&86EW4xbQxN$|nj^hqmIy6(wZa<&AH**9i0zjlF3@jN9&QyN%CE zc>C3DK1!W+z+>HL<-TuZ=E~yK-`(%S8%VAInBK7DAw2QWHSb5;yEf01b1QrH(Fvum zN7hDN7HP2(fjaZ;kFsHu0cwoTP=#vi`?|IcdU)qL|LM+KC9C}m@!I>18fHc~xxcIb zzjS5mCdB~)$~h9PCf+pvCi_3APx`5Swh2pcxezc~vL4h0Wibo}b7Ro6NI8LnMSyxc zL6fgLQ*zhd9UGvTQwi36FoOb<%E|*m9_3H;^}h^XAK!sSW*Rcdp;T7Xg&=kJ0nXg) zPh0lQEFg1TAs^fFyHPQaESlm{6bwdyWUE?Q86;ih+#?g$M_`WV;I3P$>NOvo;(7f+ zCONgdJCCvdA7B7r7DRZA_ypg?1N#VN#<-vIMHUclA3JH^wh*j* zw%C8id@`*4k$g>r{q3m2HfXhjsrhW8-9iJEo>vkFk2GcKoeoaIB&{A7(4awKhKEAElgWFdx(lN2*$1;@IjxYc1;9~P<0|MwhQ5FJB`5)pC zu5C2IYJXcpm?CKwBC(ILZ+5tSBvCf_@e>9eD)INWZ+Q9x-GrSI77KtVAvB6-?7W)* zvo{;pw2P|8c|Y`J#w3u*QkgkzlbYYV*cms)c`Z8*gYr3(Du!t}|N4(LsU6RF54Ib1 zKChCiY`Z#tTYk$Q^+MyLRND1-eT$dd`2$yl+wI|clX8@r$2OwfF6{Z6qHK~FO)7k% z!&*^G?79S~4tZNzbfTz%X^yAbJ7AC*=?YevY!r$1&`$?RFEx>?wS zB71W@=`|0vB1q|}5wlDc{iU+{$Ji?L*`gce$|BuOR}>ohy>!q6J*f##i}gZ|8+p;AD2+FNfWt1!2mTZjHi{H^& zJfHeYsnYlP_1v~Glf0!HPRQ-HTxfZ2YIVikC#dJ)8K_LCxJ&KLh zSs25f7s?C9coZ zk)0HKa4bB(!M%LJ?1^I2*-}#Ek1%3&*Br78gK{77NE&=HFTu9r&?&p$L!nTr$NbH8 z#&;fUugUN7WTEP;!Lzz(c?qtYhOGY))ep1R>`peIep&fY@E(>Y4Pj!Y)7#iqScy0Y z-h0fO8CTPTvBM>O#jWL)vKR0hp zc#j}>uTW6=rHj;);|v$;V(U@;x99*5DI|^)Oc_0?l_oU%*Mo9`f)Mq6HAk~{^e%$@ z2NpNP^m)=A%A)Q*lZZkL!lQPs6&H=|T*)B6s`C8{Ad>15R=i@l4?sz{?~y=AfMb5S zLd>vsp>E!GltDYb>&h@_?(Xe1o>3d^#)b6D!2IU)kjRSDaPtK!-{o{3Z0=vA@F$HG z=P5IMa-yBQ)XhE0jl`#&DoI6hPx_R?HNz72m(_^<6S5xzl>H}rd*+&4Cf3kR4TrW7 zJqL8#Id6G)nEAa7D>*N=cnTek9lC6c@DMgO#t4VMIFV?YbaoV9jz;8CIHXL)A6dtP z?f@=YSj2fy3t6ks#FDWBOx7cQ_sw-pr0}2fIY1=Y%p;3@&N0o1CU)b&C*_MonRtTo zq$M|vq40a1{@&U~F=Xcz_%o19J4t~2(1FEVASNdunDbx)KRcD0v$Wq{1~`<_*UI8e z>v-YV*Mo(uU$*>nCdB7bySkLPu%-FdCmAS0xS{i9b(CBn5RVn7yS3YY3q1Cn{7vcM z0O6_RyzHK+iU{^oQ8@`Q*4l-g?Z_i_v2Kd?h6g6&yH|`r=$S!;JN+4@;6B>|#z0ZNaU7h6p&UG-chd zU}mJ;IhuRI@NFMD`4+9PEuJCHTM|01FgTZc8X3uNdU?f-yKHj@Jz|uUAIw&&{4_o) z=x7i!dtF^&aWu~xpf%G%p6Xy%A^ljHR)b*!lbw0^h=8}m`23{ z?{qfN`PgC-i;IVc32ig@xf|o;UC`{WtD`*kY)?;}(MVtR>ixtc-3O|B#2%Uy{t_|2 z-}sdk3$nowS;}+OfN`U#=eM@wx%3{-OPZnOg4ou1=}Ls$_m) zgF$=f#SE*hrBt%1n^wc_%hPG;8mpBbT>4hbY2{_}W|-L8i0-zRN#gxRhyb*#LzgRf zXD6ByWVNd_s(t=8e0c~9Jd0R~GA1y)ocvOrv~i*Xzij9FJBb78>QAJ(Li3NZ)83;5 zMr3%fGaRL_2$blz%wPIhQd&LmgL%+6kV+mIEvjLo`I-tVl=i3SIfX%}Bi4UQ@4?J_ zKr+^Qy=bBG<%u;(KGsUHZx+6{;di=_GwAU>Txms7nZ7Xa$}6l7@eh1>^#e0caCqID za?J)k99eZwpZYIB&{d~IpSt&L8kJz028F^pyc%D# z42}^Dae4)DbkY$U z(ei&Vk#@N#WbI(T^}Tljhzl{NHYe3WZqPVL;)XKyhe>aO3qVDbNXTjP zl|L56|AvZ#Ho%+c%7Ej?%2N&!<)Kp$v&B*NbdjwL$>e(?kz|4^1ivqDth@Tg*5L}? z>vVT@$;1Xc{8bE+32r|O+KptAE=|0rv0t7$f6$L(iqi4B)2lK@-4mzjgw3-R3&?&c z9oO*qQ8M6ev$=&d{xupKxYlSd1|j|=3yXp#MtVoo4umi2)^idDA)k-L!*6K#{Jq5g z_(|hOWY(J?Z{Q+wv@0X&eq$kmaCic*-v>~U8s)_YM+A)G-w1YP^aJqb^_y}lf#CTT z>y+|$&~HR;QeOB`LTZ1OMu$ATtE9CZoTV|j$|FgH5y>*jw0HBh$OHy6Y21fy)LAYh zV3`s8tg6$;JgmF#YYyU2Cd()rxy_^AvDI80;6EFqhySlaEFn%A~6Cc2K|94@lQ z6u^hoyZ0f%-BUw?mG~8T$m5bm1meJ&LXCeRqXe<$(P--GGRmDa0G3T7 z1Ib^0y+`%%GZc+(+}(Rfn;~OJQzY$Wu?AwhjTJA}IqS)ke)PQndnJfv9F50T(4hF) zqI}2&POaVaeKhvp|5#e$bZIzbQ@s4N|2bnMsAuG#b6fRL2h_I_8&v#waUl{tG+Z)} zm}oC3k+HfHLTxUpAZE?aB~%wJP5*cHA2F9G%{E4)Z3KB) ziN}v|Auik`!+0Fli@ONu4ys*k$B$AC?60J=z-hQqUHrMChse;4{YH?QJKsZWjazC? zAk=cer%c<5QSYB!=-;gSo_@5*W%B_R0K?2AKAJ3vskr30e_=`6jE@scaEz0W` zIUg8YOSsyfC;?^8L6bPbo&W!qG=k+fp5XoUgZrH3wqdjG_u7ttT&P2GtKRoPk3ISW zU)quLsCc7%%_>_D4aKe*-7B*}Rv&tcpCxC$S)e_#(#55{=dwOg{HV5%T^+q9A8>GW zy$9CMZ=p^@`3D1Mo3X1WwH3Kpm#XpG5v6%;Ci^72CxgIJ*sbwM+m>B?C zzyu=#s`{9I-7$(xg$U@AD`P)Ebtuk@)zV(7?B!{r_U}oa25ffSc-Q*c9#@#ra6IaF zmAfx;?!6+(hEAW~uBnquUP~35`^io#J#^)*?TxRNvTYf`?HA7X5?gN%eb8XMQFMj| znN_JvDg|BTUCRMBM)g7mX!TXexc8k{MJEq5+`9JP(dBn1FfeM4d}*3Tz8uAF`+Zgn z9&%Nftlg;C2CgGq*Jqm2)9hH6M1o17c`G`ol+Ta}CvRUB&FovjQy}fSD-oB#p^;=F z1GECC74`yzD|S+u0|XrnPzFx(L_d7060j`Knq4DvWk;EalGpk1hQs-Q1+lLMy4$%2tmM&fuQd< z!I~i={gs`THFg*An#*OR>u4-4aTB^v!g*w(B;pU-DWLgu#1dL&ckYEOb0GD?a-Aoz5GaN}`M`4P3QFj*$E9 zjs`|BI!aErE_V;gPYMjrmg`FuO&90aR2 zol+t}g;K@y&D9S<*OC! zGzGiE$q3ZCezCXNUudFxA{#P}V?E++0-7sm;~%39Prd3{+^cDoUmVr7;gZXO1%;-v@EXyo)ELYv1B3#M~!i(4%7VF07^R*1sjJPi8rA)}gN|AB?zB;Z1#Q z#VxN05MeUPtwlw8I)vD1ovQhNY2+Qi{*y#GNaAA#Xvd!27Xeby4H1-_t@Mc!3}^2o z!tQ<%Mp^ysRc0$zUk&<6fCt8(LyR3s+9H`cl5AZXUe?8Y{gH-0 zDE%D4Uj*^)jcN~bBQyQUr2%)&SCUN5MR7WXxlJAQGoW&RsH;?s#eb^hyHB!~LZ3Hi zuQ@g1k=rI)19DQ^y6!-3RwS}J6 z#rR9L)D8_2{zp;n$1G>k65CLZWB(|s?(`ROaa+NZ=PI?7ri`Osxz4BJs!8GA#Dg&< zyuL1pL{{G58~F~OOE(}hp$V^VJQh^OFuv9370t+>6CiJlE9FNAr+Ca>GAzTy7Ei|e z6o007bF5Z2S=v#Rugp+WIz!ZFt2@5-!(dBs5ZS%aVc0B~dP6JZ9oihv@!B927Ni^m zx&0#$iWdzk0DVN8y{29vUPGPR63;b4^lIfXZ`;57;eFA|6hP0B37@L)08KaRaT z{CE|lG|uo6cH^0_m3Xe<={JJ+Yas>ImK3-Z#%`k47b1LbaH4A$sqgh^c{|sUVbp~Z zxW$l7D95cF|B@}RAHsv~zF57B`^RU`Ao*bWr^Q@B)$q@8qs@O1c75YR%{n@z`Q5I1 z>)TME6txhQ`F(G=nKV8{*_XUpLA77yf*%L4#&PqNM?Fd&ZKrLLguwoIR9DG)5mtpF z;RohpEl=V!I;YP_45)MDei6Ka;N_#4vH$rl2bRh_9?dUt5O!WtGomr=Ckm-OT!AXx z41$Gs(C(<;W5+t8w!IAn_z0G?z@7yeCMZw3_6D!C8@YDuiF&vv@5^Vfsw=m!rmKsOIj++`xKct0J{H-M{fetbW)a%ScTdneP(-=YYU*aT{wK5fRz~6p z4|U=0q$^NU=eP)bo*WgDB&J-M8wp@FIhBAWO_dywq?2z7K!8B%|1bk4WC_Ix(z>?G zw3~7w=1GJ*x}he8m-O*I@yr2wsZe8~<8OEe)IPCHJ#?90r^)MIev=d?KDBw4@z z-sIl?OB0caDcDjZC?|O+HO6fOlW@;+S2_-&H`+_^7OrXZ#xI!f5703VuLCRH>ShM& z7Ez`tF&wk8i81swB`&qIo7%Z1LwQwt zK^sy3FW3d`9_SjCvFto`x+LYta5Vd|^(QG&@6yas3*X~fYjKe9&8eBg2sl-%DC&*y z84Y&KYfZM))W62hN=zx5TPP?XAXDo2{0$Es-^4m0Lap#WdZ$HAVvq_ki8&^ln_BLa z%-%Gu9z(scE0Atm*|wk{n#<@>kc>%HV>oY}@Swfh^4z<4UqJ;7c2Spa2Os37?bt0W zrayblWizUyLGxu4ThpigTpoX8&%%WGbHE?y>mc~=$<8Q>ht8o5&UWR_=j^oJPcHNg zj`CatDS$D`lR8?5JD2*-e1C#2Gy) zcN_lt%A4HPFNMY%P~#e|GiceLo*A`!pw+&m1HwmPVsYXed4ieF5C;+ltF)0=vj zTA>Ux_#v*7;uRK&l1T&~|-pl#?I{C1F_TK?8`jy>@k0k@o%;cI8}p#rolcGJWMd0dU; zZxk{qL3}=;Gz}AE=$T=rNhS{X;Y6Gz-i)UF^%4szuVFb7F6xVd3D@%PhVo(dpcler zZ>4SESk}J|4{3;1s945X{6_xi+FB#v2;R<_9k$LiF;)ukjRoEaV~MFduqH69%xSY~ z%GNs_Gny@UsbEbDpUcY-HkkBIr+g!D)Q%%c_PlYxxxBC~m$y1Xqg;fbbWo~aoyWMc zt>gJ{DCO~MJ&=g(#t+}F1D)}-Z!otNgiwQGdrd^~NckHdQa@fd6|owBp9VYWEtCzr zCl9uBPIJ!x{aJv5)XQrE*~#OFxL{A~!kTCk1Ly+aOy2fZNHwpB%rvk#5gg9>&~-Kv zNQRI&Ubr`6pjRS?AVE^sOk_M&<%fDX8TMHD&d=pZhcx~LX>66hkf~AhItAf4TNQ#r0w|Yl;Z!bGL)e~ys z`j_$;v4rzSFdw5zLiKt=rj9RbaQP?2m4cG?q1n(k2 zkMh6#!qY+-CbWq9Tii5x1y;lI%@zl^<~~KBxL&V|Vr@LEp|6i0J8V=VVDieKoshl? zpFvfU{$<)%4;yAuLt2q;>gv4FSq5d=C9CGj{dR&nt2}1^{n0KCMq=F=W}bqi%78H~ zSc#jKmwdl*K4T?|$_sMAx1BtJpg$f~hDCEWvGPAL&-m`2pdm_+`#RLrPrA72v$+mL zvqy8drhhHp^o2g*{AKv(;XG8OZ^UHGa$na5lT($lx784Fu+J{LPe;$-zzobPg_dwn z0GfdtBr~eYUEQ=scDEL8TA*38(ze|CPaS45-o`XiOtiwjL9wrs&+D|@jEmtL4Ntu6 z8)VS>%YDtQ;mjKNh4Nysd{QM&^D~E2((C4U4^_5BJm|8NO~5O!KkoQikG3TA*sj~L zF#u04pP6QZe=_KY_T4YTnQeZ52ju(&$If<4SvXBP*3?GeV~=OS6L|^mO3_uyjOxHs zkZPJt3Y>9!hH^f)X9Q>Cr}FwS5q!e$8X zUbKVhK1h?ly-zaJU5vCfiJ*B(Oq%Nr%3sPPna(qe#(DvQVayHtUo*07 z8!Qb|btR52@nUh5T?oB3evb&RwXvry2B-gZbteh5SvHK{z9nMPM zuP!DvDovMBo^wxsnD*~3ocO7vm8N= zTI1du5Hs+DK6BS8dr_8{FJ*T!g=c&DrV-wN&{KD>&R(Cb->^aQ$7Vpv=Hz})U$=or zb;UT@@ZHL}^Dr94t-(a4_TipUm4PD|ZU=&m_WWQ+<=>O@55lUUsp?xTADAz|h7BZx znwR|S@(LQ83>Vxh{Q<~)J7{18ko)yOdkIS8%NU-#A3mrk0?N#tf#K^Q!=;J69Mx>~ z8-t%+o{U8Su3FoXMJ4Y)VB9kNPAJ!irXll4UO_@QyZd^#F(<+P?9wzRZT8yId#EIg zo9Y)f+2V3SkJHCLC7_HIk=usyx!8~z`|peCB^N++J8b4g5{o|}Wn1^e z_4VWDnOfAIXFnf-U( zgmlc-`c9m(8&LF{aV;;0H~ZUIMnaF{kC8)!nqqB>;+IXehyzf`8i765ONBBNNzW}v zI=djbuwcV^0xSsiF5;7|2SXEXp7WHZeA#y&cI7Im8e=WJ2c^|b550<&U+bMIo-5$F z$YJ{$gLqQW32mDNE+m|W@l?(irc8r+W6z8=`zp>tJt{l#Rs|2Ls+>v{>v~Lgx~#1xzUp_j6QTm%=7j#uFDd#E={ebfLiTaqg>^BJg%T^ z(L`udJXeeIGb5S>FP)E&qRi0B$mbPqe)#nJVbzCNu8&hPzn>37&LE@icxb}nSCF`K&;+G*}_g`lpHn=GV%0?D((M(^G5S|5|v3S-P9Kg8^k zdV?*nr0*v<9Qo%5r=AsvhgVzn%{>ZdyiMiF8L!2jJzg(~LX)fB8+BQ15?*CK^%{T{ zW=z~^NEscavYQ73kdc~=5@fqa9;0Vy^HGm0Y0o~9T{U-by0#1BMZ$+gbGc!CixS)Z zHF595zR3?wEhnr(^jULj9mUfh)X`9FbrMzOs5y~QJ-!Lpkgqt1Cs#~#2mz}(DyyAV z8J>A$4ZS>b;vDNid<`%BWWJI;--D#T7E+#kFxOV(T$u?e7$#_;2>`yf{8~wCS*jDU zh7y7N6OQeZ_rW3AXruM)sE5=?^eS3EYyq>+D~L`~98;7>S>|gqh1Qz7`SgmC)8Qnb z>hbwquIeR8QCxI7F4Nk3A~DBj|EnIw=jO{9Jr>#A2Yt{`EH(IPT;SnsQ4EQ|Y$&pU z+&7cM#BL^kz;!#ZfZAietf+-_(4$O$#bJl667=yb%(Q7bq33u%bQ0t5gfst+nWduU z)3>KkXgLEIu|&AlVj9_Miu-xfcX!(SV{-nt;r(wf?ak;R74A0ynX_x7d;96c5G-0n zo?plIa?2m_%#x)>tb#56@!3G}RBJ+cni!{&DUgj8n&>$_GH>+eJ zv@{Ka{7Jp>?0eF?#_s@zLJBZ%TgjIlLQ;g}>8+CPPI}M7meQ0I6FR*Ph!7pK%7o`yB+Q1{(ft*oFy{QBSY{9 zN=mJEqteL8UXM1X`+jgEWSaBoXM`%tz&u(DqK;34P;NonmM2;;QnufUDO{tz9*r6y zmnM}}$lum}U_O=|Qv_F6)OC^~exrH=`Uc&vlfDcWF?J|NReZZSJNFA=OznFcx$}~y zW!WxtU+uqM?NRy5JnAOnGEJ0!M(Mkx<1ceWOZG5cl}7!U%ja>S!wVHaq!$mSoyYDv z(@ubSwgF(oh>|I6){?&r4|4n>5cdfOMg%7gY=PQ#B`d4r=l_4$Xt{azX7acICIRug zSpy~xWqx$yIb|ToJa7ql_=)M&mlU}9eO_o6KAG<3W^~5>yFE{zs&ON;-@qafMpQ&@ z69{ueI^1K)qX^v<>RtgpYa;Cjp;aMYjS*_u&PymbL_$s6*|?@2ZL`8qBd4(9nUAYP zbe7n2L792yx5lnIDx|1J<=j`Qd_iXn#ehvsBv22Lw~r(r;dCs!U*!EfZF>3Qdc0Qa z`VO5b-p-2msb$1nW9~3ryz<|9MrwIKpT1gyi73mZ_Itg)O^OK5t3t}|D_KK(Tbeo~ z2IL$r^U=0cb`YAjR{5MQZkiNBfY&S_KiaruPu=mn4&}>54Zns7>(yAv)jk1Df*Ql? z6NxgC%}$F?JxS0$#QGU|x%{3Mde(I)2<4!MEvRNl{K8^a{Ok2g4PG<;_oY+Ig7ULX z6t6op{o_0~m;Z%eAu|vWy!4ZxN_sU~+N!Pi6nN$={!5Ca*Z68~vDB?d`*I|*jySub z+GBLzlrcO010ZO6Zdsx4D)A_YaAPMY!SKxZA#IvoJ9fi=h=+kZ+I%#Myi`mjzw$rF z#yI>wxIM1rg5ju|AEQgCAqnPx?a#t zbYm~dYm1-oCNn8kPLP;gIn{M3{<%8kby+=iCul{hn8rGPT$Yg<_T>WgvML-P#?!pO zB&@tQIHhp8*je$`Wm=D}R6Ie`5i{xNUsqA~8GA}8f4}XuQ&bTH2t$=#@FV4hAE!cvEJKVCN{_Pg*@s0 zUNQy(!)oQ>Bxa+iC#bKGGjg%!)KZu0Qw zJ%FlwFz9o6{c%ioJ`Zl+S~L1vy2d#AR_jH>oX2hMRTnTEEckt8Ma817i<6;|ZO7!2 zpZ*>7ax2s-t7WaX&j16-8~Y34ibBdhf_6uWUTA`kF#X9x>o&oOFy@qkI0YEE3xIkj zPc(q)Y-Ng!hM%R}-@6UO%I%vJTLoP#jz-DxKZP|U*s6IrA_V`a+qJEz=AAHIpQ^Sb zN9W{WGl62z{A|oJoL!JVCEv;ROgO76$!0fDVL&~p{HR8Neg^;j5T>LU=ZP%Y$eyYl z9;~J)N2KueI%J?jpc~=s^yePkXxvlQ!6{n!-k*iIO;<>~_y$HV%T;Ea$XKi{{7LY0 zU5-q$F`}jLf)=^`$m_q6_C-*tNf9B0i?Uz_6nK`4#3r!TPT%hFLOKN%6w#BVb6H6d zq$5um=xhR|2+LO4aV;w>&ezPsVbEh#<72qILV?O5Fb;(8eX^+99mcSg*48mv)FQpk zZPJ60q`X|u$p07R)|D>caqykX8zCFEmoSyKIdw0sRq$T3`=9iOPn-4jh^VJ8>m_b+ z&~blCC6go_Bi9faYn2|1ZAe=i#ScrH#DLA9*lWd2-YfPfcwgezlq8yJ$l$4h*RZRu z3VM!^4TmLw8uCT(&in-HH6s)N=<@HdNAw=pA_^VWrlaY}y8X6nA3SaNF3@Z{)ZTq_ zQNj`{6`H;c*ZeD}NE%--s%T>tUyaj1#1@{)E}4t8cVaG)>B~ODO=8N*pYE}F1FE-= zpBE5kcKyFM;nF_;5KnxyfMr^AMy+D*sRKw?JMEc^ua>dBGQv))3dl;j?H?ng`@ma> z*V^98c9U|$2kQ?cACW(Qru^_btz6NFqMuZ`^~oA^+B92y!@7xuE5JrQ#Cy2MfwG07 zQJc$KZk@97f7n>{s2;wyXroAHZ#G6Fz9)-Mo~syCzj9bpv&lyn17UUDpk zb~vf5t)-2Bb=jSv&21?~@%?`GtG413!UflMBtl;jJ?GKrq^utqgckwPoMcT^!I%>T z6*~JB({_O#=l_kZ%I&@}?X16Kjxxh>P+7q{cjW<3Y18o_?nggiYJjWIPhyIy=$cCB(Nh z4_7=r^ml!UCR?APsR&&;@jQl1WuZW7zr-CT{?sLKvFx)-9=9a~w}ZZBIy5!Ow@-!g z^`Nkn8mYn6?e;S1qH!!vYb*^(Y+d?MVN8c`Oy;q$H}HE&R5JnM=ccGfg8d#W-1glS zCN%kK`Uxtx2)P%s{TXd}>|TCw!6d)aosHD;LI4pI>A<-5c*jiJ^514gS|>b8x%y6= zq4Ae#%$AwZwul%B9z7-5@)%B0#cUwZk#AeK>*oiZ9YY?5InPj#!+Iq!eH5`_|4EAS z-yVnk*+Lz3lD~4I&Udm3ATEx%yorTtj;uuefaaq`7)>p1N=kSeU;5K@*F^Dks8Aw_ zT9@$vAJ@MF$2o`iy-7Wrf*!LmH12b)q>~+5Z|1eN^QGb5CzfkKHKCKkv0)OtrA#8G z9%KKcU}Yk$9k1C#WZUL__uyO1(}n1+sTx;`&9C%`qPsXz{C1urtpFW2593#oze@f6 zY}XA>3wcsIm+!TcTNO1gH_0A2eKg=IS?oxykV-EX!7Y-rgCO{K?$xfJ+93Vh?yK zjLPSDJL|pw!Mk%su9Uv}-p5L3p>M1sd2lt-XpQ%DY=?Bv%T} zqdl>rEq>DkAemNoU0@}RJ;ePLgdye9SV)r|E5AWvX><@rDaP&R?UO!pTIef`>>>yF zQG3c@E?}nZIePiP74RB_8CHEQR(?A70?8*F?MFIT`?0lq9(-&OA^7!rjPBI8x#Dm( z_iR~8Xi}OAdhBP|8QQM(um6`+<6sDYaX=&*aT0`da4C1#QbO(Nv&H%Oq1OBziJ3h5 zyKde2I*P4C{JOoI1imYWISH!s=KB@zLE6~prW;Qs+l!Y`(`)@nT#S0BV~7}TqfyB| zca~YNep8E)MC7^?Q9X}rpGk99p=U5#eUyMjX*4jA^b`+51tv*;@4f~7-ss~~Bppdi z8s($>d2`^D4CB)S;ZDn+h~C}(ele?fB^=p`!Et_WIL1m{IRk21Ho${B=%_NQuQZ!m zq`i22@Oi5s>-kSMQ$&nE3n4ybBh^%=0wCZu4ew(gL@mikRjGi0v?^U>T`@$;j-HEPVO^_ zCf20%JxG1qv+nDgCfI4Fou4s`(>&7GHgmzSV)F;{!&cJTi!0~Xxj4$^40?ojluuYxm^z?&xSYy=UB z(j;l5Msj}_(hg9wn#}f?p=37Em$8594~wf#f6E{8crSRwL!i22ROidEMo1hA&L3R{ zazYv1^twOu&^i~SIECd;3Zx_u%FkW{sWhhW>Xx0El8@hX%~}{O{;&A~XwoL!;vHTK z@g9D)ok?J`yB(!ZRjJmN))qL2FOIT;0diwBuHl+brt=P@y8qw5T{IL*AtMJV z63JdIIa!rTvdT!pv9dXbmPE#}l5y&`5;;-XoH9FEMHv~#-t(BpS-+<~zwbZY-DI3| z-sk;#j_Z0{GQI4%7awGdft&lnOz~-mZb-YIr9njVl=UDQ!EHl375Ul zarSg9b?I(dI%FQ3cGHoANE;X|0h&;o>ldk;G$Am}c#dQlV|Bc{Vte>h*~DO#Zr?+tD3QR(i=oS313nv!N={h-sH(U(KzhW-l|1)4?bZ63S@EJd5O zMqvURhg25~gSDeSsl!fy?Z^e}kF83=fwAoS6{kZ$SDo9#*VL;2QdYe87fdfwjwBbn z9+jR1U**Sn#m}h@t2BI%v66btZ6PS0(;zb^ahE7aie;sXq)@ko9kFwp_;)5)_A8GD z+G~$&DlSZYKyUZz-R^S)-B-d_WhfT1eO!lqbv>&SfA9ddFmQTQ16iUY|Aqxy-Ey!3 z)~VgSKXzPoMn`i!b|ByKj5v_)fO&Qf_Cs$g!z=-fnE{ta;YUFID$KUKz~?F?<--ui z7i53;rGF{A!W$Lj;MMFtWU+?LcEmglg5_b!DBcTkAKIcTh!ZxCI1z?-j+G$2KH`_2 zJaQQSYL$vGO#6<5?9Ur!p;iSR@loV%USCszCSxW#SMr#Kd}6WNExE;~{kcOK8bn3T zB=8lxPCd_f@fFr=<#$qg91O>T{!>G-bq5nGjzA^Kt`9o>(UrVWX+(zk9zQJ_3^MGN?9t`s=e8-J(@g~jBp z-zV!|x}^Pqn&!9v4KN0s9PZxd8}tc6w+^<4DwNdMK7y4{TV8rM2H+2->3uBYlG6b{^f3{oHzbNEs{f zEU)Lc$Bz(?zQAZY_u?@?REmhe$S?|j4k%XY*-vVofcwn~+kNTsG-M5Yj9&E9z~+0= zOg?jAzhQI-btZQZW)SxI8=l{6ZQT=DteNBwjUq+P5PK1-z$boU_(uBJ+tCT3Iwb|D zXDS;10A-k9Gdq0%D*F|fi|GwPhvTfNIfk4t-T{NhQD6XH(cJ5J+BTNfF2l0wHo#cA zT`;8_yE~DUR6o{RJ&RD7f^$Gx8s9R(W3XP2JU6k|Gvk|VFMrs;KySv-&wX$#Z(|W5 zjF`XW9nD}%KuL6G-99J}BCo*m-c~NjSGr(vww^qaoQ%u@kM6W}xc)5i)NLMhe@gkD#lH4l;`$pKb}ciCYMnfj2>9w`v&J6;#09z6!Rly^8#?1rP)qTR_9_H1JBu@a-?# zc=uV!rT~8E6mj^V2yD=zWW*2mNSqX(ekBUaP(>&=fJGcSHp;hKe0tLSCq#5NeYvu} z)ABnfqIx&SXewK5LQKwYDi4-{QWGjno^{+KKD`*RzQv!7r(8YDcOV^feJd|G5GNV~ zju|9%AN|+{2K2(dmJMhWJ=`GYBZYGsgtBr^|A$T8xqA`>wk8(IKB=AieFg@zl)f|3;d{{;Hy3>$bTryO6=Zr1pp#i%lC^JM+XhCm3bq1%2G%b}U=^Tp_IWDA zZ^5zw*dY;5_0NIrjr*rTnpT*@9@z2|WC>tlT(KPNnQu#Uyv@<*!wC|Hz}?W-1dB?b z)HF;YQlG?kUg-b$&Kk6ABOqx!)CQkiJpv*K(aX}7M-|54hAIf{tpgHf9FjG=* zuL4o0s~adDE|o-Z9D_Ewf1*Pb8MM5a1OUOWAz@IQtYqtRB@PQrB6j zt))(C-dq~%iIU-aqde&fpA`7G`2fojz?Nje_M~)sDN0j5%KBi91x(b7avDhH14CLu zL^Z#vnC>8S6iUBmn~lBhNT_dD7=Y2BJ&y_8GjIfmNP*B)+KOB>8oV`n43?NCf~-VY z45yw_lm%PZ%^6{lO9?5jv=q(rA^Um9_Q>L5fBY-jN7SXg<*D^!u!`9iKN@BSxW`Mi zF!=4|(@d_0Duw+!eAlA#e0mv@E1 zsKVQtRULJ2Sy>Hr{HEwJgRSV!QLiu2ft z@^Mx{y0)p;SWxwWusy;9BV`mRgPg{F$5e^6Mf=&X8JXaOcNM{cMPUTOaFtL;`@kP# z;ufL40&=VJ6n#f1xYC50mB7$5KhTxF90133}FCtw)f^ooBd zmo7LWosK1H?l=zjS83K;!N9QRw;tEjf!pAhrJlvQjlR9WSLokx*Zez1_lg(U?|7VJ zBjiB*hD!TIlJj*vrPhzj2`p=IYnb=$1_h>Y2G7fGN3TI3-n1qVTGPb2%Qm^j=DO!6 zphbAXUG#uRjymRb82oU^v(Ba9`GUwnU z{IL%i)iuM96b@$YtgOz9yE5|38^lh%&&$@NiN9)K*98GA#pN*bYV<$OX86>sON#T@ z5>#p*PUXwZs$i7Czv;9O_SvokNNrKbtv62YJgc-bAvKHo-+)Z{`w#IB9e++WL2ade z`RUBs;ZMbVt$AM*vjEra?fHrCWEG zg6+vPXzX8tuarSx*T=lkd!5%{M!Z}5xHROoG{v-?=)Fz~)z>zbZr@aaL)2vP;vMJj zH+iE|GY$npSZrJ?$eTV!0lJ}<;m%GRp=d&QY@afW8Ps6zp>L%CZnXnpH)3>T5?LIp zTtF)2zU6Er)2n&DC@iaQCnPwU>Cd>^l{&8Pok!Oq^sH~x{rPeLVa;cYzD!X^?&Xd> zA{c1s=vWF&<_qTr*Cr9Yjl)yu|9ZM%MN^ho@>q9)bVW6eC0o;K!4$D75YIcmOY;*X z&DMMovgH1GM!F`4xfpLNxQrZ3iH|Y=KU4>1f!7puFS3fqW$ngU#afg8B%&@p% z)Yj$-G6*pk-?7ythdCHSy1imR1L@Us;t5M_P6XZ!lAH=wcC^QrTK%N6 z|E6L{}6!UM8~T(as1U)Dh>;Vm~!Q z+~k^SFCQtMc&YkeJ4i~?mLUK{sky4ba}?t1^*V~SMI5kWFZAKT95j}` z%6>AYv*M*Y*gpu<;xPK=Vgpjb(o!+16sn_LH5#4Qxv(h;-+7qdCQS*ZRmBE-^)d(8asf2 zMQF!144#_n0xNB}5);ZIv}9m-(L|3ZI~#pHBDJ<~yHsdyg*%6u8wj>i#o(6rIS2&Y zZyc;MJIXvB97PSXpX|`}9Nh;y3K00j$pk?1ugEh%-aC=L>{Cs(GK9ps6NXRAA|TpX zL+L({O53%U0k-BxOpf19uj9g6%jUQorki*G-R&o8ikm1e-do7K2N`ITWDU|Y)}-q3 z(K8e|af|ogpPxGhK!p^cF`NW^uaSx2kUODf#tMox6 z$5bo`VfBoBUvV6hSv{T)Qp)H|gHZpI5FggqYw3d(K9mSJG)HS`WRjmOXU_*6*!8V)T&G8HfQRDh@srW1 zQG9NHkTD=c)61BGECHCuu-paLdQw3o$NjhhQ}O9d6;@nt+CCK@9Y^XU*a0ztm*x1h-Ua049XH?7j2)@{BN_X52+1oAL?6hOw$p5K{(Z zz}{Eg(Yj$Qg%xJjbF=$n`@cU2H4VU4nmEDMmt4(bfKoyuy7Dnab6c8|zL90)=!1kk z@PJEgX`aa{jw2JL;V=LmX~i*+(bMz^(|>Lu~Peb?0@mD$3||ZXEj~$U?q;E zoCXX`MzalwG(7JCyOgX1Z>Wb}{hN+Fw4igY5fR&GR~qir|14oQIl7LTdO+&Le^wXW zu~sk7T+A-oCf2%c1Cw^;_rpk}H)VTiA=oVh;wU9|PGpXfEB4{I_CwX%mdjj-&gY*o z)ySM#sW!lNXRQ?6NdSwtS9;g{h8D5txc9S)xZPoU5{gmg_;X7hs=FbDFjE85VP{wn z^OKOFXSC3esVtxbOX!dTfi55Sr#oy;1V?Ax5bTOhEm(-PJ1Q|>mco7nMghO>JiZQ4 z|qBl{9mkhYCPRmGV*O&G|F$f^O0n3e3AM=&p``^9`|* ze>g_+ZM*%@|9U%iN9$)Vzjm4RB`(^Li++FNf%&Pg@4dc?ffMXCVGf=Ul?JqVlmTF; z$d=`x+8?*z!p6x;&kwBUI(U^@P#v*yGK!Qlu4yQ&=;H@42c4D65qJae3NwA+4IAf< zpm)S_8_e|2r2@Nt*_W}q{FRTNu)%~lNU}>kL8=tc))2s_8nVxTe-+q1u~%$9RQGWQ zd41kFmnvP6j<6h&Ge|+~YOZn|D5O9FJftmo#k zokIp(8}H*q6p)bIGBWYndGD-m<>`q?7VN^Uz=Er)i@gPjh}+hAh~zFSdpBt^=a- zMzlB(I}|R%bGX%5Bg%^G!ne(?17<9sILRmVF&Rd~{oA#dh-weSLsFdSA4IOlLIRVm zZqFxqPvxHPf5j|sSNF;0jY$cJqkd;A&8R0Mi!ZuOtn2k_2^IC7hDFk^#x_@0BA(lO z7q%SY+8yILod@SN+h3gZYN;aqE|52<_?nWym$(j6Ol=q*a$!^Nhe)A<-&Q7uIu!KB zONtX`LAmdJoXuOL@_hjICBZD7#V6I6yGVPXIo{O)-Au~0t0T{>HO~S4 zBEGn9uOl}9pID*#w|HrGyvtI}BUy7R@xv=`|pOZK{!(cV*nkx`+Mx_4fqvGZJJ;CPNwLK68k?%unqVr)$^v!v7 zU50qg6I$qD+|=jaB;q9#5iyVlQpvEFP~Xb!P|Y1v>y9~Nv&PS@9Wnq292Z+ zY|7#?)CbH*1@+;Et%fwvD+YgQn1h!Hud8@((pd99Ia8%i->8o(WPFH4_9J36h+i`z z^F}8g#{YxpH>~N`;-IUHTWN>ar@lqfx|BWHX}Y3yJDcLu;p^S=wKXor+s!Wj=8{+J`oO^)s^>hvn6#gs=%#s@|p4Dfuk&gxkcJeU*#Pc zsJS_K=3(~;7SHQQngKfrVQ3YD+W>Rp7#Fs8mumv!CH^N;>E>hnE;iV$s8`E8t31`! zHNS83HcUwD0}ZZ){?#t`Dw43ntnGH#jJ-E&npVxwGTug6{> zJu|^RO%9YmX(XREs&55e0_oc`*#2C+^;|gIJwOVjL}CMTcLY$}D#Gj}P-K|CawP4C z{AmRor2WXmw#-$4nXC#jU&_t^moavX2D*ToNApQ3!{_?%7mlxCt4ydM z`>jq7_El(Ss7c3%yLbJ}D9dZdfe8p6jtSfKQ@Wm5mSLmQ$k4L=mf(_++Rud*tf?N{ zuJ;}7Kwy7`G}QC>KfX7O7oLJNEB++FAbCM#z77&5K5^f?cYt>!XM@0QSO6F^m^cu4 z=J`>#nkCWz{5bj$vM!pqbs#42G%!a^vaG5<1RrPR+xnUOaR%`zKJWt;j6d1mIaCug zKpCg>O&<)>FGiew`Y#A{8NICpH3me8je>NvvHM&+3+1KEC28WK$>($gp11`MTT%i- z8a>u;JHc!6FBtnRs4rY))BYi*{;nQ^)?~SRpCTnE>86OPh(Zoj%3|Cw&=@L{<&^BZ zr$_8-wl8X!_9UgOy9!N*oB6eR*XYaU#$IU5~9# zXoTsz$JUlmbCW=GL2(2zBqZtR_ECITb(?t}K-|p?+6G&z17&j3tjTz#{R`%whLaTP z(9;-s*x=xL%ua)?m-$=N5pT&0t3zd;v?Ox~1>Fhgyr=F!nplT7{e9f9I_!*VL%PAw za3LYWuTn{%i5k%;*dvS>eRazQ>fj>3Adcd64HVYNsRR)(Xfu<&Q*MZI7w8D1Ab53B zf^IDL(!m1-eby|xw(8(<<9mP@U7^s99e-=g&DHDpo_=221)ZXg~C8iJ*P@jv$KU8DZtqL{vS^ z4oJ_gKYIw2G)_|`GX$PI-$JUZH)llTR z)g=go%Kl`GV_7W0lV+#yPgb#bvJyRVPw&ZerDBhOG-PcDmpJNn`gP1W^~^(T{gaF7 zh$CBtJ_8HGEZFQKPe9@)=0iqjFMp(WLRkR78b?k2(-Gl3#Y627dXM%!|9|DiTDcz? z<+N@D$c+6=h|z&G1mZ{HtR%pt#!mbR zCMa0Ex~0#~7S8Y_ghm4M0A@iis`Rs8KBa*u6hL(lf5Df}`xNqvIk-LRA|CNq z(g!Q)lnb@^yW%M^;)m7K&bdV-?n%JPluuWx!1O>>40K|;ZK4R(gUt~GfZbVmn5b=_ z(e?;NFc3R&PNSFa{M~2$dP@2LAvefyi+D;0f|B4d5i&xOVDcwvYW&_je=pxBxgv=$ zze=fe{`s2sgY)I5eAiHw_Svq_U3VzQM#&%1QwpfL%~M&8Jdlj+5VQide%;%eyH_+@ zVk7;6-d6nIdg~@+O{I@X9=ag({k5j(m|SehZ3*F(kj0`ADPF3FUXczU00NR(^ts(Loi#klrwF((~^1{i*K+RUOJ^4hG+*JX{r!ZISa86UAkHz0$i!l2G9>G+dSDGU%>i=yX6dg ztk?3a*CzMj87oJr-s$Q z$9imYMacJfxyO6e4MMFTJ7Ee@UFUpVMD_3ib{^OWf$%u;nL|Q}es;sX>Qlq7-%1?+ zkmEcP=F^uvJ+kwv^8x%rp~QpW&%Onq<}SBnh<#IZ(a1P+0HH1e)~|?_7Y+kDM%cE3 z4B_n+(5-I!c(K>6P|IPy$Z_2uPMiVX|#mU^WXEK<%@>{A7xA2jVLzn$UJ2tzYd)g~LO(0650FL1? z8T7WBp0s>hZ2-}03X~wf>nJI`Ht%Ryh@`pX&6c?A1ai3W)ygS^aAYFH6x@~--u9tD zFV7bA2dTkThGbhULB(VrB}V~|Of%d8_ z!!a^o87*SrxVP~(W_xIyiH{%KIXm=b&oatAdRH-O6572l>#*h2?Hz}xz&B|iC{H=S z4%(6QnW@{>z4QBO79@1#p2ix9+E?SB$_6~YoNrw%w!drsX6`M8SeB=cBA2d{mUchf z+#WSIyxX8Cd~m;IbsS?lRY4c%g6%zI`P5`=Gv~XHvub3saBgH6=>P%g?Jo{&95fRG z@hjP;Pz@gjKL_b~>T+Jywl01y_!ZMmC*JuY={l39#K_st2KEF@yR??($X#!@pqaV+l@FZ?X-TbKR8G4`n4CY zs`Q_T?vK~(QiFi>Ogt1iRYd~u*V9p#zdp4OFEhqgdu-xg5N&6Lk7}Z5c)bq45_Tbj zlBL_S)a1ix79tk*a_P-GIS}XX^a8_R@SQl!XeI6e?Mm+c)kPJXria*mxgsuXL#EX> zd7&7j;r4eW%AoC1AwUqZv=r%#8@3=K45SRu=Y?fCF)TAXZrwa%jGb0P9yjnUHNmzK z!~R>XDC`?nxe~2;i%l^AS!|<^!`YD~4ovbXq$13WIJ5zwKdgOKuUK{6C>3-gL8ZET zR3MN!_F>CgfbVC@7mdf86uYyK^or$d?f=~gpc#T>PK(pqi=4Lvh^tx9DDwQJ=fy6} zU)j1x1yW%i@kbg#IGHrDV{lfuc5UJthwB<@hYj5C7gamJ+uSC$j54oL`%z(SI#;q- z08Tz2l@9!+U+7b---8e~ZKy!4aG#Gzee@oJo}7qV^1lwo{+=TX`~{Y#UwXr)-WN=R zUU9btZl_zsk#55e3C253Do{P^|C0{G>jXQ4uFBpF$1Y(70?_uX&oy!{gQE`u%nAxD3&Ytbhv=Ly|Ko-9Aw z@X@IrghnpC)y?$#KwjiK_okqaJNIjz{PK0#zM6~=@&@|tN#`KDV_V>DzCH%)@`Z() zBNNv-x<*gG_}^;;j?U3(Lr|szM1W*8;6O9DetR42P<+PK^4Gi1#s+}L?T#TImlkt> z31#RRnSAuT#p-*$L?w+|L#rbX|yxU4P$N;dgWBFH|MIPtc zk)MePfe8Gm`D>YJN+AUG4Eie%9c{ie_Qm47rJa(mrnLcJOO0c7bhf;2YoY=l@(7QW zEw3b^5?LA^6(3$hQO&YlQFAFtT15XBmkp0_BRGkhQFZj7b8IIsHzr!UMx-|9e(W2c zcKmmY>ar8(V5Zu>^+^~(zcK*i1iX8x`rgVf0^$UTSOn+u#hc(qKzo)Ulj>iaLP+(C zlFOlGm6p|gPrpG-pYWjr+&`Z|4uiu)bM6#EQ}`GJ3-angj99&kUFmiv{GwOqym7HK zhl>>IXh*mPvSK<>A=yLoe=erv2tv^EPhne{CI3d%n`JLKNOxoTsxf{^?-56Y9= z^H#jqVkam!oTDLuCNaesqC3A;vtgsvAF?7R9&jQ~O#V7%a5FkK5mbDj!$dGY!{&R) z8SGrV<)K-y(zOp<91w*a8UikJi(j&9dt7(?-g*Z4f+J-SAh4}(xG$8r?!nN?>?rin zRHN!#o+EAJ7i;{dnB3hHWc8Bc06%KEMnLAR@b~DS6B%K{HvfTOK4?x+1KUt&p51bwf;4eX@JX%P z0FIK@OK?u6z?R~k&^drI47x=~nquce!KN$Ns8@WkW>waJd`$tEf_f)reMc?Kz*1n= z<+vTYcoMRoj)Lz(QddG1x%X-c8F5wl%o+-J!f{z7bGGDQW`j|@0~5_+gMWZSZSsL0 z-|cS121qD;Uu$)uTjS?^d~fK&{ejHS%m4~&Byhb7jl!S%X`YJOHgi4~HpruRPslWZk!SOv zKVap8RI9#8&P5y>cv^a5y zbm6<)HUDG>kFhk)CvyYNYKv+c&+}{`FIX2{Ic-`To!yESJI|;L&0@Y6*L~l&4|nlS zX46v8<-<*>2fL6RFJ3kwx{^xji;he70$k4Xk(sZiPU2(m;io&?(|q%>4@h(HnAkt` zBZP$ofwT|U3YDa4)9BQH8Mt8Y5N)Uhc5}Qa_+>ozUV*#_GahWi@E_1vWxz#8^ans# z^yZU~ebd{~3Nc)7FCp~SfEUN!+zMeb0eSFk)WAAw2z;2aa{Y7gRp$rbudnRj6=)=U z;8UeMjE_nWyNS?q+xign6Zs(1^o5TUYQZGgv>-zPEN!tTKaDy5L2f-UEVvx{1NtO; z;(IVZTfn5s|?$bvFpX&Ex zP9SOXcPhP9scQNefH&Kj)fD@i>?ej0v}V% ziRiShQoNsX4Kkh519#g)^yqn+2*&<&gauhCf~ftid&6{?$#Cp*%vPXU+AN*m~d z3a73qs;`jj45O+*@oV$Z_b1XueB+)WJQ7a=WL&(IhZDG{5pK;=H%~za{rGP{%w^&F zJx;V^p!g;1Q%!uT4?K}dKLQRm&9%=DYiF^fAX3hf*~-3$l|vR+20|~}>p}`Ry1#K7 zRMc|va$z-XV~nv8GBjbtih*-*BFmn=M^;!F7x(u#?XNK($JV8PdpGDdT3B}_TVDKd zr+KYzv2%eZn9$$fksE-;enaFAsRm&X-P`M{n8WYYLe0?QyL!9jt1V+zW zzaSQoaGxH;;mrqmZV}O6o&pZB;ws33J6avFyXR<%u`N&cJXS*LGc0x^BJIB>Bb7XM z78Udfe+8SrBhADS+hX+^NIG!0R6+XEn{VVBUy1#!*6*T_2Nry)U|wVDJX<}8G!qR; zYn8_WHMX&oD?34phikJ zwO0BC{dC12QH}UF-EL~z3xU;sH-tU;=`K7!CwGj-LbKo^t^2VrMerxon%0^?bXkmd zIK+qp_U*?VK;*jQKus+3gqbcptJS4aIWZkE89$NO^DTfJrx@3wnqWczW$EJUT2#>L z*gKBrV57A>TKf)C9`_`Ovv$Nh>5$-@dVK~|ODBG-)~|;6@s^h_L+{-i5uE#bz1l^n z(pu*3%P-3S+jHlo^i|LyqBj)L?hlvDuIPQLAH;(}`0u*YJl0if1yY23d67IOF@Gp1nY?`aUQg$5OtL3J!-`3C{uK{e%C*g>25MjQ4)2W?C}b z`^=wm8)#hD{cc>GF#S6C5(Ia9@4^=ji$B{rTf(35<(3@2pzp`w9T=x;;8JPz`AA9} z&?`o8`xj_|t&AS(GJvurujOg@k0J>I>KvhdT!Mj6l!0sC+w zw9eQo{=^46avNI6vtL;NyVF3WUCIX1uq-LCzyI~20;QVN2Jb}7uWo@i9`Z$tszi?u z;t-;99#PNYH0%38?w5*Ux&8S(4HVylUBI{r=SyTM60-rf(=+e=@u#g-vROPMx;Om( zHd-O@wR5<7V`0BR;h}RLbZ+cu#-R(NJ&O?e9%<84$jPKWfhXaqg7CtuNvy9UA{Q6m@3HkO-VB*lS!v76K7WI^%4Fq(< zBzPb_g284gw>u1`2Y3l_qE`MRhlvVBcB21BDH~IdlpbZ|e=C>Hdht`lK^1xGs^!ra zi2{gG@I25HWGsZlxDp0*x>UEb5Mv*{dvnFouJNNbC-IoAWZzM_`c^tmh0Te#t3CrK z%lr6(=3k%i^rkbFJjksdz$f&hKJX`UJz)Rd*@}VYU{8Sbf`J8h+|jJ|sZ~5tGj%WA zAK_h*iwxhMiOnkby+S;0x*!ScTO&nqg=yh){}2CMAH0nyO;IUE+2RVrLnA-u3CH`S zI)dx;>8>&XL>)K6yK(BKb*XCD-fbfd`hC2E+uMS^=t@Ud80>vUQH@0kxvV^%RfIWA zBCbH9b%Ai=&w73wC*M3`aVJ|b$N0adBe|pMz|CED@<#m}Ae5xs5k{VH_-YkzCqIN@+sdK!!L%s2a zYY_y_pTSKG_-4p}#G0r5HNXY;B_8BA7d>P!@f8^Z0Z-AtL2{`$1j*TIHITjaz1s}J zh(SjH1<;K`SSVYqWZRMLGaOPGC6TYHqVG6S)9)E_2>NOU?;kOZW34wX+~DtKR$87_ zarD{-TgwdtHO@c**$+)=}z^He)oyCmh=sD#-xt6 zVAxvQT)Ig|xy!!4O%RZk0MLA>*au~#W8~WQE0#Of4Y3fd0v>^AqAnS9PtDIkvnYXb zwSB5`)wy>_YdiYGkpmVNik$B%9eu0&&?lsMQ|QXz0!tf$wXgCYZtPp;Id>6NosR|v z^@eo1&Qh3}QNlJc+BN z%NT94PEp~>ZB7Tew}M6hQM6MG1jRV8l!1lj^KhB-q2+%%`Y+- zO_)uxABnj%zF0$r52BqH1-kK*w&=smRfVZ>lUe`O&KRDK?)LFbN)%?2NsV7wEMMx3 z5hQnx&eIo3qTLZ8?CqKHos2CKrWl=p6PsKoV9;s!gE(gX>|}Lt8ihg|W2_CY%-tGL zU8Anpq6s;Z>I~|#Cu3+5Ls45#=lCBw)u?6OJ3Ws`LMb+iYc8StNC3q=yq>0ZEN>qXj405T$MvaaTtZ> zrcMGz$5fMHBjy}Ua8hWO6jQhlzx!U>t?e1_VY;Fv}VVXf|+z(G$n?_*h7%MntgKaQn zVZ#=^xt?mvtSiM($78~l*V_pcKV51nhUycvpRpyzoNk7fZ@rHp7Nim0$}GmTkc^m$ zAyGRq%aH_1vn?&P**1_qREU`#)fL4|lbGYl&9*b$n`tL8d8@C~F|=&VN+h8iBP}*Z zKTR<;_oN!m=T|VLTncgU6*Y_wTRIIxr4X2QUY%M>0=(;{Y*o(z}adh=opQ#78G#$*ZimjjzC)m!ca>Ratr zxNs+$#0b>2QrqasV0y0hR3(NsOtmdlppk#Z#KiwKv2$^sR%t37TWcS;tqE>P9o)Ds zwn5RIpz$PaZZ?#-3DI{i(EHn(FTL~b<``4y&Z*hz*PU8D>?Zu*`2ujpC` z@mrd|akNMReL;-CY{ku(F7+{2Qc1LV^Z6sQ-K0Tu#XOGmg|L;%Sh3a`>xMV4?w9Vr zrT?A*`W97eD>5e}N0sp3@)^eX0dDdd;XWx9kACehGbvH7QE0o+# zir*G<;XQLJpR1$Vc50KqvY z|9zn^7U~v{wVU2>(`Ih0V>L2DTX7gt_R^Ln-fwlEEw1Zf@A4%7a~)CBq5K+`5FPjA zXx(fF9o@6$nj$2LAoQbsbPA!*uFW(km{liQ;f>paCcm#)?Yf-Qt-|2o9X}`>bF-#& z7w$6|VnB}N|D3$G%+UhB9-g-B9Iu=4;4@kBIDCaDiB<52Kii;~uDyHhvd~WQ>5`^g zxBUJ|$;XDB=9?6u_a&81pCwAikSpegIbVcE-!>nZ#62RCB@LR|)zWlZpIsYuavfNf6tZ;@ z(j9%~+_d;C4@WR1PPWTz{+aa~9qs%ZT*VdaIokbEz6Xa>NgCxYLnss{M3c}#HCDQq z1^i;DE}E=TzjEoALaj&)iA^}#wyxWZPTQ}Xzz7~}QZS`+C^ zfWW)pt>FC{-dbUIR{Ytz{Y0@mn!Nlq?8=zt zQrOb^+5u7gNN`PRh|kDZbL|_>fox6r!8Ed{?$Hwl8fcCZQ37XI-?GrVVH!{C@=@C6 znXOHpmC4f0{F6o0U;1l}fGl`gX;r24;=$(W&0!L}{af<@*c9<$tx zW6n$xHaC>tf72ywHQ>?f$+p!wbqW~rJZ4i2vtCJH(qk}Nq_I?=p9kD>WSiVbg!cn; z%L?-$bggPk|B-WA&*Qs;Cazvs6>1d5qTgHS-XuSkFiAJnImsMA0(o}2>DSjI!$;_K z*BAGmwPrpU6h(KQ^hZu?zEKEi`KGhUSQu+8FLGa^#JdO1bEzc9Rdt7Eiu^i>KX$>p zzew|9+z!v)oQ>c?4O`5wXK{jeKJj|}LV0&eY|OWRJ{V!Qw`| z&h;aO;llG@%0yV#@wnFBpHz)14h6B#!*{e8=b0HonhSqQ!mnj78@2PqCm)~*&Uy&mwMNhfuhE4M8hosXGT>zJ)QahF*oOJLZoUpi^cEPW@{UY%Nz zru%OF#_mkRAdIF?Tl4+bxx5cv)MWj=q;BI$H!JhF@2I0QC1Jzkc1X6#d-}#mmlOR> zNr-!+YVL<>&nlBXml+y41h;RNBKbu}q$6iNbzdhkqKaYX)xqdEbs?kFc+YyS0@FWz zT@SyKOTsyOY(0Kpd-c`#F|)Kgfps1_2t)iSl4Ni$^UXES$FWLI9Dihd9NI6J$0+pd zc~rMy-ot%NLM$qP`Qp4hxmA}SD8{szP2uRk3?i{De{Gd5Y_3i3e6VPX?rUr0{gI{~ z(iCYMk#(#6zbJ}$ z?UL)Z%n@@8C6dWmSYIl+KC7FAVK{A4+DWuI5|g69m|<>?ciS>4l)n_R6qT!gK3zRH zg_$=^7OSaxHMIU0g`Xtk~-;Tz5A8(H*l0wv#;MmE=_{t-r- zF~sOyn}0m-1#cNs$m1LH<}<0xO*&?)B&3kJ=trQgH!Y$=Xn%w01X>mEm(ieAjr~u| zcU%gZGHqWW&&DyEY#DRrTR+*e7-LQD7%J3jORX`?)$>f>g!RD`0!@K#NFCUKdboKg zn7|mHbP zUP_|bLN$j&Q^%p$p~sMDg(17peKn7v_|s)fb|-F>4Q?!&GjA;72_!VNb+Lw)>yBPA z#S1eD?zZjbx@c;hJHZ{pY*Jv(Br~^c(Ttb3e~cF~XUv&fqwF;`KI<#zr~TG!=`$GG zIDsL?Omt&1lc(R}lj+Q@Pt2umjJIQQMSreU%B!Ed40JBYVV2jJTc;5>+TN+>0N8E7km7IkwSe&MwpH>iHLjBa;EXDMdGln_LxE)r;S3d}7M zeXd<&{Ez-Db9&Ym{$3%*T*A`E70}DwOuMb?ZdMC%ny05b55DRaS`N=_O~x^M2zXL8 z+H*MX1WkdhKg{{m$`Xy$)S;c}EvmY53OxeDFulwOi#dtJz0GgM1KLT@N^l3NxY4EX=G>3Cf@n||PiMFsv zpp#`5a&2pv!|nw7uxa0@%_2p+Y-e%ki4HPOvK zh#+p%VF`<6>rBo1*!a+4F#=^cc0PEGhr3;Sc8qKu{cDQ9hB3F+b8Aanpf7Z#LZ;kX zsDk%AE(T@!Bxc6=5K8E?DkQ>ye;AEMwh)0^wVkinu)Bzf$y%5jH_;zUf&&%t9 z?9^1kRz99Vn}qV)>o2*}&i)ni8Z%~jWm;l$JvpB0+TeEQ1 zPmfu#CxV3@Fy1Bq;^DGVjj_GBzi?MipHuJGP($s9UOU+Fiq-U-5G6K+Lk7gpt;~i? zG}W-M9-Uu%xEj03R7N>t44#lmcgD0T^fmK-OmmsHOq`nyWs~OiVryP?o=LL}+3T`c zp&Q&;leJt*p!MPCe{AUmrn=e#-RsHZNios4Il&&Tm_xr;KM#^g!oN3F&lw}$$-0NX z9;;oGuWk~qIhnHS-Sk3ZFvW!)^ zD3@2wXVME@52Ev~2dN%5T2s5ctlsBU)$biA>>u02h<$P{+? z5b!L+>cLjs+gy3#GC_4J!adD*==jV7^y$^HlkAm@?EXJKKHS;^RDl(r3-7CIh60K% zPctfyTc0| z<}x<+Xs7F8&bIHk+y6$!Z}JV@=o@2`AiVR3g8WZ0p0m?Z_h^eek2fne+~6oe*O#&f*yhePVDMiTrz_`VV<@h3?LrFlEf+QgrFbwl#rnmvQ@LNHqAT z!>O2MF#>(LnLzuo{>FjSz`{rRNoXoP`E@zhbPv&#VK^!rD8{YwG%d$&<;9)cOHrF# z?x(sQ95))*IqRHwGA;MmhmPcD(LuqFEk1u0;gca@$__1^di2%q+ip*8Hp70kV~15E zGLI>b=6FzFWJyUc_{Vv%wR_r2)=0dXj7nYVysv&kGv<=Vp{2v5edyZDGQp&Z}2yXN!Kz-#GD8rBe~ylag4Rj(*v_{?C^LBy|O6#YZQuTt~w_CaCeH zY){R9am5rxKWd`=_wlRn6YiP(5w#9o|E@&Pva46kS`{G;Rme;#$`{Eb+}yg|w#lVh zlbd`gDk}9s=lFJXigoB|D@J#y19denC@Cf?HRDy|+fQuR2!2;CgL~mcpr2Crium)r ztSHGvAnR13caGFfxgF>ySyE&LY-rY+)vU5!hxr^KU-Q$F11Nb#xg&_{BmUvCgu@I+Dxti#8I7DrMFIho+OHRhX_fW%ka1Tcw_=NSe zkAm`(x~}clH!iU(|K)d(dRYGO@7Z;gMtHQ7Ev{}J$cQ1svtGYeRrQoOQPaZWhimQC z&+Z^LNa{BlzZWsoR6@NN^_^wKR!=??Rn+T{-q^>{RW#Mbxmknk_>z1u-2bKcDYNpu zKA{dlCpQ(j43eH)rLtiiul655dna;mI<9hFPVg>LJ#5&fE-vX%YvDJkl+aI!N&FrG zzgdX2Z{9r3>kk1x!|BG+2k?(X&La&!@BYk=u!l7H&-LHG-DgMinPLPvk`({m)awu~ z{2?Sht^Q|)gV?S7qTSvIyJuJ9p zm-=sSDElgGoWqd(W5#N=Fx`h3AGpevz&{yE`+kgV{g{qESg2=UeDtk^F5ZxGH& zJ<^lF-_sDR(!pn3d*2cw@6@eVJc44v*AE;GY9(9zj z`2fyQeiSzkHc`_CE|5AF8S&{;w%5)ojnL4K9B^!kPPg^Qy9H{r?2NFA>a;`GUd<>v z+>mr!vCn_lZnoMzJv+Le9Wg5ZZf*O&eSUME*tv+vej|D3h(!KcDS6Ld*4lc-^|OAi zT*xW5U>SqJn2QNQvX-YJZtE3G?_L#*T}_fvb4#3Xc{_%3dbYxfl})%58+<@sYY^eq z{(kVn525x3Hpy#U*H5Cc2E7eO+(R9TcXufvh0;il11S6bI_J9P8#sMK$EJT-KXUji zf<6&foYHM&QM%`#snMR3JHbHi%3p)-9yoJNMRkgstVKJl0V0dbqxL6zg5Nc`ikiSVGuh9!2ZB@3=t*-6RwsV{JCLQfTuDpqGVh2kAdtawi86`vg% zMfBp6`q@r*xmnKVq=^fJ<1XqcQJPZ6@_QL%#e1<&PJZz5!{_Gb|x>+}8nyBhY| z>viAPeO=Gz^MU(d11cs?a`~2F0SH&(IBQB)%Ed8e`t@Jal*QuUTcV5dBZW^8R7rTk|y?OGRzW-M;};*UWyOI7AMB0Jk715@lsvNe@Ry zEE-2Xtvnv+=#Tiesc0MNx}-AdSFi*Q4?44;7SDp2U_iSv!UXafkCqe+3ZBrgr< zWlgi)jm10M1TY?LQ6}!R2Gb+MLH%5+3+s329z#K$lE)w$8$&{zbKI~gh4X_`jY~||SFdWeqq72J;B%ab zQ^MENV~IG7NuX`7`i#yfcFT2_PD@b8J7yhT ze#ws}oj2AHia*5TvMNqkyL4pv9LO=`ic7a;-HIN->X?>_Au@LzM4H1DzslF;@%tRe zZg&j_340S)cp15Qzp<(tVia8n=kxH&aj{o8B4m=vh*<)Ss}F}g5`RxzyWv$&8%+KD z_y9wq`gRH|y1zBlxkLLGBBcRgq+>o%z3yTjTGbA@9?~B`grMG~i0U`_0PKgit&m4! zdX45{zwAyj!;`i4y%xe8k1qoerFdd^sWzzD9ft?QpJD6X9ll=@e-ruGDt!ua0XEKy zQDEpSb>a$yYq??75HZ&e+i5qX*#o*ZUeR4zdm||SZ}gQEMq9*s2}k0-eu0AgTL8ZK%{-+W`gt6-1rkTf{=tD$;R{vvGg>c zfEjBJcPE}_wCEKh+a4O7eHLq24E%w}=Z&$DQNVHeyGRM97ve%S)^e}|I@hR zN^F^0(!w9Wapj8Gl6CmY{Z`-_(F&1)O=F+U6cj1A_i3OD_>gw@DO31w91&+Av}I@^ z5)4H{OKp7AChX7_!r&=A?}_MtIsy>G?){nyk`9~5UlHmvo-o4fKDK7d!exF|LFAXH zV!uCBka-Rsf{P)McSbsr`Mxlj$`o)?6Cx*P3ctX+ z>Yo;(2W_$Z!o|>!T|r^}ATKTO0t&xs+gG{}d20VG7i0Yu@g_{s@7KO*LVe@4-h`=} z@Sl5~`nLs7+naOCW_0Oy7d~q9R|t|I*$aNuY$~n&MS5b#}aM43M7wQC~?*YW5aw3l`+P*u#rplX$aZX|tq|Dw%r3Zx z9jFL+WM;2DvHS*slM0P^)yO5d&Ceh{jVgfUR{vVZ8~#%eD{2J`-fb>VbDhSNUA`5} zDlnMCDswH5vn0Ukb|oz9(ligG z1Gtw0t@n0?JLss^V)&4{fji&P)6W^#s`yFOZUZME;|OUQf|nT7!xloA)eQ?3bBzzK zB$EV(A%y#A{cc197u3M_R#}kN@Wt;jBH!?)jXCvm!5&KK!H7pj_*wCefEhVN%$ME8 z7ErRLQEs*by_$uMf1IazEh^I3_~BR(7oix*R3`UXY0IC2WYA9Q2YD=Q1Bild!$)mD zEji7F&5bl-9MyR7;1aUG04jp_!;o!je7FYzKu0x=^&ImhN2y?302 zH^VzfH6U4uVCrn!yP&`JSsbJEeh=oS|0Jq5{p#KfDt=7{$AdLIFjABORgn?euj$ku zpx{L28fp!8UplWz`wHx1A-t_ZZFl4X)-kCk*uO;=P%VFSDHf;axl1G6e-^l9f}q|IfA@gOPLRL23JovN5G?#sf4W=#RpOuz%=ZKF#h zL#hMPJlQ=GvdIQPVz<-J9C$h7+z=clF^J?IGs26s1b}DrrJfOp{Np7ZZ_|~|IlW_B z43tRV;;cGE9TmlHgIfTDPJRYHF`#66t?!e zAkDM=frG_1d&Nfv)_br7Y}X(R(HFUv7f&F#cq)0yz02tud~gl4r$8&`K6yS>wEsU! z-p*Z$h`FiCmfL@F5PTp<{pjaSGkgI#yt=1#z|8i#6KF>B>pr2!!-X(XQnEk~KQr!Q zXI~$%8)IF=y_?>QLGK!0D&RHC<`ZE=GZYBE-9;rQJq{uAz(jt}$(*WVaSM&Tss@l{g6Lm3X`Bg>U5MOT^hFmG{ikMb z#nKErkD#z8j=ZBc*OzoVkS{nE*em2I0+GC{riY8+;`YQ4Pfk8|n~FEas}4vYI-fW5 zB9(Vtfc?iOuGE&u*T*dUVCqEe^Lk95#jY12>;qh2)lbai^SVN;E<;j=0jpuAsx>|9 zORmW9eh0z&Tn49U(uNjF+|-Is5HR0mXfcJ#pUQsq&r<+7PCbg7dB`eZb$xEM=7|^@ zbCRlvkM&hH^=ZW7hn5yYj)GY8C6Epb4=f<%__R*B3j zM)>Q3%Uaym+|Q=yU9rB*uJmhs-oSfpKmX?RSSS%fgt!@2r5uhOr^wS#M}UrR3K?Lt zV>Ohlm-=TyEQC&MJY-=`z_Zfa5eR0`O!6grNjL&g z9rU}@P{3Z;1z&ru&aQ~vTK|hKvDsA}j2Io~+9nb(=%o?m zd1ue2v2TmP;>(QbBjQrk+QYcj@xOmZa(I826NNuz!SytZtaivY$*$_%{woxcxh@`Nq^ z7L7E%d-0GtRbWW!oQtfJBY;QBoKzX ziy7F)qJY@2Z$lT1cYif}*^V=|xL(fALQ5>2c?aLf0h@cxBTMoa*+^YsOh@bflT`e$ zzo(BXenio%eL7n==tlkNOmGG#opwnnympma1us(h2Qb|I*;H?8231CqV%(Arg~~@j z**e89Lk&|ax{DC+B-bi4{lSTJKJDqp_!4e%9kmv`=4qy@;{@kRe3=Fp{eE{LAKG8g zn^OqMx{e99tc)Tp-um$vugE`30w;^kE^&f3-+Sr=K#IzsVBHibE1L7IwUpUxYVF-KeW^y zb_X6H<3|v!<95QGCOsp=ce^N?ekrYy@|WT>FFV$(>u+BH7Cn_a92$w9xxy9 ztP9vm5=q;$>_%hq(Etmb9z}n?+uv6m6T1A+k!*d!VyMJ2CxDUe9ym7jiVGjNRz%wpojU`(ivVQG3?YM#c8TorbKz%<&~hRz2Kt2e_(Jz#;otgPU614ZNGi z@y0queCUW|;>;D14T+F1CfLR^Ql;R8kr5_1ANf%cLr(Jtqf9~{MdZSn!Z=+&`IzfG|g|K)04J-QBiQd#X>@4TinANOK-&a zs}YdY{=);#xLO`UFA2^!d9@bLX2z4a2(|DhpcQ{`WTw;bDmWLNU?b`5HGVl=_%pc? z6Dy&;ap#U5_@cz)582~y29y2ra&ss+PjmD_B(qC@A#!Xxx>D5?k76j;IArcXxW5Pk ziT|O=dkKKd(RY109e?X}-Jwp-Ru#rvq` zL1{PaHuNbB(L#*MRehA2qfd1x?AS}_BaKPDE1 z2r&GBwIG{!}b7?y~bkfHppv=g-wh0qkSuahhNK%u; zazC<<+)Vd2JmxjBWQ9q#C+8d^g;Kl@tAh#1WNjyQ?VphiIdXAcWYcYIE5GW;v#tEO{txq5 zPw$1m>bH#NXIKs1W+C_J4*HVy5^_~#r1{8vUORGhw~#76*e?BhGGMDYX&=Iil)pO8 z!IU|ub>mfMUnj90i)1Pn_3w)c(wn<#Z$vOd_Z6{_ycGFZ%Ct%(v6Rt&o8IzDN#W)6 z1x0_`GZ><}e+2Z6_L(9PjCVV`@sI;)KCtEl$#2QSUT?6WhpvI^lI=OV^s-4E!fq^v z=zO~!?n@M|EJmtN9*RVbI}=x@lOBGHzJj7Gte#~PHXx|{LC2etA!~>$)P2E=3<6F7 z^me9TITb#Tz8#(XE{}?*12|Hc6BEtwHtXQfWMkwoV=2NAMC;wY`g2XRdCL`rFB|Ex zrr07Ch*>I`Q&UgB*~!H?Wq8dOT9u3c0rW9uD?4ak_s5Iej4nNhkKf6}}dDO_}diywLUxtl0(!b)o^;Ec?-ajrNG zOhwPI-E8B!lj(98*>umegIKk?Ll=9-|D;SK@=ers*UJ&s#3=pS0aJd@E5u4(?3P&1 zAaYb5Z4>$@lx&~KZx%|a8MgW{B}&EH^z9+T)vsOR!Uk7zdbW|Qra9Co|45HI^r|aD zp}q0pSPT*Ow8Cj8BA=IciHnha)B0f4n`~{##2{5hlGfqjAgz8`M1XwMv27%;h^R~` zSZpHO(|zr36LDjbiJGW*U{z}GrQkeTKXEZgBjNA}yqqiV-DI$Zq~SO)9<&-o((phH zjVn}s+j4J{+GY&6x5tznjV+`6-Q)aeOB>d#i&5}gC6=N)kI^sN$0>mW(kbjn(=ght zjm?HW->20>toZ4h!9ziXH=T)N^Yc5bI~{cV95K+*Jmuj>#I?Eed2nMde!JMuseisF z;s87iH_%rIi`tA3CyD%qF;?BgQ2JCEGSY7kJ$-Q4WujHMfruNu$Mvqh{Ko#QT(@j4 z#cfXz4DpsrrK70~-UD?uodHph zboV^il0yu=X_^;Bz$4>oM_{={<^%0i-QAs*-llZYo3<9_>4P7XRxr&ITS?Q{h7o{nM@l7$!Vzt5T4p|B+zs@;5n}GZ#4NTzVH`Hj7b#>u} zLWtVuVX98-7X8`Tf4AZmJs~YLaMbRGjFLVqJUdDb4ounVt~%DN9}!UIm zG?c%er|n9p6ZbWhZJz?x#@Pf4d2>AL(=sHc$R6|*XCe2NuM!eoOCU~^!LO-t2M0|_ zTI(VP=`D^fNrVuu9!??m@^b|QZ)I`Ua&aCiC)EJ=JDOs*UL;lVBDeh4_-G16U=;wF zB*YF{2F$~PukRo&hl3LAz#8l7n;KQ9oP1vb5$PA$${z+5fX^ox3T~gLr_ULujBAW2 zv0FC`qP&pilEqq(dcODOeEsM&Hu67oix4#W-2xwq-P-sC2Avz>WfF^~`M-PGWB)W- z#|7KfNU5qipq_b;Kp$5OaTPuax6kQxIJ3>#tC*XpLVWON4g}`ZM#iP-%A<9St9h!U zqe1^2V)4O8IP$*?-Ze4f_USjFhL^7~Zpx$o6!va^09^s!t)%M^FQtz1Z-6{*;e-Q_ z^(`$6$Z~?m^cP|IpL_KZt`jKd`@`GtAKQ6$iBdN8l|uN;hkV!bsmTosil`@E(iK6e z_KRT5HoNPyx>{sE{&M=qdRb8F;+2B->9zD6$Qf_NzMPgiebAh0lyeR8v6b#YXJZY+ zYN|~7^j}H)w8<2svG~v3sj{f8Bb`|4HcUn74Zz*92!laNu(NJmtQTD2!RESOFfgYU z04r?omr1UR+}Kw~gn7t8yrZ9x2WKDczkVg{d%Jhou>7`hmbAO z<=aZ~+Ap$|WK!*%gUBDqVB-VXjyyL;A66nZ;wjgIj=rCM#Z6{}_2kQBKKS7dK`_2z zX1fR)FDzMyMpMb(;Yd1g!nc!IIOmc@uVmgkd1{kEEiI4E_rT#JSt@_2xc*^Ga{81n zT)67F5PR~QDph}bas)R-f>-?;{Z6viH?-g1S&8xzgHHU+6^H@Tbv}^Fh(frx`Cd49 zs?#Al*Kt6Tc!oIr!XGZ^&eB_qX?w-pnAM%P+8y58Ksh|cBJ@&lS|{OZAH0s$L7mtO zer-!IU9rNv)7s9+|^PfoHOP2OxJX)LQ>|G$K)AaI-g8U&(No`EFQEmgaGyj&>jMv^%hEx79{up`8 zEZKV=ma0lkZK)Gsn+OzXd_Ffh>DdDGUI6iRvPx7=@UVx(r>!LW5AOEkxdFd-IF}&f zLILSXsUIIV#y^rw3Vg6(h8@#A^;3D~^A8Q!YvR{8_AWhswk6$_v=~F?acuds$}%4? zDs|yQGCQid89N)Ktw(|`TgdT{$Ekq;MXxvojj$!-m zf9rNx1igIQ#^i1^c4$BlQ-|Jw6o+kzAN|NZr^_kReWvfQ0<)Dc6C3>vhS$|5{IdZi zv=KJY-EcRD;o}?`_vVr=3QG@3$$X$U6{%)kdn$o4i;d0jltZ{nJx)K!^EN@6mQh&D zxBGlE^8JrDpQ( zevId<7vGS=bE*tCgY3p1)AYkD>WE45^127(V+5U|)g=?CW5_|02aGr=!^p-u`p~@@ zt7Cb_yN(!GLb?p~u&=_i*IRgaZL9f^-tV8Bfr4M&{N?n{+=|=uv{g?4#Z0EFg@13@ zT=B~-BZ<`{>$JR3ci>=t@17s)dG9+K<@-`@BskTqYoRhva8(NX1S4c>Un6Eiymmso z$*j!ESdLrV6^+ngUS#p}QX5IiE~7COOvmEQl)|ld{}R~CnO&Lk=)JrBlH-Y`?p~Uk zFpb?F@Nido1=sxZlwLqE`0d0oz)B|7cuCzuxQ}S+q8Qz_hWw1A>t~6j+sZo;U zF<(k>4G&pg9`kP7-k=T0&<(k2TSw7C?c@UGj;ykol9NAryvXtxsAjdlWvZF)y=tK9 zxE0tt!U}xIV9~aJpAGmZ1}U7RO|c+%n)|2ng~*P4YpC>M0T3cOidxWL;E7;ouoi&K zLyw>@zMQt-HrLqv3EC8e3&S_+-Oa0@X8(9|*Tmr0b8B~PV1j!j$QW8>Tb<<=>QamN z)qGaF-vT63QlfUjL8tcsa}R++zi|A-ESzN0-Qp+bD2N1|2SKz8wGi3Z@xKH5 zcTseHn#U$gS$DuVjQ4Ft_4vEqUsr8Ue{KxZh-}`lq3`IE6nggc)JaXKn29mUF;qiauGa zer9kMj3=&?=NW~*XJ{94I+gZ`e*AG{QiXyWgMc?h{|Ytph(aEh z4UY$ihBGv2Q$tJEk3c^-m|tN-E+B+4TuroKU4a%`D-^C+;v&rON_e%5=I{!sg-&-5 zm_o-u#sY>{S;jI}Jnhxlw#1!wSumhHY>lMgbU>a->WMeXo0rSuIEGK3gTSbE&JaTA zqer&`^{K4$&{C_93LrVbq7Pa8hdy(Y(@^sK*vh(N#W+#YV*X1o%SLaMbR1qr$Vlo_ zAAYwTJ*Rqi9Q!wg?-Tjm7O`7hG6!I~D^C!YHp{t9(G$F2Dn!n|tO7j0Jv*RSvs6A! zBe+1UjFMhTWNWDPCTZcGO@jAawEkGGIUBmks`6f(t%8mACvJyrZYUQuH#+#TiQYIVZ%Ed@mi{ma9=PtBK zA(t}h)k^kez)~RWyN$G{Mf)g$Fs>XECWW_Qs9X&E)P;5YvvZGkshC&N={I?_AUJG% z6FFm!z&9i6EZ3K|x`zSSkQm*e)S2GvRZ4g77ToA;BnmiTo zy5TMA=E$)cHxQq|Bbe2%ys)lR8%o4Ea%2wui;;^mqnQhli_MFfi;=-zIRAAnZ1ve$ z1!x{sZq|t74?Ma2ZObvwj=0V9LFAgN9aSqT+C227ez$Qg@6_1>)eR*)IElMWljqrH zTixtPUo%wexydNSB4JGO*CN%qSSe&e4!od!6)+D=`Sql2q_1CWBmS@Hjng_m1FMfa zq-;Crg!JUYm8Qknxp>Tk2sL0sBOby+ART&|W;ki?Of)IqW@W$Ja3BQEj`N)n^kMYA zauajvGOyN7yCExxprM|xV45vKj_YJ~SEGC+=pP&-fJ3>sC_xet7#!zED!VcQpw|MPlkkS`Sd6D#|7Zck5uLsc))N1whyw^^IjMCZ!NEE(pP84fgFo?A@ zCocty6WT67AYA?^OMea-<+DotY@arjY*BAqa;WWj~Wl^9L6oN`#4c0##7%9nhzYm62^~ptaP13^*yVE?t^@=$t%co z!q4VBsDb8qFnOm>*@Avr{X0Ti$xbY{N67GHHa=|__5Ov&aSN!e{9O5Rx+6{$a|ZOm zyx8C!Em!K@pLRp?3U?LMTb@FjFqJRf3SfSAc|)s3xc5FttQrqO<8MZo$;EieRd2z{ zyUqc{$)XUgTVUQ9MG;AR;iib!xTs0y!5I=lp&w&k1LGI-ljc;_{ujzMQS`|=rS|lQ zBBWl5T<#lZNUleOh3T~7J;VO`t()sc(Nr4sa^_@LV#w@`u%?dKM~P@a3&s*yJNpmv zYAFPh_fCAvU}vEBOmr&ih3C@g5XezZ#Spu5*e8%Dx01q{#5B?_c{F4O2J>MfkL>{> zB>rMdQquu3baPZ3Tv(w!YS03{n1ki1A+YkSocg%1^v{DJCCM@!gfm-P8z1sd*h(ZX zDTHI8e6$@D8hJB4mjvJ_uo|EX}gxb{;9u&ThX4@ z=&HigiDE%2_;cg;xMCd9xrNi0j)7?FX)J~3?dPScmfKgCsT(lV?HqhyPfn{)Y``WL zJL>%Uh~?a3Nc_mY-R)acPXX?3XULn>LMwx$?P%eTAn2Mo<~}bsS*KYQ@*48Dy+|-a zm}Nj;H|f1CYjI?$J0pgl(Ph4;z1Q-&f%$-nRx0VIz%Le^t?(hQ?C9hybbf^m+a9ox z>}3eZQ%`_L%AnW@jh%h10vU9sRZ9|Z6FE11`aqB|EdY_=n=*s18>E6n;}L0TbkQ1@6!A6e8~QZHU%3vH1mh(6a+D zEcNM-gPwz+6A$_JXLy#$VWsdR#6iR;#ff_hqK?Dbd_D+TdymeUEonOGfG6rlLiFWk zW~cPfJBevvGuRG&C8c_X-(fL##ywM65w3Mp&tMyVntPM;)cOAiJLCsx$F9H*}zO z=y>hu6N)Q4X5aE-2MB2(%2e))0)_D_`{wDdpc#|Qd7Rf2QaQtgjoS0&CuiQ+baoa< zL(PvYIg`co3vw8bGM5hI9Pg6`9jsId^!iIyB<)D&J^!=jkr4aa4e^>HcYVn{8FPw2 zn>gWAt4UC79Rh}j$#&ATLMZ$#6&w{te=2mbw_PCO_M1F`Xkxdr2)5r-DUz21x6k2uzoA(U}3zHuc}y39t9-gQx38T-K|R( z_2mTizvoe2d`oc7_c=9+`Wpe?xUdz;}@}H3TQ0 z*wYe7w3_*!OP9PJUn>2;0L2h>fxWJw$9WnjYKh2A37?RR$RlTHnz;oGWW(oaIE__7 zggmy|j$0^=^#xXNMf_OKuX=oxii*vz`Ns75P1#&34Xx{^zRO_>!e*EH{C2Hm6i)8< zXO?tWtpOu7rixas$vJrr=fI-9aK#)u{5VrRc&~*x*b*X#e_<3 zuv^X?{TB#MOT_6Fwdjs4wQBKs)0Can&)H1}0%JMnj~=u(>TEz)3!^$O|KIvXjB`6A zIvRtdQ{TUUgwrrMn_jZ+d#IV^-^5MUuhNZs${hM|FBo(We96}Ls>qPCm*^V#2D|EX z(S!CS=y)7W*UWjT{zJv#Z+Oq*X0|)GBBk_a>`}@Hw+hM>YmUbYt6HO^~G6{qX@(+PTT=>=xffyq7Vhgt5O<2PaR)N{=p(^v_!!u4z z3}4KgLA?1IQuibro-5Bn@8zM=)7=DTL%c((TuyT)E;R5Bw@Ecq4nU}7`YM#LO}C#i zd#L@~(gq+apemeF!b4xR5t9<*4>COp7k}G}=q>dl5vM08Pobx91LMf zaIiQ=-FtTR9RWDa*H-ovS}v@A@wjM(G4FI>ILn`hgxQ0Kj$C&nXLyDn^I2gj(4gBr zY&_lxGHj22%Mj@Lak^09UVZz_b*x$pI@Uy0AR7r|wty6ea#)aDh+BQ3wpWOpr3lIi zGo~1w``Z0haDv>GKWsr(ljO%{R!}cZEBSj41-0p$aAO@?Kt@)QTDX;Lq6!zU+Q453 zps8XT={DvAo6JN+NIi)+A0jC>SKbIBZ$^+CY<8MJGPdJBd`h7mu8>~Fm3?z8q-VTt z;cy#)0F~Y&`;%%!M;(93p&D1#1-5?I?7Rc@)a^tn6UKbJNW1r(xmm+KJ?1jBaDZaY>KA?+2a_Z{b^$uSCATnkDN~xT=9oULcJA; zm0c+Z%tkOYS@}v@aBN5Wyt6{Dw<4Qi;upbs`qg@9Danjb!A#Tb+8I*C%@E6bwQHen z=8CEc-egP}YzY;Y-bTp1+vdEo&R4UZ_XS7RQ&$e972=jZR8Ga{y=`WSQHDd4y;j;C z@*B^bhjcoRt=k48jAaXWBFJ7`MHS5CduXwc)3EYw-+(9RLqY*JSryyhMRPrhY{1I? z*M+a1nk{bcooZwU3vr?`+c-^dtuVgi?PxFWN9_(DwA!_?vegT0{h}gWQFN1i`INvn zz_DcqC+c96y+udVFW96MCb8n}$@fAprxQ!rkC_=0(QoO^`$D0M4I-xPXbn+kl1Tl! zFh(|0(COk%!c_Z9i9kaI#dZg>+~Znv*4us6-O`=CdsH`ntPUXK&e;IOjkJd_<#y+B zdvBOd3~zl>Enz$QzIh0iRazMTaY~d7QE|1p=F}VI68~fnP0pOcu;$GU2L?m|{X-04lgBBHxM7?hiYve>O8j=22pd6>Xyrd>hi$BRO2 zC8Fdrbp1!o)#TBMX{dI3(3jG?6y&cD$6)*|cFPAGBVq{j)d&_$)gnz2>VkN9il+sK znw87a%g`i|F;V#o&C-btpYv2V3Xr=jR*$`HOtXEJc=i9EqPcAn)+=a@0{9{*VzR(tEov=K4sRe5d( zQIH3+tlW9N&M%L%kQZh!-tM$_ayZ`xBYdnAq&J-8I+Bs(1={9eFBQCo-Ae#4zXeic zp!q4$&R(BXN$m#zAF@ypd{^5_ssIJn?Ebv-9D0rt>Ojq2;eV<^W@B$o0vKTg)Xugh zfiim>!frv6sv@d`jV%heQUBrOeo2b!mA(8}VCL<0+G^%QEY)0mBqd1lznx`I7T$ZE z&r71@3)EDWA%gV}irTao(`hXLtYr<+mkjj*)Y0_TiGtiTJCAHo#*a~{@Snzp2Z{47 z_^Y~~?~0>`yw{L%j@z#~!xeT+1Jsw)DKPm+MZ(JR4(uZ+hDXCOPf$d@wS{-~%cF}2 zPpyI)|5g5tP)gI|KmWJP=Bpos2bt`qt_AAHALPPmB_1&0wC+JWxA zDwvWNZ$p_uwg@ICwc){-7MZ^XqqUr>gYEDx!BzFV6{gFN9@IkQZ{%O&>!LpJ9t!Hy zD7K7>YG&5$+fZKAmzINrw%uMh``tJ!{078Yq1(nJRc0RClk80YX)`t^vKVwhy?16oNh0~{*)jVP?RAG>@|+QWf{71tx_RIF6i8t7He~1Z z|EYxq$l6q856)pbz zg<|^1S+y7<5?E?$QY04-lw{ON+LCDY(8Nes$Z!N*b2<{n{Oh*$@I5W>ME6bI3x*x} zhP5L8_x=-$Q=*nE`0n|T(&y~Cu`t7c6iyZc%on(i{ao0EC;Gkro615>_W&+uSk84K z&g-lu2L`z>iiH%Xh)|*mb>WaG-(LWpubCa`Sv)wY?Ht{(6hHRw4zQ3Wp0OvF=T$>X z?iwr!)+iE=UAOo<3j+EEKasd%`jKF$)Wt;_V*QSXpIceiICo&7Rse%SH*=T#Y@do7 z+o!qU#UMvM?TyjIw_z^2_GHzUU&RDB!qaW{-2L$B+n$xhFJMr~ zsZ9di+hDJi>RhJRYV+7-a8bFPonJ7Her9@USaBab{LjA^tYJl>9G)q$trs|j{JZA#xMG^+^C2Yn|B z?hF|4Ky{yXe#cJ4ob-zy+~kBo!eE)Dh`dRf;=J^B{(sib- zJ3g~$C@9&SA6u#e=lH;9#L_88YksVjwRmxwxty4js3ei=BaQ^(xH$!W)f zpj!G(Gr;S->IGL#?j%aR7h?81!EzjI*%X50o0mi%q6RT<}(0o8{rdNJ(j;vwU0|3`G_<|$1IEL!hLCjqkZhldkW=NpXi zFyFtPynWI1{fk(aee+0}dMBu<61~;$P`o(t+|F-)KggzLfR0uUY>Pyk#t-c)>=ypp z7fc{{Gx}Z0zw#e#OFVq;4nk(M6T-w#?|Ox^iJOtyuQ-mk5fNaSP=FNvR|Wup%6o?ZL~`zqlhihJO`Zp& zOU#43ox^tCv{%Pf8=}h~px!_dh}@BRDUPAfzk|tu8+d8egV?g)P*WTu!TwgYXGXuS z{cQ9sh(khdPHv}2o87a|kXycgq;pH*)~k62?lfS7R(#*sAu@doGl0%%1ZmNbfBeIDDZW}f414E@MZ3yXmzn0lcu0uQKs z6@+2kC^)i?o|>hx$$$2T(`r`cZp+p^(cds8P>Or}gMwOIyJt(^32RSStllWxYeD_YcONk~-$ySt zn6fbsdZ65QsK;O>d6SdSm{Ql zb!w-?t=t=@c*!bLM*FLnMQ2Ov+8;+5uN6IL@2#Bjo4Nnyfu7?;7BQ_yBhFyg5vkD` zfPs7If$lN1fHs6agt`dZz{;;$AoD*a5G--FJ4=f0~PtF5`w1=G3p_LH7>!F&~t2$+z{A*_GK3 z9;3uJhGvr~mPqI1Jq|eHa*jMIr*`eRVcm7t{`ilhDxnxK6GOQzvx3MYF3)`kuSn{d)mo6l8E< z*Bf50=kz7yY3;(0VQk0IO$INc6GXDOtiBq<_)T|I5#nUuBM~u${h$^?1dRONZNxZ> z_F27Q@C2sYufPSs{vEv~xA0$IpNFAUae4--(6f;Xjx)h9x zqRp1?4BVNS28Ob@%{(wz2oG;Uhp8_MOQn{_f`0{B8rb?0j!vHhi{PwXfA%RTo;(iK zfuom@Z)QQYdug~C`pGLO2I*raVHlfi_hJw-_RV#KW@at9i>F6ReNQ}->0Emq;VJcD zJUi|r?e09!;A71yX%mRzmN4D1s*N4;LX8-hr4dUn*rWd2E@&!>e!_gvwm%BaJ;O^a zB%9wmU>MnJ@C1N>tGbffG4(wEYnAQ7tiITvi0rfm?LEqy;~ZhtvXHt5wsB+iMbt4r z!9N^2{vE7bbI4bB+$}LlCbO+W~FL)Ch7Ram3qOCo`Vay+H86BsO_QrZ`&ISDd&Fr zG%>~O3hb|LfOz3&)OnBWOz`TBdz?J+A5aT_8erFxOw2xF3%+zz^D(N0Vg<=t2 z!btTep64MiYpXv7Ok4WGI%rK#(qxKoZ2frQo$%GNI0KxV`-Mn!SRe?F55rL{yS$Q_ zv=R-?*AL(r?qoaYd|`21;=S2$NO4fZ$l~8gMH+*!e<-MbZJvv9IEq_3pRtP{d-Xs= z02`F~i=sOQqk7n?4B0a;oJ7qBexCNyKsEky7$`w6REmbrm|;5*(w*^7fxKJ}7czoKg$x2eCsigoQDH(IFLc&T`|0 zyaZGY0DJ8H@(tO5=?53(#Gwds4;>bb=gPLMXemL^3*N2;MYP&X&Ljx4WJhz(HOA2{ z>{zICl0h*-Fn8%A?MY#ZAio}%8{nnl5&2&QK6*7ek?(g*@(YcuJdn}qATmW|T?|L#v}24C3=>8G|tvH33&NOwbnREFVm z0AZAft6K5k8s5X0|9lm&_mb`%hLSBBo|@BXGwt~5Y$p_>=Z_wISIHJtDq59EK6YNn zQt%=?Ur*!fsz!K+lkFpbCK@LXje;Xadl7RQ^JgWI`=gO^81B%&2Aw18f6|u~vU9?+ z7;5#uknXmxPk!P8^?t*YFZuifpyj?+3@KEd(-21$s4|xE5LU5Jubp+^6&LnZ_W+2V zR|+QCecuA$j;@aZh@CRGP>~Aw{HiHjFWYObr!bZr?G;8>;PwH<;Ds|FvXA|H4BUSg zHDf7WHSSPly#obaT4XR}4g4FoOTVmrfe&7gJ5G)eWIx_n2B*m%vd*4&UjBMir($Fx z((`SLoaY_iT&M+hB{n>avh^~jYQ8Wr1Xm(O0p?k%A0IgCEJIhD=O*++t5-bW>q<}m z5e)+DQO?qR#-cHWvE_bY8XSx{oru5&;x|rHoFfnHZ0_bE-wO!?{hEv6)+lhge>x7r z4295C+co2rNG}$M4@~z?^CC5EItAe%$?2g<3`{vtqx`~H1>4d28^O@uSiNUYPJVK~ zfT!I9)U?rlzd#Cc@-dKxT^kD4ME7g+ozpQ?*!>k1aNm{m>=JI+Kw&UO`ej(D{G7#%cS9p?DLf;JWaq z>3WL`lZRM{c*yS1GyuzP$$M0!9LLeCGa>$x4no0Wom+Azt~rKgQ7h4mh0cGLZkQOi zNvm)(TV*Hbzp){{wizV64hwWnAWfoBh{EZhh>Qy zQepxxEVJ;$jUvA1UFRyN9q?Dc@!v4- zQuqC%5t4|E zvp_H!d)Yd0c~Qo2Kq+Yvz>IabDp7DB?7OwGQkhXr;>fA;Z~2_0sbh|xWf1vWcpq0V z^Etioy|_cX$b+o`E@`dxb#CT5ao(eC4YSb9D*#N3%t^(?y6*9?UoRUHaa~6}B+oT1 zASsly`%W%^S9i#8>SF;^2h@0@HOj;al{Ds_fm7<6``ev&FF{+?*n5Xc6EO#-3g zn|6E&)G7oc%tz(E=QwVT&tn&+0}=-aZaKtKhb9tmwOb5?Falp?fCYvhfR8EE2Ihch zDa!YZLTD(z0Qqme8|YpFU|wM~_aeLthW$S{9UL%yWBX%!K@DC#bQDa9C$gZwJry#8 za*r9>i5NXmHn?Wc3Waue*4@OO+RYl@Z#?*-eJ3-DWM8@URKNDX?Mdm5-2rk z2t5_N!BN+tpfs&)to<@=drSmGbsDcyyXxg4~ONbAOe*bW@$o(*Ald{B6#Yo|J z9J^#BA&QR8dDA_-&0OW?Z(0h&>GDz_xhBffCtow^uR>#>;R!$`|A`DvDU|)!wEWN# z2*j=XD=@kh-2oEWas%j?>tMBThhQgbZvnBwZL>;1U&JUAstb|Qf+G;nVy}CT%XE`h zp4Q`$3TFA)lW^E~(~Y6IUjvU&Z>AAepzkA)f7yy-gsG8x5D8;=$G&}9*uQQ&TGUxK z8@O2RIN0qAODAY5q5N0I#0(Rif&F&$;p7w4)s~N7H!+Qoa9w98sAWAsL-GNH#@?D0EKt zi0p8XaI$x$K_ohzlW{tzWK~9lV<#Qym__DsWRGiwQcB(5>$uX(n307Of(!TOYuLq`!nNUiAA+gh1eHjc{+S3)fY>TP zRd62Y-;bCrZLQaBUDuB2A}9nuyE=SvS(kY7=u5He+Am0xY$gA{Ja~;|EX5Q^0}Xv&hg1+<+#ghbQO((|HDf=!bJR!ejmRv9!C?E5_X-$hSco{W=C} z40W4YP;4vMYEJOj8{ljGfT7{~VGo>C(ynjg62-FVrzKUq$!uBKJUB`SR+KmNvzd`TMNUp{`cM0xs1&OjK6AR&kpCQiUG zJyGp2mj71YG#!K}<(sPGE#KZ^7nl8hW_Na8Q^|C-+Nl0| z@!&uA6Q#!tdecHnmueG85%oQfBpZEgq(euMf^(I3MhBN~PV5J1OC(`Q#W6A|4Kz}P z(S&0s%K&QD3HY+v5sQtr#8bPGDN()X&5;$-)a+Hn@Kv@0+s7f#i8%um_YXwuT(2`# zgDtDaGNkLQYGcLD2K(k$sLwx)RZ7lm*Ye+5icdvax2&9&HV< zPuowpi9ED>H);SJYv+Nuq$ACtQfhE{;Vch4$hZdRHZ!UQ*|u+^vaVL~@)Qz}oi(L6vCasF8vUlXOo^1H?lD}#<%tY-+wsN;aCnTIjz zz=n&>P=M18-7Rnwu5Qm+%e{hxkXOL_c=U46eaXBG*K%2x5ok2 z)oL{9Bw7@HW(`@%S5OE3{gnRm?p06aP6p1X_0!|~MG4eHfB@7oP(#~w%k$&D4btYh z@Z&X6@+e~^2SJ=OV;CR*6jt>U(|HKr8VanhID3JA6jE6hhw+lb7t?l6#GaG!X|mVv zUA2zOonyyVNb8LuJ$JFB`U~LhHJF0jeg;e>?xCFcG;vTCOj~NQQSa)%tTrt4;XRZp zcs@xK^2Tu|sc)+vrt!HQP8F3xo@pp#s*+Rbt`ONLa@>o>A6JM=NsId|<3&WXk)X=&%kv z3_=2Rt{a~8O|J}=hm-24a4*j5iot~9!O8!QH6UfEh)Ytq>(w6Cu#d(cp_rXEzK|s9 z>LHtrw0H)ssmf6bx5=|Gys7^tNrsvd5tG&=H5Q;T?Aw+y!zl9f%6TC^n@t_A=kU5C zC?#w8{3iDa?p`#1;iu=;;e++rvwE%2gPo*zpK1JowGXpt<$L~;k`fnIJgX%0<1gar zFWu7Vsn>gh1PooX|0!vD8roA?x&-c;5$=a162^gbmS^(4=)+xu~6Ws+6|OxAj6H+kjt8^GX`iTFY^CT;|dNenh>QjD^_X6Mn?I(#sE+L<+)> z9Sr~s0DpI+Hd^U&lOYQwKpyrKN9OASGS!8kaUMJ#I{2#3NWXW@#U>P=rLDXeegxQj zOZn$XamkjS&OI@@D2iLEsyuS+5mJBsd# z-m#4lWsminUsRdV8Ea-|r1dlQa@C>RXZp56m+4B+>b~WVa&Nk_&hF#;(dKl$i7YK6 z^=ADkoDYsyn6oc)u;Fba#+a#*9>u+oBeO)cWxMjQ(GnGy@8as z4cIF~0aGf0Ch)&J`wtjHzH1R1QkLIN`ank`-edHLrBVtj^ydpS(x*;i@w8OY#kG{P zNu-u-axpE<-4=^4Hp$fI7u>~yADHZXnJT(@eX*|V*LleQBB>l_E1H*Zx9EGC$MjtJ zRDAGbWQbK^vT{T?t-yr?m+ZVDZRM*;?SN-Vmg;)oF!moF9m^%;6q=xu8wOUwB{i<86 zp@JV0;mb*O=rF5*U42q~4+lQ=sqDS8l(}CCAH$xJ&}u^4r4~=?p@sq?Va4bkRC?l- z2hjvm1%7@fkLJNleoeyWvHr!n>=@kIPsid@YN_i-D1^RgpnXs=w!yX-?3kXwL9Td;Ng04i`dMTiz= zw3=KiMH!>)pw;gKL>Am^RWD3vxJU zLk1Un9*PF)C6!WxfFw?f)OnCc##E2JbO^adX`5}BjWYq;$?q8koNmUTwV-M%{&vs#Oq5GVYxqiE|H}5 z_8Af+7zw|yMnCMNH8)T2Y*e%>kb$`?!hHxo>X_2T-pQ_ zmVWR9oE}h3;h4j5#nb7)Bq2)hrq)mELz|J*amfR$SVln zo4gKh0cMx&I4Z$n*9i{PjH6wa4h_Jx&Zg49miY8 zBP<sRGjc>iz6*J1Dt^fh>!C@Cg7*?IK^tFV|J4hSV$ zENPs9AZ@XqPnW8%<}h9;WA=}w;P9dW+~kD4qd|q*za<{QN&6gAY{nO%NimlLVxdUIrRh-+_X0Z~&A*O-79f+sIYi|$Rk8fV9kb>@1^Lm;D=qy3I#y^v%?Kw zWKc%TdxMVt;@MUp&+=TA#D0xR%sdH4wVX$KC#>{yvY7GMiFhmAXg-rs`tcr*^)9pC zV1pOHtmqoug$x-kr+Mq3joUgZmWXYFsrN};q1c(fPTe|Rsn&f%^0rA5XqWIvM~Dej=;1WJGc~d5E?DT zpU};03`#C;DiU_$sXY=2`(jX?NWDbN$WUQc ze014Cc44GUzCiN1c}3vp2xBFtO|6TwTEjZ6tT5{2%kb9_F04rT>s8=)kJUamv*JkG4e29=&&Jb{ksF_!?;E7#NDzKtsNul)A z7h5}L+xcyv)l8K_sVH#Cjg6iBk-pwHomYw&vhkCP!WUcY$Axkp5X2QjIrUf|n;tjq zE99C?RrJZ&hdUPU4i-9;0%J5R{I+oqYV*%Z^j6k?mngMn?~C)eQGU(jTst_t=yYu~ zmOvFJ9RiCU*yRaGtth&gLkJ!9W9EZcKH?hwmGL<*-2vEa8~3xY^>tJ|5in!RSPf}M4E z{iNZ`r}b&}o6Pt@(PiDEU7tPu{#j8tv$W|@I^Y@QS9fQn?#$7@?bRGic;Png{WqlJ zl?U~wdGLZ$t+p(oN6rl_Rl7%!qsfnxNcQHur^jp1LN=NRUqwbK>|8YtHpsHWl>aGG zeK`gkeRGgKc6C^ii|r%21wPG5RQhO1Zlt3u)rhf&$=r%Qx~TExco=>~V!00=@0nbhVhvhAji<;J#OXp=5U@;0-WrOuQ2R=%BkIYC2bdypnoSagi19y*_mZWcV3s13)*jXHYz zLZf-bs|`R1=VEPX{Cy!DAGK%wAz6Dq6G$3aIYfj-FHfJl>9X!DXka_S6spOafC*aY z+-w?cq~%X1ZEJbEGNVa_BCCVN_2mTCzx8pG zHnw1~PM59*FTUz6?+^{8cC&Tc?eG#qrf^!0!^-CQxo`j-)qegl(Hy_)l98!vsM7kx zSkRPKz7;^cYW=d2B3W?BoLI60ZDNq$>CquTP7hxE2vvy2HG*kQr)Pe#XIt0rMAA30 zI+_;~%!pSvPb0zYZQF?_ZXo$sz;fF$mR18dVz=7<4kWS0DB6(>uuZlT)VjutX~2Bg z0$Njm*Av0X1e=qEXnuBqG$zGh#k3mtJ$O^RbHGbb+;9QEeJ0eAY<1vN*yx9mFLn(t zBXoX{hu2iCwUtwY38Bx9c76{o6h+l-JR0rbF0L)3Nn1!f1o2`9>Dhv1>vVE-2}BIs zyBR8t^&djTnXe5zstL+M1Mk3pEeiC8?bhyOpmP%#XyhZzlh+PnRr6o}VW(6Ud zrc)<-I!eUN0-yXsg^293lXZaAoPWk)EQ``XV^;}P#*w>JuOG~p3~C6)_tCyixjuf+ zKp!GF4d+_7qOH?pfnxa_Yfuqjr_(L=aNv*J1HF>-<_k@<(l|aW#%kkuqNpdVZVd25 zUzn9&D^gT-zmyo4mr`5>7opI(c4qv8FW!JbRcT)~1h3_D5J+}003Y`<7PckQyx*<8 z{&Rul@X_TbUV5y0n>DhqiWO6UR@fn~WNi7?d*?+YH$$p^aAicxphEOS4uKkz9jec; zG~E9=FAd{f-pDx2DMI;xwG5SnxcWa}7H8p0P$|u7rqMUKbU~9m;~Q#Sf&?xNcTqq@EX70jUu|@8SvYzRo~Y&d9s5i>tPVYy9(WUTWp*rynmttu zd*OvzYmM;NhkDgK@uBH1{m`t>_}Vtmgc=Qi2z%71ohOlWMC#U$P4m&8@9O`|RIQKs zCpD&T{xpaX#OS{6kRETDNHcGwasCUs;U%yWc?ET6B5BEAfoXma)J45M3?uR%I4OxN z41(adwNF7)Py=h=I(NpF!lnN(;}hgpfI3oa@sKo~+h&Qyr~3k1riHV16e+dqFB7`Q zin9(IV|VC9W|lzgF}C?F8Id}VD}@A%svM2c}Mli3Kwmq9)O<}tSAm{)lz#hW< z1)v+yHhrGF40x@7e_SBX{hSZ9)2D3koxi%Z>@wek)%<3(7g#tIj{zn3yCfC{`C%~= z^+LFNupI@?Tm#$Ph?sJ4Pb_Q6qJTWfV8>Cz{kcd6wiHf^vM#^LcBlaGDh9CGa#3ziz?)c2TQMb|$Il_s#_HUGM;U zYlWWhjaG?&>uS-}ZUpZ7#uuWZl$0q2RLZ%I;*0wy6Z#U5jkipSj>D$twe+v}BCwXO zRjhqWpQ0g&_@8H;Lm5nZz94e{3@@~z$Jhn$fl#Vo6+rRul)<-CA#OReJgz}8YtV9m z?j%)|EQNJ$RO>r*A6HaKX|39YeAnf6?0=OCw+1gP^3#p_CcrY=Q3GVnv_h*|bhMJs z0fcYVafr%DTIwA5l>mKw7s%?@yMv~LRDE&@ojp{JvO8b=0F+=WAt+FAq4_x-q1ZB3 zCUn`4*N;lSb633;KDe6=NqEbv-iRLX<62()a?GN)T*{F$o%Ff`3>T5_MG-{K-@b;X z-Exa8__+t3y68vp_jYtwKS0-qJc3GZ8(SWXW2D!sZRA@R;L~n#;7?vP6W6Rq2Y>P` zg6$Vk5wQ?X$m3qJ<_jm?dQ%Wa$_7CMKb}a0KBSo3J}* zT~2TUG{f~9qa?u&rbjlJ4m9Sgba1xLry!RRdZ;_w9i& zS_td=3*-`?lxG0t*Z^Dc*FM(Y0$LHyVfYVwVS<-8 z3X1pu+h@Hw!^@v_kC65woU9CByVkq_!6%wlzF33hBlWs&Rrlo}_Q9Z8J4Fk`?HmeG zl=XI`$o}zlMG)lK!|)d&k}CgiG(ELb1lVj}`2oc~qi4j7zSVQ4kr7M)OP$miaYR(X zOC3m6< zS;N<)vHWc%+&I&a%;YzWDMjRaKe~2|3pvISS!fnxT%@O#I`w|$a?88N|^m4 zxa5~Kt_!)7Ym*!S?|0}E%u{qB8mu@rAD%?I9m}*s7F_aJiX9FUeF=O)MXGmLi*|c| z02@C;Ou6|BE;2t#GQHG6Y0bzU+ z>j#&3V*&7j?KJA~yN}A8t%netbf+p=)h(Iv+&ri-8h?Hz!l62N&5U`{*#sJ`!P9Ub zr-ZL#Lta(`Z-8O!YBG`8_rNpi`1sB2;b6i&owk&cB4=Kl|7r#NLw+AlAG-K?d1!f4 zss0n%j+}fh*(-Xg96VOrpL56?`-Z96HEUthtPY3XUB&yq!F@1=0?sN6QUZq9oFBGJ z!u5aFoK;v=D`FV}yE+B{ud^qebO^CEvZ{gbsEk}9<8N_#7z zpWP)SF9*&Y%IJ3{>Ve2vaRl)S@!@}^J7S?G%N;0yOG5#R7yRVp^ix}b5B16#n}b{f z8kRrjdl|M%GZK$vs6dz~^a@9a@C(a-K#E+51_n=HBHTzrJkSN(hjdm`V4R|;b{`0S zl4{IU-mkx5g1Pmb@s?{!c#&&WUG&wQgBKv6O<&FA66ziA1@e8~*XC!_ZC4hne|XY) zKK=4ji~8fsA?5~Y6nFW&w9zu(VEiBO^RkwH@BZ{CP{Yk=S*)M$ZOBGG29nUb5vicQ z!R1BKp8t*UXYa1Kz-lo@yZ{8mKlg(CKLWsNPRAB5HMe3RhCnoJ_NNLWm1GnGf>Ej8 z*)WW2sDMuuJ5@+Yc~@qnUx6Lr|NUY+mJrLQ3E;lp$D_FDDa-ab3_1>{4K|t(3L3>r zmbH)uQ5x7+ZFuLh3;6N^9zlH~Y3%DJ42q?7=*YrE1Kq{oiQ&LaX<3PD#wv&Gp3E(&nxE7XrI*YIA1P!=#6Yg0S@N&yty zsG^4UcKzKN^zM-!ETf7!1jFmUMr-9W1^6db2XeohM`}rccunC~>5NP*Z`I2w?+n@D zYi1fA>+?X>c9Es}y*YvX`Qa)5lY3+jGv*gPOX0UZwTF4a-NJy|UTxM?W~TPt`Mb3k zZ6;IJxFnbXGj+QLp?0JLctathVI@hDSq-)rI0c0-d``JEHs?&Eg(Xm+eXxYIfEgh% zGv>M$SZ{-TN)#3Su9X9P9W3sws(FMc|7Fhu2G~NeEVu*CZGq zdCd(bv>S0XEiRe69$MIz3X!1Eum1Uq;RdGzf=8cNStN;)O_r$g?Fj z2w1*9ZF5dXxVa>nhC|rFc-zOK%Jz=Rn@E1tWs_nB)(| zpaaSku%S=~ZQxLFa>{joB8W3pumj5>1M=^1V%Ah2pH}TC=V$r#SQPn_<%{p!Taku^ zNN48o-wIvxH`QJ|6kq$K8%hp%ril}iyuNYtM191lt)`jVCISchjFHvTd?^2!lK%&4`F?u!KZseM+8#e z8jb?p)}`M@O-o)5ymeglcQAC@emeFvoA zfz9h3bzQBZk4(E2(_t~e=?R~8BITdD008ffNS$!AITNAoB-(})QR0)cXa6WawP(U) zC;$elv*-#GYB1nl8BoS`aFu6IFY+VllQ}@Y8-!+DvG34Ds%+KC0{`ij< zeZR*2Ru;deua8M6Oi~2ifdX{(jAsI9s$TnnM)}^=!E>XA2_c8EEg<|*IJg_`(XY}J zZVO%Ypp7HUcjafEfU!`~KnE+CoCeqav4uo)HBit|%*N#`L4ZLcfyPCU_w;C>(FbkY~`*92O;>`@QmYhusF3CF(lZ8Oyrc+^|Nkp#Ua>%Z)RPJ{C4gp)|ba)l3%3 zf(dU+h6OXVSuK|t@4Hq7d1IwLq5rSP6M#TJG1prlU*vGKWx=RwoCX@MmK@mm(cqoe ztGDo24`}1&e0<*2HOdI)Y7+}4{z=4*9xu8E*m2Rlf&1HP(6hf_Fd?nq6Ohzs@qlds zz$$z2s(NKKU0jN&zb(sc1~jDnC{$T$x2mSm(SL@2h3>2QI@|ot^*V3&BV|zAfn%5c zssGC^C2ONGh^>fxEC7vBj~`ty!-Z&k8o1(%PiUDn(iEB{ zvpI}#Mt+H&Oi5=FNL1X2;)H!lw!heIFXwI-3 zSR{E9!1=5#;vix1d*>h~X_Aq%@-|SRj90U`vOg?l&0#mHAZj*cPcs!MGX4A0wOV)j z=1c>6_m%albaU4i!m;1%aSDTw6Oq9*b2oo)pBa9m2^uAb3sOs)EkJ1RJz-~XuGy$| zy&L+!u$TufN(hnKyFeCkvETfk!qAkV9vD2gUaSTC)JMe>Gk0$=q(l@~JtQIj1##rU z39{vx2=Shm2h-jkehnu7B+cS~T-`&}$n*~d$zPfU7M~moGzPIkl1a{V%X#2$w|74_0La9rrf34@Uox-e z+ONd_{XSe?vdkR+l>p^>P#ADQ9FFoyEubw9rWP;-AxL1dC9}dzRH1K@K1So`yhGdd=T-JDREHoU@HQ>N!^M+y8X^?RIezrNA?&G`k02tIf0 z-M#Up4c#fN zHpE`D4X5?w{F1MC`6a)_O0_m^k|Df7>OX#5VG>tS510|#gMMPtM-?Y@Ve(qnLFkP4 zlmhU8=jx^j?yp$dCjSpz z^}&^Bvc2D%d1S2;V@AJBge|?r9?jx0ck z*?j`dTrt?a1Q{!JjpJ{;=uO!?I}+TOB+*nYfyo2`Mn2{ZgKp;vWcGf}=;dg#-Q&!1V{9pK*xHM=X%X0=lp8zwe0Up{{No;Xkbso(G=JbkX_qQERocujy+&AknqoX8^n`ow!xbkjKe$z+ zI>9lgjsl5VBR?WRf}8He$1rP7qZ2yc@=G$`olmfwe6P9%?DI`$P}oHt9UvhGWuTWY zcZC*ks~6r7dX@Ann@{mr0E`mMdtsV7iq!fFIyC1NopL}{C9@Vi33kUbO^`B1__@t1 zVOY<~>_S#vxgN2LdeX`z6{u*cyx)#2h^;aU2Otjc9^hwnt~3HjSaG%BYPjLdlL}gD z{5YKC9(+H*qlAmv$8H%TKz~JxV4H%B9taOefdv?(oA4uIO5!s0)ox79cEO4qS-b86 zRiYpyRgYpc%W1%tQ`LgN02%PuRS%BI5E~R`4I$^i2v8j&EUnOVEm&dkISlf}yVK)v zbhK_jj)77sNM5I3LC?K)R~}-NylYNiYutkQ38!AuxQ!Lnr{C4P@YjbI?0@n=V7eVV zwcl*>m^qXZraX%>oulS1ml8052h_C+!{?~WL7DJV2+-t!?HCS|7xU22S2Nyh0p1le z`Uo4f`Lq->^;Y?Xn|bo~U2}}4r2GmADLxCl-3G(kIjZQoRtV_=>aGoegc(1O0$8^S zR~!8bMyze#nR7SMEjDeAEZ1T>BU(=<_KYePnoJu zmBeFsegtJtFjF%R1tgVW*0UAMk-KG?ss0)e>+B5pme+w1_rr9QKWBQ$9>|Sj zxAc(ChYH`x7>g(BYE?iEPj+jNC!^Ep-8ikMUvU+0X6wkaV@bAm-~L~_DAVBpJt)m@ z6`WJD=z_zLly2`S7i0tBqF8)Vp;b0AVzGLT^)WT*ogw%qnh%RSGHs#~mUuq^cn9OL z(8WaE&GGXjhR(y~2FS}92b*0=7jQ}hB>93l0#p-F@)CVxQ=XgmuHdP<$&0c$%mHx% zCM(`}6Km4>s6T+3exc8~IFOC1fj(G#s~_E~2S>EG85h-(-4bKxFtprq=!}?Vg1Q_d zjcbAd6~eIB|4InCf8i#^Y;bkxf4@gUyi_zQZp4I>Atv}8KNd+Ynae^zL5@OQ!E-^( z@2%klq^J9VKb}bam+K0LvF#yhwQn@^-_>OcF=O}xts-61!gRheQq71ekj19_;s_Xd z$Br@nJ^ozInZB7Wf)MFCIdSMVbxl|CPfFxT8(PyhPE`6P=hc&PH08`qJ#_S`S;|M( z{x&Jd!9tH_4(%=xMODiMng%wdzl8h;ym3iv_aVlN$?V9aT{b4R0o`;nrVpG0>5mSh zynBK-4l^HJiK1&Lb2CArb)Jg?cu)fxWz7FKoyhyn*yIp74^9Kze7(I?PM@**6A>PG zAF3y*e6#~9!cK-0Ovjr`qebxmpDbA9IMG#Gb|Q|cq? z3y3}-ohBKbN*Utk7IFim%tt8%QLW7$^mn@EH(2oAnrO%00A`)=nX6e#`g05>nL&{- zDl{eMChaUs^l+i|Xf@%|LH=-3$VEU3S+laCyVLA&T)@giDREHYnx7%Vmvx_&r&%Av1S$oQ5E343x0r>TMRc^d*%|y&W4kq8FMDDT`OQjoq}dd zRkppZOEv@~DDmZRTLTU%PZ`od!|FYF?v>JR48mM>t4Uj$z!2WKVzyy$Z}7ejdp5z! zfz0{kxEI}A%pCX?O2I==Ivd@4f068GWK_6`wZ~F~aFwr9H!}s`4_Nk0i?vTxuUh-!5H8*nCQ{CkP-H`5=F9;6>t5S~dxtAKIbDo)v)F+NycK3I= zh4CJ90Kx*_IFuHV?*&w&CgNj*M^BC+W9}YEz71@-Ex=u8OXy(vVSf#y`(YsJ)Im1H z%ng1`W=?L9F{|jpzyqdHlL?C#WhWCvf}#9=H+X?;Ut9qQs4Xdk11E>0%%r!h%$3#0 zq?6PJRF)XUjQaDnAnsV&vngnZ+>*7imY}Or@F}$|TRW%2GuFi8sgleb&e}TYI2b1jM?ikA;w6y>OkU0sFp$rV zdBifUH3-m+4?P)?^mGF?=m-RDo3wtbGRn3~6r_|I}lhFcec2B7|p3`RGF1SIx-X5DxY+V3`gx zuhbvCeY0s1&GJx_|B3&Je5=zDAyJjmBl%9oNd2=5bVnA0=OfL}hDIy@)^5<)96z&ASow~`-aB=<2isA9a3ed2LYaMJs&i=QoU z0^ybUnz7qi;kGffWu@s5Y&SibIF%s$MgZv|tm{7%;C3Lopr|sNk#d|RrU`g}DfPtN z&X^oPuk$#Ug9g7t_$+%3DoaEOm{AHT=Qwp#qt46P-u>&!YFEWoBO5WQ-+Sqcx9sLB z;`yH&0YeQkgde{WZdUiwwgpRw4F3 z6LR`x;3Ce!U@FdF@eOe>s0&XOeb-l8LCcxz2kx4Gax`7{r@VLhRoz>5(||nW%sz@E?^y3lr1%!fClA zhkzsvY;JGtB)A8-+#?94Ny@44Qs}*BLX(L4_>)wqNq)6O{y*34#+DhBY>bJqfYbbb zr0&3DpgIk0!$c68YlGeiFO%Wrcoo;-fTnLrtVh4G z=uFClYI@CYdQ0z6XbQ1=$$4r7Whn{y36kPAkK5>|er4c^3V?WZH&1N|8IYz3`nZDb&1!}Yo)8kOWeOQ(rMD& zKWE=BN;}iJ8x}#*jQe^si27?rE?V^ zwpzNtv*lmjn>rWBi-vc8LXnfOuzL?BrRT)e=jQ9RO%q=LzhA{ifKckMd1Huctd4Tz>8C@$>t|8l_*5Q9%hydlhsd*k2QNg z)dHwtK0@J^Ww5saM}3JvfSV~6;oFm&v>DB*MSs>iN_;co_IjA!NDG)JGOfhvbJH6i zErE<>F}y|2a&S5BkZ1Vl66i%4Fc!mf5(L6R>PNY>A)uw~+sdQR=gEap4d?9#PGYaP@#H;UnNI zd%8veoveL+c)7A39o<6!DTA16E&;j9bTE()^jjfUWJi#MwqtGM;y(=2n5eXK8X{mG zotKJL{ekZ7pSsw0#g`od3iuxWsEg&9%DqbkXQTms@#1;Y6>tk7^?g)F99h6vfPq;@ zI1R@C*^*Od6Inm(nAgX(OaoAH&R07L3b5)c%oKZiwsm?`1=9JP7a@&LUhceUYKbyz zgfbxK0<*L)3v{C}t?uNcCNtc--xD$$l!Du&*@`B)vHS#|Scyk0-~3IMJc5O)k~2ru zAbYhIr_LVa83h)J_Y>()7B%ccE?vFV%4*I=RiocsK0Yq_!!~bCbtDEq@)|8Y zQ&)$=hTPiBU#wQFIm!vqxR&R$k$Z4x4oe0bL-HvdNRrv;T}nSKB@x7k&WO zWG_R#SiTOgZ>}&vH6}%xkZeVP_a~Upk8>JnS8E_@X<)fU00L9h$1v=8>C86tdj8v} z9V7?DT6({M#gy~)7m)kwD@oDmP59z4@WoO+x;XJt9exKLL16&kdWqU{$ zdE!7ORw8AsiQJ_LvXT?|lgk<0Sp2YGftl{q0AQuPFV+rfo>02nAIJHQVcb0IZvJt9 zUB@Q@{xrMHZ7bC+9;E!nSNO@W;Ps`w^7DzC*1aA1Ke3^>-vTRAG2<9J${5a2GYp307_-(#E*K5N8%U3o7sTXXcpPME zVmawoq0Zs%9`9CSC%T8 z(*slv@plP^`9|N4LTxI%)tyR8$vjyup$}Q%Es?coAsJlis_$cgweFWNf>&Rt%LX5% zELy26a~-)BHE*V7VHx`Z%zUzM&bR--1l#X(IRE?meL+B!o>MYEx5a~ZsQ1$L3wn&y zTC#)ql7-@Vq?Ade7rqjl47#^3`DJ6gcf4w|ZE!@s$^{4TgV!B>TZxa#9((P4GwjHi zImLR2sTel?m%Bb&=)2=B`eyPYWoTbFKOB}(URwHyR+BmciOy&4g9hVk<1S=hi$zGo z&pLI|9PozScQVfo#+qbmW53pbprXw!c@)Y0Zax#a!2&$F_pLzKjWTyz1k`j8lmz?V z%cJU|OyW{WPso$Fl}1|s2b$AYCVaQVqnkN#>XKm)P4?#oggaY9u)$*KlnhBeZS9w4 z$rTmnuZYF!5Kz>Yb znL$+hd!W}2eFfO_&JJn-60Vi@3OJC}?_j`y&|O_hb1r|WNv$Cv7d>**!f3B0^aq#4 zQPp9;AJq7QOL#O$kYJG!bUkde@@%Jw<@X$x>0 ztWZ7(Tt!dbnm6lx8ghMwK2||178P98VBk33eL_BB$s6h0)CiNsp2KNc&Gn#Mh{%`C zmwIkA-N110|2tApq*I?AEXFh_NY})5np?M)sD7+>DHzBgc8*~gGkOWYpBob0VD|Jl3jjD4 ztx!=OO9frxk23&mUxhXRGE?L^r@*%>mjf2Nnad(-k>us5-i6a&AFdFlc`4uN?}zF$ zPg<}iGs7s(-S+~d{+!jj)NB-4d}W?DGlF8~ns^(C$6Rib%)wbAdX#C6uZ#h?>NxyB z>S)KWyUh>|P+1!9H26+BlS&r7#-(Opf@^MhE*BbM|7Bd!qS6z8^2-dk#WJm}aG{V# zfn;oB>_U&C4yIp9&TRNvWvP$v*%wWyRJc4yLY^rHxMlQjFZ{P;ephz-%-qw(YOh*` z%KEP}tOp;*+nQoCVTOVEl8%#Ot8*z8#>l^#fb?t|}Td)~B zL5&c$7?sS_~uH8AYk35`mSn3*#1-J!o&V%IcWrNVc(*fi~OVx5Apjwnx*(L z7N0OmR?Lu`NBY*XorS24NofR(`1*<}Z$ieH2+K90!&pg+O2{)Osen&$9`lftSG)do zr~5KP44-vjfKO%Ksb~WpY~S646)dbro4$lxJ(H28wgtJTj!?pU0*(6CHMQ&Cu;jCb zo6}&J%u0ElR>8avhyldbKG^nmyxx!Gw19d0R4yCTN00#ulc*$P7>$`hcF*m(bHlL# zdwYKT+U@BzuoN_;i92@gw6rjziZs+~xcTG78v)I~`{lpehwU8%uvPaGv%)8uU;a|^ zwn+1&bIq;kTy>`y@~**Gsd1cyAxu5g38UJ8A&j<_WdIgc*Bi9KhGdQj8@({?z=*~pffL0SnxSQ<`^{>hc<&%i zF>SPcxVUD(A+U8E({ajmv873T>HGY$T*9D2v5&LwDg0vS(~>e|P!z9pKja1l{0~Fm zN||dO(nKEu4>-G}c2j8IV1F=>YBSIk@^x1b4mZb;%fnUAsMD|2fB#gNtf3y6%#opH zn^!P%>Up5z&OuAB)6)b;9;^c{O7*ppx^4jQIfl5FIJNXtpzmm%b_Ufu0irFoF zo<&~VH;5bec4;vjePU>8p!QnD^-RQ?BAo8zKD47bYOvby-RD$ja25(vMY|~HWX1*q zLiWD>J|= z{zCl+Oj~ztz>ryc$W<2I{kr!f{q>#gu!iRh;8_S$N5{krmSVPxTEv@qMVor9YLrj2 zN#!26p&+eTllqXa2`1zbPwVwS`x``vBHB$RNQHry5p+2YrTRKM(snX7j^aM=5R?py=lIF+KUMlomCQw|F-n+0J;~rds)C=Ql66ZQ!EUNfdmabuK7Cg zA$o}>^`2V?M2VEDum1Nv1ij1O3k$&1bqe-JVO8e%F}6fz^F+}fS*FG$>G z?=;wofI`ep_*Y=NRt8A4ek|i-lvW2pfLT2oukfmrS+t{}(A!G?- zCi~Jt6tXj8%_-YhLlHA5L}C<5q&mNAI?wN)^E%ISIvq4K-}}C<&*%Nd8pDT+EfVbL zn+SoQ(az!wWr_SwpecU~xlv39|6DwiKhQ^KtN}NC7S?sfN^b+@8I=raBz)xzO_`C@;KF2X`H+D>QU#r< z?@<)B@E8jL7iuvaU2Em9O6XK*9mdJ9n5hG;)z|S7Z1x$l_u6moEcrD^WJdC-M}BcU z+ojP$>%VDKFEIhRld#P}X0{(u$y;Lvt}wf&Pk)7>Q`Sn!4G-N%ZpRwXJEymTf|G+= zzMd{qAp>mE-4tBx{mNz=3G=$RRb-&w-{5|1ViMU_SzL5EB!)*ptv~USu?XyFHxW?w zC!dlPcitEn4TWlZRV!rvnDUMBu35%~+`2WYSiX^Vh^?rUn87{28)QnJ|H?2-Q4uNE zHw@t0xn|WfD0lKX^RL3PU`p?SYtx}-Rth_(guAb-wzWTcPWcd`7iLk~BC8;QZu4E{ z^RY1SrEw$fyn^IrEvEencu#!P?nEsVLI?7_xC;7JLwy;*%}EMc!9r)_6Ue#{(f9Jk z-M&U_3Eo&F?R+i}ZF=tAn;0D0@N3!mT5PEUu2Wiyd_O?BepL3V$tX#)iQXP zP~lkHf4v4`4TJl%-gvLCa{xijq%iL~Kw#0)-9WXtk|3sqQ11{DH$AdqUa&})2p8>q-b0MreiHW{~{CHypf(Od4)@^^DTic7* zJ}_6pS+u5(-pcsBorPW5{CGu*5=QjZzZ9eaNizasBAm5Fn8a?eiJ;?EL;1F!PtXn> zVg&lmJCSE_7`VH=2W?qM$8UXMCg)cdqa}3MUp-XEz9T>sMxVKRVfq5}D{VQK9>7*W zfjKp>#m6LSid%MAAMSBtr>r6VwhVAdaG{{0AhQ3cC9eD>0DJpd;0!oPs|3~NXegLY zmwli=DVSDE5&B#LwS8m55w!Z{i>YYEo#nxmdZxbSh%yY#?2g$Uyi{-aIA3wgd`a+p ze%h&;80HiHra1WV()Z-rwRGGG3cfbc9HC*bGyx7(5j|CHOPqhMv^&rB65As!yScuf z0Uhi$pYy+O${Y;UL0tXP&Kuvd8Q(Ysn9+x@(9WroXlAhlu$IgWx1MCq&P%}VmAEh? zm}b{u@V@m5k_x>8_3+ss{~bOJuExL#5XS{CFM}YB?->!|NHg|r*yxs@;6?11=t4Ak z_H>EZsoz&FHt(}PB7JH~$r>vvfG?h@f4)s`7v8h|X)~JeMwt7drv8&AKNt@-2Wjhk z;FV@=p#`l5t%rIWQL8EcIEeSbh*q84>EsSc+LjV9gFZMA&wS#eM<;Ah;dLjCat+V2 z#@!pZ4PT$Z++ulFNhE(pcS8{@ElT0;-}eoAVZDF27|8D@zsSI8-xLqi9UzbytzwKi zmmr$y^U}H}<@z>vkjBPGOPx`ySE79z)ZsLf$zx?-&vz}Xu8g2ZAJRjohLu$;Iv3^V zYuS9)djZy(@*P&7z&ow+Xe4El4~ zT}!dvT!*b zAKYWIZg}^d&p-HOM*L%uw= z4}j1&ckkG7tY%do1RGCJx>-%l!O{mRJLjo3f82WzIW$woH+&N?J-c;ZPs*2YY7amb z%@)##Fl1eGTv`9!+kLfY)Njf5x#nZ)ByEe>Ek5Pr1Dt<<9pAgS+%GC*oWydCkr*I_ zLKy(~L&>z^Ft`t+zU{fE1W-#)hv?0DJgT4^_)<=H$w|7!AH}Gl$8Y^k9i&H1gAJoN z>^>n`50!p_OzAu;{9XKcWBqGSe_95GS*UFAch>4VFs3o z9I8Mao2_&4?<3q#yfFqLy=4W6PEkQZvC4o(Ke$dcV6qQxqet>%f(oH`Ql?GtN*_yS zyaM{6lqKc?WoG@K&_@wUSA0$(F&SsnjzzpZ<_~*`k9DNE<2kKD!H%1TM_w$U`KpLI zEAYW=y`HKPNX5i(9wunqPcnl~>anN6d1LStTnov$tk6V3MI}+*s??|4(51eK+6a4# zj$iryUk{^dzs#c_y59J$n)VM3R$ud(Cp}fgH2vI_Y6!XWXQGe%gujye0^?*?K_WCv+UWRW31{>qj^(a~l8Jp)udx z>I&?>?VLXr_9v45dC(4aR12MRqX+GrQOBn(qdq@*un27Ap25cXZvQplWXo1IS$44W zBm=X)q85JfjayNeuxIm%vZ4YxnLu8Duwrg6Pry`WhZgH!`y*vm+ae9;6>Z#to36AA zlhPPH_r7=p&A_%A$AzN?P~R1P*g#Q9a>u)K;AtYHg9P8x4NV9&&z)%O?5u+ZA}Ep} zC(a-3^zol!Lbxe1E#hQk0JS)BX_|_l)NX=>)^1MOtQIsMC34}B_xEIMU2VvJRLH3e zh$TMA&8BCd3(@23HTaB4WziNx{s2g> z@+L6bHh;J<;2Z6vMTAwV3@3ZgwOV595too?|L2eYuK9q%pQU<=4ri^(1lSyQX}Zyk zi0yevZ)iC#!$mGN`ZDlDzH>%QyQ=G9@tP@6PU?9$I<3f3 z!pneY!1w)B+Hcae@cEqEmn?pqXIl1Um#bCZIkk*U%Dtv{U~ZH9G8jTO{SuDAE3;kH zn&gHQ&9!WoV=F-i!gqM*T+`9eSIk)oq{p+E&^!v;MmnQDr1B`tvjG8il;4p%i)dHA zqsu1TY8OqA!_+k`o!aNCf;gE9wgMp)nGQajJ?0|J5H#;#ZpvRal>%&mbYY^?f6F3jVmWAedSPN)2tbghHK(ZyUzO--cOD`TQHq6suv^ z(3Kg|SJwPX0+>Q-HBF6$)61M}a^&}6@Nhx#{21sB)c8S9nttq2 zCvfm>-wkR`atD9s9I0--^$B6t?ahkUR=5kSveq}!s0~^31i>EWQONxLaFxK4KA@lu zzXGr1!8+60yK8f3*eGh+O8Y9Eo#SiH+dUktIo3GuAfY3C!DVd!U)NijOY<(VtPYYh z+>%Bg1~YA@ZqSiPY#?*-m!*M^ud7c>`^6)hpFHYe_ zOzJ>U)5JUK#Tg`c+mc}Sf|-_`!#AmFZpVrUr63l#H2 zc}M_$xWz*G&|2jk&3 zN&(5~Y8qT>+RgzfsRUwy{4=7k6ezOusRM%1Tk}ZnMLEm*5$Zx)Lb3 zY+t!`!btH)W2eo+OTOf`36%w@9)(g5HuEelsS`H0tGsU-{l-oo(C9HS4N^k$-9EDm zR=Tc*7DHPe?#O%OOrSd?#h>loL-zC7|94{kMI5Wj2jaHfY{|*QyxwO}U6}+w+^dW0 zP*QM8~zpMCEP zv}YNA+e$WZ5%LlY4g^w-MV|Q3&5;)h@~$@mCu(#^RPNvdTU7Jm60nsI@BLcd z#Si;hyf*6QOE$U8gjI(A6II)~Kjs!a@aJMd@oY3E&sv3m`AEm@^eT$M!ZK4V(R6gR zb3wuHa|-?G`yT3YpU(5L9hMF1!Dh?6!aO zBQkV3N81%5WojGefS47UX^hWc<)JT6`(dn_QI)C7h~W>chQH3ASp*j;6M_~`s?oZ< z;D!%??SE0W&}{*DV_X#i3SRQpJ!G5U)u1y_je|E#x}LE}jtKlvz^jx%mfof7Sy;q1 zApzcC2U~2|Dh(>Niu~PW+2Jto zVb4lT3Dod;SX)VPvg+G=eOl}N<9IT=|HiBsGVR^F$Icr!!Q<|%@DF@;?9|AvyQo*R zz&h9fAbd>*IEWV<7=YCo|9S@#VnucyybsWY7m4~6K!ESV_X{Ig`I{!UN=chIJhSBL z?x8#rQ`t$W{8xvI7h=D`JAEv;zTL_9$RXB4@{x7HyX(m1pBmqa=DWYYj~Z+iW;6r6 zoc;ZfL{t3rS?Di#**Slx3IdCQ&uU%>QH}K*GkI;z74Ccj9Ng|aEh$y!2MHV~OE;_B zOK2;*{SY!~t@!OrYLR#^mi$$X*Z&~tDgWq4(iP~&=`6!)pl}mWCAy<1y!Yo3XQO+` zjFk-dosa^#bG5veFD7NTin2a|gDE&LbErd^+4F&pf4wPRn9x5~Nea@($>5weLSC&1 zWW-0?x-gLIdt(4?b3O&0Q0kc#(0!*4z(g*pq2ArdejE6$98d(no#u!hGvR))4D_6L zt>ReHX*e?_Un4Q#bJ%rGvz)l}ldiKTXR+a7<&ja#|K&&xMezgC4DMW~38;k6f-jf- zZ;=P1Np9Ci_QctUo}|4|mN}=03DA>tE|$ zkeuf*hJv{EK6_P&H*z9$KVV_>+F^?W5iV98;$fsp9eAxK(&=uK0kAb2jtPKav#>9L zW9-n}v}5s?1lbXVYPc-ePUlKC`SkZ9$QF%kcp+&qaN(tr+-Ao>UmCv&#}9)i$8Fes z=at+c`Z6>d$U?Zv;7`WR6zLwSr@BV|+6?WIDQ*G1mp;}Q zlw&z@;V*zK_z+u**C=*+@qjN2+2;%gxY5Cx#NGs-ifRE9sqU#P|F5Y(1UUAd^}|dE zt*ZDwERbOVpS6W*kibsTy5J<*No#I1{|#$DCo4#3DUH$Hj^^;KDnVI?gi?XS#d{Gy zF!Z|iLS0cl6>hVq&NvaZs`_pbsBvq`yoZknj|w^w8?KH{`CsCjD-k(MX>a1#=I$93 zkltYXy77be;X@VGrB~CL*)hgfr;(6b6roE0;nLtOa5s8`IG*+8JEwL{hFRBw@!eh% zzeh2!T0OM`Lq~zi^dqn@rwO;vnoza3wd#uF2(3!Z&`qfenuZ0y_U??HmLQaB5}p<-or3CIuot zJEtB>>1eRxu3MJXQe?PuVNwZ+ItM5|`b(Q@cc2;Ntazxe*RVz$P6LUYNn>rn8c439 z`m3BL80%gxPNjQ1TipsbYptV_~ zYVS=5Y;^-=MKBbuO}8A0yC!(~2TTa2;Tbl(lL7Tz7lbo8OA}2+$rpV&N$+oziRLJa zHuW~V(L|>rN6>zKjioS&rQAx2H8lI$99?{HUtd6w#(fRc&+uPH^7o#IRR=5}+gu0V z1LxK5o1}RZuV|{;SRm!plgG|}%vTyDnhQ)vWloCfNiP3#ola#fKT*=y3HDb0?xD2* z!g6**9{C#R!_w=_6FsSUe-LUN*EX<4xAi8xw$h$5C*0v>M$|bS0MSac?s4b=bXq4c zCkRHsnu7xT{w(14vs=rf=saaZTY!EylbgLrckSPKr8Uj7;SWE8mSBQWTgjfc%Y#Cn z1(Rm-9NMN4Mz^2e)=tZkQ<<@hn)($vsz|frahld9#tvbZd^o3Nb>%m55k`QyE)H%D z=}Ukq3PDffn7Iu2-%Rd8o?%?lkj)%30h>DMePCa@=S0Lp$a|jj%%G^_C}O@Sm{J2Q zB6#Z4gMB%_hoHr4U<1@}k2O(jh06hlggkxTyRd|(Hy7n9AQq^XdV*)JM3G)oR|to2 z7Un_-_#|OM2ep)yXJAynd>x+64G?Te%v-{2yj$dYQ}x+o)JZ!kh#G>x-6u6Iphd>A z4yj}jiRJUiVDZvO**BR_f4=3N7DhM-;lC?aj)TOmzcp%R(#xCc7Sc}4upa8+O&&lh ze+B7nkr^JyyU1lou_PoP?(}_S z(L-QPNCP7_B@H^pesJf?SKV(i?gdcz#K`fv^H#a(#8@2TCq$7suAQ{oJUuqzcsram z+*rHtE-LD=qwH8{1JwGulcid`Mh>W=qu`eI`$~4sDK1DK+Fb2-v%^LjYL4* z(OKHjJbq%{xe#A&4~F!Y7LD-lq=8_f?YU+pLHuYMFhZ`; zbH58X4Ipr+c!2uI#;lEUQmOpF6!)dp49~p<3tUU<>npiy!YYgS(U2GDDa_5bH>rZd zmz)^!%QeBfhjqH?$!LXYI;TkXggd`N=x)kXBDtvwmeiR92m@v=Vf=cOwZ0^cw4yfr4*y@6K{iS7+Di&{megm@1n`$9?o{5R2&J1WlRWuw=r5rLJ z?jOh;$vona_``6r@#ej&6F3e8VOO-=Dex5fDE+C)w+htafCC>qp#7dEr4!NZFO9{2?dF>_&a#~b27C@Ee!Um{rynei&yjIT!FA)dY?HoYxx2J^eUi@B;Nt?x2d~&$%LoV^*WL$#@_91={@M@F_FPTS9Mm{>$ zM$uxtqahFnbq5t?B$^2F6gy{n@NsA9W~Ao1+NB3|M=iY)fByCnct=zJb$Wc?zBbA& zC;yQ<%qOIU6_5DAltO)eQfVHZBLf=JsG|V>Mc4*?=T!6QPBX^)E=^Y+c7Pb?tpn%5 z@uErhs)}f3vHvF;R8%VgwPj_WqYFNOH0}oC5X%*lQSiWF@u5Vl-7C7(dvW+NEJCY} zhze}Len9eDEzE}&?|nqNO-@6PTkMkkxEFXOYpA9OI1kp9=si)3j9sKx9+N*L7s0Vp zM+)*qhtU*nr7_)CzJ%4&Bh6uK=BErQKbB`q&3fZ+RBtZHf6JJzq~$obLBkTW1N-Tw zT5aD$Dj$&@f9N6`90Y2Ng<|2y^95LaP%9mfhW=vtlXu*Mfsg-RYFGVq0?#XYpm~&6 zwCA%f7#7??u+1vT!a40w?+&N3cZD*5T2)ifwGjuQ zm%8f?Lk?%v3%Z_(ES&d0PY1O?p03a`YW3Zv|4*YhsMf*$oTXYwzFqtM{@`z33TK!Fz(fzg=U51SKpe2&63*b?6q5Qk+ zt%3XY3(gpokIixR^~!80KUz)<=9)Jy3ga{eV__F*hPfmhoa@}+BdAbALz4Bi=3%(L zH~l!VEIoM@AoiJ;_so`r@1ep@ywtrSgr8uo!jRlHgYfvb$x~<40AL(}6oFXzK&q&& z_Tgw2dj6mJ519YhuUu%Oz#4qU>y?vmGxq9(<-hy%*=8>RxQV*H=;Uoqwu)EBo;33T zdJ`a1uj9{6c-_@H0g&F4k3hYfWl$rr=+IZhmbvZ~PnTE1i09`L8{q>ue?R08A^@D`FXjhpcD46<<(($i7$F-N z5uuBjY^k6uH@_K%234L4w@NG6Zc47uAEB&N(g{F!(U-15#b5>Cgs37+#!}%ylVt|) zpq~Kyv@X#-j(yi(>Aay|2K~IvE+R9zW3vT@stI;QqheRJ<47OAJTt|!)BkJw^gkX? zrq@yInPP5=O-tn;vtg}lqXV*Quw>yh1ERG|I^Hp^G#1#ueLo$3Q zNQ~#fwc7$D{raankk47PwPchVsGRQ(xnI5?rB1XXQbySqzNsjM+30Q`e6`ZSwH%WXd+lZmSE#zl?s_$ceuAD;@AG4 zRW{F$WGI)2Ed6TRFJsq)-U@%Qi*O4#9{jdU=5cg*E_iYBKSq1ywfXPgPpvmX#w4z4ONnHHpE>@e zLe#D1v5_SC&O5sm82uJvhJ7)x+D7+mp%};k7#--8$XBGmh#>#UGj+0b!(Z9^KnpZ_ zq=B%#PzYLB&uMr^$)OJ8R!1&<+YeKte~IveM8jY#ySxBThOs8dRv#HW9_1^53ygT! z9T=9amRi_}IsOa)v$gu6Iagmn5PP^zwuFGc60&V|VX2165of4yN8niwg?eN4zhQL4 z=bMALd!}N2wa@n8Ev^;)b`=8400vcSyu_2V4{YD`l?ss>Q`E^x?_kBV$imGldnvD& zmiyj-)%**4uj)wBeD~RX_N0;V`aR@Arm&B%Z~XUMtlfqUJ-wG{1Fhb{e8K?s=F3TMUpGWc+3EH-I+L}8>nrNBPDe)=S#IHFM^ zDEP+#g!nPLH!XuH%U75)VH}S{kK61=HAc8H;RBD`W}*G27~=Uafb00C8LfXg;shJs<+-r360R4m?Pc!j5E)Gm%1&^d`&8flW zh@+`lqHX|^#?^nUfdTCNBBbO_%D+5MMWnvT$U`XA0Gw|55S^|keblE0#|5lB$bnCK zVf-5|W=gCOf(2(UTQSz#OacP8kV(#Qyc_aw(i)vEc;kULMxU@B=nuxw!iqCy+zePY zQpjF%A$EvU8Pt8jGk_8>H1vh_;1S5b<*IwrfDkwR5B7&dbvDfZ1fMf2pO1d+a8_Ch z)OC*@3!6h|+?6gZhGsfE2;m@0e*#R3gT1kn@d0qZdhvk_WS_QXh4?n&R% zP$NvwxsO+i0w?!F@ev22+OGK~Le{7YzQp|SXQ6ma5BClh*xyVmXA0H;JRI!X)q={7WSZEZYn0XD)!q%R%Edq~aqBA(3u zi)a`H_K#FS$CcAL`SY5*2L>#~Znj@q%2DO~7Cyqsf zvNc<70ZSyQY=KIE{zy2&8ftX_8W^A9gY($nd7}ahiW&g$j*oN!TcLynBmRS}u?S@P zwSjjHK=PdRiA(23zd#c9V+J@HX`cnpI~~bDk18?)Ug?B!quySY9K@#b$&?$pJIEdQ zy>OWQyg2)grWnNL(9!1p2l_gAOU=Uw+pLG8wE^-#dzq9W$l?P zVqcdqG~#U*bZM;pPOp?G+U=~77shFT16TEeHo%r~xorAoDBRY%8jdy#9=Wg&h3rv) zK^Wy)TMi;(I+S>)JZnke|8sp?@QC*1&lq*No z_)3FGEJ7#J$=-_f&`I^uJPZ}GJ7SB*6JD92$@9osD_Bbmn$-UD6mVWE%KJ{PG`H)&FS~IbG~b_7zVU_a&t8$ zSw}g2&)aE44u4ctCnv$&*~s|BkOc^L>|rwHCsg^4Ti_=AQZ)j%3UxwB|4B^)9Kscb zk<;bbn*Y{+KAlS?8<#VqEWK-)f?5WS_RND!27Nc@gCW%lCW$I!-XraFSfewtbMWyp zkiNC&!0Xa4oT6Tkfe-i33zcm zYXGqDP{Bk(C)#bl6VdkIsY`up7o+eu=o!*g2<=^m@aK3+nQXduG#j4pwjbQoUx4}6 z<$gsu^N9~iZ^2YzFGV55e&q(md1)UDYz%&C<`+G!CpiDy&kfkC?J@HywND>_4>6eE z?th^XfVyAK2b;0^4PyOSVq-9&2S_(xWP}3lplHz*FT=Xx3#yUPy5N>$ELBZt9@K^Z zz`Ixhz#|7e>outb{wOGlc~~Ta05E+LdAl9mE|)4ehlJTCz`KaCiKKHi_!!LMj&aul zhZdZAS(brel)qjiN~Ux5UHE-!P?vK%7w9AxOdsq@S;*%Y$XhXx%6_qyn-@qy(mOT+ zN#o%e;r1XV8`@wm$iIWxc=-KF&Syc@!LSYN^$_U&@D)QXaN7ULsu8iaMxuMcmyNe) zFh+#C$0Qt3`_iYbn&}&3E4`1>!Ah<_3H?>S7XEdHGQ1kxrja!0m}BDYCCR`suc07?pc9hPS8(r^)NDCbdSvcUwEpMJ8c12BFKtfll5E>P~Yid!vtCG0!TG<+FgW`*FKB8$Ok zqLbS2j++VC_~bZC*t~~7G>5KqGI*u4Regb?*YlX9pzuT4Y1fV{h&GhKUYIQsY`aW#eZVIX>jUTMevi(~nhlnYQ#i#0~jn6U91FhjE$_n%Sz)Jp>)r-$vm!5nc)M^552C>HT;;?UR6- z0u#!WA@2RknfH%dT9$m0n35p1pZosibfhuEtuu0pPGT!TAGX;b4A7HLZgv1_tqQr1 zbr~36`FYSb>d{yQ!)ku-lp*LbN;$m+{sDYfW#ei7!(w3;54#1p~$7OZEGdj zWQ42&&|xfz)$3_Y z5rgNtoAthelp}7|HW1$;R&Ax}$R0PH3bPv(!;kdWq3(Me2lToY()6APAAieEw;P86 zX;*ZTXa1cmJ-Pet`8#e~-XiXY%_azd;E{U;HCwfQxRXg{-5 z!>H8@#%mjAZq3be8B*;T*5a7CI|9*C)?#(%(- z^7tOWx1vNgK=^gs{GC@xc71T36q1F!-HQDoS`S-HxXQzpXmpV7(e#3Ta&yZWmR_GA z$iy#%n!dqoIDEoVQa=v%??|^4gdNXWKsN_`nLcn%vef;Hh1(P3a=$3C>O3<1oZXE& zC*9dd@97c7w>zVnZGCH zmDPC`a#ybOs&W-(3LF|Qe<^gDtcOns!Dkr0qKyKj(AlauplzHZw$xHUW&~ewl83%z z)3pp3mEi94;5hO-)B>s1D9BI7Wx?mELvJfADTwY6Dt|AaH%WW;TWdkucTDtkuM+2< zdxeK^Z-~A3hla(R{ltT3sJN}Yc=Y^H`;(B@O+W?hM_sr(sBlHfE(g{LZv6Vsuj4&u ziy%4SmcIHg>_d<2mWYOWrh6#tFx~`&Z)MWZ-yN1RPLr^bDVihg-wlZ>&wWBr03eMI zb`H8u%f&}u-b74J6j`{z!)hUzyik4`gkj*vTzL7w1%f8!drL4I@NsKLWIB7^Gcl7V z90MI+01aP`g!%6G&kb}GH?EYnQ7DF!*MR*BwR9cn73C#9n0GBFKmaPd zho@lSymFDVUl6=WgtISl;VR%$B-y@S0iD^GYu1KdgJq;}#a??KI)7AfN}0Tnvzf$< zNM`$X=h@w#J}>}%Y}8vKGy$Et#=;lVUQ^!Lx0ukum!~GPxHh0iJv7+=?S{jn_76|f zx3}XOagqW{I9uGFxSUmzQIxUE_ebz{Gx7#BU=N*u@DrMQ?_h&jh+g)k@hdbz8+B;5 z>2K%&DwWT}KV<>+E|mf9-0{LA5WOx|gkj>D3Q5#f!);*WrT?CVXYfYdI+lMJD=HMdz-H}sYhp@yC7IV^?Z&WZ<%B@F5%@l94;TnQ_ zQW`>f#?Tw%$F}KZ{jb!ECkU8xcS%vji86}1S6g`%K#9Y zI2R~FrsSrP49B9l-dJNF{zX%I~HEfN<(Zv@KRf@Age-`9(NN_ezJ6t5X<_xNlw>K141bGRsT)SfKG!=7IGW#?2#nJ5dQj?w7pgyG~6&g0#46IC>} zb76VWHS%{}qr}kzqJk=9C1zh%JdKh7`W5sGn-XXh_j$v{iGPCJ{dHiP`h?9SiD~)?9v{6P_+AXw%cVpr->0 znWJhQ{G~X_2v8=~nR%EFA`+s2f5aHjLxNBa3@n1u*t+bw3EGJXOxBRZ)^;JElrq-) z_rU>jonGAfP24!Qci!kRbz-Ug;Y{U}C$rc9n{XT?mb=~WcgnGWJfX^g! zTIZn0_(J4Sm?n6@CC@QD6YxZvdf?<)=tRT+*`EV6v!B_LIrKryTs(W}8)!Dl7C}VR z7(!_&uqs;|F=vIi!zgY&C@rb2Po2o77=* z6QP1Wp!=t210lYYa?+Pz`_EGV0Uicc%xXej$J%WdV)ARN$v3dx?r`h48TgP8;HG!& zn|c>;Jnq3CmJQ_Kn@{S)qqpmfwIq6&RU2L|kKmTRQ6U9Y)4=P7)KwuBny??dF5*fp zY9ywldH>r(7)Bj=4^JoadywFBmH&2`)VX;A!&0wWxfeX8{EL=$4&ZJ zrl2pUwS`+ni&59Rp6n<|rdpbGk!+|Lq~%7v=sC|{zmbz$WejYO_MjSnnBUJ!X8yF@ zBol}quQ?Q6K^Z!0ikAnUZ?FanB=}fyWC$a(zLq@&hE_r_blPP;=DyO7#?TQ&T?;bI z^f5dMYCD_QeaQsEg(vI9rxM9IcR{_#?+5FY$|sP`%ChmL`m}@57R0Q|$U>f;<^m4+ z1sE*r-RFd;&ecBySn>DC&?q7d-G{{o-nU_ErJ2^ma^sMSS}lFsPN@dMNt=619XoUf z@H}t&3)To2EyrUKZ(B?Ed=Hz`oOkfXYt5IwSA6cgv2hyR4%aLOe)*lD%f@R#GhY54 zQollCKSAEgY}6ZzZ={H;IBzJs!)-uO152eK(Q*v01M|+oT5D4k-F{ObUI(6u;}@}b zCrO4{5iNdyt10jcd0_ZHi_)3{}#|9Z%mNnUL6faxuNO` z7F0<_GCGVXzW5Jtil>1gLMLC&#b@0rKs;v~p`!1iI`q?t8GC)K6+%N@QXnPmZZrT@ zyJKtjxt;~v^>@zgC?HNgfBLO^Lc^CJt!x3x%-RIIggl&zl#areDei*McJ!1>c5V#f zHV3SB`xB5~ws?FA5Uhq;b#zr6oXA*B;ia5k16H3WND$!g#Tc<2+J|%N==%2o@%Bo? z4RYnL>fp$v%@gM;{iyP{Jd8YZbnH&QseNx<*4(Tg<;;a?V2%j8QSo~?UtIBa`aj&6 zU6G$GFNJOe(rOm-=exV>*%7}56jC&0a*)exQzGc7E$o zeQIJ*QGE0hzP$6SCtikv*_h+H08?r)ceB9h_O?Xr30n9{UpSI5QTE`;$0ZZR?afl{ zd@YiBpz$lq z0H#y6hVh!Q-X?-Fl=%*135L{D%zY;K&=8PmRhkmeib3P5M^Q897<6h&q1`gX!4J{; zm8aR^$HlqroL>=AqZSw>^3WT7yMMlSDg_X4;1S%~Ka< z7-g9CeY7b1*9EJ5dbE!LY%t{c?=a4`2{Ap58^}i#ccxsQv4!lLOO+VIhP{fbr~vzL z`Ah7+1C~6juZwCu=?|=MPQ-Lf0Nlwo+Zgdu>-jfD1+>`1fh+L~dTBpqXsg*G_^0)M zOsV&_1ct7`?;EG|3Xa_Gp>ea27L8f#Jep$YA1>IChk->i05-Ns4#8NUtI$~#z*F3ggs4>k(pfClw-hT3cF2HiX@qQ_McAe`gQuz!q0p}-o)97`Mds1 zrU9NCiQIU90fEOa(b??zzl7!vX>#{52aO!d|a^wzoUYgdW^`)+a1 z6o1C6l|l|>=F8Xv%k;Bd4XulN!yYSz!?X1b6prF3AsmRb7bo&V`@eUt8|*aGN7iAY z%d?hIdr>gIjd>-LL(WW)zXn|3T|OK~!HWZMw!20A4aO!>a=|?azeYWW31KKSI-;s$ zFxNF6LRH($LI>Ycc9_1eB@-5w!;=i>Z7s*W;maaUlU(Ivd`aFck9q zjSszsxlApm-ULZtO4iQ6-2lk3h!<`OZ;+5{=Vu|q$)hhdPrece1hzfOn$VC1d`rhCF=LZ)+RzU@CUUJ0 z?Fb6lxbbX09j1R=OfeZA?n!k+OwxGte)qDa)y)C zo1E^Y((Kk*Jt~|6YmCLAi(HTnPRmxY>*GKm*fG|rT^Fl>yw0nPz_5R6`%U~tAf*%3 z&K@3Fh>J?ToA37bU6W37I+lD$#cLnF$u~SMdSPAig%i=*+_N)9p44gD3D1U&5Nk>Z zQDe6KK4~3F27Vk@_u`$32*7vylGHI8GnM}I^w8&VvFblFEn4@I;jw5pCx+0~!F#wh z$SM?-08{JqRkLW)y5Er_BVSIV9lN`({4APxK`y5kSf;A2dx28WK=9N##?1w!9mHwCjP>0>m-m?;^mphi=pFSqdoO)KT7$}5h!~O;MiN* z4i!_Hr%6m`uq_ncJj1eIVg)c%>AE_#rs<;VWfO`x FoF?XQ~d?-X`|0l%Qj;prb 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

    iy(Kh!lQu_7r8 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

    F$T-hI;5%(p1KYesV1)TI3guc zc-oEyf?)dA3CxZPFX)qKTg#!p!gXQPuP#U|9WgF4gmi#c7Y!${Imf{zWY$(qNi%`3 z_HMd*GtR%et(+2>Y695jQuy6FUm;v)t)8`vIpHuEwZ;2ywR`h{xT9@T1Giwr5O47RZn68AI3>VUnb2cZN&FLAl)-xBbm{<_LBKzKU zE)3c){3B)Gx|?8st8x)&E-?5Dt>X*Qsn&yhO!FjdG8fS!m{glGm_$$YmEME;Wn2N8 z^e;_{KMJqiWTyMWIT7s4`6VdWleRR`o9-FKZ-y_vTR<EY%gE$HH&pIMkm zhjA#OVuk!bPR;}WKR)@>5n%0v1N=`*-%8TJ=iOUV`{(hdH8~qFs;8K29YHCHzR4%~ zJgJh!koV?&{FL9hMaU+^sbum{k#>xKs=|24Lc4w&pAjytMK(R z0byYuAs1FPlo9)E{8u!vh8O`jWSM>~(vZoTsUH&M&e>(DN|Du1o`_x!I^Z5b`Y*4j ze&QMBkCxmZxJS%2$j()rW{V8u128uNaDgcsYWH#!OvK{LA*IFrWvBO7rGFK6A=#fP zPcXz~sK}#*UD=2!chs2?r!Sa3JZYWE^<+VvB+5?YUdjhLrBvSC#vgmfE)y~F%Rt@W zNCh8T9O={i{RE(0+-7L^pJhm4BpPEG%6sHdDWT#GW6lf0AC7#>yS*rWiEL1~Sn}xW z*xfV;elC2Tr~ll2IG}9%L(2Q^nYVlgzx-HqzwyN_fozAgb@hln6Z<5UsLa)**^IXmOq1f{@-yQIgaPm-IaB{A(up^v8xwl zA{;pooWCy8+yVn${B-a_kfWy4-Nw&pu1*btu~1fXTm;vag7iUhbGDYEUm2yRrovtb2g&U2HfT~wta_qv&tzW|s{cIX%YC`WI}bwlJO`E08OFw`Wt367>vyXu)B!M-PNnxX zJJ}u3Hy9c9KD+b3v!gyQ{IXd1|e742f!Mu|7_700m)9Q=x;=LQl>bZ)^^oiz(V0D!*l zC=B=|j82Z=sTly7s+cyS%G|%;|Ke*SdiGI86(NsxAZAaYt@osXit+r@pwW-9nTv=j z^}?>nC7+`0MTQIJjIPD7a^R@R-A~ULff~6p6;icGcOeTLZbDc4GWcs+GLHS7Be8K7#4=aEJC{zxlI^`iTk{MB$00^BTG#=gIAh@dYb}Hra6RKH$%D?X zAS(0vviM<9jk-rJpOY47O2eTUEoh5F7_2lybb%-RYVw1)Hrm77|K`t(Xos+9ww z2_U5|$p9O2421=d7e`pp9@O=eLChr9nhVnU6L*uI)YgjKf|UHJkWjU0?%1Y7wr@kT01#Ar74iOX9oZ)7)iMgg~95 z&@tT}@eg_T$KS*_*Cr8{k$3Bk&tub3jSxAb%FVTh+^C4}?Z^NP|}+8`c} zgX{Xkx?qZgrvg~if_4!nCAL-TBvo7_U|&bYZ{PrR*EJKplA(gmfCyvG@uaDw=iof>ZbW3^UoH z`PE0sgpevm;uzO*^ZIO)FzWPCZud}nnubr!Pi9{*x^131J!1SGtAFwRa#zAp&0JZ0 z&DSWQE_2SZ+rUtumbZ(~#ncp0ks}9X0%>}BX8x|p_V>wYNulCD8rPoE~ZuZvQ)!&Hz5V16w!Nix|lCz2g z%Nj(@jh>_y^l6=hAe)ce8j>pa$`{ow$MQ*Ttb7Cv$8ha?o(a=OvIZDs^TkcIYzG2^ zZ0g~sZ9E!BJ$~JNlkN{^cE>xI=AHZBEcY2j)GjEmCC~5e zXQ-MrnG6Goi_7Pgwfcj>V5Y@t9zb+Sm2P?>4|qAi`PJ?5X{C%+GdO^U(yeSU$lcT( zL#$strI$Z)pYn`S2LaB}-q#_p%>B?!Fr#ZIJ)Mr;c@5!gkAmK%#3U*}8YlDE=5nK~ zaeMUe@(^xEmDV~JV5q z{^+9H9d(jOZu;XViWxRcbn7K|LkZ+XTvRqrGf@p~2>o?X8$IXy1NQ2%sq@p_bIw*< z>oEa(9V$o4Cb7#W-?;h3OX-ZF52{blvzDJ8vhoVeyA&{Yr0*0C20yN82HKOaIhl49 zL&A1IqY-UN55NVpP(RCgD|P^2m`t`p+-j`a$t!A#+{qy;$C9 zTl+ImXKOn6L$}uDK^P|Wbu07V5+wB^?cP>rznS~(j@mIFQ6S#kjnckDcl6bWq(M9? z&{)VbCOk5C+-@1o)}r(eS>;Y(RewE$WrAFPI$V%`?yvqkvkizWBJ9LN8=maMSu5#@ zlhxl(=}D0@fF&-L4m35YCA^!{q&ZF<9Ja-!RI7qMsl-5!@2H#Fk1*ag+Iz%IR^n3Dp^g%N7DnE%PEEDSb5TP zo(eJ}*~h9Ty24aK%g!RNk8Lc|%2gHp`v!pprtqDcpc_$+q z^t7W@_x4=Zu|rndQ!t3yq4#*-aYvK>TZjOZ^}P)}#(^7>A_OiiG!IVhb84`^nh$J@ zW5??x{c`imD9Ng_#+dfTmuU9aFh8MN{Q8@n-ord0$W5|vzlO_rik-aw*WMMijZk)R zxDle4l6N8Uy_r|I?K&nPd@$;0B9X~@WLYYG)@$9asJA)0xS%B5BC;AM|LLdLnlP%l z^UjEks8%-jfohy()b4sJHgF4XlkuSy{yF&uTO&3}mCt>;c6m<)dnvPOwz#8e(i^)7wzIXd? zsgn!ZfcbnLG3ST(m|qF0D*-a>q2E)ILgQEo^A#XM@H~2fJU~T=w2xXdxgB5vf_2t2 zRRb02_UTyWD~8m&o0eLQK(DRkXhgY>r=)348jUY~_c6QgRNc-gX-5ffn)5+wYu zk{siRN1o46SUy~jjK3}VK8|CL`rw3*uS_mol^%LODXJkga4nR;z!KyE#D!y7u0)2Y z;!L;aEJdY0v-DXPh3}E0W-#0eK8^rX!fykVY;qonZ}Z#cMV*GjVIR_98@oQG?I>T0QBHSI(_#m7*uPBs%UZ&?w4tw zQHB6m7%@C906OYIi6(9`7YdCzIO|ZW$zlVIyB|(!H|%Y3111 z!jD&yf`fNBLSjrg>`hCbaH^kR|D=u{(^ahs4x*Seprw)o$Xxs+PmAkt3$1P> z{-l@Zh0M&2kQ2ue3VV&ABJ~~mybHN_ z(4<`;E{$4=$HRTvEpwJRrJoBick$eWIso`RZGHSZ+3vK>M>`Fwd z)Ucfc>0C*!6gub1@qpB~G0}?3N?R-8dig6^bWVeZI7F%^xG!IjBF8P?vTwKyvK61$ zc=nho+)mU9KPvLp`n=0E<4aA7Rrx12Bxwu6Wl)nL2K~Su6wWA_^8fKKDLR`&sw%cT9+$1pJKwdilQ=KIs3CoXD{~q>SFoI2vGx5o=nY zZN?um{DC_vG6gA>ez&_?mV%(`=KWAf(OLtHvruF2nfwv<_`A#quf^QC8@pP9+=w$d zW=;*X`ru5n$=Yd;qmYntT&sz8MxFdjfKH7@N>-XeAX{Nx6iQ`z7s+ z{pO$p5|6E>EEYpN?{gA^%`lzl)0=JrpQ2P5R!_!z@|YbpgXp1sk26iju(^%nR$$Ni z5J2O4r2`9+JE|2Qcy|4P<9?UmV>Z-jJ-;h2qB@_UVH#l+S5EmB!=((n_}?LtJEac<1Rmv9(;aED(|Nuj;N)aRcb+`Lx1d3LgS~S10&Dn zApYZ1G$nX?VdZ#`pY3)2zYa`F0-}JV@Sf@~HYyZyeg&@ku|Uuq9df7*&I}E4YEb=C z3+fRoZF#Zu5OKk&*{PFSuX5peyX)~>R*rM@-ob}GG?lmJM29*U7jFWPNN#~wlI2y+ z{VSD}lBt2xyp|NtNyz&2bx$u~81?4s{a^2P{br^NzEe~R0!i$%=viJ|EufVYxiGF4 zpyBuCE@YnVJcScYsfvjxrCO*0+DP01k*)-?E}enf48qAW3Af{xD!#9yVQuWG3xFMl zVp)UV7ZTPRGhj$@lb}9Fpu-ifNF{d@;BBy$c9@lgHG>d1~Omn_)-pU z7y6V0qnrZ2U=XDWg(8x7scyi?|NP?r0y7Fq?S5)SBJ}y5^+fOqz!%}`&k_b8g>poswy9nFSVX=z3+SFfLjg~>oE30XKEMVqbn zXCX%=pEDrl-h(~b&bJ3lcMqFqV4M$}hMBUBboz;R8X{6Hse1;}by}8&FlCdw>{fp` z0qiC$+$c!MB094G&3f_M|FGTht}K9`r7KpZB{bhYoxI}vU-og1+G ztU@0!Q~}v>LES_T^g>pJ&A6kiys-Q?8*`@(IZSzo1MIyP1H_9K1*4@YTD|T|7-u}M zGzWY*$!Z*1vxaLZu1ZJzzogp&$>41hEL3Vyv8K~yXW+^DcwACWaRoD%RQ+4UFi_*QCdb^%L_*r=t24J!+1UwUx%?mO5Gw<7#iOFH-3WN*g@Q znYn+(DGwO%iH}hciGMb8FM#|5BxRsWNCwH1DJ<|K++=ju05&}`2<)$!B%pxB{{|+? zCH@%(a#WdV{0k|TsKIf_Jf$ffj+opEv%V0fit@e2bw)PqLEEOGbxd)K17ZL-?Xujf z>dOsSmmxa?6}aXgx%!K}KPV(-%EaHGFSL7evAv#{<=GmTsoqZQxZqknulbq@EQREhV5c;Gj1)}P@3F9 z=fxf6k-nGqyR6_k?fBbg?RlQRKZUEulJSE!%Au8--f?MJ#a8YON9NXG&4{;o57A1` z=U^9lL!+gB7}AO&3LMsFAOkYT-DnRgi1*co_W(UzYDb+=J1nYkn)rK+gwW+bly*p~ zaJl|%a5rLj9Uib*$)bBbNV+Ht3NeY*9#}Js<_25^?sS6IC$o?Axjzo}yPfagV9HvD z-SI)L0bpEjFuZLZj5sQ0uZ%{GFSYtpw>l=iz%xE_{v>gFuJ&xuhth*-u(DEDzOPl) z7Fa=Y!@jt^mTo~5I-V%UsB$2!lt-*riN6i~%Ver3^XP%ou(xoM)U;J@`s`)hH4{r8 z5VpApy@3Qx?(xR|HPZbOe4rw?Tkp8fC)R8Jj-5zdgoBiN?1`+wZd=1PwBOGCNkmjB ziDW@ER?a8wExXOfy1Xp=X-b*p2}xfhGEa=W+jPFsKJ73- zAMt{q&}4<|HlucdZ_R`04|XAs(<{ifD?ypO+0^5dPDW%n?cw;A??U5z`hzL1JL_NobKNkshnqD%&V#2>gW+>)z~Is$*KUW2{TM~yKDFC8?uog3WWjJXGsK7z`f()pJp9R?nf!wx1 zP7T}Tu!ut{#2o&i7mKrx_WxRVR{wbe)@9!81WpK*1E~th?ZyBpTnh)y70Jy*+X(*r zAOk>BSVqE+W1^6uyN^x+)BJ8Yu@vC+Uw28NW2kNze%d%Yj-6$ec95WRjV}iqUy9t- zP$Y3IhqpV$F1_Tim^~-cGl9q-_oAV0F&KGGGcK)1MF{+c&{$!ixIHb{e^l{rS7H^I zbMr^kH#nty|84k+C@O8dZBCfmvqT$0J@M)_pXo9FfwL@@3_dHTf`00+&;K3gSyAdD z+gm0pmR=N672Y7}Jh8Ov%JEN3!n==Kj#Lde#ALGktGF2Sp-%GjPio5h1mw>Tsfl}K zbAdZH|5l?JGx|mu{>ugr;LJM zvN$k?9?^&9tH)SO3Yy5mN4r%oAT;7lhp~q_p->>IUz_=u9`#jg<~OKF#zXq0@x51$)>q_@c{IJ4dh~ zKZV)TO1Fur-d3BOto*(*Vlm22bxq2gxhwgt@>j@xbPzil5tNRVn!B3}sprhOu)81plOJSP$O7t+Pz$M>x z6}QqggT2$?enC_t>)8=8d#I4vUV~Wjw8b;NsUB564*ca1ZUF)mjct^N=4nvPD1bIc zXjgNZ)Ks)X9ShPq)Y68s&y5johm^|c8Gb%_>%I(RxVBfAW>DR;Z5q4>ox9)e0ZoZo zyk#=MlMDIxU7U0|j8pC!5_X5vGV)F%8d97fS=M!Kn1MX0p{DQpSL|#BN(N0pNce~* zGe}zS3xX~X4Z0KGw~+Su-tzIH`aL%plu9=O+mA%ZjLLZiM9i2x0C-L>`Z1z60mgE= zrS#gB=~vOTA*w4VwqG$5gQ%6#Can|?3ceHgm5fuRUkD8RYa+hMVd}H%PFxYZguSae zSb07gl9cpn+|_nDlqjC6oO_(_M9w`pH_pO>+RFKvHd>&712y}?DZ&u1k zZXG%~lgL6MEr?6VkDqk(7byOU288tKEzVycr|~IvqT_cl*VRlrFZ#F8*zk-JTNec~ z8a@$AM!^uP44>HF$7iIPDjs~9Ziiy9B1J-~LS#u^tjSjus3}wP-Vp_gFbZOh$=26K zA3T5A^hI}vD&R?bl|5m{ADaKr&96Vz5~fWPX~6#M)`H)zz@Li#D^o%fQ@x;&{yD?i z@~mV{nG#mGD8ry!f$5v}j#0#04T*`7l|9eBVDUHxF{^z_pYs1vfHzkFc8bbP)3Rrn zl;nQOCI;?UGy^?(Y{@}zik{tNUt!w!zpPu#29UZ1U88X3=o|J^Qj1j$pcQpUIovy1h-S>(&PjSm34vsY_OlG$%)yg8Dw>{L8jef7UztD9xhr zzCFrc%-CO-Dst0TGM;B9LA-F|0Yl&gDd%V5;5(U;s&VjuMZRa!s%rWw(JhG9~ zmY@$yC*6goP=Be6WUU;kCkArUj?SMSRw;;A5_7KL!~tq{Bfi+P^yrMCx9s9({;~6? zg8#Y9{od?Tr&-y4jhhg3-O##{WCHlR8WaiyV%{bq8ZgHN!oc(xGjgr4=6|1MUhr3! zIOA#xZ#ew>>R*>kM`yqCBVi(WM_}kMo)}T!zvToEo!G6@>;!apFDVn5dn1EVQiy_y zn(2gFBLqhle4a23B)0DQ+Kk;kcFe%f>YW^q*oyKr+*>uX=cLF38W)ym^>6vUazy~^ zff}HrpFTeweBt^)pOC*mJR1;r_iZ>9-RRteE^%M%rnkNdTa2)z-0v-=$L)D`**~&Q z+=OlWSTz-b$akzmnaH+c!twrKCu(vy9YB2e84mf*0T2vDv7Ivv7F1oaYoM%!I5zwx zfcU%}2TGR`$={7Os{^vF6t8q()#Artj3)4Bg^`GZq8$h#f^X1D)y>ilQx=%z_jN!A z?S{#AwNX1fPXSO;fokkfCwL*Nv*x$5iw@zxH{yzI+ET7JoCtI2LA;K5ruHLVIoF64 z3a@^=eEVWP;wU5e@kXJ%xKFih_6*1AeS7E4KW@V&`PmtvlCBoTD#e4B)48?OXIeUj%LC65y zZg&`2awDJ{3w<*HC`@ryV0d_cen=a_EU}_i=bb_J>5v(yga7gHwwuw(=7<7S(6hD- zww+`rCc94_^o{I|g2+V~0Z0Q`&OXBc*ojx@Qy>%E zx^@^$#B8WTLK783J`NQNLGy=Jhp$cO*Y|Hb8DYvdiccv0!$p+kJagsw2?n$VW7dhB z5)5&^ignQ)8x9@T%dZv~96V`^L@Z-C%=+Gn8$No^qxwfd1%0p+^ABiQE0{ zH0ReU5Ketr%}BaQQLbTxpT zLYbIXur|5*D~JT8;6{`**gJQM$`|blyxoc>5bw11K@B;RR7vp~Pr1@~-(Y+Ro8wlc z%Mv%;Q@Q8_5v;Cu3&L9(>Y%0gRSq*HY^M>`_Y$zaMfw5s_uxxT1WoBe{I~$`Yjh6H z@J2fxFfHqUzH6mBSK&V#0jeGVIlm~pg0ASpuhn1INEUu()OR#w;`|p;Sal9SqnafE z2TGA*mD$g7zqP-|_i48My|z!7S*4@UOkE7c^+q^Hk;R}VnqWy&mzf0i!PxPK48|#K z`v{n*IiqBTs$siv?9C!mYNe~?IChv$r|MJxblcut68Bq4?%6+1-@U>8ru^?S`q>Q* z1CtwfcRRkDb6dSxN8Rl>Fpv3hK{hk2x3!YO)k^6x)4N%F$xN4b`Xb3~a2#E|Nn0f2 z-&RCDG=^c9O6VS9&YUU~m)_;5h*R%l$P}L%G70lg{EVal$by$NL=PDTbNnX*@Xmt` zUAlm>R>S9#G-{0~{4Z3?$F6=kfFW^qy9|Z`mU%g;ISav2kVRqV?Cn7Kvt=PktfHJ9LT$?h{;Um=oiFGH)=p>PW>o9a-mV#K1)(!L5UdnQ#5BheBi9 zVH8zHsdK&c2~b_58k)VLcO|5LD)1j(2%;FPhY}|~Tb2T6Iq)(hl#jxilYPgc1Z^Bmunde zh@m1{-!C_#rvl2wnl2T=!tZOb&|*D$@hDG_&gu~)J*)I4KcXdRYET_Ab^$)L{LP1r zCA|TYooAv8&%DQKtRfVu(26#BaWueA#!}@f_LO?Ca#PI#_PmGH3Ln$8aiFRfMH@Ke7nu4eS2S(q=gqL2Ex#2g$q6W8sB{BV_S0yD7TE<0n%8@`~?L3}_ zdoH;q(oB)|%dvH*1%;2l3*0&Q`2TXdm(~JE7@XYP4S=?cO_x}V=ru^Tf6W_gzM;-p zandhYQ;S<8iBxcF8~>Rbe7!fuGo;CMT*RJozlZ4ROQ9(c2@hp4^A+W3GGebe?TGzk3;*`u$@@=;q{ipl3c-YPW4ZZgWGx9iGt;woPjN~Tt>_hilfHbZ;RcN?AbiEyCNmEf4 zrStT>TzquL|0u(%&v5t$h6SOG;dzBVEruAmr#IY21kAshk5sFMfzj@Ti9^0uSQn0_ z{<*3>uM+b8#hP9Vu;b6A+X%qh@2?JZ7v`x3T0qew(&46sj86J-7lHQ9^LUX3v1|`W)8cC*3VwzpT4m2j zqyU%2{?fnOF{QyeKiOHgl?olh8q6wuNe$kWz%%h-VS0AwSG4XIbacSQ21>`{?=}G3 zOU2_evJ!Iv)%_z&CNZ;v0f;wBa?M=;QkypMi7otOBwye4={pRX<3EmS)F##Tw`%`A z6&i71LRwJ2w+~85F;y@$%DRCr2)%!{r1^exNCB<{$ z*Fj`WDP7l3Ec3S8rQ=1n5&GrPZEVK_-&`8@H&t7You#k7ROB~1!&m765V1%Uof)H#BDcF zWp=CWz%6@e;yn)uy6bdAHJU1m@^h*L7b3?Y_=y6arfblsukbp29)XOfHy%xnV{fT* z1V-K;+}|9wpWn%6N}`N{cAv~^ly9NYXhg5+sU@lHtBwyQGCg>gW=x(0XXe@Y z#ByAR=l~AmVh{!L@XImAg%rMx;Bfv8=1q}%ItC*Of0s1FA*R&D{1E|`=Bs9qR3lYy zG;G5Mz4hKLSPl$iGgKurFvx-JiI8XAs5;m)MdSCP1s;PJhaGY0Lwzb7>V!v40%E z=C*0xO8N4kPBqfa9d*z4RtVw$rzK96G&`ROrA4xX^`(93?#Z)wZM)JRtrk} zz24QpmZPt;RD}fqHgk_BkXrfiDi3Ln7dcn^rw=#o9Dk4fG&jlie$IY^kAA;}v`{4n z9)yWt86PHyI4_DiQbwgtIZ=h z4)6n=B)nSEPcsTbjOM=&9uY1)Sl7EuubRzlqN*gdb$heKgr1jYt!c41ij5wRTDD*w znK-K{g+9DsR}}Vm9IV{@R`)mN)0jYI=fS#es~oyC^@|hLykCRlrULpoAPsgrnU20Z zWQ}R(Xk?xLmJUiYFf7oMwnu!V$&Q+*4Vjea&;s~QCk>EuH*BqoiUW6ysk-2Xib!FZ2jg$fX|R-~8vr!mQWfzla^#}khE%9z z-rt;fKp6TO0!tr&xhIxv$Rg6WoW90v#J1$?61EyWdiMNK*6TX||mVZY3+bW^XZG@@1%38M-Toqdt zWt2tL^Ffp!4=oUbC^Eb%DI5WTM1@wlBy@Gia*N*N>mSGGUmpQ8Rn)9MhB)E(Zv!xU z*W!@$*448|0S@#nstTvE^#MaHrT$kPt%JY>Ci)!c9f!?8 z)?M0elDOQnp_do$g_{`o>7bh<25P}XVmJ^$+iYY_3T!Fxez4Sggt{G*5u}Z70FX5y z>q6vyH{$B&j(!9k<4UR?`h(xa2D9vU_x?n<0uS~4Nzk+Gb{g%& znIvifz+$Ety;?|`ad=clNm=M|qgj9?pX4^%@g9iujO2rdyJsH4LI$pW+e6UXq$*0{ z_U@D)XSrg_d|p$hL~?ce--nEo=kXD4mxfb7J7Y4Y{L*}KX};oCFx9acWN*Z#iay|O z>)m}aJ)8EiMRc4R_d*-rX$t=QoV8G?DGyJx0T)2M`Cvgp4E%DqkJbsAIN(U{LDjR} z3MM(8!MK_Qj2HZeCevd((-Z4XWKhL9hI0G-)h0}6z1QghG>Gg+)Knd{b91xRg zW3+^!Mf6k$)+fI>>>27VifWj0Nu66+2;!_c@Fj=IdJUuExJ&8kI18A*ok9MAt!(hWx9xO zxmZYSLTb45n zHN)D#M|!N=-=3qzD)%Ognz8#8VqPhJ3h5 zf<@MlKOxbPii(i?cp4&zCVs=e?$3=UX;dezbs^*>er;6eq#qo01k6_m5m1Oc3?BO* zuGdM_=;aT_&9G8?Xy^!WGvKlDlZ@k54h2zNUwv>(TlM!A2tP3^vml1o0VpHnakc@` z_>>CTndub+($orA`Y@!E4_UB~)*8>5@K1-7H?^V1H}Vgu=0p^5&UL@J$1N-ls4h*B z^qUFKf(iGHJu(iIC@RNUQ%4=FFD!j@-$h*7sQQ7+z14IaHA^#J-S-;3d-nxKG;aM3 znpiyLMGRl2;ci)m72fk8F!v7XoE-6sdK%$Y4)dyo`j3%r3TftGxcG~gkM@VhO34Ti zTDDeCEQqQ%!7jYzq$W4GB`}iji$a&gS?p> z8cc2FML3H~W$?WClrvD)GoFnk6DTwc$EC$&*8Odzae zNp-66^ZEd!gUpD)20%V(1D{x zT?upiHcU$FE$(i##4JrZ?LI9dV&+-z_h|^!!TbSWbk}W>jK@Ru|{%iRY7W{cJECiIXp=-#TGF*#CDnmy%c@F z`_$Lv64{Wp$&nw&jhG&ESx&n)-f;^evf_YmqvvfQs2(P=8`kPq6h~7)kMu4!Gb4C% z>H6`V8}xWV;ZN#|LB60FGBV8gByq>9Zi+FXGdlO_%V+m!upgE36g>~!}G zI53?shkRWjXGo;r5#)QFMYu_OZgw%CJ7YhAlT+#o!sz-IE}m#M5+hL=e`nCH!9O(7 zbb&q|G{y||vcS^LH5BAYoF;No`%umBTHVM52G+hqjO3}A44)bR`P#^z%;c?r5SBXq z>9OX0$j4SnVSh%iu=c~fU4zzW_hBXI6qbDQT3}Gqq{Wm4uNY+e%)A zaE3T5RsB;2kcoipRM&-8(KD3;^~>oi&QVRtqP`2cXP5FgmrRp+j|Ci0TfQ)^RX=8J~z7^K6KI0 zU}S)2sYUUPvdk03AE&MV3X z5?WcR2gTSDGaJe&IVWUb8qeh4+uX)ZCIn_~JHy26+@m6f6PCpCwNTbtNSN_F+zb{s zgEG+RLD~>-Zw)|JphbhLA>{U3KC#~bij3Bu44};p_;NOWx*WgT@q0H6>^ny}rW%zM zc!+^5pDcA)953NTPjIq`vFCFMfG=y!b%J#o(Q$hDQy@+bNQ8w`Rv+!uN zD!^vH5vDOUtYp|B;%RAMtphw)#-G4(8)8-*+6IduY)wY{X(3g@*0By+eog8dgEa2kr z`piXe6x|IeKcgJ^B!!R}aF+4y4u`YB^&`wRP3P)Z%K*f?!HNC#!Kl#Y$Z)L&FIAcx z(%SRuN6{(k4_~9zj$$Wicv3akw~s-732*pG_A_Y{R2|grI|coS)SRXx{9#P5z*@M5 zn;TeC?Z9P%I%IjkLsM`?{o*BP<|;CV*$~CQ2Z7S^2OhIi!a3l)9`^=3r0A43x*7%c zLxuA^y$P4Ah%w}eQqT(Y%Rhx-fVvT;{mIvZiNZCXvW+pgdRM<14w`vR_5@7T^K0Iq zdyF+e7*5f`sqADiBciDu7+C|=;2ST-FJNwBe0lNylgQ;vuI0qc=;XPqD;zd`J#y5* zT8Qwey(*Sk%KSA@ks3=rGUQp47XFyDp40iRt0ntwG_76w_AT90Qs|4m=>ol+!GEq4 zE^@-bmRH|Z8tL~}m{Gy10I58etX@lq37ybzjZf2E25@G0sX5Q1xrlgmQ3aj^(5`PL zUExlfn}@Y%qW5b)v3?tuZ#0idcz?`AtfUq;JC4bKCcr;Gq(StsU{^|7Q-UW1V6ZeM zGZa2kRJPH5aK$0t&Pqh%VX+lkV`JU@;lFbv zo4yn$h!8lo``H8Yq^?14+H5>{{2cWvu(9zSAa`uS$-AGJ{K1Trh6PdAJM4xoy#sJ~ zA52rm`F~q!pcisaRu9Iq*temv4VJ=?@uR-8GFwU$C( z3w2NBdn7B_7w!GRc;7O=emMJ|nSt|9qn zY~%ctNRqj>G-~q=Sn?Q&N_aO41A0aE6jZP;A`f4X4O3P6zcs)B0u(=uG(8kw~b$AK6Ly0zW(QBtBzrWDy^g&u3iccAA8li?$f z)8mNu;}`unX?0s~x#;rF6^L+~q2im+Qoo;-Dk@i7JH}*|-6N_G(+vDZ!avlbC&!j# zPrk6db+O^xgLP5;v70UprH&%lq25zUiNezLM&1^cO4HoNw(oqa7k43-XJsg$d0&)s ze=9MIks^0}*~>%}W;>Ilby;&fFjEqMnqwx)O@Bu*s}G(jovglbCt0%Wm!#}nA_ zHFc5#%faUfGvALfqFXdYQ7TPyY!(J8s-6lU^QC7-#9xZ7f{fJDnPb?X{#WKB$6#ze zZ>1qea#It^ExEgli+j;57;S#<4sA1*<1#!l?e|L+-&j^W@|DE>LQ0%4>W-osP6QLz)P2 z@B;dxqQNKC5zk2cJR*LxvI*qth2MTgR2;|q>z;Z%vVP>{SlCzGoALqmX{T$%!uVH- zKXE%8%rZSbyHa1-RF$Q5(*BURzt#Qit7eNeMaSM^&uCw=Hc;``9|XBv zh0`dAQ?h63&yE#V&Ns4gRMMICTkM>TmtFR$(4E1e*%1SAS_$b+TCTjN)G`UjB-^_-Y9Z zJG?A`pk;IcL8GIkJ8hP}Z{yV&jcTkKfIOXZT4!yckiO~JhE@@k0RJB=i~v-^*-%OX zF7S|iJl)$YsuFAn&3(Lqx>JKz`zhd0U-kaFEI~SJQ2lMZvbe{};4J^H@`ETw_Ej9K z0FG!_=H`rl_cMayA|zSW*AL&@X?D7s9<nDxywNL&|QSW!tZ@Ba81GSC+&{5cjeZ z;~8Aik@UVZQ&Q6u8-o!cuBg|UNJmo~dDlf?NV?#`>znMpa*FDEJO#k@=4o)cUrf4< z(9PY|3>a*zKyY$;JaejzS3_JcdU+Fk7ZQ#8H4@2(-=Gf(?eYd?)QhpJq{CG| z{kvJyW7}VG4la8cSz}PmT>;aF-Sm@CV(UAo_6TuiFQUFwawRjk3$T%qrjlz{NClL6 zWKg0Ml=?xGlvkr(Drj|P>O8`c+QyFO4Q1yGYWWW7C1U-D*+ApsIbsa+1;sfZkdvrhWERAmmIi`UoiasLn8~O%5X25x4mMaxZrP0Id1PDV& zz0OT4hFifk(Hhb?UV_G{bQl}!gh?bvg9rdq^0j#|M+A;^58Wp8!4wHj!a&wgL1Jci zt6ZWmF4u~n_PYjUeb6&?*wyc@0mKn9TezsgXleM?;eztQu|qD zEfYOfl)zzbX#Cr+j0ym2xrcWp$YpB;?bnMNA25)Ix+F&gh7JSJF}J9nq2D^fKa~gr zi%&F9j;wzlk`8K-Ck@(}J* zw~vT5^%a1HUC+k11SIA>s1m5s3h#@74^GJi7KUz_yjGw5uf#Xc6TH2;QyQ;m^Yxln z3p==$0W+2dVwVzyhv|YVuPO}4L^R%hrjH4S#_z&(1B6<71UKTzlSKDHh%vl-!;PNLdD-|?8GaZ znQBhY z#f#JxawqUW+3wdLU*sYNRl&s5FY)p18CUjqd}7Xbp|Sc1lPsLwG{m?5{$zjK4Mlwl zm%+zAA-zM8z_ZXbdG5xY%k%|?N|EPOQE`axQ+RozJk9MJnw)`~)z`YlK;9jhq(L5X zQtekFxlK;+Oy@5`QktrJ%(9KtpH}3E(;^{{;@8;ksJzGD>;JnmQnL z;PG9Gd-0SONIjsm@;cM)^X+?RX{|p>^@?qR1O=yJ<#sdaylZ0f77rIo+qyrV9LWTS zxv0FdWBd!#Fc$Nd7d;OqBcwT}l^`Wd38XE=E?fd%Y5rGdtUyzMv((-K3g%;oRB=7yLj3KdNo2cR%V2dzZEPW^RlDo2Gaj}x zd?~h&C^1d1j#F%5uI=Gpj8<7X6|5mPQKM{6Pm%C&o^Yon?meM`_H% zf(^paB9O=d8b%=j_X-$9@{WM^gGCY4f_?n^r)aY#7%{R}GB{Cmz59?RNu1y78%6)5 zLa@32?_Z1kVS#(dzL?0Py$OLcG_G&7#PP&Tb##x`;0_lt+8=L?IaJ=HS@Ca?m=IX= zL^Qe~*Uu+5_Jo$J*07n0GoXQJY@a8=7tn9%|fed#LwGO6BA3G*>0&r zD@5{w#Nv4-C6Us7qxjC6hn1AXIVh+Ha7498{`=LqUZ<6M4muLRVL9+YVCJpj|Hspt z#zWcv@Bi7!Qnq9#CzCytv6d)|wIZ^IiAxwe*=lGb5i{8uOUYWI?7J4y*a~H7j6F-X zP)bz)*Z6#Y|2x->>+z_V^PKl`ypH2}09W)#*fWWE@f0AmifMifApQs+9-!(D`nuov zw<7u(^|dR7U+Yfx0!jW>`UTFq zVH5nJjb4*c|MPIW&nfDAfvepYlgM~jX!ZllOWteIAX_PQt{(Pr!dxZiraaDmlQ`?e zkGZ9387L+5KE*B+#uYBd3tC>OUg$zHGoF455&rQ2a#bM3pvd2((d4EcVyQwe_tdSP zs{_c^XrpMOP>_^NZA|u8RZN3Z4)zNp9Y3+iHwS4YR8Pyi^F1o)R{J>lKA8@}m0zpI zc(l@h8l{vTB&kep_l`CIr|wMF6_;A7>no=Oa_yr=r4yUDR=02(he)PE2w>%q;Ef~u z{W%I}%g{z0ftY%nKy-yP4dZy0{yT(cMtlb~xRSr`q}j5aapTW7#`Cx+f~Fyy1)s$G z2e92L7z<=$XSnpCN8qjli9oh%Q{;IFe=8pQQurAjd!!M&E&_R#&`E2^?!oO`>09_9 zW^=-sgY#^5{&Xx0aD1Z@*^EEedDeb;=URFDgA?cCJ9q8_Y-hB3_le$WYQB!OW^&(t z#}wMwdu}a3aZUQ0>oW)rY@M#X3qkwyifxJ0Ue+kgUnR(oQE#rieR+%rCYHg=9LY=K zMjKKx$=_kL^f)6+7fAV@Oh88m)M@h3D9ihpK<>wqTI8492ftEh+c2qnUSz>5+ARkI zvj<$42pnM9{_o5$ofj04%{$CpAN65P+l&qeY(x>4G*60DsRR?eRQg~xz^KuOiLiDD zQfxOc{c?w}kKb%8-}QkUQ@3)RtnZV)RW|F!u8A}T>= zmcecy7EiLxSL%HVkA1k2io!rH!j)p##YZfq$WE5Z)|`qox7!V0ZaPWSo6sn)$18JW z$U|Q)rPE`(lBh~CtMP88Rgj)hkM=!>&%0CvhF{mMq)}wc8{(!k(yvoEcN%B`yAd2H z2*+ORDH`S(C}Zs|gv#>kXEz<-o30+1BO%ym!L!S_cZdO59xwke-dy{+y4e7orYD3K5$`gmLKK(+2GX(a9{KG( zn7Mv zI`2JS9k}gxCje9Dug%d-)0}E!X5{jGz#ubqMH+X2?Kr@* zzbKum$3#FS2ZX)0BzPp=Slzp|V(6$`J$=ix=P1)*H4>z2CL&LxGPl-c-2%BdxxpU2 zQGzDlj5%k8uYp{b8xLFZ+)c;4{+&uimFR5EI|kBv?3X=(*<*YX&it6Z%$JSN=>LeR zTxG!6Ci%91-;rXMSSXl&`w?C{Uv^CsXGVnhs>M5Xk0Re)1C*VD+Q1hmzR49BGe}mQbTE8p zMiD#bXKsN?c2F5)_7`wE!_O##Oj*1kgwc@EnVZ(2=)etsaab2w3axv)zN?x+J%Ek_ z@cL->0LvJfnGYRKDAx?&_2*`P{{Wt5lWVQhl$nWZt!AkKXz0-kNPQzlD>U=zw8v!H z*=!^tHH4a^&35K4c(a?#Wop@}^LsE3Yb(zdLnl0N5P!W~LPV5jUgKOg<3KrkAAz44 z6-6HNesXy)*knmKE3G`@)J)NBp-;UIO_nxN>M=?7@r*XSR->JO{&g(n}bNV`$KhIANKO ze2DHikaEZ(||;SY2c?iiC#2y$Kf~J+6fd{O8rN@w^vUHq`<>Q$YAhgqDZr zlv&6*8$4{?WNGOyFSePY-cz*fG+Kp4wLB1KrC#Ypo_7Q)`LGbhNpFg;0FUU9+Xmu;$xXl z6<;(qwx^_CuD9*v5|3zY-&RAwqEqzrsW*SKw%8*g!u(0j*pTB%cH4~EZFu!xoC5!A zJ%2TniW%ca^Kd@+nURtfM)JAbgqO|-_GKM|*@zg}TarlVJLFtQYT^WMoP|=C+Zmv3 z`T7yOYH=(z9~K&#A6^3A!$rkKb@qOk|N9>guMGo}y2A}I7`J+Z9jM~2F@w?(2hRo! zoV@{E=8BT2zauNAMSfReEGH8NE>FGw3sFoZjPHW3Czet|em|o`?oAGv+iq=q3@&ET zUZ2GQMY(4kS<7FAKU0`a>sR15o|M8fEGfy*(Xk{{we9wzIr|UM=)_~onG}VT>O44~Id5Jl&IwWR9GVj>USu+qw*% zh6`N##U#9V)ds+n^?E-L9|(HPW-?Pq`m*Dv7%o1QSjkW%9K?Atni2 z&h$Gx=vxATY<0yMv#=Oco^lvmu3#VsX}REMI-1Py!B{zSS0z`;0+M|Ur5XARF0bsq zV$l-h+(}hTO>`6sAxSx!KtBVe198Hej%Gw83|{KHqhqB!67SC;*$Az_t-j%aiM9O{ zZ5#luEQp@s%!hr;K7GItn0^DA;O1HbuF}fMC;o3HV3k-8M?$knR%!mCditrujZPT` z5RvWNIaYSotKL&NF?SICz15PSp4}C^lJ9RMm%x7RQ^53vJVm!a94k0{Rlaz3lMR4K{&w~ zi!aqY(`W_y_tnzFkWiwRrxPF*SFMm;ZL8tTR(t#f<(D?>o`B?_?5TxQatH4-WBmQ% zZ<_e9?c&)B7KG}+o*~w{BP&Al-_}?$bnDuyHLY9O@T|fKAx5Lf`+<4jvz`Xf9=pBA ze)OXipLli0lCoW`MLqd0({%<$WcoFYUW47dmSCZ(rUBaiFC`Eg4$B0L-tb)w#U>Oy zr?8()fJ&mjZ>>>wTT{ham=y`Yc8c)uM-Uya6v8d+Bseq^I6}z8?@Ov+-JQv`5kZ?3 zmoOflHp(yDb6%$g++;lc{0Q%LK-H=<9-_ZKPqTFr;--bq9hBqhAoOo}APlMH)l?P6M( zDPga#RKtNspg|xwI?VeU@c?o!xeHOqpyo6@_H)6Wg46vVQdKe*>*m1|mQ_iS)*`o= zHp3zSs3F2lh*5dhkY^Mofvj8^)4w^K#+XF1+87z|ZmJ(bSDpAv#x-u94b#y_^gL!5 zM{xA;qmc}$rO8a{voIaxno12L8TA%C)h<5hVHyR!d3 zwU?c1h5xOXTn>R{mfpD(klPtATMG^KcbXHtjrftSO2rpO7bkRKI{)6a7S@0|ZUkn&QKsriLffn%BevURa z2&=zpE<^UOpMoKUv*3yU4uU=Bw$*<*h=o6Fysog{0)?sq7a0s;NUch5)9xQ88IVlI z5ddvMYx?n^Zf53|Ku6_0m~ii2+gV}CLpgoFZqhV~2OSVb40g!Ic8k1|Y2$RMk%3$& zYC%BoL?ChI3&;{TX=Z%|OBel74Uds~<6isp-I=EMU_5_8(l9tBJpv-uKhO7JWLly? z*RGM(Te@w__8}G^RWgrS=NZW#FRjwVnlDxiN?c^e+{zU?0o~v*6x|bU-NO&eTF#t< z2Ez-523YFx;#RomyIwBfL2ug8V-{t7tnRu2(p@@7r- z!{jZi;7`y)2~kRQ8bm`v9>X4WWd@4);{Uslf#@|QCoujeFY_}~3eFL;Ub8>Wj8F8e z#W722K8RecIq@#(xX1;odl$feH!^Xk6trHZeK7pI-@Mn@6^byL*eH$hHltjZdJ3pgav?IX1rFjk7uOBx6TY?wM`I zMwp;mp!b;{XaMy7K)J1VZ|N`~10bWe&7?6Mmy;RikEw5amIyCUdXqVMraSp*Mih7( z`Q(c;vM!y9AO?d~knPM>8C*p48$b~|;|2j+LHOc7v#iKed_v#(;mjESQL}#~ zEc^btfUCne0)PP%W{<&``imzS8$`jHDv(I|PA}_E6)4h=9JM5P$+1z*6*dMjgk^jn zv6Lf*fLaK@Bn|*rY2~kVnEBKP^hyT}Z&IDRftnkU)VCkvZA+jzqjoa*laGol>6jCK z>A<5Ns5ilLyqTB4IciM((n{4Br4s1xV*^dZ;(+^{HY9ZICr)|F|5)az#Q0MPio2eH z#xq5*g0oJlFwLj#0TFJ~rwp_i+v`2hm8A;0j!gMb#?-Fq5P0JpF+BdS?g;5~jT-g-qnZB5r!o9u7 zWQ`)6=?`eVU2GM&IY_%p%g``j2jpb~h*vJ9heQSuyM15h%8;)t*O7Ir1Eapx^<^q9 z)`)in-@B>_YKbaSxIwMTUb#zu@`*a$UeHF9a08qtJ8v7Q2b6Cpv(+7eNekr~i*P7y zc^LA&-E$9oQh&zj30r%A?fO}=B{Jn$X5nOk1*Q~c^+GgoF~5YuK;o(j6Rc6X0`MUx z45`56J?mKhS+7xcH5m+V-K`M(jGNMf;bl?ice)4Xv{ zmli?`Gp|CU4Y1p_EckPA1Xkc)Yd8lg2`|N;GjWW?$1Mrv!-XIPZ%#Pv{a}L<6o|gVlWKF}0%*mjmG44b zRS5?ek1l{eLETXbu7n5X!S-FoKKOy!_Tlt4xPi(70DSKd`_iuO5CtPyrDuL|S-i-S zdJqwecwZCmkf)V`f0ioRU&qeE6jQy3#NODOtN zz#NADS-ZrNMfIl=fPXHu1`1J=v3Cb2&0Q(~G~^QDJG0*)tR|aboOMTbAg_K^>skY6 z4GiAd=Nfz?62?T4uBFUd7=m*22C`L!Yb{F?9C8dgo;M6BjiRs@0v`DMTF25Oh#qIW z_{j>tyZ|Yg@vzY=k(c|`NH0!J8&F&SmR#%XOzI0B&@B4`)#C@zbA9rGkoN?2ts7}E(b*ijh70O zNFCVqp-=0yvn^?(y)WlpF}ukn!1{GR0(ny-7}67=9>A(gF;Im&VQ@CdlV;3y7+UVO z)v~Ld4yAH6$?Z#4NGi#GfwS#8qu{pwdZ$(cC)d~w1YeO_bs*gR_5#!0O~*LlH#g#+ zQ@+^If0w%gm;QvhV||#<%MHtYXP!W>A1}yvX;dm?{28N~G0?L(O%Q*7*KuiHRB}hom(O31b48J*inf*LH-)GRl`$ z3U2!lcc_Ts{sSsLV^TCU5>k=MTZCUi$WVM6S_0r7OQ97tY@j=yMOOeLmw9$CFi zNCzhlI^5p$1u!6g+#u}9@yiLIXRodS8f0?-I)wU$pR^?&m^Ty#Qu=1SRApfdK4J3^ z-$BJSdqx{AS#-<*wK02G?b%tcly=S6IHR=xOaV#A?I40q2o9>p*l?}zPZb8*1MKcW zXgEQ}`2^3dR~jxTJBDBnsC`xpG+k49G)4)1o^5|o54d;ju0ceL!_cXglO$fPxMpWI z1{JxiU5FsOfo+@&0El7VcpOoy`N}AmAXb2e&5y$$cI4n?v!zW#vz$(6`tKtCeI=q? zRxlkIFsQ(hw$P#bs67@XqPDBRH5NBGjsBa;!6P9b`Z9Uy7*p|4|7=8Wtrs^GCwKw~ zI;yaA%C5>?GM!0#ElF3AU=6{Sy~n)<#O{&u2C#x#g>d3WRWFSRrd^|}BN#0}5{$EeW5OgIqNa28!9+%M+7@ihK)`dP6nR`oMe;1S* zfQHzgqGz=my7bS6dAdSM{-?f2Lm_Rv78GjS#RN*;>8ok$wt#h>xkjBUxipmq z(CO(7m|lX|x_!+$W|zJLRWq>TR_NGvswXROxa1Md4hlay>y^eX#)wG0@5v)p6+4*vWl-<0qMQVXD(%4#JQIPF)mTuKEH-Rj6AV0Yn|6 z|4Bc-5}8t_RZL)G5AQM$l;Wv75sJsyaiv0B7S5fyNohCi_^d9LHn0ewvv;=jgHjXT`(XKL?W_yYfBo zccOu^hx7(mPu-e3UyoVm#63XP67!*A$iEEMpb>c12U1xegY4R33#7LbiD02ggzQ)R z9df{RoZK?iV{MSnf31{wx9jUsCd|&WT#1p!OW$rh(!wN^>wm%orf)G4z;Y-<)(~(W z2HJV(p~M;)YBS|n50>RSPB@465+NAAjSxPmL#=K;Z6pbR`N*`L#^mwe{{ZX(;48th z*?Rn@AvaC2ngj6l7u!I1cZt9;&0L4*gzUQIfx&zI!`p`D%d&7C0#C1|%qffcd6 z6-*r%?d<%yduZC=Jz3{n62N%0h&p1fe*_gK-y01F$*uf-rp^F7#~R*jxpyBz75IqT z)7;Bn(pHIBDY<(t!;#$|PypztOn-W zy>fq49NE+Z$o%0o*~%yT2aUi~L-R@WYaNIM-h8IGq^w@(Vx8SfT7XlNs*`>1-RNo`$YOMR*&10Q0jS*bFcGc%gLiyS98|wjlUi$R1~W zO|hNkda9b=VQKal?1Qn~yQk|JNRahk?ceTig^Acm$$RCl=Jkt+xtOe8^>6rm)&tw+GzFZH%|C#e`WxF3Ph5*S zr8)H&suXbN`TlnelOPA>!PR@7J2WyyP)VX*mVQx|%;7>$C@ru8loi@Gxorfn6!tb; zknn!~8Vn9bt_6B@=hHSf@=4xfywIeL=(MiQ)rV^s2taXWZUPt^EaT!^tNV_75BkTk3tNO z>7hal;T7?>5u{pHiQNGk3&B~I7mh_;8kmbOIR7DGytYdLACJRW`6@g zH|Q&?z^S@baB+y3^>|sdj!*U-^$J}sX z8Kpi;5@xms`uDsfxQ@9N!EWw!>D2$8OB<(v5Ny&Zp691#1rZnJ1BJJl19%U#SHs-h zO}Yqtp0Asl&l|;HeaDf;7#okzb zH}ZLy?(?k`rJbXfP209JO=wU&u)v>MenLEjsxZNWM&ZR^bg`ImKAd_r^&75jX4&8` zj0DovBn}@omT^u6lOFsg@f*jO5G$-K0mAz1(AZlAspRCD3fq)DOlc(Gai6e(OC>e~ z{O!X$k$XSHTym1ikhAU_oW8j6pshce;InEJqwG-bw%$+Xis6hj-0n25@DGJc=(lyi z@A({z0DYj{$w~yh311qN+&5hS;3mDfc1$i&8V>#qia&UbJ!lRCvlb@u>86Z3;N;Z1QWP&@Am*Nzv4T<*fvEB;N-)6lib+T#|u&KjZ7H*{{tD{w%B6K zH}nZWHg6gR67PbdzCxb-bw^UBoV}#(O0DkeEkwph`!&||C<(J(YJNpGueotmLU6G@ zdArws6q0W#cN{v2KEnIXX+tcJZw_V+=R=`~ru0^j2(WoM#K7nEJ<3u_eWHMy2V8#R*fJLKs1gfya!PapHx~oG$SgpG zqzL-29cpAj5|Q)h=$VzV6IFh#iaF3!ZUNs9;H?e^KA{tE9C*68nYU?%=$To0y=->_ zM>|KIm)Th_g`+}H9rI>Q$h&;|dRhve-52-%ajr~~k#%@seRQg}@e|v63LZzqW+(7J zY+e8FUNvVZa@_^zAV4MF;n!PE|5exJ5T&fi1LSh!~dr>C4nVdu(OVwg6q zh6@fV_RiopE=;r_=)5pnR97CTzy*mX#9~KotpwJWK+1^uKY;GC;Z5*5mwz9%R8<|3 zghA+CV?Dw@=mYh5^frrLN&T$XEi0iALbusIHsgvUn-SjxyGKOEdCqV`X6k)yj4k5UOE{eBK*%cj zdvV~v2WsqT`UfbltxO2r9_6_Fl1YFF0eW;t9An&{)15fwCokTb_dkGr6!6}uex1Y_ zX5oO*E6y}fs-wlpeiZ|yBvM<1In)63@lMsbt_|iBM}OdMYyEp$CJ{~~UC$WJIrQl7 z3(@{RG7C#}_BEdxMY^j-5l`)lO_8;K}fjOr;YMU_T>mJ@CDzQ*kYl$K=y-dWY+5(_U!mCybW2;H;UP>wZrUr0M%FPw# z4i^I%@@ZC>Hg-hb;6d*=F(L`6`;>*(=`7v^OiyVdAESU$Go6SJSh#)gu=G86um zimY(+9Me|~KW?*$%PU?JYtR;CCelq6erDtA4Gw});P-+5z&afP@&fj-4UB-hjHBN` zQMFzLXFEU|uWSwgfbEZsY4Z0?m0&cyY~~VPk&W-*7IIVD5LE9FcrQ6 z)H;d|N|HFDs^K>euNVx`o>IzNR2O!*M7W#oKkp9B)tPsnclxSmN`UwkSfRtrt4Dvo zXOD)!>ul;6iYTnc@`yU(J9lQ{F>z)p3B~g;ZlE|eAMnUaBEQWeHfVXOF<0SxW(3)_ zFm9*;KQ;^f%H?XSyRRO~7?xXd5UCoEw3-9`izYpAdW(SmQ2vLWz_bcYJnX!M&>e7w z70R$&&!8}6TRh2Thr=`V2%7G2eetv(TyFaau=mDGjEHVyH`J+IfPQR*+#e2S8mlMx z8M%OSKJga+ey@B7bL!_KV|OJD=`kt))mkQRo2x>M`twS3E@GNJ=(vwKlNG_xmiS%+ z1s@?4(E=>DBpZa;<3DkvoEP`l>osueP_XIuYH}5*!aD$h^6cp-uIk?1{dHb}OgG5~ z*wLhq;L%spC{av7*#i^gqV=F}BUppk@Ui)xCt&^=Bh?A+bgW(lwgW|`uhWM zwjx?dub@S3WbQGBYH5$jyVu!&nv5)Ae^)Sn6~06C`Zx@T8%0ZhVE)%ZW7w;W>NCxh zrV7wRlz${n%Z$vCuqUDcE3o`T%Ul$_CTH`%+C(YbA?4R#+Vh3Ng@i3LFuf_jA|jSx zUv%h*43r4I(CGt+Qm!8%yACjxP(Tg|8{s4t8$j@W=rmWY08RwKk_E`^x8L%m9{3h~ zM6W;aV%b+@0|ey2J4HO``VSi!K#cA%540*}WpuRW$6sQAb7o_9SkHwg%|CICSC0Jn zW0KQ52QljOCozyel;8V2gxWIl4S+jvs9IMD8NGpGJ9F*S6e1ZgirBdCZS=h`Aysp# zOHaNnvE$`FY1~xx&i{ZGR`lNi%-_IwaMHU%`Z$wg)Q`QSYXI4Jt)eyncApkZDBJ$X z>uqp^FmOcl*zU2zLcfeoAnJJ^#6kN$1{1TsICUJ-!Qic@50+_>mFRc|434a|;KJ1Brcbm6i`Vi! z?0;}z%px)!3H^wSXCm13GR1gS)yH{Jz}(5fa1Y38z?oX??QGEGcCTRH?P6;nF`PWgBum@VALfx(8Hk;eTp0P@A1(6h8M z30b~m9aWYSVgbz1?C!zs91^|Gglw0};&UlR?>LcVyLeZZoV3Oa9UHdbxa+rvNHbB2 zIv0UY56RX9GWP}Wlz+QIjJj#1GmbPKx#!tL3xyfK1^*uRH<y$x)5_f8E8XZUkI=a{tR=E>7yD_!=!-M)8?!B!{c; zgHsMPL(kr6waP}+=poRmU<366ne3k#5#jqfvDn|A*IZnNmTy=Owc(~?^iQfjtgxo= z*!_Xh-}KoI$l2INt3?D2Vbm|4TCvaT=UDGm#oRK`YRy928!RjUSiKk;|BKZeVxP1n z;W!lI0KO$B>jf^oqEh-d)4mgW6^v=6aC>Z4{jqy`_LW#rTjYh<33r@f!3%U4MC~l@ zWBOGJ4z-zoHYZ%u>*&!pL?r4Ts)D&f(u1A=oyqp`;QvZ%t1O%c-#oDXy{2tYnb1q_ z_VeQjE!?@>v>G0X%>iie5NEq=dKZQ=p^=>moSS@e-4q} zAHjGibJUlhw!mk76oY@*^6JtJF%WXKr({O=aytL><)WTug^c}cJ^95=4?+~vBj{qt zEPyr0A>n;6>=i@dA-mxy*iiF8&(Alf9q9z?uVHzJ8=uY%FLx(AhhpikOqqxsD-7Nb zZwzABPix#9MW%uD)efk8SMyg`)0wAV0J30g3|)%err(!JXqH%L_H_)7>oV_GfdY_< zSy%vbe)(N9v}85@s_I+OT22YSbGc-ai-7vF$rI~vu{P*~{`Dn*T=eN+rX?&ZW(Db2 z-2$y3&#c!E+_R-nw-x*0<+~y7K^>e*uczu{Is73Y^jGLL&LPL}JUt*Nb`NSJSK03+ zkv0tmLFFxXW;9YC};ygUa=T%W&l$_!?3PKTVM{dY8NKHb(d-h^G} z6~_9(oAKe9y2*JqP((VwCdB?Qm4pp1^P3Nv3Z*({aX~2K@RfcHp=-8K2Xp_Fd0S7g zZnHU|-lb+nIbGF^;CU+|a=RnA7rKAl`RsyBP#-S8ylHc@K4=gIUdsfs=yvvbRQ+>4 z8n-20bSYGKy>w8E+`aK6j?6j72+@<&FSDS6>1-5kaQkXq>&F~`vkn^)nJwkH2w#f~ zC+=an2scPH2R?_s?=`qXi05fyjDaHTCe2oNF;)*MbVQ+k<3mu>uLd>JBTxK{J}nN* z83{LN0XOM-jD5EsY^~RfxevyI>)>5)G#&XLLJ=K-z1u2SnJC4B4mdIvg9EKE9&eZCAiR zGkv~ow^!j+05J)V4R@~Hmg%H*1#hW)@A}(*#$ab6^J0Of%)gobTX71z1Xu4@uIIUlKx~L8w<;5+_0g zR=C02)~o|D?a)zg7gyNEi4u}E?oGcK$wHp`a)>%+H+1MZ7a`DouhLiuL0w$-Z22%# zBnxISOcd>D-6e#u#}dIBlxK><AJ?3++wm#+IkwD$B09l&GozB|?>@ctaKMJ))UEPh;OfflyI<#8Uyq-8O;sf3dyd)R z2xj|%;ZTBxVz0DP`G7ar+aSpaxJu%_DrGil>6|bl&pXRB3ymA#&CU9$ z`-0N=n>qbkIH>UWa#=m0>z>5c&pbgxOi8T?8+0<5kbPSOkkDm24=p{>y=cv#gs}J5 z`>#@awSEk%_c}pioRZMDC=j`S|k$id;x#3n$#0tdb+AlI^{75q!yZ#~R9^(MoKGczIFSVAHgW$dm!OE4C|zc8>%otHu&w&L#+G<#%Q&9 z16vi%+>;O~&m8SuIgT0J&##Un&opx#D8FekdJyDVYG}$!45UsTeERd-4=fTOW~S9$ zNIg%Z;$5EWz zUqu!U6d8c!{{-!ZXz_+#Y>ap~FT4wj22RR8Xt9`eLfdmqq$ zlp$*yH*`un6UJMAb_0n} zXrwmqgm^bmc;k)e&P9gk%^=0NFx8E zvv($Q%y3ygI=;(w*YiVu+~}JMYDN*a)!fIMV)3g$_G4WYx&1G4KU&sQD=+AaSOcjC zM=gt~U*z_8Ro$B?!}bBHC=~k-K`Wve!B=Y>s_Kppp}$XzJ)I5uze9`~%e4jbiWMB8 zq+;(m;NRJf?-#I|0OmbcV?B^57E0sD_3Q!tnBy#tzy3bGW+t;QJ35+?{K3IRj6q31 zw|T7*ZsSZHrc)mO{XU3T{k*FaQEPSY2LulVPCNsX3)^uRWg|yV7fkMyfqDF6Zyn}$ z+D&?(rH6 zyS@L0I!xh9j6R$;+)C=^p}EE;gs>Bu{h0?Ud?oBe2MmC&v$-JR8Vn5_ zjhKof1$k}eQv_Bz^4*j!t9d0}8Iw_+qCM3&oAUTD6dukMHE4Wd_6GFN+LxbsKZT7S zM7*qz&Q>b}q`lPyo>Lfi`l9k>PhtO!q_o>1jwGCHD`gI(O(42iuZsVLX&A& z@R@x-weDD`9*?M{y>KjqtjcE+6>ONhj%f{L)n3s5SXDA<>KN2$f5UwbsL?1&Oph0A+ska0!0KLNnytfBp z<&8a@w?C!D{R?csc_N#^1P)XvC8+r}6vHj;0EjrOTU`t%fM3?bp+OT{jUa7 zx8(P6AVKbub>Nck=rL@8h4D(c-!CM;)dc@G_C}gM(D%k#;Jl#Z5>INIbk!df5k-$= zgU{)Um-Vo3=swv1D~*rlAh6E^;r8*PHcsKgOo;Z-E6^AD^4N@LZ;wnwvhz(98Yfvl zry-xFe+q1fUxF@@_}bvVL8kHmQy%*~uz0b9~Oi(!hM>fUUPB6mas zhkpgocr+j;90<;xrQK4{$qJCcnARGJT>H)OAj%zD>Fxru&zEH;o#Aog!DLpa`f zd;X3nCuq=`}~$ABYuj0=Hr!Tv;qA_WNGPH0mTAG`xI4F8F`t#Rd( z6**eC%ad+QU|mcDzj$GybyVP}$nf%qdpr+ghg6uzZ|_)SA_FhNw4wM@|62MU&TQm1 z*7#++2Ppo*3X$-*JVPS~f+2$QR`$%u@;g2vq{ilNJZPeY5!v>mhTuT4jy7MZ$GIG_ zzhoLWru(@6a~=QqkLmzVJJEOL7=+R?ZA0Oc>K#-` zF3lt=Lyzr=2f@^&qOs-KU#L{ljA8lK9}<^`(6uBea@f~qKC@3b(In`!i@2*f-Pg0n zZ33sqmbK*+@8P$Y;9}UWX&KtMZ=bL}3?sQGz4zAXF+GmOYTsT7Je7H>AYdq|jFM{5 z&4HAk|G9_I+`5RAuc0=gAzJ^t>3{yL@tAz^SMw|#=DkJ5RWHMyk^_Pc;dr$3pjxl2 z81$I6Yu7-}r1{9{?j{rh%jFZESGBXmDCD+!VS1 z*b09Yj|B|&-o3F*B6-Q-ET;;4YtQ=aL7~YC<*z?%e@>gf)7><5t|@f1ZM8x7`0w(N z5NTXl_(Wl7ndl<3w`(oB66n8KtWaZc<9764Z?{@O!`($h$XM&14!q@+QNS+T981%{ zZZGYqB!6GAlLAD)2JR{wq54}jv?n|AN=VeF*gj=E+*GuOQ;@q>UC4MdvEU4jpb!NR zd;Z>hYllPW+y{-FPb|QpI`0zXTn?U=*1JiiG81lUxA7xeI}mzv*{Xy8+7x|lpjtw= z98s=}M`(#G z_3fI_BPcrg;L(uDNWNmffbrGbBgsvXCr+4jo=0gSdO{7txDEG8)bFFHx8)Zw!^-j%uO9|0sJbY0kUx5>kHRP&BgtI~5n49w07l{INUghF z^2QCT7QxLwvIGS_1w0nJ-*2-T+GEe+u#)>mFEIVs(Rea<1YGzn-!+IP-?k0ahAZvh zazV$pRoJhk1kB;*`aagE>(MiJ6gd3whBe?&H4Lzg_60#^RYwb_pR}%FIY!9NVIuB_L=q8XG1SQJ6KG8lju7rU z^av_v{E22ACL=u^o!vO858&jg`?%Pk+h^^?Pu%u<@H6-3u`)DSC|jd4+roP%j)iwg->}hM(7-PS5HF|5Vc#9bDF~ zb!7mc-iOe~6vraZk5axU4 zyw&^B*)gH8RO1LE*?JXzzx<$8M#U2(IBSmoIuaq}2@HRcL5%8pR&iU87q!d^b4o$p zIJAeQxU5uSr22N0NIyU*;-sEt44y-g%k9JT;#yl1G;mL@q!O8aJ_(~de%Ya?s$InZ zV;MEZ&Iam*7AYdOo7Lr2&b!Gf9LtIoU$T#xilA}LIv3%(I7yW&zcIDfPm@q!4hP(84^tJqo7{z4A7(I;H~ttuZD@g<^_E{ z!nQQrVV!09i9=SZ^{WT!7rM3iBZ%U9) zlvof*4Jz=o;zh@1o`sVc*Z|E<^xAP{klOmGlD2Qao-n>%5vkh%;}wpzg!GtRNUI5(KiluM-m4_LFzV~}AQ!56HLL5(4@JlA^v&$R5#kmFMk{skOQPS^k zI~1-S0C>+&;&HYcy142)aX6dRTyFUGt0iR`t zB`h^n$T#*}?p8KVQn2IFS4-yDbtVb?Re}%8X9M52d$@=H{Y9jqYp2$nFp^8J6s0+a z2-_+jHeT=cCSuvmRA8Dpbk(VLJf3tUOO$1*&{rv%nLvdI|KM`sZAU%TBecTA_j>Zg z{OP7c4z*o|rHDl4ui8%`q;OAe;>PV;h6Slxm)Vkp6&W_a6kg&$-stvmg$MqC6GUiW zhkPNNU(K{~kHwihwJYc=INm<`20!dfpNXpVf4hHeB`+{+>7cJ6SdotPxL! z{=y{54};4MUeny*0lr*-&yP&q6COIc!+|)>n&!sLB&&SjWhOj(eAo75f91gGb-0i= zeUTB|@-|ithbo>&IrK{Qvl@aUaVPlDbK?Xt&Q*Y*AzT2 z+|%wy{#wMUkXqgH=;$-Q`Dj=~@`8<577;-TY__$;=|V=(EzQJ$;Vu45x?|liGFJIH z?9oNGtD6Ut$Kpwkh*7;ycV|gP5(`FIgE3SK;l#%=Shn)Ep8aeAk(JP}yKNqLCD8x( zgS`GaoS9ENsQ{99A_m?Pned(!67R0*PPk=oz1Z|w$5k3Qo?L&2+lT?s?eh`8Lpaz* zQt5C{?q5>A3&qHaHz7W6jFk;go68k2rt4g%+^V>-a`l(rHmPuBkd(hV?zeFJOvf{~ z^)wWB*tIf>??I;TimSQM$C`T3A(f!7PfvQ?s5sRQ}EhXYBXOCj0ZWlxB z?`c8d9`hN?E3=qEy9eie;`x(5PQ2`&kXZ(3CI2A34Cqy;~4Y07aaut8Cmv zbkboWCNRhnY_Akgi05SMhZ)Rw;Mr$ep_my=EtvJ^v^i4PV(3(c8W==7)`g5iJDMs> zDJh~;AoF*{S5P=b`xOFLej1*3L!~_z#qM%)Q3@TLc& zacKD<{V-2utW}FMdlzC?8LQ7}+0m2Cy-@J}cJ(>+(9-$-5N(y`?-0BF|3Ur6$jM(n zZ$M{!!4xwgiE;(JjFXNivQ>dkWUX`rd{vU_$Ua|qr`~RSmu}-^sgwf-suKv@Vtk79 zi%oLC1FScIQ$X+EL-iO#$R-6;%G$w!QF%arlri)adjRhU(Op82$8->Wx7MGyxyhi{ z<2GM~<=zx);Izs*0iyVGR+fqN8du1unQA3p%hL)x*2eC9uVps2@i@=QPwI~pZy_T| zob`m&Wd|$#1KXTq3R-0KuK}0Bzb8z491VJEJpUWqt~&}dTG3QX@FHqN8==TVi+=vi znRgA*Fq}Ol=4=p#7BF(Jb#hO0f|*P+)MnRhJz``{uYtXJY#&(S_%6ax-#_Z6F@EpZ z#C@toRKUkWN0dDGXCrUYP4KD?Tc_yx>R0VS3>Y|cn*Jknpq6=kT;ruD+|<>q!Tt2F zkpA7{1bv+5PitcGJ<*>KI{h!PWfVcm6)3$uYxjibq4pK*{8xLYll>i6uVY1>>Y+`# z(c4qcxLn@YMwv*wCl*nAkBD8Zy!VCumnz1P%Zi9mh57~;-dSh*`%Sk1BYIx(o7sAhZJ)gjv^`M};h*k~NJvPerAaVmB6l%hoaquZxYa6KvICFDfkTdIoz@Sw-Co(NV?1ym;Zh9+rW=>;WMrI!b zcU$Sn{Rin=B^KU#uDlB19hNGsIb~7aasYaq|J~+$IAcMc z84?Sq!^o)Lzie&)p)o8N23|}h>`Jf7Yuc=t_?S^I@cA2+ocjo5&4sgi>-ML|+GfND zBvHRI6jijHgE$fIC02jfHJXd|B%a@5B}{_3_MdDA-@^u^dY8Zpm*Tl@e>gdqmcpuL zn)`y%qUP!bAvxNG%5;XnT92vlwAbqo63D~P6q=s)BgCIpflr+om5HFSw`mEc0dvBi zqv{x3;4n1oiMT+ntV6PmnUJdd3WgEiR)OTu^#ouR&iU2n27B^CFVl z3e&u7bQW-hISo7M(3719D9zU&Ga3&#xJ{(#0}ymTl9`aQpqh=yU$4evbs(~PQ z7&sxw@7VnZdBAQb;Q(G?W@r!EaaI4N{}7MOEZR`k5HwEHe5X;y^KkG~qM)}+2w~Dx z_3oLp3x0ncP-N9-o#VOI>&QTf;#$&XbR$M=aJeErXMZRqTLfK_6HHLd)vKu1Z+*st zj=v@#iF>_)%BEr6PB4(Y(=;@2`WM9$Vz8xI6H-g+4ns28NO|XF(^J({tSMHuA9z&b zHiOHr|8hgCsNIur_}G)6IW){X6X}9lb|E379Zer<%h+X_?g4s!!JcMj$EeRdaNgi9 zFdi^pZw`yhzq814(bNUc>yRfSFvgEJTp==tx96kr)Js!!TRfM=*E`0K$knu!opA5CW-4)y-G@vLP_4JBJm8DuSrvDOHgu@@ED!bp;_ zlP#2FiI_oTi!3SGDu%ICh$&Q(B{Rq_TXsr3@9F%Wf6h7Axy~}%_w#u#_x-v*VZ4HK zxBj;5Mj7bXfg54sjT{qo51CExjK5~p5H<^C$ED=+upeTHs`qk48+X2}G|lbQ(7Un= zGRO0fePH?_;hm+RkXf0B9IXkaS34D|%d6Fg$8D#Tk(QCk^D7dnoCl4k{k&Dst{`{_ z@b#h@atGWEi$zsD;}>XYXAAdF{kSvZof>XjdMgouDC@UPY2hknOf(kWe7*6yqQ6SY zR~;AWzI)~taT$QJSc1MY8w#xnk=dW-nFI)%n!8tcNT?uPUe;9K+>qxXN+Qb ztDTl2^wmf~pfN(D*#t+Sa0n!3!uJGnDQ0s~X*U@DA2|$qb(=l|3$4z3^V3}qJ}T}( zFQfpjWmKr9|9#@fts|q;b>+rHU5%rM=~}|WWZcs7N(SmrRJQhYy>2K1hfory`w)`4 zlHqwWhBZ;fUOzIovyLaU-8~l1PFzzDQpefO&!80ouC%nz!_O?dkLu5{YZk&TgK zX`BEzfE4CNs2Rteol>wNhxQZXv_h>lbw%)|+OqBh@t{7QwNhcT7Rl}OQdcE70NA^@ ze@oLu(R~H5K6>&f&_aAHEa~55dMbqp35*NCGM&en`^-&|UBo=5_pfuSZmZ$mt3PWF z;SYO52z44bB%bdI<@FR|a%dWntjsKba`DF_Ef{dM4|RdsH1R~E6S26qNuTpGaqaI~ z1pF+nV%8NC+C+GZp^CTsim8|&rP9VEn;{hfIvzdRjYp244m%(Nz-iZ(_Vs3=ofU$f zBTxu&dVaM)p_+I;-DD=FnKdVqsUpWDnv7cdteQuIo4@fRR};W`6ZtY3f#$iRcXBBA z$FlDoypU9!-tf34+fh4@Mz$I+61QxJ0x&-`VGow>-i@JYSgV7bF$qWga>*+9>+y#U z-no0wRr&U*1PrpHW?gyI+#FRJxb=V4h02y2FD8oGQQ#h$L9jnnW%K1q#a88 zU&pdOEwhJdq2Sxga3xJb8s$gpUssS*;H!f0Jy~@2`LI3pU7p^YWOBD!gaZqeXfnO3 z-hAJuJ|Y_mz@a|3+%vwlKE2tf0a=Vi9K{hIIp?R zg8;ya69$gs&+}pS^r<$N)MoKUDVE9$-Wxb`e88*@$9<{S4qOi~Hb6so-LS4-sQZh% ze^m^1toQtR=7fxsAqtu#>Yvv?KN-wOGcCrR{5{VxOMWW_vVn$G!UNr2U{(kJE`jaH zfJ)%IrqLeBug_UqtvH5kC8tcNqwSgo?Tp~Jxb1z|%2vj(uxVl&WDGHy;sj}yj9vsw zNhC9oo~=d*w70K?Kqr%(!}J03gRP)ENd}#f;a1d0!9SYL8wTDZSq9nU*?19BM$z2W z;rO8jU{qY?DOMrqH{JLnj9Qv|g1Zqd{_6|@A|vXF`%s0a3a49aF`a|HK0Q|Gr25@9SwO*RGX{s@MMNY9*X}2{UtYKK^0&A$c7Z>Ve)9fB&+b-mqQQA!q-JgZXD$ z^wK9NTyCw)VK08-Cjp-1>cM|wj_h!}-2BX{^U>3JJDOW}NXDnHAM{udtOk^FbSZ=u z&Ib@3?>ZzVgyTI7oep5xjqAJkAH(zl@_wyL#gTogXSKU$JJxg-2v8*Yk^=C^sSWpM zGk)XChUuur_i1vKO&vR&k!k%wR>P9pA~_ZqFV3f2zHSDFTdoEoFE5)wy=&ye$^jdP zgL_P|W7UKQPfzmjE>&T%H=>yYOxdV$46Vs~@7!JlpCnMGEeEtZd6ZhIDF;-qHDVO+ z-Xh~FH@{OvfiQd`K~^}rG92%^88LwBJAPCOlb(Tu8i&u)otWR}@UY@M|U2-nw&VL+J#HMjhTN!7@x?N6s(b|(rC`qpN*@?0|Kp|4;c zQforw?(78cdx(qTM&zu3-ybZThdw?;{KTiOl=Xwj7q?w(-btMm0(Htxf4PQ_Y(>vU z-VeThb?fOakY8~7t9`wx8>xOA08Yn3V!k!$Z~Jq6p12Fd3Mw z^z@IFE6_1F6>faV!;82N6O`Lth3Cy@jKE^dK8%!(w`ayRjb;Yigy@$) zAdr`!TQ8zS?M{Kyh{+iAf=YHD2qTu)ILWDYcVV)TRysW;C2{C&om%NttVF5Ju#B}e zk*XKcxS4YAcO)z;duQjrH)Ns=V0{5GUqR`p(}>40c8#$0U&DE!jJvh>T8sx;f5TP! zx3s?|{E^iB?>^Z{TreLrRp0py%!c5_V0yIDa%*RB}mP)gmR zNAAtg?!xntCFlj)fhuLdU!`dSqr=e}EPYGYx*+O~4Mx13!uD07BvCL5tlCW1{FRqz zNSP9&WXcpe$D{`HeUyRod*2>_)KAxx^zRL^3nUq~g$iT+jP_v5OR1ysQJ%R?%!tQF zpWVs$s)mdFO}}{7&gbd0QH9Q7L5E0Rimr`A2=jcU_7jjz&C@QpO;@h9NkcRJ)$tnA zl21nJE}8nN?N@^&o<2AGdgN;AZqYO4#r|U={36IW$io}H%6IH43GXLqW6SEX(l!P@Hn>Ui3{M_+j0ZVAawmG zOmv7WJJF3a1Ul)kcM~r3_kH?WUMF0Iumv5X4{%}1J7aLn%UOoDB@d5~PMdLleoM*R zxLB-4jaaoz-0{uGqjUgOXe9PR6y38Kp#C!ChAFGx+ow#i6Z}Xfl|%0yG5grxE`FL5 zTzC#%guZ?nYB2WAsVo;;Xcw)1m7a5H9Db{+1$Lq5>-5|BYlZm5-t|D~_;m3Ue`YEe zOW~SNn+FuM!{F-}s$E@w==Xdmhx#vQK|*Z&FwEC?0=&R-U2@;N-%y`Efhe2^#2xgo zh-KB1RN7{sx2O+M^WWAp)43MM?BhXOk2(QyK4^tzSW4Zrh9UJD!w$apfe4U3c(bUU zPkbyXjI=*@h5pau8{7_yvS{+;-$%^mcMR4_zcwy~}d>0s__jaB6y~ z-U-M5k`+@-s3l>lkd}{H(k?ZPrk_zfOh_roWK>-vx7djE1|itaEF-6cIyw($AG7EsN1XX(jVYAg`~8|=`A{qGm&#<8f8K~rT?A66}lO*aPHS%l7L_jAt>I1?ak&_B}O3bk@f+-Ldb@|HfjukjVV1C_g!j>p>5Gg`mFs`|*Su z$#;hoaf=Kmw@R4_ro!8RXiOyKo}efVy$cmCKm9hS$GMG}xFAt+_Q>0n?fnUcbAO)O zxpyQi3MF?tpY1)ph&uiEB-Ss=Sn*Y1?e8T!H5}w>j7p@PyM{teDdWyaORU}V{qy~% zttfiLCK?XTyi${iPYhkz1~lazoM#Uc6zzVGN=ymXbE6EL4wJ+2%ad2TVGe2us5kH2 z#IpXqIeIcqqITfY(u|FO+1X7->=NUOr!}3$ntvZ31_7#l!GHv{7sNgQ#wtA5PST*G zY~E`ENGxZB2G7nLJ8eidx)apwIr3Q$z$?!}edp^L*A(yI=|Kx-;V9~K7Z(Z1HhDYC z<@aT6f3pYf)2pd`n(8khojS;#8})Jg@=*xFF0W-LHeSS;9Kilw%#xhqv0p`|4M+k} z9JT;vj{EX(VTheO4Oe*9BljoVu-=~!Bc&8N6xCYBk~qT7E?)`=;=F%Qsoib@$2BpNhD= zil*{RIUogv2G8=K(1$eOalfKsB(Wx9XOHYt6BYoq3DAC+0yineQW$y8`&XYO#rb>x zIo=<5r79@P?dEg;{+)((UvL#UqNbwg_K{!-2QNFu^z4AsNbWcevSp{Bqv*JihSF4T zx=Wwa_!47Wae4(((Eyj~kDTiDIf|tEp64WH$h-iO(kW;HB>mK1uW3;2Z5^Q9LD@}p zd5+u+0K~Z1K7j;$&KDmNklD)mx44Pi9-tZ+e(x?6!i^GZ8Ir=VT{tWI7n#1h}&Gd{$4`!1-1|G!ot6Hd$n9r|ho)a9)KgMieq zEl@H+jM(|o2N1smYfk&zc_`;)WxFrEiVjy+s)V0(tJ@n}_`+1i_npwms! zmQ?{4x_u!6yell$Ofg_wTGgg%i32{gHD7v%Nb6Ok;JY=J&%AaZb?{1j7LMqLNs=V0 zk?rGPX-*CWqTUl^Q>9O>5E{T4vA635v zfir`RH8xz@4=VaMBd}r0=R{yWIh)Jp*_c@4U{DM$W$3m{#0i0_W4MY=zas>Tp(jl| ze_SHSMdVMrJV_semje*!mF$v;i58FJPR)jeLb<^Qzm3C-=iQOj)8EsYMoXJ`VE%CQzmWQU`zJt`57T@w zQpzBqikZ0!vb`(3plSIEL*h8GRf{%5n6Ef|q3wi5yocAp!Lgy}Ah5D%XS*#BPQLCKKzHn0 z#^Ygv&v)1* z%B`W0%n4vuZkOd~`T*AbKG`!obaxtxC6p&xzrShmdKRkX(k`smqozFC;-JQ&URYSg&|LMJHZKCtV9HcuoREdLR&=!OiD%mo8y`pN@H{*gXo-sESd zeujp^Nj$iy_MC)@DRd&vWDGr_j^1VKg~!vv$&c~RHf%A+ zU!CBrVO3Q(aa@UoIt2UtlLt&URk=|iEsU9oXU4U>$|lfHDJ>p^Wtx{pnNEJSzh98f z&*Af>Ig}qE^pYo6N6QHQa-Zccei29Gc<6FeD1D9Xw1}5okW=$wE!Wn4wxC};l9RS~ zOMaA{SOO~BqF>L7Nho146cz3}u#vz@oZ|Wm7i$*YxJ|Rz zEqZIt`?q<{Dx7&tyXe=-RUPsna3=~aQ{o(ay-7fr}TF)nqsRL8tLwE`C99IhsYO+1j zoOC`A#6)vR_>j^h(d?PFu8&4U(Jvrw@f6mCwRm~~jEsf8=+KS>aGvV@5=8s&1QPD2 zKjul?;noVlV#+CX!axHt>k#|y**Fo(Muj4S3HRXZLzt7L zva(SEFvGuuKoL_;BgUs1M7SF%w%6mMpSz1LaF!UoEEeBiD^)Ej_0Mi z(69CY6aa9Y9H#2~!kgQIOVtPib^Sf4wBBu)$+dP0TUKpUfhKBR_ezgqCSbU_XW!qJ zti~zZ7Jw@1^>!Jd<$Y#f1>yAQxT%!YsN{-LNu`dzvjfjJx92ig+v%}}?H{L@j({or z+3xi%PM-926rKAo#16B@v^E+i0eisVZvr&x8n8Dl{L<+Q1arw@#RdXT=MEIsWP zEFttSCwLHn)(C;q>d`52f{K71sPPq#7%>gs-U-cks<|kd+YYXBR^lFXI+-05wPV~6 z`AACDK*@hXaF{yw#KY<`P)h_IZ!>J*y)-bEb?CjOokG z%T?$?et3V!c5-HaKVed_`(x4H<_{}dp<$ydIwanupWlDdS67}-h$gDpROL3LFrn5NW;=>Y9Zgeq+r-eWl8M6ze7Y01ARTKmHN@+{H20 zjnW8YWkV6`(~52&I>4k`_lmV-K3v>qYOrBK?;DK49L=D50uut$30zRZSE%W#(?8*f zZ2*Y|wB9|YuQ*%xVJJU5VhZ<%FXZTmqSNn!-(UDJi2gMsH9rC|63-kK-|xBRu*e_3!jmj^9BzM(DQStGKNSDZ6wTMy|15IDnt~Qlz85mMTi2eY zYKW--T)&~BKl`5)LSX~?Da2z(t6YHAnOS%VnTkqn9w_oCjK|i;? zq5>vH+_V%y{|KV%4#ZD7K~@ZrF#0~Fs6N~%)r*8*OE4xzlf3a@{jre;W}-9zb_Ohj z0n>G>6f~*tZh{NvdcGlX?5~9C2f=~ZHy?Ig)nv7{c3e8l_SBT?hwbHnz^WFb^EcOjzMUg}qZWZDC_=(?AuzF@pA?Q|uLwt7C1yib-&bk=~uCY{bqOmu$&^rjL~ zPg>K23FwUfy%{O*%J^`+n+A-jy5D4pq@zT8T-%%4wIut<`5r*xA?}LPhvyi?NiTxo zCr5VDkxU~;UdZhfI&DwF4?g9+OIC$YyTjh9Koa%t0S|gbLn}a%PjMf>Ui9ZDUDD`% zYOMJ9ra|AVUMqc#p;Ag(80o=#&DTHsk(2xj@`Kxrl#bM&kASpX`F(bCWTnG|PD688 zf5M5WoZ0uD@NlzOV?78M>07KsC675WF6^@Ug%7rN!x&oLyFpzLQm@`%c=MoD*S@Ov z3L7R8>&=Zi(So`L*&CFCaJ<7UGk0PlqsTvXZ|>sBR*=D#@94*PkwQTK*LMfVXLh0=YZoGk)=Q7aY}h*FgHxaj1!tsFl^q z4#oM@DbrxvM3;6_Eyw$XtFDyGez`u-+W-G9I}ttxhF*_4}n}ZoCczm zB|Uq)^LL~VKM8G!6-e+AzVtdAA0uK6@_&(~UmLfEZ=c)5fngvZPG1HlMWWdKS+KDe z+nEzR5*a%JK?S7K%tV;y@Sud9@iJI~&^tIC1~0*c==({K@41S=gifO6iv-m+?Ra8X zY)5fL*yzf{=*dDRBJGb4~AP(ZlHLD|bo|0BavK&vcwU$e^U@BBOrhnBJ zlkl>Gc7FrgZ4Z!F2_{Be`QyptYUhDZikV*pnAuQ;34L9ctQ@#L>=M>Qk?@Z$bzLyD z?Qn~ZcQ&Hn;vX;tzQc6>fsgrt_=b|S+f0-!8l6xqe2xN}kx!KIfAcSTP5VTsO%;0O z@-W$RatAo%cIN)9siWq-@>MryERN`={7RktR{J~;(Rb+<7lPd`)sW~Nu6ar0S> zJ{cCEC~I$sqU@CuoA!%eSHjavtPi*%EyWmE+6g{@l5=$eMlIWG>HqzEKMX|Bb4`Sv zR?f3&DD_W|91Li|JW!p%z=qr>3(DfRr@_q6_RY_XbB~!iOp$u5VH}vg`!3y2R_wfA zI$to*SIyJ`8Yc-jN)rgwO%FDDEuL%S9i#6kp1%i8JE(f;!*DS)!fS!AXA+owcv)Gl z1zAW^Jq#xFIK!LgAC!eMU$yX!ncZVQ*;Fmbk5~O^mLt<*jW8}Up z6+?)RL9;H<4o38%(l2^;^IPSHcC`PSCf!3k_J%LB)zR|}?K=f9VFh>fbZG3);u%Au|Yt-Y5Ligj%aor;oPRPGABxOzUTuAk-F zn7^RqTQ01vUC+g_uK5IRfRUL^5(sd;j$C!z2|pSS3N!-BW8C0FoGQkJSvwwpz#r9U zs=<$F2>dWu8et_SgKUYP1WGGyuMg)cA%4M0=ZJ*!0?5zzq;Lcc}WRiR+%`8|8X3PWHU96I_IChM?k) zJhzYJn4POe*sXizVAnnPv88Hwdz4P18qS7mVgqOPTuPu}yZ528Pq#209gfp*0cFh< z!bEG5FqU@KEjrG?8D5PUM6>f1?iIxTZptA5xI3CYC;J7QI&X(c1yQ{5!VOZy@5ctZvbkt7&_EVS)d*Ubw{n>^$hKo!ehgdpLn%qBV88s&utLk3K*8ZL@R}KS9*sdcA17cw#cTWb4(J5yD zv+Py~!8;dRIrm7)UVoz-@<3m>Z)~14iX^Pd9Ya%_{)P{er-G-_7g4-S0!}d2#S*UC ziW6?WC;6sp>cf)UhWX^9Y5GnHd$;l)L1O@$7BS9;PVa(+{0rG#O#R(>0gsUzv{oREl`ayWLI@w5l=- zSR*_@9nMRI3EYAYsdgz{8L9fTM)LFj50ddeUWVcOnlg$~H(%G=Yy22kLbaR^^`b?* zX{WIhzksr?M{?O749Mrkf3w#Dy``e!`FD6B2REf98nPyfU!P29OD_hpN_;i$0|7iT zJSdiFL=xR^lN2MD$N?<&`9T(W`CV-X^1SeG7#2ulGlsw}_vH3DZGV}T3_+|!)>+Bn$n1pA^f%z1 zV)`!om7Q1)w9K;pM5S!NantDk4gzQ7l$xGNtC6BNwY0a; zLmr{Th+aTAX_LP+9JyTpq!nfm=UQ*yirbrNwJB6HJ)dy@$I=4=^g!wrw6d?wuXhy( z*d&L50c);!yCnnuZyc;1pfNHZ^oXsh1R^RBM&%X+F{^74u%9c?W})t}NRU^fF5e=F zyoj?_lW|yFy|I?{PqM&_Yfz_vhWH&{2B1|YKy5BoH3Tb;bz|CnMFm3H7vFToth+~; z<1~UB#pQgE1NKVqAB5v4bi^R!P{$qKN{*@v2sSoW+f;=wGQGQHos-!6M*HL5g0RUxT%l|Z?l6muKz z=v)aY!CX&B_|RGUR%^Ru1}v#mC6D&a)!CB^N z@YKopjLT9;sx>^_!4G%DAy2LXo|wRTiYQ4v8xApR+Xq2+zXZvB!=VD8$cpoYq4nOe@YVTDzHZp#1KSZN>)_5DO57PL417@ z)0HFhAOK!x2RFD8GQGGzOU9fBb*xtf8}{LBHi#}-d~_f!IPn@N%E~p*L#!h{y%+Id zg(vOUTRuU*cP2H$JNi#mc_$7` zg>GhGFuduH4do`|dg8!cl zU?Yjyr>E2n!;s3N7-NB`^bf@qFauzW0-M?u^l86XC7a?(Ev_M97n03e*)+a~Ihky) zlAYVRo^^C)wIJj@Mv{2_+m6wEF$5)<>e4qkJ3bA)!`t6`#=Lw%G+vgRA>-BVLtS9Yh z-_WDg9$$5urMWgL2`FpkdtXHy$j+hkoc!K(nh1a6BKO@?KsUJ2xA;g6d(kZQsZN&^ zs$qW-+1_(pVMA%@pahkyDjJo#*>C)c2^zbm?ED={%ioNpFdAj+~(hb+Nlj%67UBe042xSy;YDYUjHPAvfCXtwTWXkAS&@B-dO*F z0<-nwILJFu=F#4LINZ3?Qf&3}t`aGXLTJO|Ki4doP#1(m1DS>;J~7X{u7B&ie;tg; z4;&Ud{51{}^xxdICJ?8RBn4~LCsAg@k~biBazcj%w|&83K3aHtGw9#5k{zDcFZ=Et z;l#O|8RZtfr@)bV1-m_G4yP*N56_dyp2d^=3aX`%u>QbxH4#os9Z{pcuU0w2B#k{I z2DFzpoP88$gq<%H;n%#q6XT9Co_Iy>ztNV&uvX)BId5X zcrPtgTG=!`GVoZkD*gL8h3fCWZr{-WnSZsDk;J?wvHgmoYNw(;Eh20w4NfDaOAx!j zByec!Pud9FBemI+iG>(8oU*(S#YTB*T!QI3m&HFT#-Z@hU5A`108|3Q61aBCw}7^j z?&HluElY!rkYSD+{R5nXz$z0_blm)Nk}=V~%ZI4&gu@I|p_2898}$iTEwD0^^pM7S zag^Rhv1HuF56k)&xlgJr0q*!A0`zY{iv^o~y3eRYQRxEWw+jhql`TmjNmuZiG;mQ{Stn^CE?W%pYFC0!jSgspkE z=NeLw>)0qWaZV|%w)|hQ`DZ~Q4J_9HvrYQ}Kdqrz15Bq|eI$4(tT>&BZ5e0r$h2vS zoC1%+2N`UE4f#0~bLIyRV7uR61>3`W!Ji;$%Pqk8692vb8cR?Ym1d8W5hxvrZp_4k ze|4oLjsaWENu_AP6{e4Nj?Bbr6ZCgV?#HNfwYz&-HfP9!UGW|p`E*D!Vn(f8R&7eA z6PE4^98S}CTV zvhP4WKgyC3Kw~*_l$595hbZm&0DUnyoenRYKZfkH{NjQPsM_bQrRc@DzQ>CXLqULx z2*>-2fB;VTQ!(WG47NSuBw9a!WTaqeX73E9d?Yn+2NT1*)+cIpGA)=yARq&HCVty| z@TMP(CaL|fLss0*SRv`>;u;Xo^}1UHDMxb?ocx_xzr8ysQLMO?Pb#Aac3h zjEQ8!F5#JVHP^ZB*+`{gPU7yk*y{$?#lfK_P*1)-zv@lGYt_IDqU_;8g*Yk|0PLf0 z3rO}a#g$>UmOy^%`Z>w)*0Urd;ay;DWc2d#kauHLF)VyplKMW-=rDm(uTsj>8$o)= zqY~{;DSMz>*MGD5!mvc91oah8jL82OS_C)_R7nG@QUUA>()lebi4lD!)NsxH=<*_%NJwjMC{21I28J=gb zl<)3la6eO01t33=Hm8wj*EjnBPltOYJ5~(Bx#Y^T;FL9&g%ufmjsF~dQHP;3kIn%C zgX4UqJ0n93-<+i%CQ|wr@YN#SIf%!8oOE9hJF-Tx$pONu@gXkkx=ML}Pl-Q*6tpD- z=~*z<%^a0@eV#y!m%N;~!}C{E7#>2E9wQ#do5F;h^WmXR`m+}S#KkY>2;F@8p|u`k zPoqCck{cm$JVoS>3CwxLUKJNC#WCKG*3@vn!+tkO`3Pjna}sAEbViI~!$p#Z{ICZ= z8MPfe{yrNvDmQAipzrOkp@Wp#Kw-n4$elHR^N7SmZXWOa4$ z2b7@TFC)n`zJ@Un^rY#LQZrmFfYrl+H&alBQ^eSdq=a%PbgwvA4gNU# z2Oy!mqG;cwx`Vl$!J~}Xsr=Ht$+gR1p}Rzxe7#j%*IzO?Pxp+A1GQUHh=r&jF{DFu zr^3ePOCR_W472ttug!DpBb|U9azOjrotb#|41#=RlhE!aqv_h!^i-Nahm0a%N4N`< zD}Dg$WrmDvsKKp%u=&PL6!*ST5{{=un6;t=Kl>^B(`pA$dVK6^i4z*QO(B3F!4~}8 zT|5XV+6;xU??1#}%S2fQIwJd+&7`SWL!pctUxpGsT3`nf9u7Vx>SZVxGVA^VM=E?#a{ZS3W7c$e}bxH;xAShdu-)VrBGmBXEp_ z4j$XCAA_w$8Nc0MO~3$_*7avgCH#PsF5w?ii51oFLYI%zJ)?}PG`f(=YK<~}0Z6~C z-3$?&C{{668kzRTg&se55*J7aNyI6-)$F-Tj)sG78&%^| zG@!iLX9~|HEQ@$ckn$WEK*@MvfxGm0>t9Hq^PYW&sgNjes?d1rQ8Kgoa>)LF6Ly(< zelC-9p2TGs>EW0@0Ml6^;2(ry<2W*aINL_>9?7Mno-mH;(=CUkUj$u^h$9QW{=6J9 zi2|G7Alheucp9EFP<63h6We#mY8WcoD1G%Q)QO$az>l~lZffQ5jrLWj2Up?x_54(T zFHPmeF6!B$U0C+#VY`Z0D47MlQN*6G*za8}i0LJX0L?E-c;x{(mDyVk=s0Q5kwFP+ zd4l^psZojQ=%b)gKkZ9f7eBGdkev*v8n$C90t)=hB{#1BgLesHZU1yLp|nrw=Gz2O zbL!u&nZ0Sgmi0su76^9vtSA#w-XOQq57)nm5Mp*RD?z!2nlpu0qm*zr<_QXQ@ zqO`=J7vHUy#2IbPS=iH_Og1Loe3vTiK4p}yE+PH zzV*&_S`rAAO*J@dcJHj2qH6kaz-At7=jT>^DvlCxT*ozUSbPpkHbM*W_c9{ z3l{msCI7U4(+gIrSr+~iC~Ie#=y&jepGYFp$_!_iNSid$68+GGiMm`u5^3g~p(rP` z39ISch%TPY5Jl@HjFwrkP*W|W!2zI>t*1rQgbFEL2)_SUQ;>=i#K+i1s088MqSOBH zgLt}S*%0!6s?M=c?}>dZjZg1fR-F4G;Zj|AD9+QeXZE~KlW2)TkWH2IWc6$!JF(+a zr4GoGzVpBSfC_jeUc$Zk2jI({I|^z^=!29hspEDXast8lEE(bWqM8J|kK@e5I_mT*+wD$3@imG%!1Urb#ONu6$nlJ%bkqIY_xb&C9TP6? zOITv4$n(SkFEODehDyr@07bWuMDC;U=^767GF(l!h&xnU?5`s{&KbK!+nb>!kky|R zLro5Ne*Jr5-+y1tdFExlKVF5UYTSC*yYT46!gzy{ ziP!C843+HQ;$X6k1U0JUC#;0t5FYZ_A3;0@B46T;{1}GfIdeh>botTrlFSAOhzST5 z0FO4XmZ30!BX`uy{PO7M5}e^ymZWOa=uDx4!p2>hogAN)_8kI;uZb};(bsHP++op6 zUxGJTQxz~kBe}2xW^>j6WM0xG7~9voa#CzM;)Mxs6%u5Vq0quRdDeyD7uQQm-J;!c zQ?C$f!@g{dm3TS;k;JmKjQHD|P7v#wWv2%75T6?>>Ls4FJC*`EZ{wF2ETtcmaW#=QN?;(!Z7E3wwpTd5&swC}(=1^8@0QVY!Ua)Gr@KQ3L^h}}SOZB@ zvgX-p)F0a^m+YS&{3-nCWUn;@#)p*%TbdJ3%iZ)CBr z#c!Eda}%?VlmXUkn-3e=p&1Et=98O%jz=?g95+6x!oYxq%2jNqg%CkEuuvapuV84S zfF7|ba3lIy<3LgV!v%!BX+NNMyI&LmzIQU}9Y#@?kPXs}VfW|B6&YVt3wQkB^CK;< z@F%ArPD7mEM*Z)<=_!f+H+SItx#{h23z6_64EU-kWFBD_bKD-|&ez92Sm{eqF}yc; z>4%=LaQBfii~5<>9Z{y2hR5Govam&W?MrAIKEyE_-v!SK6cx3hn$xx#er?#|pHQ21^zXu2>c2O{O0E2HAI^5?skrdG=a68A zBRYz~SooqAC-nM&ruSN+9H7v5177IDz`9-pSxQ5dYSek+vk;b@u>X7u5Bl`=Ny0?H z1sElkyAvh*)&rj*smHG)r(_1N0SfO&a>0&dD1+B7>* zaPLX>)0%ED37+#@dj=O>{@45iQ%9yNuO9k6nx#fH+4KEX(;3BT?W>o4i8&%s>3hnU z&qSxU6%D^52wa5@H#78I&mi9!8riw6kFlbkO1Ge}QD5Xy+b!K5#HX)kO#ur@5z z`W)>D#zg=I!1aX!5LfZi>yTyH(oRp*B}pSX&!_#G<`r>a#!Lc{0od6cEx80+-Rq!Oh*R|emO@d>{1J!6hu^856Oqb0~R5oav``~GS^*EGuXFz~fF;Z+LAt6P3Y zzCT?AlOWqZ;5TjB{8Mz9Xmxsz-Z3HyAEvSr$sSTzub9f)d7w&#n`aH?GvN7xJJV~_Ff<+>%{OZ$b8f!v$;^dyy@^JZb|!$+9}VEFM`9O9$H z@*LG4e@CQ!-`iqz#Uvh7Sm?K#WU)1S-#Ib~~&kZx-^xfa^IxqG&_|YQv z&qPlSUpHtwH<@!CmGl!8V9akd{JtfZNnrLkt~){raovEHbQ20sZw|m%jGm1_AqBzy z@Fd39leURKohZBpwL;_5;{IUKufFPzAEQh9(-Ft2ar-Yi0GLKlU;L`e;9 zdsHj}1&!Enif{kIvN!}X_MBND1l@uh6pgnq87K_ns*<`7E4k8{Rf|^72cLgOelWTx zhIANmWXMb30UKb}Koil!VW=`F0D?Hzjwz zLE*&M3yhcpik*JWFe{Z2Gp+j;HUi;!54c}JWB=wM|Knx+pMQF2lW5_4-fwhhzeG&{ z;&=j(tR64S5@>CY^l3<*oTm2oJ!0ovvKV@SDeJCh@xuFWL(ZScIhP!W1i>gS@&iGH z`O|Y)VMkX=keu7xJ8@oLx8<6QPTieLxnK1qnymFmKRUfdW>=K(3(eTARfz55`{r}t z=LdqMv)K^V%DQj%ypwKSVrN?E^<4=`{i^+^LJgh_ovAA#`_Kv|-^e-5&n2Zo2w|3+!~d(!35Grh}jF zMzeReGR$YbEQduIizrt|-s)(oXrc2n z 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/+s=3N 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�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