diff --git a/.gitignore b/.gitignore index b5f10876..5bb7f95f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,10 +8,9 @@ dptb/tests/**/*.traj dptb/tests/**/out*/* examples/_* *.dat -*.vasp *log* dptb/tests/data/**/out*/config_*.json - +bandstructure.npy dptb/tests/data/hBN/data/set.0/xdat2.traj dptb/tests/data/postrun/run_config.json dptb/tests/data/test_all/test_config.json diff --git a/dptb/entrypoints/train.py b/dptb/entrypoints/train.py index 7dcac1e2..0c335802 100644 --- a/dptb/entrypoints/train.py +++ b/dptb/entrypoints/train.py @@ -98,54 +98,59 @@ def train( # since here we want to output jdata as a config file to inform the user what model options are used, we need to update the jdata torch.set_default_dtype(getattr(torch, jdata["common_options"]["dtype"])) - + if restart or init_model: + f = restart if restart else init_model - f = torch.load(f) - - if jdata.get("model_options", None) is None: - jdata["model_options"] = f["config"]["model_options"] - - # update basis - basis = f["config"]["common_options"]["basis"] - # nnsk - if len(f["config"]["model_options"])==1 and f["config"]["model_options"].get("nnsk") != None: - for asym, orb in jdata["common_options"]["basis"].items(): - assert asym in basis.keys(), f"Atom {asym} not found in model's basis" - if orb != basis[asym]: - log.info(f"Initializing Orbital {orb} of Atom {asym} from {basis[asym]}") - # we have the orbitals in jdata basis correct, now we need to make sure all atom in basis are also contained in jdata basis - for asym, orb in basis.items(): - if asym not in jdata["common_options"]["basis"].keys(): - jdata["common_options"]["basis"][asym] = orb # add the atomtype in the checkpoint but not in the jdata basis, because it will be used to build the orbital mapper for dataset - else: # not nnsk - for asym, orb in jdata["common_options"]["basis"].items(): - assert asym in basis.keys(), f"Atom {asym} not found in model's basis" - assert orb == basis[asym], f"Orbital {orb} of Atom {asym} not consistent with the model's basis, which is only allowed in nnsk training" - - jdata["common_options"]["basis"] = basis - # update model options and train_options - if restart: - # - if jdata.get("train_options", None) is not None: - for obj in Trainer.object_keys: - if jdata["train_options"].get(obj) != f["config"]["train_options"].get(obj): - log.warning(f"{obj} in config file is not consistent with the checkpoint, using the one in checkpoint") - jdata["train_options"][obj] = f["config"]["train_options"][obj] - else: - jdata["train_options"] = f["config"]["train_options"] - - if jdata.get("model_options", None) is None or jdata["model_options"] != f["config"]["model_options"]: - log.warning("model_options in config file is not consistent with the checkpoint, using the one in checkpoint") - jdata["model_options"] = f["config"]["model_options"] # restart does not allow to change model options + if f.split(".")[-1] == "json": + assert not restart, "json model can not be used as restart! should be a checkpoint file" else: - # init model mode, allow model_options change - if jdata.get("train_options", None) is None: - jdata["train_options"] = f["config"]["train_options"] - if jdata.get("model_options") is None: + f = torch.load(f) + + if jdata.get("model_options", None) is None: jdata["model_options"] = f["config"]["model_options"] - del f + + # update basis + basis = f["config"]["common_options"]["basis"] + # nnsk + if len(f["config"]["model_options"])==1 and f["config"]["model_options"].get("nnsk") != None: + for asym, orb in jdata["common_options"]["basis"].items(): + assert asym in basis.keys(), f"Atom {asym} not found in model's basis" + if orb != basis[asym]: + log.info(f"Initializing Orbital {orb} of Atom {asym} from {basis[asym]}") + # we have the orbitals in jdata basis correct, now we need to make sure all atom in basis are also contained in jdata basis + for asym, orb in basis.items(): + if asym not in jdata["common_options"]["basis"].keys(): + jdata["common_options"]["basis"][asym] = orb # add the atomtype in the checkpoint but not in the jdata basis, because it will be used to build the orbital mapper for dataset + else: # not nnsk + for asym, orb in jdata["common_options"]["basis"].items(): + assert asym in basis.keys(), f"Atom {asym} not found in model's basis" + assert orb == basis[asym], f"Orbital {orb} of Atom {asym} not consistent with the model's basis, which is only allowed in nnsk training" + + jdata["common_options"]["basis"] = basis + + # update model options and train_options + if restart: + # + if jdata.get("train_options", None) is not None: + for obj in Trainer.object_keys: + if jdata["train_options"].get(obj) != f["config"]["train_options"].get(obj): + log.warning(f"{obj} in config file is not consistent with the checkpoint, using the one in checkpoint") + jdata["train_options"][obj] = f["config"]["train_options"][obj] + else: + jdata["train_options"] = f["config"]["train_options"] + + if jdata.get("model_options", None) is None or jdata["model_options"] != f["config"]["model_options"]: + log.warning("model_options in config file is not consistent with the checkpoint, using the one in checkpoint") + jdata["model_options"] = f["config"]["model_options"] # restart does not allow to change model options + else: + # init model mode, allow model_options change + if jdata.get("train_options", None) is None: + jdata["train_options"] = f["config"]["train_options"] + if jdata.get("model_options") is None: + jdata["model_options"] = f["config"]["model_options"] + del f else: j_must_have(jdata, "model_options") j_must_have(jdata, "train_options") diff --git a/dptb/nn/build.py b/dptb/nn/build.py index ea90357d..8e2b67cd 100644 --- a/dptb/nn/build.py +++ b/dptb/nn/build.py @@ -3,6 +3,7 @@ from dptb.nn.nnsk import NNSK import torch from dptb.utils.tools import j_must_have +import copy log = logging.getLogger(__name__) @@ -135,7 +136,31 @@ def build_model(run_options, model_options: dict={}, common_options: dict={}, st # mix model can be initilized with a mixed reference model or a nnsk model. model = MIX.from_reference(checkpoint, **model_options, **common_options) - if model.model_options != model_options: - # log.error("The model options are not consistent with the checkpoint, using the one in the checkpoint.") - raise ValueError("The model options are not consistent with the checkpoint, using the one in the checkpoint.") + for k, v in model.model_options.items(): + if k not in model_options: + log.warning(f"The model options {k} is not defined in input model_options, set to {v}.") + else: + deep_dict_difference(k, v, model_options) + return model + + +def deep_dict_difference(base_key, expected_value, model_options): + """ + 递归地记录嵌套字典中的选项差异。 + + :param base_key: 基础键名,用于构建警告消息的前缀。 + :param expected_value: 期望的值,可能是字典或非字典类型。 + :param model_options: 用于比较的模型选项字典。 + """ + target_dict= copy.deepcopy(model_options) # 防止修改原始字典 + if isinstance(expected_value, dict): + for subk, subv in expected_value.items(): + if subk not in target_dict.get(base_key, {}): + log.warning(f"The model option {subk} in {base_key} is not defined in input model_options, set to {subv}.") + else: + target2 = copy.deepcopy(target_dict[base_key]) + deep_dict_difference(f"{subk}", subv, target2) + else: + if expected_value != target_dict[base_key]: + log.warning(f"The model option {base_key} is set to {expected_value}, but in input it is {target_dict[base_key]}, make sure it it correct!") \ No newline at end of file diff --git a/dptb/nn/deeptb.py b/dptb/nn/deeptb.py index a3290bbf..46bda4a3 100644 --- a/dptb/nn/deeptb.py +++ b/dptb/nn/deeptb.py @@ -329,6 +329,7 @@ def __init__( transform=False, ) self.idp = self.nnsk.idp + assert not self.nnsk.push, "The push option is not supported in the mixed model. The push option is only supported in the nnsk model." self.model_options = self.nnsk.model_options self.model_options.update(self.dptb.model_options) diff --git a/dptb/nn/nnsk.py b/dptb/nn/nnsk.py index da969039..b548c835 100644 --- a/dptb/nn/nnsk.py +++ b/dptb/nn/nnsk.py @@ -30,7 +30,7 @@ def __init__( device: Union[str, torch.device] = torch.device("cpu"), transform: bool = True, freeze: bool = False, - push: Dict=None, + push: Union[bool,dict]=False, std: float = 0.01, **kwargs, ) -> None: @@ -179,7 +179,7 @@ def forward(self, data: AtomicDataDict.Type) -> AtomicDataDict.Type: # reflect_params[:,self.idp_sk.pair_maps[k],:] += params[:,self.idp_sk.pair_maps[k_r],:] # self.strain_param.data = reflect_params + params - if self.push is not None: + if self.push is not None and self.push is not False: if abs(self.push.get("rs_thr")) + abs(self.push.get("rc_thr")) + abs(self.push.get("w_thr")) > 0: self.push_decay(**self.push) @@ -305,7 +305,7 @@ def from_reference( dtype: Union[str, torch.dtype]=None, device: Union[str, torch.device]=None, push: Dict=None, - freeze: bool = None, + freeze: bool = False, std: float = 0.01, **kwargs, ): @@ -332,7 +332,8 @@ def from_reference( for k,v in common_options.items(): assert v is not None, f"You need to provide {k} when you are initializing a model from a json file." for k,v in nnsk.items(): - assert v is not None, f"You need to provide {k} when you are initializing a model from a json file." + if k != 'push': + assert v is not None, f"You need to provide {k} when you are initializing a model from a json file." v1_model = j_loader(checkpoint) model = cls._from_model_v1( @@ -349,7 +350,7 @@ def from_reference( if v is None: common_options[k] = f["config"]["common_options"][k] for k,v in nnsk.items(): - if v is None and not k is "push" : + if v is None and k != "push" : nnsk[k] = f["config"]["model_options"]["nnsk"][k] model = cls(**common_options, **nnsk) @@ -458,6 +459,9 @@ def _from_model_v1( dtype: Union[str, torch.dtype] = torch.float32, device: Union[str, torch.device] = torch.device("cpu"), std: float = 0.01, + freeze: bool = False, + push: Union[bool,None,dict] = False, + **kwargs ): # could support json file and .pth file checkpoint of nnsk @@ -477,7 +481,8 @@ def _from_model_v1( idp_sk.get_orbpair_maps() idp_sk.get_skonsite_maps() - nnsk_model = cls(basis=basis, idp_sk=idp_sk, dtype=dtype, device=device, onsite=onsite, hopping=hopping, overlap=overlap, std=std) + nnsk_model = cls(basis=basis, idp_sk=idp_sk, onsite=onsite, + hopping=hopping, overlap=overlap, std=std,freeze=freeze, push=push, dtype=dtype, device=device,) onsite_param = v1_model["onsite"] hopping_param = v1_model["hopping"] diff --git a/dptb/tests/data/json_model/AlAs.vasp b/dptb/tests/data/json_model/AlAs.vasp new file mode 100644 index 00000000..f4ea1e90 --- /dev/null +++ b/dptb/tests/data/json_model/AlAs.vasp @@ -0,0 +1,10 @@ +Primitive Cell + 1.000000 + 0.00000000000000 2.83790087700000 2.83790087700000 + 2.83790087700000 0.00000000000000 2.83790087700000 + 2.83790087700000 2.83790087700000 0.00000000000000 + Al As + 1 1 +DIRECT + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Al1 + 0.7500000000000000 0.7500000000000000 0.7500000000000000 As1 diff --git a/dptb/tests/data/json_model/AlAs_v1_nnsk_b5.200_c4.200_w0.200.json b/dptb/tests/data/json_model/AlAs_v1_nnsk_b5.200_c4.200_w0.200.json new file mode 100644 index 00000000..c6930e93 --- /dev/null +++ b/dptb/tests/data/json_model/AlAs_v1_nnsk_b5.200_c4.200_w0.200.json @@ -0,0 +1,160 @@ +{ + "onsite": { + "As-4s-0": [ + -0.18473201990127563 + ], + "As-4p-0": [ + -0.11357007175683975 + ], + "As-d*-0": [ + 0.3511451780796051 + ], + "Al-3s-0": [ + -0.18422652781009674 + ], + "Al-3p-0": [ + -0.13763460516929626 + ], + "Al-d*-0": [ + 0.312237948179245 + ] + }, + "hopping": { + "As-As-4s-4s-0": [ + -0.03229105472564697, + 0.07646925002336502 + ], + "As-As-4s-4p-0": [ + -0.0738883689045906, + 0.5035997629165649 + ], + "As-As-4s-d*-0": [ + 0.07086940854787827, + -0.260450541973114 + ], + "As-As-4p-4p-0": [ + 0.024703392758965492, + 0.32161980867385864 + ], + "As-As-4p-4p-1": [ + -0.03644459694623947, + 0.16677069664001465 + ], + "As-As-4p-d*-0": [ + 0.1958223581314087, + 0.40328601002693176 + ], + "As-As-4p-d*-1": [ + 0.08628051728010178, + 0.2711496651172638 + ], + "As-As-d*-d*-0": [ + 0.27534937858581543, + 0.0003734314814209938 + ], + "As-As-d*-d*-1": [ + 0.110753633081913, + 0.16355712711811066 + ], + "As-As-d*-d*-2": [ + 0.12722206115722656, + -0.039639703929424286 + ], + "As-Al-4s-3s-0": [ + -0.025742273777723312, + -0.11441828310489655 + ], + "As-Al-4s-3p-0": [ + -0.049512267112731934, + 1.6552401781082153 + ], + "As-Al-4s-d*-0": [ + -0.09634136408567429, + 2.5665485858917236 + ], + "As-Al-4p-3s-0": [ + 0.056806981563568115, + 0.8666085600852966 + ], + "As-Al-4p-3p-0": [ + -0.1331755518913269, + -1.1635133028030396 + ], + "As-Al-4p-3p-1": [ + 0.03740769997239113, + 1.13713800907135 + ], + "As-Al-4p-d*-0": [ + -0.08070402592420578, + -0.8778209090232849 + ], + "As-Al-4p-d*-1": [ + -0.13577908277511597, + -0.809020459651947 + ], + "As-Al-d*-3s-0": [ + 0.02246418036520481, + 0.8542388677597046 + ], + "As-Al-d*-3p-0": [ + 0.04696977138519287, + 1.3259025812149048 + ], + "As-Al-d*-3p-1": [ + -0.10509342700242996, + 0.9280414581298828 + ], + "As-Al-d*-d*-0": [ + -0.11534512042999268, + 2.6582839488983154 + ], + "As-Al-d*-d*-1": [ + -0.12264155596494675, + 2.319368839263916 + ], + "As-Al-d*-d*-2": [ + -0.06880699843168259, + -2.0110905170440674 + ], + "Al-Al-3s-3s-0": [ + 0.004638504236936569, + -0.1594972312450409 + ], + "Al-Al-3s-3p-0": [ + 0.009839839302003384, + -0.14930647611618042 + ], + "Al-Al-3s-d*-0": [ + -0.016385892406105995, + -0.23952551186084747 + ], + "Al-Al-3p-3p-0": [ + -0.012722501531243324, + 0.18276041746139526 + ], + "Al-Al-3p-3p-1": [ + -0.0111026456579566, + -0.6023564338684082 + ], + "Al-Al-3p-d*-0": [ + 0.05398454889655113, + 0.1921117901802063 + ], + "Al-Al-3p-d*-1": [ + -0.03137310594320297, + 0.5512192845344543 + ], + "Al-Al-d*-d*-0": [ + -0.0012715273769572377, + -0.5702048540115356 + ], + "Al-Al-d*-d*-1": [ + 0.08672016113996506, + -0.4915500283241272 + ], + "Al-Al-d*-d*-2": [ + 0.13479098677635193, + 0.0929788202047348 + ] + } +} \ No newline at end of file diff --git a/dptb/tests/data/json_model/Si_v1_nnsk_b2.600_c2.600_w0.300.json b/dptb/tests/data/json_model/Si_v1_nnsk_b2.600_c2.600_w0.300.json new file mode 100644 index 00000000..44ec9e97 --- /dev/null +++ b/dptb/tests/data/json_model/Si_v1_nnsk_b2.600_c2.600_w0.300.json @@ -0,0 +1,86 @@ +{ + "onsite": { + "Si-Si-3s-3s-0": [ + -0.01532896887511015, + -0.0049815368838608265 + ], + "Si-Si-3s-3p-0": [ + 0.004518268629908562, + -0.0034872828982770443 + ], + "Si-Si-3s-d*-0": [ + 0.029722778126597404, + 0.014809738844633102 + ], + "Si-Si-3p-3p-0": [ + -0.01756233535706997, + -0.007649253588169813 + ], + "Si-Si-3p-3p-1": [ + 0.003279546508565545, + 0.032388411462306976 + ], + "Si-Si-3p-d*-0": [ + 0.0034299660474061966, + -0.01851429045200348 + ], + "Si-Si-3p-d*-1": [ + 0.0046154288575053215, + -0.016726411879062653 + ], + "Si-Si-d*-d*-0": [ + 0.011960386298596859, + 0.016399599611759186 + ], + "Si-Si-d*-d*-1": [ + 0.0475643128156662, + -0.0011831362498924136 + ], + "Si-Si-d*-d*-2": [ + 0.0342361256480217, + -0.0014669105876237154 + ] + }, + "hopping": { + "Si-Si-3s-3s-0": [ + 0.10317661613225937, + 0.16463157534599304 + ], + "Si-Si-3s-3p-0": [ + 0.1259000450372696, + -0.062399305403232574 + ], + "Si-Si-3s-d*-0": [ + 0.09938226640224457, + 0.00249662296846509 + ], + "Si-Si-3p-3p-0": [ + -0.19718992710113525, + 0.09754552692174911 + ], + "Si-Si-3p-3p-1": [ + 0.07159977406263351, + 0.22319510579109192 + ], + "Si-Si-3p-d*-0": [ + -0.0644393265247345, + 0.002721358323469758 + ], + "Si-Si-3p-d*-1": [ + 0.11934991925954819, + -0.002751425374299288 + ], + "Si-Si-d*-d*-0": [ + 0.02002537250518799, + 0.011592463590204716 + ], + "Si-Si-d*-d*-1": [ + -0.14973551034927368, + -0.0023070580791682005 + ], + "Si-Si-d*-d*-2": [ + 0.07978004962205887, + -0.0026554290670901537 + ] + } +} \ No newline at end of file diff --git a/dptb/tests/data/json_model/silicon.vasp b/dptb/tests/data/json_model/silicon.vasp new file mode 100644 index 00000000..c3a71b16 --- /dev/null +++ b/dptb/tests/data/json_model/silicon.vasp @@ -0,0 +1,10 @@ +Primitive Cell + 1.000000 + 0.00000000000000 2.71499984016137 2.71499984016137 + 2.71499984016137 0.00000000000000 2.71499984016137 + 2.71499984016137 2.71499984016137 0.00000000000000 + Si + 2 +DIRECT + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si1 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si2 diff --git a/dptb/tests/data/test_sktb/input/input_initv1json.json b/dptb/tests/data/test_sktb/input/input_initv1json.json new file mode 100644 index 00000000..9919136f --- /dev/null +++ b/dptb/tests/data/test_sktb/input/input_initv1json.json @@ -0,0 +1,43 @@ +{ + "common_options": { + "basis": { + "Si": ["3s","3p","d*"] + }, + "device": "cpu", + "dtype": "float32", + "overlap": false, + "seed": 120468 + }, + "train_options": { + "num_epoch": 2, + "batch_size": 1, + "optimizer": { + "lr": 0.05, + "type": "Adam" + }, + "lr_scheduler": { + "type": "exp", + "gamma": 0.999 + }, + "loss_options":{ + "train": {"method": "eigvals"} + }, + "save_freq": 1, + "display_freq": 10 + }, + "model_options": { + "nnsk": { + "onsite": {"method": "strain","rs":6.0, "w": 0.1}, + "hopping": {"method": "powerlaw", "rs":2.6, "w": 0.3}, + "push": false, + "freeze": false + } + }, + "data_options": { + "train": { + "root": "./dptb/tests/data/test_sktb/dataset/", + "prefix": "kpath_spk", + "get_eigenvalues": true + } + } +} \ No newline at end of file diff --git a/dptb/tests/test_from_v1json.py b/dptb/tests/test_from_v1json.py new file mode 100644 index 00000000..c9038e4f --- /dev/null +++ b/dptb/tests/test_from_v1json.py @@ -0,0 +1,171 @@ +import pytest +from dptb.nn.build import build_model +from dptb.postprocess.bandstructure.band import Band +import os +from pathlib import Path +import numpy as np + +rootdir = os.path.join(Path(os.path.abspath(__file__)).parent, "data") + +class TestV1Jsonuniform: + run_opt = { + "init_model": f"{rootdir}/json_model/AlAs_v1_nnsk_b5.200_c4.200_w0.200.json", + "restart": None, + "freeze": False, + "train_soc": False, + "log_path": None, + "log_level": None + } + + model_option = { + "nnsk": { + "onsite": {"method": "uniform"}, + "hopping": {"method": "powerlaw", "rs":4.2, "w": 0.2}, + "push": False, + "freeze": False + } + } + common_options = { + "basis": { + "As": ["4s","4p","d*"], + "Al": ["3s","3p","d*"] + }, + "device": "cpu", + "dtype": "float32", + "overlap": False + } + + jdata={ + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 2], + [0.5000000000, 0.0000000000, 0.5000000000, 2], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 2], + [0.0000000000, 0.0000000000, 0.0000000000, 2], + [0.5000000000, 0.5000000000, 0.5000000000, 2], + [0.5000000000, 0.2500000000, 0.7500000000, 2], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":['G','X','U','K','G','L','W','X'], + "E_fermi":-9.307, + "emin":-15, + "emax":10 } + } + + + def test_bands(self): + model = build_model(self.run_opt, self.model_option, self.common_options) + + kpath_kwargs = self.jdata["task_options"] + bcal = Band(model=model, + use_gui=True, + results_path=f'{rootdir}/out', + device=model.device) + + stru_data = f"{rootdir}/json_model/AlAs.vasp" + AtomicData_options = {"r_max": 5.2, "pbc": True} + + eigenstatus = bcal.get_bands(data=stru_data, + kpath_kwargs=kpath_kwargs, + AtomicData_options=AtomicData_options) + + expected_bands =np.array([[-2.48727150e+01, -1.29382324e+01, -1.29382257e+01, -1.29382229e+01, -1.10868120e+01, -8.07862854e+00, -8.07862568e+00, -8.07861805e+00, 9.56408596e+00, 9.56408691e+00, 1.25271873e+01, 1.25271950e+01, 1.25271978e+01, 4.23655891e+01, 4.23656044e+01, 4.32170753e+01, 4.32170792e+01, 4.32170868e+01], + [-2.41187267e+01, -1.61148472e+01, -1.42793083e+01, -1.42793045e+01, -1.03604565e+01, -8.68612957e+00, -5.90628624e+00, -5.90628576e+00, 2.25617599e+00, 5.51729870e+00, 5.51730347e+00, 5.61441135e+00, 5.90860081e+00, 2.50449829e+01, 2.82622643e+01, 2.82622776e+01, 2.84239502e+01, 3.07470131e+01], + [-2.29336300e+01, -1.85238571e+01, -1.51972685e+01, -1.51972666e+01, -1.13513584e+01, -1.05228834e+01, -2.21334386e+00, -2.21334243e+00, -3.03742558e-01, -3.03741843e-01, -9.65526607e-03, 8.24528575e-01, 1.84810734e+00, 7.89270067e+00, 1.01749058e+01, 1.01749077e+01, 1.34912348e+01, 1.40874834e+01], + [-2.29474239e+01, -1.84172096e+01, -1.56978197e+01, -1.50829716e+01, -1.10063257e+01, -9.69069576e+00, -2.91590619e+00, -2.64113235e+00, -1.43450952e+00, -4.38025206e-01, 1.01333761e+00, 1.07858098e+00, 3.61593747e+00, 7.17037296e+00, 9.29849529e+00, 1.00337200e+01, 1.38197346e+01, 1.42732258e+01], + [-2.30109138e+01, -1.81435585e+01, -1.63736401e+01, -1.47889500e+01, -1.06536665e+01, -7.59100485e+00, -4.40897274e+00, -4.01978016e+00, -1.59141457e+00, -8.14805627e-02, 1.07713044e+00, 2.36757493e+00, 6.39950705e+00, 6.44096851e+00, 8.05662537e+00, 1.10570469e+01, 1.42302742e+01, 1.53123789e+01], + [-2.30108986e+01, -1.81435699e+01, -1.63736362e+01, -1.47889528e+01, -1.06536646e+01, -7.59101057e+00, -4.40896845e+00, -4.01978016e+00, -1.59141552e+00, -8.14811662e-02, 1.07712996e+00, 2.36757469e+00, 6.39950800e+00, 6.44096851e+00, 8.05662632e+00, 1.10570469e+01, 1.42302704e+01, 1.53123856e+01], + [-2.40611782e+01, -1.67647114e+01, -1.50329933e+01, -1.34557276e+01, -9.01750469e+00, -7.44570971e+00, -7.16721439e+00, -6.34023905e+00, 2.99699736e+00, 3.46649384e+00, 4.46376228e+00, 5.20905399e+00, 7.82006931e+00, 2.53436356e+01, 2.59452019e+01, 2.75783978e+01, 2.84669800e+01, 2.92158451e+01], + [-2.48727150e+01, -1.29382324e+01, -1.29382257e+01, -1.29382229e+01, -1.10868120e+01, -8.07862854e+00, -8.07862568e+00, -8.07861805e+00, 9.56408596e+00, 9.56408691e+00, 1.25271873e+01, 1.25271950e+01, 1.25271978e+01, 4.23655891e+01, 4.23656044e+01, 4.32170753e+01, 4.32170792e+01, 4.32170868e+01], + [-2.43790150e+01, -1.64551792e+01, -1.34435387e+01, -1.34435349e+01, -1.03514795e+01, -7.39460945e+00, -7.39460516e+00, -6.10483932e+00, 4.67000580e+00, 4.67000914e+00, 6.74771929e+00, 6.74772310e+00, 9.39733410e+00, 3.10563354e+01, 3.10563450e+01, 3.17371826e+01, 3.17371864e+01, 3.35946846e+01], + [-2.35396881e+01, -1.85059109e+01, -1.37993116e+01, -1.37993116e+01, -1.08380241e+01, -7.56033421e+00, -7.56033087e+00, -3.32421374e+00, -4.98459250e-01, -4.98458147e-01, 4.68962049e+00, 4.68962288e+00, 7.64235640e+00, 1.68248940e+01, 1.68248997e+01, 2.04327011e+01, 2.04327030e+01, 2.12005653e+01], + [-2.31961079e+01, -1.82634125e+01, -1.56346197e+01, -1.44923830e+01, -9.23417282e+00, -7.92826271e+00, -5.95008469e+00, -4.99026012e+00, -1.32351279e+00, -5.01590669e-01, 2.95195317e+00, 4.62497950e+00, 5.44099808e+00, 1.17575951e+01, 1.19310246e+01, 1.50337820e+01, 1.79441051e+01, 1.80985184e+01], + [-2.29424934e+01, -1.80575047e+01, -1.62370167e+01, -1.56745434e+01, -8.23033428e+00, -7.16741085e+00, -6.62496185e+00, -5.73856449e+00, -1.48688376e+00, 1.80971527e+00, 2.45554900e+00, 3.85232139e+00, 4.23087120e+00, 5.92445564e+00, 6.44421244e+00, 8.21325207e+00, 1.44543571e+01, 1.44987440e+01], + [-2.29404392e+01, -1.83383312e+01, -1.57138681e+01, -1.54623451e+01, -1.01436739e+01, -9.37874889e+00, -4.06893778e+00, -3.25271797e+00, -1.23538244e+00, -4.17988628e-01, 1.19791162e+00, 2.69611549e+00, 3.94141436e+00, 6.43033361e+00, 8.37113857e+00, 9.67157173e+00, 1.41308174e+01, 1.42368813e+01], + [-2.29336300e+01, -1.85238571e+01, -1.51972685e+01, -1.51972666e+01, -1.13513584e+01, -1.05228834e+01, -2.21334386e+00, -2.21334243e+00, -3.03742558e-01, -3.03741843e-01, -9.65526607e-03, 8.24528575e-01, 1.84810734e+00, 7.89270067e+00, 1.01749058e+01, 1.01749077e+01, 1.34912348e+01, 1.40874834e+01]]) + + assert np.allclose(eigenstatus["eigenvalues"], expected_bands, atol=1e-4) + + + +class TestV1Jsonstrain: + run_opt = { + "init_model": f"{rootdir}/json_model/Si_v1_nnsk_b2.600_c2.600_w0.300.json", + "restart": None, + "freeze": False, + "train_soc": False, + "log_path": None, + "log_level": None + } + + model_option = { + "nnsk": { + "onsite": {"method": "strain","rs":6, "w": 0.1}, + "hopping": {"method": "powerlaw", "rs":2.6, "w": 0.3}, + "push": False, + "freeze": False + } + } + common_options = { + "basis": { + "Si": ["3s","3p","d*"] + }, + "device": "cpu", + "dtype": "float32", + "overlap": False + } + + jdata={ + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 2], + [0.5000000000, 0.0000000000, 0.5000000000, 2], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 2], + [0.0000000000, 0.0000000000, 0.0000000000, 2], + [0.5000000000, 0.5000000000, 0.5000000000, 2], + [0.5000000000, 0.2500000000, 0.7500000000, 2], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":["G","X","X/U","K","G","L","W","X"], + "E_fermi":-9.307, + "emin":-15, + "emax":10 } + } + + + def test_bands(self): + model = build_model(self.run_opt, self.model_option, self.common_options) + + kpath_kwargs = self.jdata["task_options"] + bcal = Band(model=model, + use_gui=True, + results_path=f'{rootdir}/out', + device=model.device) + + stru_data = f"{rootdir}/json_model/silicon.vasp" + AtomicData_options = {"r_max": 2.6, "oer_max":2.5, "pbc": True} + + eigenstatus = bcal.get_bands(data=stru_data, + kpath_kwargs=kpath_kwargs, + AtomicData_options=AtomicData_options) + + expected_bands =np.array([[-20.259584 , -8.328452 , -8.328452 , -8.328451 , -5.782879 , -5.782879 , -5.7828774 , -4.800206 , -0.8470682 , -0.8470663 , 4.9619126 , 4.961913 , 4.9619136 , 6.4527135 , 6.452714 , 6.452715 , 10.1427765 , 10.142781 ], + [-19.173727 , -11.876228 , -10.340221 , -10.34022 , -6.861969 , -4.9920564 , -2.1901789 , -2.1901765 , -0.9258757 , 0.76235735, 4.2745295 , 4.2745323 , 4.990632 , 5.55916 , 5.559161 , 8.533346 , 8.716906 , 11.661528 ], + [-16.172304 , -16.172298 , -11.271987 , -11.271983 , -7.4252186 , -7.4252176 , 2.1354833 , 2.135485 , 2.4157436 , 2.4157462 , 2.7901921 , 2.7901928 , 3.6496053 , 3.649607 , 4.6478515 , 4.6478524 , 11.951376 , 11.951382 ], + [-16.322428 , -15.988458 , -11.912281 , -11.193047 , -7.3037252 , -6.193884 , 1.205529 , 1.386399 , 1.6548665 , 1.8747401 , 2.580269 , 3.005812 , 3.4153423 , 4.022218 , 5.4699235 , 6.23605 , 11.671546 , 11.832637 ], + [-16.799667 , -15.46194 , -12.612725 , -10.942198 , -6.9641047 , -3.7625234 , -0.7360446 , 0.28918347, 0.47772366, 0.6291326 , 2.4882295 , 3.1617444 , 4.0417986 , 4.6302714 , 6.5749364 , 8.062847 , 10.855666 , 11.509191 ], + [-16.799667 , -15.461945 , -12.612727 , -10.9422035 , -6.9641085 , -3.7625222 , -0.73604566, 0.28918162, 0.4777242 , 0.62913096, 2.4882276 , 3.1617427 , 4.041798 , 4.6302724 , 6.5749335 , 8.062847 , 10.855668 , 11.509187 ], + [-19.12568 , -12.3842125 , -11.161121 , -9.196095 , -5.6751695 , -4.8814125 , -3.031833 , -2.0943422 , -2.0460339 , 0.7482071 , 3.5014281 , 4.8715053 , 5.2672033 , 5.640518 , 6.8847284 , 7.1940207 , 10.2244625 , 10.705325 ], + [-20.259584 , -8.328452 , -8.328452 , -8.328451 , -5.782879 , -5.782879 , -5.7828774 , -4.800206 , -0.8470682 , -0.8470663 , 4.9619126 , 4.961913 , 4.9619136 , 6.4527135 , 6.452714 , 6.452715 , 10.1427765 , 10.142781 ], + [-19.503462 , -12.068741 , -9.1723 , -9.172297 , -6.1124167 , -4.959279 , -4.959278 , -1.1632957 , -1.1632944 , -1.1617142 , 4.8985996 , 5.257441 , 5.257443 , 6.191231 , 6.2036867 , 6.203688 , 10.432747 , 10.432751 ], + [-18.410772 , -14.457038 , -9.623036 , -9.623032 , -6.8522253 , -5.3134403 , -5.3134394 , 0.34697238, 0.3469742 , 1.5420008 , 3.4220562 , 3.4220574 , 5.17151 , 5.250026 , 7.019237 , 7.0192394 , 10.747205 , 10.747212 ], + [-17.752392 , -14.654745 , -11.930272 , -10.688241 , -5.6049733 , -4.517258 , -2.4019077 , -0.54922515, -0.42735893, 1.6003915 , 2.3744426 , 3.288959 , 4.6278877 , 4.90705 , 7.08742 , 9.220286 , 9.723419 , 11.138031 ], + [-16.101318 , -16.101318 , -12.243194 , -12.243191 , -3.945867 , -3.9458647 , -2.42533 , -2.4253287 , 2.3399496 , 2.3399508 , 2.8937058 , 2.893708 , 3.2351081 , 3.235109 , 7.9230847 , 7.9230857 , 11.04461 , 11.044615 ], + [-16.138231 , -16.138226 , -11.826924 , -11.826924 , -6.087353 , -6.087353 , 0.08484415, 0.08484493, 2.342462 , 2.3424625 , 2.8806267 , 2.8806279 , 3.2753062 , 3.2753084 , 6.610969 , 6.6109715 , 11.579055 , 11.579056 ], + [-16.172304 , -16.172298 , -11.271987 , -11.271983 , -7.4252186 , -7.4252176 , 2.1354833 , 2.135485 , 2.4157436 , 2.4157462 , 2.7901921 , 2.7901928 , 3.6496053 , 3.649607 , 4.6478515 , 4.6478524 , 11.951376 , 11.951382 ]]) + + assert np.allclose(eigenstatus["eigenvalues"], expected_bands, atol=1e-4) \ No newline at end of file diff --git a/dptb/tests/test_sktb.py b/dptb/tests/test_sktb.py index e5fc58e3..90e0ea76 100644 --- a/dptb/tests/test_sktb.py +++ b/dptb/tests/test_sktb.py @@ -25,7 +25,7 @@ def test_nnsk_strain_polar(root_directory): output = root_directory+"/dptb/tests/data/test_sktb/output" init_model = root_directory+"/dptb/tests/data/test_sktb/output/test_valence/checkpoint/nnsk.latest.pth" - check_config_train(INPUT=INPUT_file, init_model=None, restart=None, train_soc=False) + check_config_train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False) train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False,\ output=output+"/test_strain_polar", log_level=5, log_path=output+"/test_strain_polar.log") @@ -38,11 +38,11 @@ def test_nnsk_push(root_directory): output = root_directory + "/dptb/tests/data/test_sktb/output" init_model = root_directory + "/dptb/tests/data/test_sktb/output/test_strain_polar/checkpoint/nnsk.best.pth" - check_config_train(INPUT=INPUT_file_rs, init_model=None, restart=None, train_soc=False) + check_config_train(INPUT=INPUT_file_rs, init_model=init_model, restart=None, train_soc=False) train(INPUT=INPUT_file_rs, init_model=init_model, restart=None, train_soc=False,\ output=output+"/test_push_rs", log_level=5, log_path=output+"/test_push_rs.log") - check_config_train(INPUT=INPUT_file_w, init_model=None, restart=None, train_soc=False) + check_config_train(INPUT=INPUT_file_w, init_model=init_model, restart=None, train_soc=False) train(INPUT=INPUT_file_w, init_model=init_model, restart=None, train_soc=False,\ output=output+"/test_push_w", log_level=5, log_path=output+"/test_push_w.log") @@ -60,7 +60,7 @@ def test_md(root_directory): output = root_directory + "/dptb/tests/data/test_sktb/output" init_model = root_directory + "/dptb/tests/data/test_sktb/output/test_push_w/checkpoint/nnsk.iter_rs5.000_w0.350.pth" - check_config_train(INPUT=INPUT_file, init_model=None, restart=None, train_soc=False) + check_config_train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False) train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False,\ output=output+"/test_md", log_level=5, log_path=output+"/test_md.log") @@ -71,6 +71,17 @@ def test_dptb(root_directory): output = root_directory + "/dptb/tests/data/test_sktb/output" init_model = root_directory + "/dptb/tests/data/test_sktb/output/test_md/checkpoint/nnsk.latest.pth" - check_config_train(INPUT=INPUT_file, init_model=None, restart=None, train_soc=False) + check_config_train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False) + train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False,\ + output=output+"/test_dptb", log_level=5, log_path=output+"/test_dptb.log") + + +@pytest.mark.order(2) +def test_init_V1_json(root_directory): + INPUT_file =root_directory + "/dptb/tests/data/test_sktb/input/input_initv1json.json" + output = root_directory + "/dptb/tests/data/test_sktb/output" + init_model = root_directory + "/dptb/tests/data/json_model/Si_v1_nnsk_b2.600_c2.600_w0.300.json" + + check_config_train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False) train(INPUT=INPUT_file, init_model=init_model, restart=None, train_soc=False,\ - output=output+"/test_dptb", log_level=5, log_path=output+"/test_dptb.log") \ No newline at end of file + output=output+"/test_v1json", log_level=5, log_path=output+"/test_v1json.log") diff --git a/dptb/tests/test_trainer.py b/dptb/tests/test_trainer.py index 38b7191c..1f085d9c 100644 --- a/dptb/tests/test_trainer.py +++ b/dptb/tests/test_trainer.py @@ -123,7 +123,7 @@ def test_initmodel_noref_nval(self): run_options = self.run_options jdata = self.jdata train_datasets = self.train_datasets - checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.ep1.pth" + checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.best.pth" run_options.update({"init_model": checkpoint, "restart": None}) model = build_model(run_options=run_options, model_options=jdata["model_options"], common_options=jdata["common_options"], statistics=train_datasets.E3statistics()) @@ -144,7 +144,7 @@ def test_initmodel_fail(self): run_options = self.run_options jdata = self.jdata train_datasets = self.train_datasets - checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.ep1.pth" + checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.best.pth" run_options.update({"init_model": checkpoint, "restart": checkpoint}) with pytest.raises(AssertionError): model = build_model(run_options=run_options, model_options=jdata["model_options"], @@ -154,7 +154,7 @@ def test_restart_noref_nval(self): run_options = self.run_options jdata = self.jdata train_datasets = self.train_datasets - checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.ep1.pth" + checkpoint = f"{rootdir}/test_sktb/output/test_valence/checkpoint/nnsk.best.pth" run_options.update({"init_model": None, "restart": checkpoint}) trainer = Trainer.restart( train_options=jdata["train_options"], diff --git a/dptb/utils/argcheck.py b/dptb/utils/argcheck.py index ab0bb228..8ce1ca21 100644 --- a/dptb/utils/argcheck.py +++ b/dptb/utils/argcheck.py @@ -565,12 +565,12 @@ def push(): doc_w_thr = "" doc_period = "" - return Argument("push", [None,dict], sub_fields=[ + return Argument("push", [bool,dict], sub_fields=[ Argument("rs_thr", [int,float], optional=True, default=0., doc=doc_rs_thr), Argument("rc_thr", [int,float], optional=True, default=0., doc=doc_rc_thr), Argument("w_thr", [int,float], optional=True, default=0., doc=doc_w_thr), Argument("period", int, optional=True, default=100, doc=doc_period), - ], sub_variants=[], optional=True, default=None, doc="The parameters to define the push the soft cutoff of nnsk model.") + ], sub_variants=[], optional=True, default=False, doc="The parameters to define the push the soft cutoff of nnsk model.") def onsite(): doc_method = r"The onsite correction mode, the onsite energy is expressed as the energy of isolated atoms plus the model correction, the correction mode are:\n\n\ diff --git a/dptb/utils/config_sk.py b/dptb/utils/config_sk.py index 2ef1878b..f82de028 100644 --- a/dptb/utils/config_sk.py +++ b/dptb/utils/config_sk.py @@ -56,7 +56,7 @@ }, "freeze": False, "std": 0.01, - "push": None or {"w_thr": 0.0,"period": 1,"rs_thr": 0.0,"rc_thr": 0.0}, + "push": False or {"w_thr": 0.0,"period": 1,"rs_thr": 0.0,"rc_thr": 0.0}, } }, "data_options": { diff --git a/dptb/utils/config_skenv.py b/dptb/utils/config_skenv.py index 03a84f7c..23e351eb 100644 --- a/dptb/utils/config_skenv.py +++ b/dptb/utils/config_skenv.py @@ -73,7 +73,7 @@ }, "freeze": True, "std": 0.01, - "push": None + "push": False } }, "data_options": { diff --git a/examples/from_v1json/AlAs/data/AlAs.vasp b/examples/from_v1json/AlAs/data/AlAs.vasp new file mode 100644 index 00000000..f4ea1e90 --- /dev/null +++ b/examples/from_v1json/AlAs/data/AlAs.vasp @@ -0,0 +1,10 @@ +Primitive Cell + 1.000000 + 0.00000000000000 2.83790087700000 2.83790087700000 + 2.83790087700000 0.00000000000000 2.83790087700000 + 2.83790087700000 2.83790087700000 0.00000000000000 + Al As + 1 1 +DIRECT + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Al1 + 0.7500000000000000 0.7500000000000000 0.7500000000000000 As1 diff --git a/examples/from_v1json/AlAs/data/set.0/eigenvalues.npy b/examples/from_v1json/AlAs/data/set.0/eigenvalues.npy new file mode 100644 index 00000000..0582ac9e Binary files /dev/null and b/examples/from_v1json/AlAs/data/set.0/eigenvalues.npy differ diff --git a/examples/from_v1json/AlAs/data/set.0/info.json b/examples/from_v1json/AlAs/data/set.0/info.json new file mode 100644 index 00000000..80ab8957 --- /dev/null +++ b/examples/from_v1json/AlAs/data/set.0/info.json @@ -0,0 +1,17 @@ +{ + "nframes": 1, + "natoms": -1, + "pos_type": "ase", + "AtomicData_options": { + "r_max": 5.2, + "er_max": 3.5, + "oer_max":1.6, + "pbc": true + }, + "bandinfo": { + "band_min": 0, + "band_max": 6, + "emin": null, + "emax": null + } +} diff --git a/examples/from_v1json/AlAs/data/set.0/kpoints.npy b/examples/from_v1json/AlAs/data/set.0/kpoints.npy new file mode 100644 index 00000000..81aca288 Binary files /dev/null and b/examples/from_v1json/AlAs/data/set.0/kpoints.npy differ diff --git a/examples/from_v1json/AlAs/data/set.0/xdat.traj b/examples/from_v1json/AlAs/data/set.0/xdat.traj new file mode 100644 index 00000000..edf74f96 Binary files /dev/null and b/examples/from_v1json/AlAs/data/set.0/xdat.traj differ diff --git a/examples/from_v1json/AlAs/model/latest_nnsk_b5.200_c4.200_w0.200.json b/examples/from_v1json/AlAs/model/latest_nnsk_b5.200_c4.200_w0.200.json new file mode 100644 index 00000000..c6930e93 --- /dev/null +++ b/examples/from_v1json/AlAs/model/latest_nnsk_b5.200_c4.200_w0.200.json @@ -0,0 +1,160 @@ +{ + "onsite": { + "As-4s-0": [ + -0.18473201990127563 + ], + "As-4p-0": [ + -0.11357007175683975 + ], + "As-d*-0": [ + 0.3511451780796051 + ], + "Al-3s-0": [ + -0.18422652781009674 + ], + "Al-3p-0": [ + -0.13763460516929626 + ], + "Al-d*-0": [ + 0.312237948179245 + ] + }, + "hopping": { + "As-As-4s-4s-0": [ + -0.03229105472564697, + 0.07646925002336502 + ], + "As-As-4s-4p-0": [ + -0.0738883689045906, + 0.5035997629165649 + ], + "As-As-4s-d*-0": [ + 0.07086940854787827, + -0.260450541973114 + ], + "As-As-4p-4p-0": [ + 0.024703392758965492, + 0.32161980867385864 + ], + "As-As-4p-4p-1": [ + -0.03644459694623947, + 0.16677069664001465 + ], + "As-As-4p-d*-0": [ + 0.1958223581314087, + 0.40328601002693176 + ], + "As-As-4p-d*-1": [ + 0.08628051728010178, + 0.2711496651172638 + ], + "As-As-d*-d*-0": [ + 0.27534937858581543, + 0.0003734314814209938 + ], + "As-As-d*-d*-1": [ + 0.110753633081913, + 0.16355712711811066 + ], + "As-As-d*-d*-2": [ + 0.12722206115722656, + -0.039639703929424286 + ], + "As-Al-4s-3s-0": [ + -0.025742273777723312, + -0.11441828310489655 + ], + "As-Al-4s-3p-0": [ + -0.049512267112731934, + 1.6552401781082153 + ], + "As-Al-4s-d*-0": [ + -0.09634136408567429, + 2.5665485858917236 + ], + "As-Al-4p-3s-0": [ + 0.056806981563568115, + 0.8666085600852966 + ], + "As-Al-4p-3p-0": [ + -0.1331755518913269, + -1.1635133028030396 + ], + "As-Al-4p-3p-1": [ + 0.03740769997239113, + 1.13713800907135 + ], + "As-Al-4p-d*-0": [ + -0.08070402592420578, + -0.8778209090232849 + ], + "As-Al-4p-d*-1": [ + -0.13577908277511597, + -0.809020459651947 + ], + "As-Al-d*-3s-0": [ + 0.02246418036520481, + 0.8542388677597046 + ], + "As-Al-d*-3p-0": [ + 0.04696977138519287, + 1.3259025812149048 + ], + "As-Al-d*-3p-1": [ + -0.10509342700242996, + 0.9280414581298828 + ], + "As-Al-d*-d*-0": [ + -0.11534512042999268, + 2.6582839488983154 + ], + "As-Al-d*-d*-1": [ + -0.12264155596494675, + 2.319368839263916 + ], + "As-Al-d*-d*-2": [ + -0.06880699843168259, + -2.0110905170440674 + ], + "Al-Al-3s-3s-0": [ + 0.004638504236936569, + -0.1594972312450409 + ], + "Al-Al-3s-3p-0": [ + 0.009839839302003384, + -0.14930647611618042 + ], + "Al-Al-3s-d*-0": [ + -0.016385892406105995, + -0.23952551186084747 + ], + "Al-Al-3p-3p-0": [ + -0.012722501531243324, + 0.18276041746139526 + ], + "Al-Al-3p-3p-1": [ + -0.0111026456579566, + -0.6023564338684082 + ], + "Al-Al-3p-d*-0": [ + 0.05398454889655113, + 0.1921117901802063 + ], + "Al-Al-3p-d*-1": [ + -0.03137310594320297, + 0.5512192845344543 + ], + "Al-Al-d*-d*-0": [ + -0.0012715273769572377, + -0.5702048540115356 + ], + "Al-Al-d*-d*-1": [ + 0.08672016113996506, + -0.4915500283241272 + ], + "Al-Al-d*-d*-2": [ + 0.13479098677635193, + 0.0929788202047348 + ] + } +} \ No newline at end of file diff --git a/examples/from_v1json/AlAs/model/train_config.json b/examples/from_v1json/AlAs/model/train_config.json new file mode 100644 index 00000000..4375b1b3 --- /dev/null +++ b/examples/from_v1json/AlAs/model/train_config.json @@ -0,0 +1,139 @@ +{ + "common_options": { + "unit": "Hartree", + "device": "cpu", + "dtype": "float32", + "onsite_cutoff": 3.0, + "bond_cutoff": 5.2, + "env_cutoff": 5.0, + "atomtype": [ + "As", + "Al" + ], + "proj_atom_neles": { + "As": 5, + "Al": 3 + }, + "proj_atom_anglr_m": { + "As": [ + "4s", + "4p", + "d*" + ], + "Al": [ + "3s", + "3p", + "d*" + ] + }, + "onsitemode": "uniform", + "time_symm": true, + "soc": false, + "sk_file_path": "./", + "overlap": false + }, + "train_options": { + "num_epoch": 5000, + "optimizer": { + "lr": 0.001, + "type": "Adam", + "betas": [ + 0.9, + 0.999 + ], + "eps": 1e-08, + "weight_decay": 0, + "amsgrad": false + }, + "lr_scheduler": { + "type": "exp", + "gamma": 0.998 + }, + "seed": 222, + "save_freq": 1, + "validation_freq": 10, + "display_freq": 1 + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./", + "prefix": "set_md" + }, + "validation": { + "batch_size": 1, + "path": "./", + "prefix": "set_md" + }, + "reference": { + "batch_size": 1, + "path": "./", + "prefix": "set_spr" + }, + "use_wannier": false + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1, + "sk_soc_nhidden": null + }, + "skfunction": { + "skformula": "powerlaw", + "sk_cutoff": 4.2, + "sk_decay_w": 0.2 + }, + "dptb": { + "axis_neuron": 40, + "onsite_net_neuron": [ + 100, + 100, + 100 + ], + "env_net_neuron": [ + 40, + 80, + 160 + ], + "hopping_net_neuron": [ + 200, + 200, + 200 + ], + "onsite_net_activation": "tanh", + "env_net_activation": "tanh", + "hopping_net_activation": "tanh", + "onsite_net_type": "ffn", + "env_net_type": "res", + "hopping_net_type": "ffn", + "soc_env": false, + "soc_net_neuron": [ + 128, + 128, + 256, + 256 + ], + "soc_net_activation": "tanh", + "soc_net_type": "res", + "if_batch_normalized": false + }, + "onsitefuncion": { + "onsite_func_cutoff": 6.0, + "onsite_func_decay_w": 0.5, + "onsite_func_lambda": 1.0 + } + }, + "loss_options": { + "losstype": "eigs_l2dsf", + "sortstrength": [ + 0.01, + 0.01 + ], + "nkratio": null + }, + "init_model": { + "path": "mddecay/checkpoint/latest_nnsk_b5.200_c4.200_w0.200.pth", + "interpolate": false + } +} \ No newline at end of file diff --git a/examples/from_v1json/AlAs/plot_from_v1.ipynb b/examples/from_v1json/AlAs/plot_from_v1.ipynb new file mode 100644 index 00000000..003ef6bc --- /dev/null +++ b/examples/from_v1json/AlAs/plot_from_v1.ipynb @@ -0,0 +1,175 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from dptb.nn.build import build_model\n", + "from dptb.postprocess.bandstructure.band import Band\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The model option std in nnsk is not defined in input model_options, set to 0.01.\n" + ] + } + ], + "source": [ + "# The settings for the model. must be provided.\n", + "run_opt = {\n", + " \"init_model\": \"./model/latest_nnsk_b5.200_c4.200_w0.200.json\",\n", + " \"restart\": None,\n", + " \"freeze\": False,\n", + " \"train_soc\": False,\n", + " \"log_path\": None,\n", + " \"log_level\": None\n", + " }\n", + "\n", + "model_option = {\n", + " \"nnsk\": {\n", + " \"onsite\": {\"method\": \"uniform\"},\n", + " \"hopping\": {\"method\": \"powerlaw\", \"rs\":4.2, \"w\": 0.2},\n", + " \"push\": False,\n", + " \"freeze\": False\n", + " }\n", + "}\n", + "common_options = {\n", + "\"basis\": {\n", + " \"As\": [\"4s\",\"4p\",\"d*\"],\n", + " \"Al\": [\"3s\",\"3p\",\"d*\"]\n", + "},\n", + "\"device\": \"cpu\",\n", + "\"dtype\": \"float32\",\n", + "\"overlap\": False\n", + "}\n", + "\n", + "# Build the model\n", + "model = build_model(run_opt, model_option, common_options)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#set the band structure task\n", + "jdata={ \n", + " \"task_options\": {\n", + " \"task\": \"band\",\n", + " \"kline_type\":\"abacus\",\n", + " \"kpath\":[[0.0000000000, 0.0000000000, 0.0000000000, 30], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 30], \n", + " [0.6250000000, 0.2500000000, 0.6250000000, 1], \n", + " [0.3750000000, 0.3750000000, 0.7500000000, 30], \n", + " [0.0000000000, 0.0000000000, 0.0000000000, 30], \n", + " [0.5000000000, 0.5000000000, 0.5000000000, 30], \n", + " [0.5000000000, 0.2500000000, 0.7500000000, 30], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 1 ]\n", + " ],\n", + " \"klabels\":['G','X','U','K','G','L','W','X'],\n", + " \"emin\":-15,\n", + " \"emax\":10 }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# calculate the band structure\n", + "kpath_kwargs = jdata[\"task_options\"]\n", + "bcal = Band(model=model, \n", + " use_gui=True, \n", + " results_path='./', \n", + " device=model.device)\n", + "\n", + "stru_data = \"./data/AlAs.vasp\"\n", + "AtomicData_options = {\"r_max\": 5.2, \"pbc\": True}\n", + "\n", + "eigenstatus = bcal.get_bands(data=stru_data, \n", + " kpath_kwargs=kpath_kwargs, \n", + " AtomicData_options=AtomicData_options)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the band structure w.r.t. DFT results\n", + "band = np.load(f'./data/eigs.npy')\n", + "\n", + "plt.figure(figsize=(6,6),dpi=72)\n", + "plt.plot(eigenstatus['xlist'], eigenstatus['eigenvalues']- np.min(eigenstatus['eigenvalues']), 'r-',lw=1)\n", + "plt.plot(eigenstatus['xlist'], band[:,:] - np.min(band[:,:]),'k--',lw=1)\n", + "plt.ylim(-2,25)\n", + "\n", + "for ii in eigenstatus['high_sym_kpoints']:\n", + " plt.axvline(ii,color='gray',lw=1,ls='--')\n", + "plt.tick_params(direction='in')\n", + "\n", + "plt.xlim(eigenstatus['xlist'].min(),eigenstatus['xlist'].max())\n", + "\n", + "plt.ylabel('E - EF (eV)',fontsize=12)\n", + "plt.yticks(fontsize=12)\n", + "plt.xticks(eigenstatus['high_sym_kpoints'], eigenstatus['labels'], fontsize=12)\n", + "#plt.savefig(f'{self.results_path}/band.png',dpi=300)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pydptb", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/from_v1json/AlAs/train/input.json b/examples/from_v1json/AlAs/train/input.json new file mode 100644 index 00000000..136f3eca --- /dev/null +++ b/examples/from_v1json/AlAs/train/input.json @@ -0,0 +1,62 @@ +{ + "common_options": { + "basis": { + "As": ["4s","4p","d*"], + "Al": ["3s","3p","d*"] + }, + "device": "cpu", + "dtype": "float32", + "overlap": false, + "seed": 3982377700 + }, + "train_options": { + "num_epoch": 10, + "batch_size": 1, + "optimizer": { + "lr": 0.0001, + "type": "Adam", + "betas": [ + 0.9, + 0.999 + ], + "eps": 1e-08, + "weight_decay": 0, + "amsgrad": false + }, + "lr_scheduler": { + "type": "exp", + "gamma": 0.999 + }, + "loss_options": { + "train": { + "method": "eigvals", + "diff_on": false, + "eout_weight": 0.01, + "diff_weight": 0.01 + } + }, + "save_freq": 1, + "validation_freq": 10, + "display_freq": 100, + "ref_batch_size": 1, + "val_batch_size": 1, + "max_ckpt": 4 + }, + "model_options": { + "nnsk": { + "onsite": {"method": "uniform"}, + "hopping": {"method": "powerlaw", "rs":4.2, "w": 0.2}, + "push": false, + "freeze": false + } + }, + "data_options": { + "train": { + "root": "../data", + "prefix": "set", + "get_eigenvalues": true, + "type": "DefaultDataset", + "get_Hamiltonian": false + } + } +} \ No newline at end of file diff --git a/examples/from_v1json/Si/data/POSCAR b/examples/from_v1json/Si/data/POSCAR new file mode 100644 index 00000000..0a4387b3 --- /dev/null +++ b/examples/from_v1json/Si/data/POSCAR @@ -0,0 +1,10 @@ +system Si +1.0 + 3.8395895958 0.0000000000 0.0000000000 + 1.9197947979 3.3251821301 0.0000000000 + 1.9197947979 1.1083940434 3.1350117771 + Si + 2 +Direct + 0.000000000 0.000000000 0.000000000 + 0.250000000 0.250000000 0.250000000 diff --git a/examples/from_v1json/Si/data/kpath.0/eigenvalues.npy b/examples/from_v1json/Si/data/kpath.0/eigenvalues.npy new file mode 100644 index 00000000..da50f2e9 Binary files /dev/null and b/examples/from_v1json/Si/data/kpath.0/eigenvalues.npy differ diff --git a/examples/from_v1json/Si/data/kpath.0/info.json b/examples/from_v1json/Si/data/kpath.0/info.json new file mode 100644 index 00000000..bb55844d --- /dev/null +++ b/examples/from_v1json/Si/data/kpath.0/info.json @@ -0,0 +1,17 @@ +{ + "nframes": 1, + "natoms": 2, + "pos_type": "ase", + "AtomicData_options": { + "r_max": 5.0, + "er_max": 5.0, + "oer_max": 2.5, + "pbc": true + }, + "bandinfo": { + "band_min": 0, + "band_max": 6, + "emin": null, + "emax": null + } +} \ No newline at end of file diff --git a/examples/from_v1json/Si/data/kpath.0/kpoints.npy b/examples/from_v1json/Si/data/kpath.0/kpoints.npy new file mode 100644 index 00000000..6d08fb9b Binary files /dev/null and b/examples/from_v1json/Si/data/kpath.0/kpoints.npy differ diff --git a/examples/from_v1json/Si/data/kpath.0/xdat.traj b/examples/from_v1json/Si/data/kpath.0/xdat.traj new file mode 100644 index 00000000..d877e685 Binary files /dev/null and b/examples/from_v1json/Si/data/kpath.0/xdat.traj differ diff --git a/examples/from_v1json/Si/data/silicon.vasp b/examples/from_v1json/Si/data/silicon.vasp new file mode 100644 index 00000000..c3a71b16 --- /dev/null +++ b/examples/from_v1json/Si/data/silicon.vasp @@ -0,0 +1,10 @@ +Primitive Cell + 1.000000 + 0.00000000000000 2.71499984016137 2.71499984016137 + 2.71499984016137 0.00000000000000 2.71499984016137 + 2.71499984016137 2.71499984016137 0.00000000000000 + Si + 2 +DIRECT + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si1 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si2 diff --git a/examples/from_v1json/Si/model/si_best_nnsk_b2.600_c2.600_w0.300.json b/examples/from_v1json/Si/model/si_best_nnsk_b2.600_c2.600_w0.300.json new file mode 100644 index 00000000..44ec9e97 --- /dev/null +++ b/examples/from_v1json/Si/model/si_best_nnsk_b2.600_c2.600_w0.300.json @@ -0,0 +1,86 @@ +{ + "onsite": { + "Si-Si-3s-3s-0": [ + -0.01532896887511015, + -0.0049815368838608265 + ], + "Si-Si-3s-3p-0": [ + 0.004518268629908562, + -0.0034872828982770443 + ], + "Si-Si-3s-d*-0": [ + 0.029722778126597404, + 0.014809738844633102 + ], + "Si-Si-3p-3p-0": [ + -0.01756233535706997, + -0.007649253588169813 + ], + "Si-Si-3p-3p-1": [ + 0.003279546508565545, + 0.032388411462306976 + ], + "Si-Si-3p-d*-0": [ + 0.0034299660474061966, + -0.01851429045200348 + ], + "Si-Si-3p-d*-1": [ + 0.0046154288575053215, + -0.016726411879062653 + ], + "Si-Si-d*-d*-0": [ + 0.011960386298596859, + 0.016399599611759186 + ], + "Si-Si-d*-d*-1": [ + 0.0475643128156662, + -0.0011831362498924136 + ], + "Si-Si-d*-d*-2": [ + 0.0342361256480217, + -0.0014669105876237154 + ] + }, + "hopping": { + "Si-Si-3s-3s-0": [ + 0.10317661613225937, + 0.16463157534599304 + ], + "Si-Si-3s-3p-0": [ + 0.1259000450372696, + -0.062399305403232574 + ], + "Si-Si-3s-d*-0": [ + 0.09938226640224457, + 0.00249662296846509 + ], + "Si-Si-3p-3p-0": [ + -0.19718992710113525, + 0.09754552692174911 + ], + "Si-Si-3p-3p-1": [ + 0.07159977406263351, + 0.22319510579109192 + ], + "Si-Si-3p-d*-0": [ + -0.0644393265247345, + 0.002721358323469758 + ], + "Si-Si-3p-d*-1": [ + 0.11934991925954819, + -0.002751425374299288 + ], + "Si-Si-d*-d*-0": [ + 0.02002537250518799, + 0.011592463590204716 + ], + "Si-Si-d*-d*-1": [ + -0.14973551034927368, + -0.0023070580791682005 + ], + "Si-Si-d*-d*-2": [ + 0.07978004962205887, + -0.0026554290670901537 + ] + } +} \ No newline at end of file diff --git a/examples/from_v1json/Si/model/train_config.json b/examples/from_v1json/Si/model/train_config.json new file mode 100644 index 00000000..d9638a8b --- /dev/null +++ b/examples/from_v1json/Si/model/train_config.json @@ -0,0 +1,135 @@ +{ + "common_options": { + "onsitemode": "strain", + "onsite_cutoff": 2.5, + "bond_cutoff": 2.6, + "env_cutoff": 4.1, + "atomtype": [ + "Si" + ], + "proj_atom_neles": { + "Si": 4 + }, + "proj_atom_anglr_m": { + "Si": [ + "3s", + "3p", + "d*" + ] + }, + "device": "cpu", + "dtype": "float32", + "sk_file_path": "./", + "time_symm": true, + "soc": false, + "overlap": false, + "unit": "Hartree" + }, + "train_options": { + "seed": 120478, + "num_epoch": 400, + "optimizer": { + "lr": 0.001, + "type": "Adam", + "betas": [ + 0.9, + 0.999 + ], + "eps": 1e-08, + "weight_decay": 0, + "amsgrad": false + }, + "lr_scheduler": { + "type": "exp", + "gamma": 0.999 + }, + "save_freq": 10, + "validation_freq": 10, + "display_freq": 1 + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + }, + "validation": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + }, + "reference": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + }, + "use_wannier": false + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1, + "sk_soc_nhidden": null + }, + "skfunction": { + "sk_cutoff": 2.6, + "sk_decay_w": 0.3, + "skformula": "powerlaw" + }, + "onsitefuncion": { + "onsite_func_cutoff": 6.0, + "onsite_func_decay_w": 0.5, + "onsite_func_lambda": 1.0 + }, + "dptb": { + "soc_env": false, + "axis_neuron": 10, + "onsite_net_neuron": [ + 128, + 128, + 256, + 256 + ], + "soc_net_neuron": [ + 128, + 128, + 256, + 256 + ], + "env_net_neuron": [ + 128, + 128, + 256, + 256 + ], + "hopping_net_neuron": [ + 128, + 128, + 256, + 256 + ], + "onsite_net_activation": "tanh", + "env_net_activation": "tanh", + "hopping_net_activation": "tanh", + "soc_net_activation": "tanh", + "onsite_net_type": "res", + "env_net_type": "res", + "hopping_net_type": "res", + "soc_net_type": "res", + "if_batch_normalized": false + } + }, + "init_model": { + "path": "ckpt/2-2-1_best_nnsk_b2.600_c2.600_w0.300.pth", + "interpolate": false + }, + "loss_options": { + "losstype": "eigs_l2dsf", + "sortstrength": [ + 0.01, + 0.01 + ], + "nkratio": null + } +} \ No newline at end of file diff --git a/examples/from_v1json/Si/plot_from_v1.ipynb b/examples/from_v1json/Si/plot_from_v1.ipynb new file mode 100644 index 00000000..cc79b24e --- /dev/null +++ b/examples/from_v1json/Si/plot_from_v1.ipynb @@ -0,0 +1,173 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "from dptb.nn.build import build_model\n", + "from dptb.postprocess.bandstructure.band import Band\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from ase.io import read\n", + "from dptb.data import AtomicData, AtomicDataDict\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The model option std in nnsk is not defined in input model_options, set to 0.01.\n" + ] + } + ], + "source": [ + "# The settings for the model. must be provided.\n", + "run_opt = {\n", + " \"init_model\": \"./model/si_best_nnsk_b2.600_c2.600_w0.300.json\",\n", + " \"restart\": None,\n", + " \"freeze\": False,\n", + " \"train_soc\": False,\n", + " \"log_path\": None,\n", + " \"log_level\": None\n", + " }\n", + "\n", + "model_option = {\n", + " \"nnsk\": {\n", + " \"onsite\": {\"method\": \"strain\",\"rs\":6, \"w\": 0.1},\n", + " \"hopping\": {\"method\": \"powerlaw\", \"rs\":2.6, \"w\": 0.3},\n", + " \"push\": False,\n", + " \"freeze\": False\n", + " }\n", + "}\n", + "common_options = {\n", + "\"basis\": {\n", + " \"Si\": [\"3s\",\"3p\",\"d*\"]\n", + "},\n", + "\"device\": \"cpu\",\n", + "\"dtype\": \"float32\",\n", + "\"overlap\": False\n", + "}\n", + "\n", + "# Build the model\n", + "model = build_model(run_opt, model_option, common_options)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "#set the band structure task\n", + "jdata={ \n", + " \"task_options\": {\n", + " \"task\": \"band\",\n", + " \"kline_type\":\"abacus\",\n", + " \"kpath\":[[0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 50], \n", + " [0.6250000000, 0.2500000000, 0.6250000000, 1], \n", + " [0.3750000000, 0.3750000000, 0.7500000000, 50], \n", + " [0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.5000000000, 0.5000000000, 50], \n", + " [0.5000000000, 0.2500000000, 0.7500000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 1 ]\n", + " ],\n", + " \"klabels\":[\"G\",\"X\",\"X/U\",\"K\",\"G\",\"L\",\"W\",\"X\"],\n", + " \"E_fermi\":-9.307,\n", + " \"emin\":-15,\n", + " \"emax\":10,\n", + " \"ref_band\": \"./data/kpath.0/eigenvalues.npy\"\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "# calculate the band structure\n", + "kpath_kwargs = jdata[\"task_options\"]\n", + "bcal = Band(model=model, \n", + " use_gui=True, \n", + " results_path='./', \n", + " device=model.device)\n", + "\n", + "stru_data = \"./data/silicon.vasp\"\n", + "AtomicData_options = {\"r_max\": 2.6, \"oer_max\":2.5, \"pbc\": True}\n", + "\n", + "eigenstatus = bcal.get_bands(data=stru_data, \n", + " kpath_kwargs=kpath_kwargs, \n", + " AtomicData_options=AtomicData_options)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the band structure w.r.t. DFT results\n", + "band = np.load(f'./data/kpath.0/eigenvalues.npy')\n", + "if len(band.shape)==3:\n", + " band = band[0,:,:]\n", + "plt.figure(figsize=(6,6),dpi=72)\n", + "plt.plot(eigenstatus['xlist'], eigenstatus['eigenvalues']- np.min(eigenstatus['eigenvalues']), 'r-',lw=1)\n", + "plt.plot(eigenstatus['xlist'], band[:,:] - np.min(band[:,:]),'k--',lw=1)\n", + "plt.ylim(-2,25)\n", + "\n", + "for ii in eigenstatus['high_sym_kpoints']:\n", + " plt.axvline(ii,color='gray',lw=1,ls='--')\n", + "plt.tick_params(direction='in')\n", + "\n", + "plt.xlim(eigenstatus['xlist'].min(),eigenstatus['xlist'].max())\n", + "\n", + "plt.ylabel('E - EF (eV)',fontsize=12)\n", + "plt.yticks(fontsize=12)\n", + "plt.xticks(eigenstatus['high_sym_kpoints'], eigenstatus['labels'], fontsize=12)\n", + "#plt.savefig(f'{self.results_path}/band.png',dpi=300)\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pydptb", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}