diff --git a/dpnegf/negf/lead_property.py b/dpnegf/negf/lead_property.py index dfd9934..c3725ee 100644 --- a/dpnegf/negf/lead_property.py +++ b/dpnegf/negf/lead_property.py @@ -3,6 +3,8 @@ from dpnegf.negf.surface_green import selfEnergy import logging import os +import shutil +import tempfile from dpnegf.utils.constants import Boltzmann, eV2J import numpy as np from dpnegf.negf.bloch import Bloch @@ -592,7 +594,8 @@ def _get_safe_n_jobs(lead_L, lead_R, requested_n_jobs=-1, max_memory_fraction=0. def compute_all_self_energy(eta, lead_L, lead_R, kpoints_grid, energy_grid, - self_energy_save_path=None, n_jobs=-1, batch_size=200): + self_energy_save_path=None, n_jobs=-1, batch_size=200, + parallel_backend="loky"): """ Computes and saves self-energy matrices for all combinations of k-points and energy values for left and right leads. @@ -618,6 +621,10 @@ def compute_all_self_energy(eta, lead_L, lead_R, kpoints_grid, energy_grid, Number of parallel jobs to use. Default is -1 (use all available CPUs). batch_size : int, optional Number of (k, e) tasks per parallel batch. Default is 200. + parallel_backend : str, optional + Joblib backend used for self-energy calculation. Default is "loky" + to avoid pickling LeadProperty / TorchScript model objects when PyTorch + models are used. Returns ------- @@ -630,6 +637,10 @@ def compute_all_self_energy(eta, lead_L, lead_R, kpoints_grid, energy_grid, "Self energy files will be saved in lead_L's results_path.") self_energy_save_path = os.path.join(lead_L.results_path, "self_energy") + self_energy_save_path = os.path.abspath(self_energy_save_path) + os.makedirs(self_energy_save_path, exist_ok=True) + temp_dir = tempfile.mkdtemp(prefix="tmp_self_energy_", dir=self_energy_save_path) + # Calculate safe number of workers based on available memory # Use first k-point for memory estimation sample_kpoint = kpoints_grid[0] if len(kpoints_grid) > 0 else None @@ -640,16 +651,17 @@ def compute_all_self_energy(eta, lead_L, lead_R, kpoints_grid, energy_grid, log.info(f"Adjusted n_jobs from {n_jobs} to {safe_n_jobs} due to memory constraints") total_tasks = [(k, e) for k in kpoints_grid for e in energy_grid] + log.info(f"Using joblib backend='{parallel_backend}' for self-energy calculation.") if len(total_tasks) <= batch_size: - Parallel(n_jobs=safe_n_jobs, backend="loky")( - delayed(self_energy_worker)(k, e, eta, lead_L, lead_R, self_energy_save_path) + Parallel(n_jobs=safe_n_jobs, backend=parallel_backend)( + delayed(self_energy_worker)(k, e, eta, lead_L, lead_R, temp_dir) for k, e in total_tasks ) else: for i in range(0, len(total_tasks), batch_size): batch = total_tasks[i:i+batch_size] - Parallel(n_jobs=safe_n_jobs, backend="loky")( - delayed(self_energy_worker)(k, e, eta, lead_L, lead_R, self_energy_save_path) + Parallel(n_jobs=safe_n_jobs, backend=parallel_backend)( + delayed(self_energy_worker)(k, e, eta, lead_L, lead_R, temp_dir) for k, e in batch ) @@ -657,14 +669,22 @@ def compute_all_self_energy(eta, lead_L, lead_R, kpoints_grid, energy_grid, save_path_L = os.path.join(self_energy_save_path, "self_energy_leadL.h5") save_path_R = os.path.join(self_energy_save_path, "self_energy_leadR.h5") - merge_hdf5_files(self_energy_save_path, save_path_L, pattern="tmp_leadL_*.h5") - merge_hdf5_files(self_energy_save_path, save_path_R, pattern="tmp_leadR_*.h5") + try: + merge_hdf5_files(temp_dir, save_path_L, pattern="tmp_leadL_*.h5") + merge_hdf5_files(temp_dir, save_path_R, pattern="tmp_leadR_*.h5") + except Exception as exc: + raise RuntimeError( + f"Failed to merge self-energy temporary files from '{temp_dir}'. " + "Temporary files were preserved for debugging." + ) from exc + + shutil.rmtree(temp_dir) -def self_energy_worker(k, e, eta, lead_L, lead_R, self_energy_save_path): +def self_energy_worker(k, e, eta, lead_L, lead_R, temp_dir): """ Calculates the self-energy for left and right leads at a given k-point and energy, and saves the results to HDF5 files. @@ -681,8 +701,8 @@ def self_energy_worker(k, e, eta, lead_L, lead_R, self_energy_save_path): The left lead object, which must implement a `self_energy_cal` method. lead_R : object The right lead object, which must implement a `self_energy_cal` method. - self_energy_save_path : str - Directory path where the self-energy HDF5 files will be saved. + temp_dir : str + Directory path where the temporary self-energy HDF5 shard files will be saved. Returns ------- @@ -690,8 +710,8 @@ def self_energy_worker(k, e, eta, lead_L, lead_R, self_energy_save_path): The function saves the calculated self-energies to files and does not return anything. """ - save_tmp_L = os.path.join(self_energy_save_path, f"tmp_leadL_k{k[0]}_{k[1]}_{k[2]}_E{e:.8f}.h5") - save_tmp_R = os.path.join(self_energy_save_path, f"tmp_leadR_k{k[0]}_{k[1]}_{k[2]}_E{e:.8f}.h5") + save_tmp_L = os.path.join(temp_dir, f"tmp_leadL_k{k[0]}_{k[1]}_{k[2]}_E{e:.8f}.h5") + save_tmp_R = os.path.join(temp_dir, f"tmp_leadR_k{k[0]}_{k[1]}_{k[2]}_E{e:.8f}.h5") seL = lead_L.self_energy_cal(kpoint=k, energy=e, eta_lead=eta) seR = lead_R.self_energy_cal(kpoint=k, energy=e, eta_lead=eta) diff --git a/dpnegf/runner/NEGF.py b/dpnegf/runner/NEGF.py index cfcedbd..eb34526 100644 --- a/dpnegf/runner/NEGF.py +++ b/dpnegf/runner/NEGF.py @@ -109,6 +109,26 @@ def __init__(self, self.kpoints,self.wk = kmesh_sampling_negf(self.stru_options["kmesh"], self.stru_options["gamma_center"], self.stru_options["time_reversal_symmetry"]) + + if 'override_overlap' in kwargs: + assert isinstance(kwargs['override_overlap'], str) + self.override_overlap = kwargs['override_overlap'] + log.info(msg="Using external calculated overlap overriding!") + else: + self.override_overlap = None + + if 'parallel_options' in kwargs: + assert isinstance(kwargs['parallel_options'], dict) + self.parallel_options = kwargs['parallel_options'] + log.info(msg="Read parallel options from input!") + else: + self.parallel_options = { + "n_job": -1, + "batch_size": 200, + "backend": "loky" + } + log.info(msg="No parallel options Input, using default settings!") + log.info(msg="------ k-point for NEGF -----") log.info(msg="Gamma Center: {0}".format(self.stru_options["gamma_center"])) log.info(msg="Time Reversal: {0}".format(self.stru_options["time_reversal_symmetry"])) @@ -168,7 +188,7 @@ def __init__(self, e_fermi = {}; chemiPot = {} # calculate Fermi level if self.e_fermi is None: - elec_cal = ElecStruCal(model=model,device=self.torch_device) + elec_cal = ElecStruCal(model=model, device=self.torch_device, override_overlap=self.override_overlap) nel_atom_lead = self.get_nel_atom_lead( struct_leads, charge={lead_tag: self.stru_options[lead_tag].get("charge", 0) for lead_tag in ["lead_L", "lead_R"]} @@ -522,7 +542,8 @@ def prepare_self_energy(self, scf_require: bool) -> None: # self energy calculation log.info(msg="------Self-energy calculation------") if self.self_energy_save_path is None: - self.self_energy_save_path = os.path.join(self.results_path, "self_energy") + self.self_energy_save_path = os.path.join(self.results_path, "self_energy") + self.self_energy_save_path = os.path.abspath(self.self_energy_save_path) os.makedirs(self.self_energy_save_path, exist_ok=True) if self.use_saved_se: @@ -539,11 +560,17 @@ def prepare_self_energy(self, scf_require: bool) -> None: # self.deviceprop.lead_L.self_energy(kpoint=k, energy=e, eta_lead=self.eta_lead, save=True) # self.deviceprop.lead_R.self_energy(kpoint=k, energy=e, eta_lead=self.eta_lead, save=True) compute_all_self_energy(self.eta_lead, self.deviceprop.lead_L, self.deviceprop.lead_R, - self.kpoints, self.density.integrate_range, self.self_energy_save_path) + self.kpoints, self.density.integrate_range, self.self_energy_save_path, + n_jobs=self.parallel_options["n_jobs"], + batch_size=self.parallel_options["batch_size"], + parallel_backend=self.parallel_options["backend"]) elif not self.scf: # In non-scf case, the self-energy of the leads is calculated for each energy point in the energy grid. compute_all_self_energy(self.eta_lead, self.deviceprop.lead_L, self.deviceprop.lead_R, - self.kpoints, self.uni_grid, self.self_energy_save_path) + self.kpoints, self.uni_grid, self.self_energy_save_path, + n_jobs=self.parallel_options["n_jobs"], + batch_size=self.parallel_options["batch_size"], + parallel_backend=self.parallel_options["backend"]) log.info(msg="-----------------------------------\n") diff --git a/dpnegf/tests/data/test_negf/test_negf_e3/7_0.vasp b/dpnegf/tests/data/test_negf/test_negf_e3/7_0.vasp new file mode 100644 index 0000000..fc02ea7 --- /dev/null +++ b/dpnegf/tests/data/test_negf/test_negf_e3/7_0.vasp @@ -0,0 +1,904 @@ +C + 1.0000000000000000 + 25.4802092204926112 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 25.3428089336544424 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 136.3199999999999932 + C + 896 +Cartesian + 12.1292616098609098 9.9951264176189216 17.0462499999999828 + 15.4852081361254292 12.6714044668272194 17.0462499999999828 + 10.2668517942600523 11.4803486847539933 17.0462499999999828 + 12.1292616098609116 15.3476825160355173 17.0462499999999864 + 10.2668517942600523 13.8624602489004474 17.0462499999999828 + 14.4516486636783910 14.8176128259935087 17.0462499999999864 + 14.4516486636783910 10.5251961076609284 17.0462499999999828 + 14.4516486636783910 10.5251961076609284 18.4537500000000136 + 10.2668517942600523 13.8624602489004474 18.4537500000000136 + 10.2668517942600523 11.4803486847539933 18.4537500000000136 + 12.1292616098609098 9.9951264176189216 18.4537500000000136 + 15.4852081361254292 12.6714044668272194 18.4537500000000136 + 14.4516486636783910 14.8176128259935087 18.4537500000000136 + 12.1292616098609116 15.3476825160355173 18.4537500000000136 + 9.9950010843671819 12.6714044668272194 19.1762499999999854 + 11.0285605568142202 14.8176128259935087 19.1762499999999818 + 15.2133574262325588 11.4803486847539915 19.1762499999999854 + 11.0285605568142184 10.5251961076609284 19.1762499999999854 + 13.3509476106316995 9.9951264176189216 19.1762499999999818 + 15.2133574262325588 13.8624602489004474 19.1762499999999854 + 13.3509476106316995 15.3476825160355173 19.1762499999999854 + 13.3509476106316995 9.9951264176189216 20.5837500000000126 + 11.0285605568142202 14.8176128259935087 20.5837500000000126 + 15.2133574262325588 13.8624602489004474 20.5837500000000126 + 13.3509476106316995 15.3476825160355173 20.5837500000000126 + 9.9950010843671819 12.6714044668272194 20.5837500000000126 + 11.0285605568142184 10.5251961076609284 20.5837500000000126 + 15.2133574262325588 11.4803486847539915 20.5837500000000126 + 15.4852081361254292 12.6714044668272194 21.3062499999999844 + 14.4516486636783910 14.8176128259935087 21.3062499999999844 + 10.2668517942600523 13.8624602489004474 21.3062499999999844 + 12.1292616098609116 15.3476825160355173 21.3062499999999844 + 14.4516486636783910 10.5251961076609284 21.3062499999999844 + 10.2668517942600523 11.4803486847539933 21.3062499999999844 + 12.1292616098609098 9.9951264176189216 21.3062499999999844 + 15.4852081361254292 12.6714044668272194 22.7137500000000117 + 10.2668517942600523 13.8624602489004474 22.7137500000000117 + 12.1292616098609098 9.9951264176189216 22.7137500000000117 + 10.2668517942600523 11.4803486847539933 22.7137500000000117 + 14.4516486636783910 10.5251961076609284 22.7137500000000117 + 14.4516486636783910 14.8176128259935087 22.7137500000000117 + 12.1292616098609116 15.3476825160355173 22.7137500000000117 + 9.9950010843671819 12.6714044668272194 23.4362499999999834 + 11.0285605568142202 14.8176128259935087 23.4362499999999798 + 15.2133574262325588 11.4803486847539915 23.4362499999999798 + 11.0285605568142184 10.5251961076609284 23.4362499999999834 + 13.3509476106316995 9.9951264176189216 23.4362499999999798 + 15.2133574262325588 13.8624602489004474 23.4362499999999798 + 13.3509476106316995 15.3476825160355173 23.4362499999999798 + 13.3509476106316995 9.9951264176189216 24.8437500000000107 + 11.0285605568142202 14.8176128259935087 24.8437500000000107 + 15.2133574262325588 13.8624602489004474 24.8437500000000107 + 13.3509476106316995 15.3476825160355173 24.8437500000000107 + 15.2133574262325588 11.4803486847539915 24.8437500000000107 + 9.9950010843671819 12.6714044668272194 24.8437500000000107 + 11.0285605568142184 10.5251961076609284 24.8437500000000107 + 10.2668517942600523 11.4803486847539933 25.5662499999999859 + 14.4516486636783910 10.5251961076609266 25.5662499999999824 + 12.1292616098609098 9.9951264176189216 25.5662499999999824 + 12.1292616098609116 15.3476825160355173 25.5662499999999824 + 14.4516486636783910 14.8176128259935087 25.5662499999999824 + 10.2668517942600523 13.8624602489004474 25.5662499999999824 + 15.4852081361254292 12.6714044668272194 25.5662499999999824 + 15.4852081361254292 12.6714044668272194 26.9737500000000132 + 12.1292616098609098 9.9951264176189216 26.9737500000000132 + 12.1292616098609116 15.3476825160355173 26.9737500000000132 + 14.4516486636783910 14.8176128259935087 26.9737500000000132 + 10.2668517942600523 11.4803486847539933 26.9737500000000132 + 14.4516486636783910 10.5251961076609284 26.9737500000000132 + 10.2668517942600523 13.8624602489004474 26.9737500000000132 + 11.0285605568142202 14.8176128259935087 27.6962499999999849 + 15.2133574262325588 13.8624602489004474 27.6962499999999849 + 13.3509476106316995 9.9951264176189216 27.6962499999999814 + 11.0285605568142184 10.5251961076609284 27.6962499999999849 + 15.2133574262325588 11.4803486847539915 27.6962499999999849 + 9.9950010843671819 12.6714044668272194 27.6962499999999849 + 13.3509476106316995 15.3476825160355173 27.6962499999999849 + 13.3509476106316995 9.9951264176189234 29.1037500000000122 + 11.0285605568142202 14.8176128259935087 29.1037500000000122 + 13.3509476106316995 15.3476825160355173 29.1037500000000122 + 9.9950010843671819 12.6714044668272194 29.1037500000000122 + 11.0285605568142184 10.5251961076609284 29.1037500000000122 + 15.2133574262325588 11.4803486847539915 29.1037500000000122 + 15.2133574262325588 13.8624602489004474 29.1037500000000122 + 15.4852081361254292 12.6714044668272194 29.8262499999999839 + 10.2668517942600523 13.8624602489004474 29.8262499999999839 + 14.4516486636783910 14.8176128259935087 29.8262499999999839 + 14.4516486636783910 10.5251961076609284 29.8262499999999839 + 10.2668517942600523 11.4803486847539933 29.8262499999999839 + 12.1292616098609116 9.9951264176189216 29.8262499999999839 + 12.1292616098609116 15.3476825160355173 29.8262499999999839 + 10.2668517942600523 13.8624602489004474 31.2337500000000112 + 12.1292616098609098 9.9951264176189216 31.2337500000000112 + 10.2668517942600523 11.4803486847539933 31.2337500000000112 + 14.4516486636783910 10.5251961076609284 31.2337500000000112 + 14.4516486636783910 14.8176128259935087 31.2337500000000148 + 12.1292616098609116 15.3476825160355173 31.2337500000000148 + 15.4852081361254292 12.6714044668272194 31.2337500000000148 + 9.9950010843671819 12.6714044668272194 31.9562499999999794 + 15.2133574262325588 11.4803486847539915 31.9562499999999794 + 11.0285605568142184 10.5251961076609284 31.9562499999999794 + 13.3509476106316995 9.9951264176189216 31.9562499999999794 + 11.0285605568142202 14.8176128259935087 31.9562499999999794 + 15.2133574262325588 13.8624602489004474 31.9562499999999794 + 13.3509476106316995 15.3476825160355173 31.9562499999999794 + 9.9950010843671819 12.6714044668272194 33.3637500000000102 + 15.2133574262325588 11.4803486847539915 33.3637500000000102 + 13.3509476106316995 9.9951264176189216 33.3637500000000102 + 11.0285605568142202 14.8176128259935087 33.3637500000000102 + 13.3509476106317013 15.3476825160355173 33.3637500000000102 + 11.0285605568142184 10.5251961076609284 33.3637500000000102 + 15.2133574262325588 13.8624602489004474 33.3637500000000102 + 12.1292616098609098 9.9951264176189216 0.0062499999999914 + 15.4852081361254292 12.6714044668272194 0.0062499999999914 + 10.2668517942600506 11.4803486847539933 0.0062499999999914 + 12.1292616098609116 15.3476825160355173 0.0062499999999927 + 10.2668517942600506 13.8624602489004474 0.0062499999999915 + 14.4516486636783910 14.8176128259935123 0.0062499999999927 + 14.4516486636783910 10.5251961076609266 0.0062499999999914 + 14.4516486636783910 10.5251961076609284 1.4137500000000156 + 10.2668517942600523 13.8624602489004474 1.4137500000000156 + 10.2668517942600523 11.4803486847539933 1.4137500000000156 + 12.1292616098609098 9.9951264176189216 1.4137500000000156 + 15.4852081361254292 12.6714044668272194 1.4137500000000156 + 14.4516486636783910 14.8176128259935087 1.4137500000000145 + 12.1292616098609116 15.3476825160355173 1.4137500000000145 + 9.9950010843671819 12.6714044668272194 2.1362499999999844 + 11.0285605568142202 14.8176128259935087 2.1362499999999844 + 15.2133574262325588 11.4803486847539915 2.1362499999999844 + 11.0285605568142184 10.5251961076609284 2.1362499999999844 + 13.3509476106316995 9.9951264176189234 2.1362499999999836 + 15.2133574262325588 13.8624602489004474 2.1362499999999853 + 13.3509476106316995 15.3476825160355173 2.1362499999999867 + 13.3509476106316995 9.9951264176189234 3.5437500000000122 + 11.0285605568142202 14.8176128259935087 3.5437500000000122 + 15.2133574262325588 13.8624602489004474 3.5437500000000135 + 13.3509476106316995 15.3476825160355173 3.5437500000000135 + 9.9950010843671819 12.6714044668272194 3.5437500000000135 + 11.0285605568142184 10.5251961076609284 3.5437500000000135 + 15.2133574262325588 11.4803486847539915 3.5437500000000135 + 15.4852081361254292 12.6714044668272194 4.2662499999999834 + 14.4516486636783910 14.8176128259935087 4.2662499999999843 + 10.2668517942600523 13.8624602489004474 4.2662499999999834 + 12.1292616098609116 15.3476825160355173 4.2662499999999834 + 14.4516486636783910 10.5251961076609284 4.2662499999999834 + 10.2668517942600523 11.4803486847539933 4.2662499999999843 + 12.1292616098609098 9.9951264176189216 4.2662499999999834 + 15.4852081361254292 12.6714044668272194 5.6737500000000143 + 10.2668517942600523 13.8624602489004474 5.6737500000000143 + 12.1292616098609098 9.9951264176189216 5.6737500000000143 + 10.2668517942600523 11.4803486847539933 5.6737500000000143 + 14.4516486636783910 10.5251961076609284 5.6737500000000143 + 14.4516486636783910 14.8176128259935087 5.6737500000000143 + 12.1292616098609116 15.3476825160355173 5.6737500000000143 + 9.9950010843671819 12.6714044668272194 6.3962499999999851 + 11.0285605568142202 14.8176128259935087 6.3962499999999842 + 15.2133574262325588 11.4803486847539915 6.3962499999999851 + 11.0285605568142184 10.5251961076609284 6.3962499999999851 + 13.3509476106316995 9.9951264176189216 6.3962499999999842 + 15.2133574262325588 13.8624602489004474 6.3962499999999842 + 13.3509476106316995 15.3476825160355173 6.3962499999999842 + 13.3509476106316995 9.9951264176189216 7.8037500000000133 + 11.0285605568142202 14.8176128259935087 7.8037500000000133 + 15.2133574262325588 13.8624602489004474 7.8037500000000133 + 13.3509476106316995 15.3476825160355173 7.8037500000000133 + 15.2133574262325588 11.4803486847539915 7.8037500000000142 + 9.9950010843671819 12.6714044668272194 7.8037500000000142 + 11.0285605568142184 10.5251961076609284 7.8037500000000142 + 10.2668517942600523 11.4803486847539933 8.5262499999999850 + 14.4516486636783910 10.5251961076609284 8.5262499999999850 + 12.1292616098609098 9.9951264176189216 8.5262499999999850 + 12.1292616098609116 15.3476825160355173 8.5262499999999850 + 14.4516486636783910 14.8176128259935087 8.5262499999999850 + 10.2668517942600523 13.8624602489004474 8.5262499999999850 + 15.4852081361254292 12.6714044668272194 8.5262499999999850 + 15.4852081361254292 12.6714044668272194 9.9337500000000141 + 12.1292616098609098 9.9951264176189216 9.9337500000000141 + 12.1292616098609116 15.3476825160355173 9.9337500000000141 + 14.4516486636783910 14.8176128259935087 9.9337500000000123 + 10.2668517942600523 11.4803486847539933 9.9337500000000141 + 14.4516486636783910 10.5251961076609284 9.9337500000000141 + 10.2668517942600523 13.8624602489004474 9.9337500000000141 + 11.0285605568142202 14.8176128259935087 10.6562499999999840 + 15.2133574262325588 13.8624602489004474 10.6562499999999840 + 13.3509476106316995 9.9951264176189216 10.6562499999999840 + 11.0285605568142184 10.5251961076609284 10.6562499999999840 + 15.2133574262325588 11.4803486847539915 10.6562499999999840 + 9.9950010843671819 12.6714044668272194 10.6562499999999840 + 13.3509476106316995 15.3476825160355173 10.6562499999999840 + 13.3509476106316995 9.9951264176189234 12.0637500000000131 + 11.0285605568142202 14.8176128259935087 12.0637500000000149 + 13.3509476106316995 15.3476825160355173 12.0637500000000149 + 9.9950010843671819 12.6714044668272194 12.0637500000000149 + 11.0285605568142184 10.5251961076609284 12.0637500000000149 + 15.2133574262325588 11.4803486847539915 12.0637500000000149 + 15.2133574262325588 13.8624602489004474 12.0637500000000149 + 15.4852081361254292 12.6714044668272194 12.7862499999999830 + 10.2668517942600523 13.8624602489004474 12.7862499999999830 + 14.4516486636783910 14.8176128259935087 12.7862499999999830 + 14.4516486636783910 10.5251961076609284 12.7862499999999830 + 10.2668517942600523 11.4803486847539933 12.7862499999999830 + 12.1292616098609116 9.9951264176189216 12.7862499999999830 + 12.1292616098609116 15.3476825160355173 12.7862499999999830 + 10.2668517942600523 13.8624602489004474 14.1937500000000139 + 12.1292616098609098 9.9951264176189216 14.1937500000000139 + 10.2668517942600523 11.4803486847539933 14.1937500000000139 + 14.4516486636783910 10.5251961076609284 14.1937500000000139 + 14.4516486636783910 14.8176128259935087 14.1937500000000139 + 12.1292616098609116 15.3476825160355173 14.1937500000000139 + 15.4852081361254292 12.6714044668272194 14.1937500000000139 + 9.9950010843671819 12.6714044668272194 14.9162499999999838 + 15.2133574262325588 11.4803486847539915 14.9162499999999838 + 11.0285605568142184 10.5251961076609284 14.9162499999999838 + 13.3509476106316995 9.9951264176189216 14.9162499999999838 + 11.0285605568142202 14.8176128259935087 14.9162499999999838 + 15.2133574262325588 13.8624602489004474 14.9162499999999856 + 13.3509476106316995 15.3476825160355173 14.9162499999999856 + 9.9950010843671819 12.6714044668272194 16.3237500000000111 + 15.2133574262325588 11.4803486847539915 16.3237500000000111 + 13.3509476106316995 9.9951264176189216 16.3237500000000111 + 11.0285605568142202 14.8176128259935087 16.3237500000000111 + 13.3509476106317013 15.3476825160355173 16.3237500000000146 + 11.0285605568142184 10.5251961076609284 16.3237500000000111 + 15.2133574262325588 13.8624602489004474 16.3237500000000146 + 12.1292616098609098 9.9951264176189216 34.0862499999999784 + 15.4852081361254292 12.6714044668272194 34.0862499999999784 + 10.2668517942600523 11.4803486847539933 34.0862499999999784 + 12.1292616098609116 15.3476825160355173 34.0862499999999784 + 10.2668517942600523 13.8624602489004474 34.0862499999999784 + 14.4516486636783910 14.8176128259935087 34.0862499999999784 + 14.4516486636783910 10.5251961076609284 34.0862499999999784 + 14.4516486636783910 10.5251961076609284 35.4937500000000128 + 10.2668517942600523 13.8624602489004474 35.4937500000000128 + 10.2668517942600523 11.4803486847539933 35.4937500000000128 + 12.1292616098609098 9.9951264176189216 35.4937500000000128 + 15.4852081361254292 12.6714044668272194 35.4937500000000128 + 14.4516486636783910 14.8176128259935087 35.4937500000000128 + 12.1292616098609116 15.3476825160355173 35.4937500000000128 + 9.9950010843671819 12.6714044668272194 36.2162499999999810 + 11.0285605568142202 14.8176128259935087 36.2162499999999810 + 15.2133574262325588 11.4803486847539915 36.2162499999999810 + 11.0285605568142184 10.5251961076609284 36.2162499999999810 + 13.3509476106316995 9.9951264176189216 36.2162499999999810 + 15.2133574262325588 13.8624602489004474 36.2162499999999810 + 13.3509476106317013 15.3476825160355173 36.2162499999999810 + 13.3509476106316995 9.9951264176189216 37.6237500000000082 + 11.0285605568142202 14.8176128259935087 37.6237500000000082 + 15.2133574262325588 13.8624602489004474 37.6237500000000082 + 13.3509476106317013 15.3476825160355173 37.6237500000000082 + 9.9950010843671819 12.6714044668272194 37.6237500000000082 + 11.0285605568142184 10.5251961076609284 37.6237500000000082 + 15.2133574262325588 11.4803486847539915 37.6237500000000082 + 15.4852081361254292 12.6714044668272194 38.3462499999999835 + 14.4516486636783910 14.8176128259935087 38.3462499999999835 + 10.2668517942600523 13.8624602489004474 38.3462499999999835 + 12.1292616098609116 15.3476825160355173 38.3462499999999835 + 14.4516486636783910 10.5251961076609284 38.3462499999999835 + 10.2668517942600523 11.4803486847539933 38.3462499999999835 + 12.1292616098609098 9.9951264176189216 38.3462499999999835 + 15.4848895054305249 12.6219520626177104 39.7766353142050733 + 10.2118904099908789 13.9047237885148984 39.7606718058306186 + 12.1233481087338575 9.9277494689923227 39.7523646960594021 + 10.2910296591893449 11.5014851603112156 39.7673095714280578 + 14.4201913375480348 10.4910212334459025 39.7834231399808544 + 14.4453501662630224 14.8222163576035761 39.7797652045054591 + 12.0895399292792565 15.3853211263337997 39.7332902155890082 + 9.8744980853121866 12.7058932567977934 40.4771001672147079 + 10.9508518772504466 14.8494549262800035 40.4696400755744818 + 15.1698597775413919 11.4859531571496056 40.5011040084424963 + 11.1643329754971266 10.6439361492380211 40.4891368881419424 + 13.3677460599210836 9.9178211696119174 40.4728455968051719 + 15.2958677487437829 13.8724903706174452 40.5008182867190243 + 13.3459729200408876 15.3811947807509402 40.4674548826578970 + 13.3702026845720656 9.9008133043389162 41.8786615450771862 + 10.9747687711352242 14.8801328256904082 41.9002853793260783 + 15.1678025022260758 13.8787408008769315 41.8803248020897598 + 13.3127388233548292 15.4447052540284098 41.9003437546033126 + 15.1679463099180989 11.4896892861857758 41.9189704980208191 + 9.9992238944545289 12.6903992186767773 41.8707029382634772 + 11.0383901394890582 10.5371325520179919 41.8813877857620014 + 10.2909180672245082 11.4614120127377106 42.6172404040030628 + 14.4440276516647721 10.4913973855578746 42.5927003798520474 + 12.1540621513095264 9.9279864540323715 42.5928169356530475 + 12.0731962211957065 15.3897407074534609 42.6022465289821355 + 14.4133455145123133 14.9317116294943535 42.6404595821537242 + 10.2703076641824342 13.8894896250318389 42.5939756955387452 + 15.4234348020720802 12.6905025421945350 42.6364790715060522 + 15.4986542092367348 12.6919688205708923 44.0352981070897087 + 12.1399172279115160 9.8873534318271545 44.0599007924649513 + 12.0337258340659847 15.4941526685910507 44.0567149986984674 + 14.4109280789799392 14.9237214117912593 44.0791124362528421 + 10.2688663657668382 11.4783982602717636 44.0313900931598852 + 14.5072676855822991 10.4917015860808434 44.0595380073772844 + 10.1715448119890652 13.9369399385717667 44.0127931181813636 + 10.9129761618445862 14.9143609921601747 44.7818969644219678 + 15.2118095036966530 13.9662319935213972 44.7292391664377078 + 13.4206766312832393 9.8467641072822669 44.7884558788441751 + 11.1111369014612276 10.4735145483310603 44.7421540879860729 + 15.2319116053024608 11.4937666043579441 44.7532326021316038 + 10.0014846179193171 12.7190184559743020 44.7464593519041571 + 13.2535547840436720 15.5287813819890754 44.7986913817184345 + 13.3960099035405573 9.8815803819427348 46.2255720875662846 + 10.9316042375794318 14.8813434490586332 46.1676990715779638 + 13.2939227629735264 15.5668188962331815 46.1771509801176592 + 9.8694560946441463 12.6687899243108610 46.1675972907072349 + 11.0177712224055089 10.4784015953215359 46.1638485705397983 + 15.2173091088878465 11.4381503314075026 46.1629863593959513 + 15.1746265967384968 13.9493164411902004 46.1251804766407432 + 15.4860073653597059 12.7226203667852271 46.8762815649636266 + 10.1663630463628518 13.8994784822116060 46.8777959370077113 + 14.4134124768545799 14.9534988339657655 46.8703246343644011 + 14.5352511885463258 10.3931783919529934 46.9217054993439575 + 10.1284932004894195 11.4175587353956711 46.8456527712240103 + 12.1153190083986839 9.8937143556069564 46.9328473674885700 + 12.0923564769751319 15.3820461300433351 46.9294276021442371 + 10.1625622344063888 13.9384916155659297 48.2803500103304870 + 12.1340362012476248 9.9961698982317362 48.3127576814958815 + 10.1646543642071787 11.4562219040901141 48.2625306301251769 + 14.5225961060328110 10.5105537692539439 48.2964884003156314 + 14.4400238596496724 14.9409484758445625 48.2763252550902848 + 12.1046927261955535 15.3554824312755809 48.3110307999407311 + 15.5521638687586705 12.7153858035375880 48.2773285144440933 + 9.8548446125755458 12.6674369873104098 48.9850026305987072 + 15.3038368474278581 11.5038206668445113 48.9693080656038404 + 10.9648432083619571 10.5108161157272182 49.0071655912079152 + 13.3545892600223404 9.9910730799328302 49.0414027118058158 + 10.9537512454640744 14.8464416574265332 49.0353986668034594 + 15.2678161164141262 13.9400131444554027 48.9403780517740472 + 13.3122072095398760 15.4021020262528978 49.0476414902086546 + 9.8293005914817684 12.6924373736576204 50.4129438728843837 + 15.1904712040975429 11.4984805802688754 50.4304315204448201 + 13.3154355649626748 10.0450366037834993 50.4166194598725781 + 10.8720002084092116 14.9254347506423706 50.3905026430546883 + 13.3187865233639346 15.3298458594121065 50.4894225124580274 + 10.9476417107087425 10.6214441765767944 50.4001896014539668 + 15.2690440675768873 13.9552245057434181 50.4014286090240944 + 12.0720050997419328 10.0392627283766949 51.1247056900479606 + 15.4151157862483590 12.7407849859620104 51.1623034701401949 + 10.1205129412471706 11.4945163811644662 51.1566980670907299 + 12.0226007231876260 15.3810019043743331 51.1264182735721420 + 10.0414726895534177 13.9723027643410571 51.1659082385326727 + 14.4559176105743603 14.8202054174336677 51.1849247841103505 + 14.4695731678506849 10.4651165608645140 51.1728329513366731 + 14.4772325548003451 10.4824743468286155 52.5399688661454505 + 10.0321483536769431 13.9834574814320636 52.5298756631130317 + 10.2035569929735797 11.5711606511327840 52.5898802988657295 + 12.0656817096929867 10.0037600267172646 52.5229399895305988 + 15.4550144196421027 12.6607617736571481 52.5810192713275910 + 14.4378171365022698 14.9227907157792750 52.5824934947785749 + 11.9956355181074681 15.4253853964990686 52.5311446686422059 + 9.7973573315200593 12.7803553322709309 53.2813968521982062 + 10.8482233822364105 14.9866238946340395 53.2513396993135544 + 15.2428558025862380 11.4530328429522719 53.2919813164800260 + 10.9648193620800427 10.5828701236540272 53.2741082683496217 + 13.2702130481751386 9.9442852446855881 53.2564302392914044 + 15.0905051431663839 13.8473039339215376 53.3151432455134255 + 13.2601020635266185 15.3824084943573052 53.2891044215785783 + 13.2960814731101404 9.9920588223911952 54.6543474246087584 + 10.7726810014851218 14.9785883506725970 54.6764045027139360 + 15.1124880747051620 13.8802331920470348 54.7129391230743067 + 13.2177269068235699 15.3211491411483554 54.6846908702658467 + 9.8228431876829685 12.7478189211213326 54.6978328108328213 + 11.0125013796782465 10.5534477322467222 54.6892134317819867 + 15.3038258347969354 11.4374950939180327 54.6743256559935560 + 15.5016207982640211 12.7019419840948196 55.4143989452322998 + 14.3546479038185790 14.8511173136312191 55.4245358072373762 + 9.9620396941137805 13.9707520032599017 55.4511166307607581 + 11.9505921708330991 15.3581076221394426 55.3816672655455875 + 14.4132248350863446 10.5108480540124489 55.3465532643775617 + 10.2119285916413958 11.5518685300834729 55.3272017682086101 + 12.1039757392236069 10.0298282422384855 55.3522137106308776 + 15.4896890661226632 12.6832124283963950 56.8617073062422307 + 9.9864956275473507 14.0025979148651096 56.8329403542302884 + 12.0836806740024834 10.0383053496994989 56.7845941082614090 + 10.1552247878407798 11.5037632823698086 56.7611517042155853 + 14.5029416108939735 10.4474458499923735 56.7676778896605896 + 14.3621314176073653 14.8186700448534019 56.8718161695781177 + 11.9868211072673923 15.3503446377217152 56.8105899961953824 + 9.8637582490855582 12.7323963142584908 57.5239117931767581 + 10.8277713414889689 14.9315631913199720 57.5524820569160411 + 15.2585064974313145 11.3991489834163549 57.5873968977842239 + 10.9578253813923094 10.5179577600046752 57.5196453962866059 + 13.2993820979108062 9.9666207429759073 57.4761238367714284 + 15.2062174753605053 13.8830413167313083 57.6113047076566076 + 13.2007769398754586 15.3463116804124962 57.5775305286281238 + 13.2688055276101160 9.9510072123542095 58.9066331227401747 + 10.8638948452053139 14.8162473364497167 58.9819293540688818 + 15.1161466151223589 13.8050521826616492 59.0217598857994616 + 13.2406316217241784 15.3281141943701460 58.9766615284108084 + 15.1687898953486417 11.4521811574755059 58.9361810463533260 + 9.7123317336354411 12.6749697378258723 58.9282995607409532 + 10.9513535072040540 10.4745514350620539 58.9315328209959191 + 10.0726136000396007 11.4629093425554256 59.6110570218355775 + 14.4244701265354482 10.4040550453912779 59.6277251206316663 + 12.0357347565397799 9.9377693695245775 59.6251672138615945 + 11.9709067129234317 15.5000490023713464 59.6955646603959877 + 14.2697238948511611 14.7296411042872606 59.7090977013792497 + 10.0109429329781303 13.8753269844423599 59.6792166220019737 + 15.4656618706469331 12.5993291256691027 59.6986303095205457 + 15.3300170352620828 12.5780954034777377 61.0894462309339303 + 12.0189001185670357 9.8683208875787241 61.0490953539050594 + 11.9428992682423338 15.4127199406339308 61.1075333420739355 + 14.2065687371122262 14.7764825775331108 61.1156278543065881 + 10.1202293004397603 11.4756685085212418 61.0435038914908077 + 14.3567734061335255 10.3670775235823616 61.0690346147735355 + 10.0901374145957021 13.8282621682953657 61.0851903640856477 + 10.7609644965755553 14.8298490270860306 61.7787118855024460 + 14.9906603364380349 13.8047089079498981 61.8066302170377639 + 13.2526633312022923 9.8303008226084625 61.8101870285031083 + 10.8881567068929037 10.4558858328086739 61.7609519123755533 + 15.1931187559278857 11.3367811222764914 61.7554011524707462 + 9.8163914963205094 12.6566298526751115 61.7857503311373293 + 13.1944056808656303 15.4122646780390422 61.8527955883527270 + 13.2838878705921921 9.8380626728728675 63.1931022635100490 + 10.7971973597991369 14.9027420964598161 63.1910740951483874 + 13.1347765643663692 15.4326826296088200 63.2233698250901028 + 9.7513944591916815 12.6687431630874503 63.2028327898053419 + 10.9526690368677375 10.4912255614413663 63.1814667743029545 + 15.1169411165034120 11.4269324120060283 63.2045027512364257 + 14.9880782582496170 13.8364963805329051 63.2171213434540107 + 15.3080505318829267 12.6711192291450150 63.9276997499919233 + 10.0330775209607310 13.8832719141307166 63.9050236440016945 + 14.3030034484182789 14.9091754659769187 63.9361699353680493 + 14.3398839903727460 10.4215269362368801 63.8838546330721826 + 10.1398741061771549 11.4018447259669973 63.8954170554929632 + 12.0233308723280548 9.8635826046605271 63.9171027925368094 + 11.8389738306145347 15.4969856869021854 63.9318689207928728 + 10.0359834820615248 13.9033470160823143 65.3162026859262994 + 12.0212275191844267 9.8679951070384018 65.3714498569308518 + 10.0588018392389422 11.3917850001144529 65.2860510493299699 + 14.3451802897105711 10.4402665932383396 65.2857278277734423 + 14.3132194743531915 14.8994149022912978 65.3195262299629889 + 11.9473989340103941 15.4632873427138637 65.3546788050410896 + 15.1860495922382341 12.6750697533075343 65.3107473617002654 + 9.7281576943618671 12.6105048600810719 65.9806429363698612 + 15.0402761001073486 11.4479410609642720 66.0435109336681023 + 10.8715862547057966 10.4209913343815437 66.0673762753823581 + 13.2680234948433995 9.8333352139667767 66.0830843335510707 + 10.8121642871943582 14.8516603189598282 66.0744865318617087 + 15.0960290463860645 13.9173385715320119 66.0187274858910342 + 13.2181626961946410 15.4793099683490691 66.0744298377815511 + 9.8202145871451378 12.5883485600058016 67.3888714231200225 + 15.0750312563024629 11.4414927792350518 67.4750521573622564 + 13.2642206310476176 9.8447650885466640 67.4876134572612614 + 10.7984370290292890 14.8730466630155558 67.4812534548652962 + 13.1905430635839203 15.4609992511879479 67.5170433678534181 + 10.9182203534258715 10.4543621462685099 67.4858413269289059 + 15.1066530566023598 13.8818631513377060 67.4152902603672715 + 12.0566622709915361 9.8940049900777556 68.2303343475368251 + 15.4404432163669103 12.6822311827771035 68.1704530195944329 + 10.1800831678736667 11.4743776059596225 68.1344972797496808 + 11.9184575671627560 15.4193656967396109 68.1867927847052755 + 10.0450886053167672 13.8260216663841966 68.1289676408505329 + 14.3236063729716925 14.8220683803874795 68.1992491741869316 + 14.4045987798228694 10.4359765887889253 68.1709514301117849 + 14.4709377027946857 10.4223110875149043 69.5871850879290150 + 10.0335688100142981 13.8779606581360273 69.5588324098237933 + 10.1880878594498530 11.4919131386905047 69.5731569814197286 + 12.0598654827109435 9.9164854305725036 69.5942035009978923 + 15.2721157501732723 12.6710124253010150 69.5600590224494795 + 14.3150522410957723 14.9249542856789379 69.5802697524078013 + 11.9272625538223895 15.4258984225514997 69.6015481933025768 + 9.8693477588807443 12.6548265590029558 70.2666376014682754 + 10.7944221319852502 14.8766821686112944 70.2972715621363875 + 15.1835004681650343 11.4464534068902317 70.2569314435741603 + 10.9165193967704326 10.4618589071850394 70.2699306993784489 + 13.3255297283676750 9.8618915390951685 70.2881032612063308 + 15.0564019674696592 13.9334283418108758 70.2407189792564282 + 13.1672448904023032 15.4377057344947310 70.3447886122772985 + 13.3410501325799640 9.8930376575572776 71.6773317028721522 + 10.7285355119307422 14.9640340481967176 71.7006043979126844 + 15.0534760094430258 13.8982691935218003 71.6394964716439944 + 13.1765508839574643 15.4040185016318532 71.7411884830088695 + 9.8055758876161470 12.7044419706835150 71.7204119230446935 + 10.9708121067827307 10.5030720891760367 71.6952790765034109 + 15.1936151499804453 11.5060849742435707 71.7093991636760251 + 15.4492373915832069 12.7252281531377633 72.3719860369030670 + 14.3448544874374235 14.9380227899215487 72.4290084913373704 + 9.9897083281346788 13.8993314262625383 72.4077676587433103 + 11.8687536000598328 15.4626796605000987 72.4321381561873494 + 14.4493482969374263 10.4973400511871091 72.4218503361056491 + 10.1713194245892922 11.4980251274853202 72.4061060029090982 + 12.1079003135315340 9.9601989630875885 72.4174507316323002 + 15.4620138060784615 12.7749796555424027 73.7531208748482783 + 10.0012200895691432 13.8501813548957369 73.8606368509516216 + 12.0890030183466095 9.9584475015314222 73.8214910854509725 + 10.1182150722998241 11.3778228294025840 73.8053557574615553 + 14.5059173920554922 10.5481609859705312 73.8208447872896016 + 14.3287448171986433 14.9440122423951038 73.8166050725845935 + 11.8931405191488686 15.4399571585677453 73.8188282125549478 + 9.7604015003946838 12.5916441134480710 74.5443579771065146 + 10.7828988756260529 14.8246238167672111 74.5534637536344604 + 15.2649203578185553 11.5532416674820837 74.4844533663382435 + 10.9303102022156917 10.5018407164800980 74.5659055347673814 + 13.3294875191508186 10.0954991155153984 74.5612128266883616 + 15.2031281197370198 14.0008357338341334 74.4735272665403727 + 13.1881713706958212 15.4683517513316460 74.4983391957911607 + 13.3486976370279145 9.9726888011027572 75.9547481074648090 + 10.8231343513636524 14.8175427596081590 75.9793919242085423 + 15.1995641770638787 14.0000215681347431 75.8736665919406335 + 13.1913615117879903 15.4100851382358108 75.9645839474859912 + 15.1020143407004976 11.6368932359698132 75.8824957536904066 + 9.7520282958468467 12.5798416421476471 75.9082761013818299 + 10.8906006401488273 10.4406637405590264 75.9630174363558410 + 10.0235069981977958 11.3638989950731855 76.6911013458151416 + 14.3978734751413260 10.5803732264964943 76.6856864847481603 + 12.0731923766356655 10.0425148486453129 76.7276666229194575 + 11.9972701633261902 15.2276015907229620 76.6974811261955409 + 14.3750931378964140 14.9110295733321312 76.6881874825427730 + 10.0809271796466646 13.8520249835759675 76.6606786814230645 + 15.3975093004886876 12.8162027316199758 76.6327608193677463 + 15.4705097771328077 12.7867466317666096 78.0485791298029454 + 12.0644473354219741 9.9840448410181395 78.0950135838034640 + 12.0206483340050916 15.3605051245118407 78.1283080454050207 + 14.4237737207349923 14.9368821688735736 78.0858979151426098 + 10.0768838659911122 11.4553923100410078 78.1117694950595904 + 14.4322205411018114 10.5706196636105059 78.0511656970476366 + 10.1007242148612963 13.8591323770795700 78.1176067372174145 + 10.9050023659441049 14.7803280089657338 78.8246944933720499 + 15.2497443149280212 13.9775204002132174 78.8081710070845531 + 13.3019094190525138 9.9843205113349001 78.8410712524975708 + 10.9130332617841503 10.5379166815694543 78.8665692401544192 + 15.1696391492937011 11.5461421323434852 78.8047085908333997 + 9.6771046410213390 12.6402654385993625 78.8405686901529208 + 13.2196661637569477 15.4296057283468464 78.7772289602691700 + 13.3566243282246173 10.0447508117381030 80.2631086518312031 + 10.8731478538244826 14.8239242136177030 80.2534801039778500 + 13.2790532421493737 15.5089414445935070 80.2086387116410435 + 9.7608016958333579 12.6597752483262500 80.2579608373027042 + 10.9948832132103700 10.5245926868202240 80.2540528088136966 + 15.2333523685612349 11.5694520262561564 80.2149389294157089 + 15.2366223425182952 14.0054226164554496 80.2384562272612953 + 15.4585112349036713 12.7721461703050796 80.9529586466448734 + 10.0788888190523203 13.9000195412072802 80.9921830632856086 + 14.4350674195778286 14.9491868817172158 80.9061985169094271 + 14.5071744632862316 10.5455671177580808 80.9023059516582634 + 10.1381858634007678 11.4365240749295189 80.9747495285263454 + 12.1544012553810639 10.0677891020915951 80.9652971177281700 + 12.0079735075721441 15.4104230982502681 80.9175670241884859 + 10.0869826074288067 13.9532449488062920 82.3691015830383151 + 12.0935899812255485 10.0285432834592925 82.4080118140349782 + 10.1277514565552096 11.4228854496009795 82.4258600658427270 + 14.5158214883926391 10.4760594128206357 82.3128305602335786 + 14.3779231982061919 14.9026449997778538 82.3219327613458489 + 12.0065188309155282 15.3561456756314367 82.3169881491165683 + 15.4641230139241888 12.6923060460815282 82.3635859998283024 + 9.8107877608796770 12.6981899413532240 83.0451014765351090 + 15.2325135076857432 11.4988386797510245 83.0876341862328331 + 11.0035544677700798 10.4977968938262638 83.1068813492173746 + 13.3688712402021483 9.9595073556314180 83.0921455740374029 + 10.9142602449461492 14.8341521094980990 83.0661054027659276 + 15.1085700958341640 13.8827388615681162 83.1072335026008773 + 13.2393049436676531 15.4236961614417005 83.0546391971970621 + 9.8637379956559155 12.7001820392613549 84.4815505431431717 + 15.2210855863230190 11.4844275107221208 84.4888284020267264 + 13.3531017843561468 9.8679595485821583 84.4680134636162023 + 10.9249230415809144 14.8693624180155393 84.4592934015117009 + 13.2833643939536952 15.4678644533898915 84.4375347956104463 + 11.0522392895231771 10.5127202382231815 84.5390428012242836 + 15.0508273340118901 13.9001654863780821 84.5232325795168578 + 12.1451016074390097 10.0317516162067975 85.2430560645495206 + 15.3539519779156919 12.6686914830083026 85.2385292750170152 + 10.1825969776974397 11.4856528047270459 85.2370829949050517 + 12.0577798805844658 15.5173575159663049 85.1523994039478538 + 10.1686643129581498 13.8685024817315359 85.2306417758400698 + 14.4055955777780635 14.9221657765084430 85.2278799288031905 + 14.5416808879348949 10.4062140369587404 85.1823412598369316 + 14.6023746034609534 10.4030912771452577 86.6544984836461936 + 10.0696906070953336 13.8785436339945765 86.6607563103381011 + 10.2057334232839594 11.4687683547728465 86.6537770067401283 + 12.1349652500060898 9.9629831984722887 86.6539012627640801 + 15.4526124367548743 12.7107591888869127 86.6483284818991706 + 14.4337804348846674 14.9161190383207778 86.6494254575628418 + 12.0687031351084961 15.4527656882824740 86.5901132104158648 + 9.8567925604038766 12.6178739903868422 87.4099109333202620 + 10.9118807655032448 14.8512174527812419 87.3620284041442829 + 15.2756242172235961 11.4915034336823982 87.3835738155479902 + 10.9728486648292201 10.4782865921587582 87.3351947771743653 + 13.4473952699552974 9.9176750013632056 87.3785161324308035 + 15.1735062854165079 13.9416407416402439 87.3774896365125358 + 13.2859474752305147 15.4569193581909818 87.3059120300523688 + 13.3456093144883994 9.9955394626535377 88.7650401809142124 + 10.8839164304207916 14.8898305552670021 88.7992591808840359 + 15.2064548188700766 13.9549460899765734 88.7630546917629744 + 13.2726727252748589 15.5249946218489310 88.7359512558608117 + 9.9149232917358496 12.6445811311971763 88.7685116643899477 + 10.9616646003634521 10.4624396374367237 88.7861497721219592 + 15.1939841688582113 11.5389578344581878 88.7808317253555828 + 15.4292752772935451 12.7130378609954349 89.4840206286602893 + 14.3660309185680592 14.9269817264578144 89.4600068891792262 + 10.1272674026543736 13.8314936627439380 89.5297232689237177 + 11.9813452352571304 15.5114213632866385 89.4608762560022797 + 14.4402645890918233 10.5265098869558198 89.5102505402167452 + 10.1357629248661389 11.4357530194210515 89.4998821077382587 + 12.1003065176437872 9.9916947080867349 89.4896782556224935 + 15.4548556004678872 12.6253003118042386 90.8580509903225959 + 10.1238470461650731 13.8936579430501421 90.9311412473382319 + 12.0886998564791739 9.9844091930829002 90.8991827286655933 + 10.0950845712863657 11.4227313747789889 90.8935314884739256 + 14.4914991518099825 10.5102972317238770 90.9149250446195509 + 14.3718319144921338 14.8706868645200174 90.8613652226801634 + 11.9945073757462009 15.4361684146670726 90.8617553957322457 + 9.8860106367831158 12.6660908958547527 91.6742488160322608 + 10.9279103485310838 14.7936783887897327 91.6411649102867614 + 15.3713742985509860 11.3941634397842400 91.5360550965300774 + 10.9521839216751644 10.5074835811147675 91.6262475984902807 + 13.3705670218273003 9.9864784836958389 91.6030536949605363 + 15.1735249540639110 13.8286718635898200 91.5450502150486898 + 13.2639545448118898 15.4992347457427950 91.5520565864043050 + 13.3738810844867171 9.9795277597137328 93.0323125007874268 + 10.9259021831459329 14.7782659762153123 93.0571319962525507 + 15.2156939414830372 13.8815276583120628 92.9673060334277892 + 13.3059296627739716 15.3845988659048558 92.9779839855653307 + 15.3522746115589843 11.4305800193881186 92.9517366983807563 + 9.9095398534521575 12.7149984872434541 93.0640246217521820 + 11.0346619860382162 10.5713472599334803 93.0319653786733909 + 10.1641395584321206 11.5112762094424923 93.7812347332197334 + 14.5779695860288587 10.4483351724890969 93.6800273047815040 + 12.1144762072546790 10.0526758009464601 93.7699253126528589 + 12.1050064300035682 15.3239852644531140 93.7034188256305498 + 14.4546458841306134 14.8561270865866994 93.6541118722088584 + 10.1273539916695920 13.9117024324022669 93.7992807565759108 + 15.6142561841586431 12.6624190729638286 93.6296263922466352 + 15.6139601156926577 12.6761015666639416 95.0559452865265087 + 12.0836683062584509 9.9420252925885659 95.1620228415318081 + 12.0807963964984637 15.4280066437853041 95.1015028891945207 + 14.4262983151197783 14.8196265596988308 95.1382287428501030 + 10.1980115601602925 11.4915121767707227 95.1944358589565667 + 14.4666892369021962 10.5219733380495661 95.0941511498955947 + 10.1585140605769109 13.9442221034942637 95.1813912098523360 + 10.9483272208862967 14.9155659141490471 95.8684370455315502 + 15.1629674416958391 13.8146784659405260 95.8632573078550791 + 13.3144771102298911 9.9640692194863920 95.8171163212101931 + 10.9071897901094150 10.4475270092525854 95.8671990163702503 + 15.3258930840986896 11.4935493662572092 95.8334012203745402 + 9.9606095048088807 12.6886464859924715 95.8637532629486770 + 13.3047240111600278 15.3523670050329564 95.8466998891785806 + 13.3509476106316995 9.9951264176189234 97.2637500000000017 + 11.0285605568142202 14.8176128259935087 97.2637500000000017 + 13.3509476106316995 15.3476825160355155 97.2637500000000017 + 9.9950010843671819 12.6714044668272194 97.2637500000000017 + 11.0285605568142184 10.5251961076609284 97.2637500000000017 + 15.2133574262325588 11.4803486847539915 97.2637500000000017 + 15.2133574262325588 13.8624602489004474 97.2637500000000017 + 15.4852081361254292 12.6714044668272194 97.9862499999999699 + 10.2668517942600523 13.8624602489004474 97.9862499999999699 + 14.4516486636783910 14.8176128259935087 97.9862499999999699 + 14.4516486636783910 10.5251961076609284 97.9862499999999699 + 10.2668517942600523 11.4803486847539933 97.9862499999999699 + 12.1292616098609098 9.9951264176189234 97.9862499999999699 + 12.1292616098609116 15.3476825160355155 97.9862499999999699 + 10.2668517942600523 13.8624602489004474 99.3937499999999972 + 12.1292616098609098 9.9951264176189216 99.3937499999999972 + 10.2668517942600523 11.4803486847539933 99.3937499999999972 + 14.4516486636783910 10.5251961076609284 99.3937499999999972 + 14.4516486636783910 14.8176128259935087 99.3937499999999972 + 12.1292616098609116 15.3476825160355173 99.3937499999999972 + 15.4852081361254292 12.6714044668272194 99.3937499999999972 + 9.9950010843671819 12.6714044668272194 100.1162499999999653 + 15.2133574262325588 11.4803486847539915 100.1162499999999653 + 11.0285605568142184 10.5251961076609284 100.1162499999999653 + 13.3509476106316995 9.9951264176189216 100.1162499999999653 + 11.0285605568142202 14.8176128259935087 100.1162499999999653 + 15.2133574262325588 13.8624602489004474 100.1162499999999653 + 13.3509476106317013 15.3476825160355173 100.1162499999999653 + 9.9950010843671819 12.6714044668272194 101.5237500000000068 + 15.2133574262325588 11.4803486847539915 101.5237500000000068 + 13.3509476106316995 9.9951264176189234 101.5237500000000068 + 11.0285605568142202 14.8176128259935087 101.5237500000000068 + 13.3509476106316995 15.3476825160355155 101.5237500000000068 + 11.0285605568142184 10.5251961076609284 101.5237500000000068 + 15.2133574262325588 13.8624602489004474 101.5237500000000068 + 12.1292616098609098 9.9951264176189234 102.2462499999999750 + 15.4852081361254292 12.6714044668272194 102.2462499999999750 + 10.2668517942600523 11.4803486847539933 102.2462499999999750 + 12.1292616098609116 15.3476825160355155 102.2462499999999750 + 10.2668517942600523 13.8624602489004474 102.2462499999999750 + 14.4516486636783910 14.8176128259935087 102.2462499999999750 + 14.4516486636783910 10.5251961076609284 102.2462499999999750 + 14.4516486636783910 10.5251961076609284 103.6537500000000023 + 10.2668517942600523 13.8624602489004474 103.6537500000000023 + 10.2668517942600523 11.4803486847539933 103.6537500000000023 + 12.1292616098609098 9.9951264176189216 103.6537500000000023 + 15.4852081361254292 12.6714044668272194 103.6537500000000023 + 14.4516486636783910 14.8176128259935087 103.6537500000000023 + 12.1292616098609116 15.3476825160355173 103.6537500000000023 + 9.9950010843671819 12.6714044668272194 104.3762499999999847 + 11.0285605568142202 14.8176128259935087 104.3762499999999847 + 15.2133574262325588 11.4803486847539915 104.3762499999999847 + 11.0285605568142184 10.5251961076609284 104.3762499999999847 + 13.3509476106316995 9.9951264176189216 104.3762499999999847 + 15.2133574262325588 13.8624602489004474 104.3762499999999847 + 13.3509476106317013 15.3476825160355173 104.3762499999999847 + 13.3509476106316995 9.9951264176189234 105.7837499999999977 + 11.0285605568142202 14.8176128259935087 105.7837499999999977 + 15.2133574262325588 13.8624602489004474 105.7837499999999977 + 13.3509476106316995 15.3476825160355173 105.7837499999999977 + 9.9950010843671819 12.6714044668272194 105.7837499999999977 + 11.0285605568142184 10.5251961076609284 105.7837499999999977 + 15.2133574262325588 11.4803486847539915 105.7837499999999977 + 15.4852081361254292 12.6714044668272194 106.5062499999999659 + 14.4516486636783910 14.8176128259935087 106.5062499999999659 + 10.2668517942600523 13.8624602489004474 106.5062499999999659 + 12.1292616098609116 15.3476825160355155 106.5062499999999659 + 14.4516486636783910 10.5251961076609284 106.5062499999999659 + 10.2668517942600523 11.4803486847539933 106.5062499999999659 + 12.1292616098609098 9.9951264176189234 106.5062499999999659 + 15.4852081361254292 12.6714044668272194 107.9137499999999932 + 10.2668517942600523 13.8624602489004474 107.9137499999999932 + 12.1292616098609098 9.9951264176189234 107.9137499999999932 + 10.2668517942600523 11.4803486847539933 107.9137499999999932 + 14.4516486636783910 10.5251961076609284 107.9137499999999932 + 14.4516486636783910 14.8176128259935087 107.9137499999999932 + 12.1292616098609116 15.3476825160355155 107.9137499999999932 + 9.9950010843671819 12.6714044668272194 108.6362499999999756 + 11.0285605568142202 14.8176128259935087 108.6362499999999756 + 15.2133574262325588 11.4803486847539915 108.6362499999999756 + 11.0285605568142184 10.5251961076609284 108.6362499999999756 + 13.3509476106316995 9.9951264176189234 108.6362499999999756 + 15.2133574262325588 13.8624602489004474 108.6362499999999756 + 13.3509476106316995 15.3476825160355173 108.6362499999999756 + 13.3509476106316995 9.9951264176189216 110.0437500000000028 + 11.0285605568142202 14.8176128259935087 110.0437500000000028 + 15.2133574262325588 13.8624602489004474 110.0437500000000028 + 13.3509476106317013 15.3476825160355173 110.0437500000000028 + 15.2133574262325588 11.4803486847539915 110.0437500000000028 + 9.9950010843671819 12.6714044668272194 110.0437500000000028 + 11.0285605568142184 10.5251961076609284 110.0437500000000028 + 10.2668517942600523 11.4803486847539933 110.7662499999999852 + 14.4516486636783910 10.5251961076609284 110.7662499999999852 + 12.1292616098609098 9.9951264176189216 110.7662499999999852 + 12.1292616098609116 15.3476825160355173 110.7662499999999852 + 14.4516486636783910 14.8176128259935123 110.7662499999999852 + 10.2668517942600523 13.8624602489004474 110.7662499999999852 + 15.4852081361254292 12.6714044668272194 110.7662499999999852 + 15.4852081361254292 12.6714044668272194 112.1737500000000125 + 12.1292616098609098 9.9951264176189216 112.1737499999999983 + 12.1292616098609134 15.3476825160355173 112.1737500000000125 + 14.4516486636783910 14.8176128259935123 112.1737500000000125 + 10.2668517942600523 11.4803486847539933 112.1737500000000125 + 14.4516486636783910 10.5251961076609284 112.1737499999999983 + 10.2668517942600523 13.8624602489004438 112.1737499999999983 + 11.0285605568142202 14.8176128259935087 112.8962499999999665 + 15.2133574262325588 13.8624602489004474 112.8962499999999665 + 13.3509476106316995 9.9951264176189216 112.8962499999999665 + 11.0285605568142184 10.5251961076609284 112.8962499999999665 + 15.2133574262325588 11.4803486847539915 112.8962499999999665 + 9.9950010843671819 12.6714044668272194 112.8962499999999665 + 13.3509476106316995 15.3476825160355173 112.8962499999999665 + 13.3509476106316995 9.9951264176189234 114.3037499999999937 + 11.0285605568142202 14.8176128259935087 114.3037499999999937 + 13.3509476106316995 15.3476825160355173 114.3037499999999937 + 9.9950010843671819 12.6714044668272194 114.3037499999999937 + 11.0285605568142184 10.5251961076609284 114.3037499999999937 + 15.2133574262325588 11.4803486847539915 114.3037499999999937 + 15.2133574262325588 13.8624602489004474 114.3037499999999937 + 15.4852081361254292 12.6714044668272194 115.0262499999999619 + 10.2668517942600523 13.8624602489004474 115.0262499999999619 + 14.4516486636783910 14.8176128259935087 115.0262499999999903 + 14.4516486636783892 10.5251961076609266 115.0262499999999619 + 10.2668517942600523 11.4803486847539933 115.0262499999999619 + 12.1292616098609116 9.9951264176189216 115.0262499999999619 + 12.1292616098609098 15.3476825160355155 115.0262499999999619 + 10.2668517942600523 13.8624602489004474 116.4337500000000034 + 12.1292616098609116 9.9951264176189216 116.4337500000000034 + 10.2668517942600523 11.4803486847539933 116.4337500000000034 + 14.4516486636783910 10.5251961076609266 116.4337500000000034 + 14.4516486636783910 14.8176128259935087 116.4337500000000034 + 12.1292616098609116 15.3476825160355173 116.4337500000000034 + 15.4852081361254292 12.6714044668272194 116.4337500000000034 + 9.9950010843671819 12.6714044668272194 117.1562499999999858 + 15.2133574262325588 11.4803486847539915 117.1562499999999858 + 11.0285605568142184 10.5251961076609284 117.1562499999999858 + 13.3509476106316995 9.9951264176189216 117.1562499999999858 + 11.0285605568142202 14.8176128259935087 117.1562499999999858 + 15.2133574262325588 13.8624602489004474 117.1562499999999858 + 13.3509476106317013 15.3476825160355173 117.1562499999999858 + 9.9950010843671819 12.6714044668272194 118.5637500000000131 + 15.2133574262325588 11.4803486847539915 118.5637500000000131 + 13.3509476106316995 9.9951264176189234 118.5637500000000131 + 11.0285605568142202 14.8176128259935087 118.5637500000000131 + 13.3509476106316995 15.3476825160355155 118.5637500000000131 + 11.0285605568142184 10.5251961076609284 118.5637500000000131 + 15.2133574262325588 13.8624602489004474 118.5637500000000131 + 12.1292616098609098 9.9951264176189234 119.2862499999999812 + 15.4852081361254292 12.6714044668272194 119.2862499999999812 + 10.2668517942600523 11.4803486847539933 119.2862499999999812 + 12.1292616098609116 15.3476825160355155 119.2862499999999812 + 10.2668517942600523 13.8624602489004474 119.2862499999999812 + 14.4516486636783910 14.8176128259935087 119.2862499999999812 + 14.4516486636783910 10.5251961076609284 119.2862499999999812 + 14.4516486636783910 10.5251961076609284 120.6937499999999943 + 10.2668517942600523 13.8624602489004474 120.6937499999999943 + 10.2668517942600523 11.4803486847539933 120.6937499999999943 + 12.1292616098609098 9.9951264176189216 120.6937499999999943 + 15.4852081361254292 12.6714044668272194 120.6937499999999943 + 14.4516486636783910 14.8176128259935087 120.6937499999999943 + 12.1292616098609116 15.3476825160355173 120.6937499999999943 + 9.9950010843671819 12.6714044668272194 121.4162499999999767 + 11.0285605568142202 14.8176128259935087 121.4162499999999767 + 15.2133574262325588 11.4803486847539915 121.4162499999999767 + 11.0285605568142184 10.5251961076609284 121.4162499999999767 + 13.3509476106316995 9.9951264176189216 121.4162499999999767 + 15.2133574262325588 13.8624602489004474 121.4162499999999767 + 13.3509476106317013 15.3476825160355173 121.4162499999999767 + 13.3509476106316995 9.9951264176189234 122.8237500000000182 + 11.0285605568142202 14.8176128259935087 122.8237500000000182 + 15.2133574262325588 13.8624602489004474 122.8237500000000182 + 13.3509476106316995 15.3476825160355155 122.8237500000000182 + 9.9950010843671819 12.6714044668272194 122.8237500000000182 + 11.0285605568142184 10.5251961076609284 122.8237500000000182 + 15.2133574262325588 11.4803486847539915 122.8237500000000182 + 15.4852081361254292 12.6714044668272194 123.5462499999999864 + 14.4516486636783910 14.8176128259935087 123.5462499999999864 + 10.2668517942600523 13.8624602489004474 123.5462499999999864 + 12.1292616098609116 15.3476825160355155 123.5462499999999864 + 14.4516486636783910 10.5251961076609284 123.5462499999999864 + 10.2668517942600523 11.4803486847539933 123.5462499999999864 + 12.1292616098609098 9.9951264176189234 123.5462499999999864 + 15.4852081361254292 12.6714044668272194 124.9537500000000136 + 10.2668517942600523 13.8624602489004474 124.9537500000000136 + 12.1292616098609098 9.9951264176189216 124.9537500000000136 + 10.2668517942600523 11.4803486847539933 124.9537500000000136 + 14.4516486636783910 10.5251961076609284 124.9537500000000136 + 14.4516486636783910 14.8176128259935087 124.9537500000000136 + 12.1292616098609116 15.3476825160355173 124.9537500000000136 + 9.9950010843671819 12.6714044668272194 125.6762499999999818 + 11.0285605568142202 14.8176128259935087 125.6762499999999818 + 15.2133574262325588 11.4803486847539915 125.6762499999999818 + 11.0285605568142184 10.5251961076609284 125.6762499999999818 + 13.3509476106316995 9.9951264176189216 125.6762499999999818 + 15.2133574262325588 13.8624602489004474 125.6762499999999818 + 13.3509476106317013 15.3476825160355173 125.6762499999999818 + 13.3509476106316995 9.9951264176189216 127.0837499999999949 + 11.0285605568142202 14.8176128259935087 127.0837499999999949 + 15.2133574262325588 13.8624602489004474 127.0837499999999949 + 13.3509476106317013 15.3476825160355173 127.0837499999999949 + 15.2133574262325588 11.4803486847539915 127.0837499999999949 + 9.9950010843671819 12.6714044668272194 127.0837499999999949 + 11.0285605568142184 10.5251961076609284 127.0837499999999949 + 10.2668517942600523 11.4803486847539933 127.8062499999999773 + 14.4516486636783910 10.5251961076609284 127.8062499999999773 + 12.1292616098609098 9.9951264176189216 127.8062499999999773 + 12.1292616098609116 15.3476825160355173 127.8062499999999773 + 14.4516486636783910 14.8176128259935087 127.8062499999999773 + 10.2668517942600523 13.8624602489004474 127.8062499999999773 + 15.4852081361254292 12.6714044668272194 127.8062499999999773 + 15.4852081361254292 12.6714044668272194 129.2137500000000045 + 12.1292616098609098 9.9951264176189234 129.2137500000000045 + 12.1292616098609116 15.3476825160355155 129.2137500000000045 + 14.4516486636783910 14.8176128259935087 129.2137500000000045 + 10.2668517942600523 11.4803486847539933 129.2137500000000045 + 14.4516486636783910 10.5251961076609284 129.2137500000000045 + 10.2668517942600523 13.8624602489004474 129.2137500000000045 + 11.0285605568142202 14.8176128259935087 129.9362499999999727 + 15.2133574262325588 13.8624602489004474 129.9362499999999727 + 13.3509476106316995 9.9951264176189234 129.9362499999999727 + 11.0285605568142184 10.5251961076609284 129.9362499999999727 + 15.2133574262325588 11.4803486847539915 129.9362499999999727 + 9.9950010843671819 12.6714044668272194 129.9362499999999727 + 13.3509476106316995 15.3476825160355155 129.9362499999999727 + 13.3509476106316995 9.9951264176189234 131.3437500000000284 + 11.0285605568142202 14.8176128259935087 131.3437500000000284 + 13.3509476106316995 15.3476825160355173 131.3437500000000284 + 9.9950010843671819 12.6714044668272194 131.3437500000000284 + 11.0285605568142184 10.5251961076609284 131.3437500000000284 + 15.2133574262325588 11.4803486847539915 131.3437500000000284 + 15.2133574262325588 13.8624602489004474 131.3437500000000284 + 15.4852081361254292 12.6714044668272194 132.0662499999999682 + 10.2668517942600523 13.8624602489004474 132.0662499999999682 + 14.4516486636783910 14.8176128259935087 132.0662499999999682 + 14.4516486636783910 10.5251961076609284 132.0662499999999682 + 10.2668517942600523 11.4803486847539933 132.0662499999999682 + 12.1292616098609098 9.9951264176189234 132.0662499999999682 + 12.1292616098609116 15.3476825160355155 132.0662499999999682 + 10.2668517942600523 13.8624602489004474 133.4737500000000239 + 12.1292616098609098 9.9951264176189234 133.4737500000000239 + 10.2668517942600523 11.4803486847539933 133.4737500000000239 + 14.4516486636783910 10.5251961076609284 133.4737500000000239 + 14.4516486636783910 14.8176128259935087 133.4737500000000239 + 12.1292616098609116 15.3476825160355155 133.4737500000000239 + 15.4852081361254257 12.6714044668272194 133.4737500000000239 + 9.9950010843671819 12.6714044668272194 134.1962499999999920 + 15.2133574262325588 11.4803486847539915 134.1962499999999920 + 11.0285605568142184 10.5251961076609284 134.1962499999999920 + 13.3509476106316995 9.9951264176189216 134.1962499999999920 + 11.0285605568142202 14.8176128259935087 134.1962499999999920 + 15.2133574262325588 13.8624602489004474 134.1962499999999920 + 13.3509476106316995 15.3476825160355173 134.1962499999999920 + 9.9950010843671819 12.6714044668272194 135.6037500000000193 + 15.2133574262325588 11.4803486847539915 135.6037500000000193 + 13.3509476106316995 9.9951264176189216 135.6037500000000193 + 11.0285605568142202 14.8176128259935123 135.6037500000000193 + 13.3509476106317013 15.3476825160355173 135.6037500000000193 + 11.0285605568142184 10.5251961076609266 135.6037500000000193 + 15.2133574262325588 13.8624602489004474 135.6037500000000193 diff --git a/dpnegf/tests/data/test_negf/test_negf_e3/negf_7_0.json b/dpnegf/tests/data/test_negf/test_negf_e3/negf_7_0.json new file mode 100644 index 0000000..76a4ddb --- /dev/null +++ b/dpnegf/tests/data/test_negf/test_negf_e3/negf_7_0.json @@ -0,0 +1,72 @@ +{ + "task_options": { + "task": "negf", + "scf": false, + "block_tridiagonal": true, + "ele_T": 300, + "unit": "eV", + "scf_options": { + "mode": "PDIIS", + "mixing_period": 3, + "step_size": 0.05, + "n_history": 6, + "abs_err": 1e-06, + "rel_err": 0.0001, + "max_iter": 100 + }, + "stru_options": { + "gamma_center": true, + "time_reversal_symmetry": true, + "nel_atom": { + "C": 4.0 + }, + "kmesh": [1, 1, 1], + "eig_solver": "numpy", + "pbc": [false, false, false], + "device": { + "id": "224-672", + "sort": true + }, + "lead_L": { + "id": "0-224", + "voltage": 0.0, + "kmesh_lead_Ef": [1, 1, 20], + "useBloch": false + }, + "lead_R": { + "id": "672-896", + "voltage": 0.0, + "kmesh_lead_Ef": [1, 1, 20], + "useBloch": false + } + }, + "poisson_options": { + "solver": "fmm", + "err": 1e-5 + }, + "sgf_solver": "Sancho-Rubio", + "espacing": 0.08, + "emin": -0.2, + "emax": 0.2, + "e_fermi": -13.638587951660156, + "density_options": { + "method": "Fiori", + "integrate_way": "direct" + }, + "eta_lead": 1e-5, + "eta_device": 0.0, + "out_dos": true, + "out_tc": true, + "out_ldos": false, + "out_current_nscf": true, + "parallel_options": { + "n_jobs": 1, + "batch_size": 200, + "backend": "threading" + } + }, + "AtomicData_options" :{ + "r_max": 4.0 + }, + "structure": "./7_0.vasp" +} \ No newline at end of file diff --git a/dpnegf/tests/test_negf_e3.py b/dpnegf/tests/test_negf_e3.py new file mode 100644 index 0000000..e443f6b --- /dev/null +++ b/dpnegf/tests/test_negf_e3.py @@ -0,0 +1,38 @@ +from dpnegf.entrypoints.run import run +import pytest +import torch +import numpy as np +import os + + +@pytest.fixture(scope='session', autouse=True) +def root_directory(request): + """ + :return: + """ + return str(request.config.rootdir) + +def test_negf_e3(root_directory): + INPUT_file = root_directory +"/dpnegf/tests/data/test_negf/test_negf_e3/negf_7_0.json" + output = root_directory +"/dpnegf/tests/data/test_negf/test_negf_e3/out_negf_e3" + checkfile = root_directory +'/dpnegf/tests/data/test_negf/test_negf_e3/nnenv.best.pth' + structure = root_directory +"/dpnegf/tests/data/test_negf/test_negf_e3/7_0.vasp" + + run(INPUT=INPUT_file, + init_model=checkfile, + structure=structure, + output=output, + log_level=5, + log_path=output+"/output.log") + + + negf_out_path = output+"/results/negf.out.pth" + assert os.path.exists(negf_out_path), "NEGF calculation output file not found" + negf_results = torch.load(negf_out_path,weights_only=False) + trans = negf_results['T_avg'] + assert(abs(trans[int(len(trans)/2)]-0.2751458)<1e-5) #compare with calculated transmission at efermi + + + if os.path.exists(output+"/results"): + os.system("rm -r "+output+"/results") + diff --git a/dpnegf/utils/argcheck.py b/dpnegf/utils/argcheck.py index 6bb307c..0691d05 100644 --- a/dpnegf/utils/argcheck.py +++ b/dpnegf/utils/argcheck.py @@ -1035,6 +1035,8 @@ def negf(): doc_out_lcurrent = "" doc_density_options = "" doc_out_potential = "" + doc_override_overlap = "" + doc_parallel_options = "" return [ Argument("scf", bool, optional=True, default=False, doc=doc_scf), @@ -1064,7 +1066,19 @@ def negf(): Argument("out_current", bool, optional=True, default=False, doc=doc_out_current), Argument("out_current_nscf", bool, optional=True, default=False, doc=doc_out_current_nscf), Argument("out_ldos", bool, optional=True, default=False, doc=doc_out_ldos), - Argument("out_lcurrent", bool, optional=True, default=False, doc=doc_out_lcurrent) + Argument("out_lcurrent", bool, optional=True, default=False, doc=doc_out_lcurrent), + Argument("override_overlap", str, optional=True, doc=doc_override_overlap), + Argument("parallel_options", dict, optional=True, sub_fields=parallel_options(), doc=doc_parallel_options) + ] + +def parallel_options(): + doc_n_jobs = "" + doc_batch_size = "" + doc_backend = "" + return [ + Argument("n_jobs", int, optional=True, default=-1, doc=doc_n_jobs), + Argument("batch_size", int, optional=True, default=200, doc=doc_batch_size), + Argument("backend", str, optional=True, default="loky", doc=doc_backend) ] def stru_options(): diff --git a/dpnegf/utils/elec_struc_cal.py b/dpnegf/utils/elec_struc_cal.py index edda731..dc3f4e5 100644 --- a/dpnegf/utils/elec_struc_cal.py +++ b/dpnegf/utils/elec_struc_cal.py @@ -23,7 +23,8 @@ class ElecStruCal(object): def __init__ ( self, model: torch.nn.Module, - device: Union[str, torch.device]=None + device: Union[str, torch.device]=None, + **kwargs ): '''It initializes ElecStruCal object with a neural network model, optional results path, GUI usage flag, and device information, and sets up eigenvalues based on model properties. @@ -68,12 +69,18 @@ def __init__ ( ) r_max, er_max, oer_max = get_cutoffs_from_model_options(model.model_options) self.cutoffs = {'r_max': r_max, 'er_max': er_max, 'oer_max': oer_max} + + if 'override_overlap' in kwargs and isinstance(kwargs['override_overlap'], str): + self.override_overlap = kwargs['override_overlap'] + else: + self.override_overlap = None + def get_data(self, data: Union[AtomicData, ase.Atoms, str], pbc:Union[bool,list]=None, device: Union[str, torch.device]=None, AtomicData_options:dict=None, - override_overlap:Optional[str]=None): + override_overlap:Union[str,bool,None]=None): '''The function `get_data` takes input data in the form of a string, ase.Atoms object, or AtomicData object, processes it accordingly, and returns the AtomicData class. @@ -88,7 +95,8 @@ def get_data(self, device : Union[str, torch.device] The `device` parameter in the `get_data` function is used to specify the device on which the data should be processed. If no device is provided, it defaults to `self.device`. - override_overlap : the path for overlap.h5 to use and override overlap matrix from model. + override_overlap : the path for overlap.h5 to use and override overlap matrix from model. If None, will try + to use self.override_overlap; If False, will not try anything. Returns ------- @@ -139,6 +147,7 @@ def get_data(self, else: raise ValueError('data should be either a string, ase.Atoms, or AtomicData') + override_overlap = None if override_overlap == False else override_overlap if override_overlap else self.override_overlap if isinstance(override_overlap, str): assert os.path.exists(override_overlap), "Overlap file not found." overlap_blocks = h5py.File(override_overlap, "r") @@ -175,7 +184,7 @@ def get_eigs(self, klist: np.ndarray, pbc:Union[bool,list]=None, AtomicData_options:dict=None, - override_overlap:Optional[str]=None, + override_overlap:Union[str,bool,None]=None, eig_solver:Optional[str]=None): '''This function calculates eigenvalues for Hk at specified k-points. @@ -189,14 +198,16 @@ def get_eigs(self, AtomicData_options : dict The `AtomicData_options` parameter is a dictionary that contains options for configuring the `AtomicData` object. - override_overlap : the path for overlap.h5 to use and override overlap matrix from model. + override_overlap : the path for overlap.h5 to use and override overlap matrix from model. If None, will try + to use self.override_overlap; If False, will not try anything. Returns ------- The function `get_eigs` returns the loaded data and the energy eigenvalues as a numpy array. ''' - + + override_overlap = None if override_overlap == False else override_overlap if override_overlap else self.override_overlap data = self.get_data(data=data, pbc=pbc, device=self.device,AtomicData_options=AtomicData_options, override_overlap=override_overlap) # set the kpoint of the AtomicData data[AtomicDataDict.KPOINT_KEY] = \