├── .gitignore ├── LICENSE ├── README.md ├── autoWTE ├── MLPs.py ├── __init__.py ├── benchmark.py ├── data.py ├── fc_calc.py ├── relax.py ├── tc_calc.py └── utils.py ├── benchmark-scripts ├── 1_force_sets.py ├── 2_thermal_conductivity.py └── 3_evaluate.py ├── data ├── convert_ph3params_extxyz.py ├── generate_DFT_kappa.py ├── join_dft_kappas.py ├── kappas_phononDB_PBE_NAC.json.gz ├── kappas_phononDB_PBE_noNAC.json.gz ├── mp_id-phonondb_id.txt └── phononDB-PBE-structures.extxyz └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files__pycache__/ 2 | *.py[cod] 3 | # C extensions*.so 4 | # Distribution / packagingbin/ 5 | build/ 6 | develop-eggs/ 7 | dist/ 8 | eggs/ 9 | lib/ 10 | lib64/ 11 | parts/ 12 | sdist/ 13 | var/ 14 | *.egg-info/ 15 | .installed.cfg 16 | *.egg 17 | # Installer logspip-log.txt 18 | pip-delete-this-directory.txt 19 | 20 | *.slurm 21 | slurm* 22 | 23 | all_kappas* 24 | old_kappas* 25 | benchmark_kappas* 26 | *.log 27 | 28 | *LTC*/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # Academic Software Licence (“ASL”) 2 | 3 | ## Preamble 4 | 5 | ASL is a software license that proposes to offer copyleft style rights to use the software in an academic non-commercial setting. The purpose of ASL is to encourage academic cooperation and collaboration free-of-charge whilst enabling academic institutions to earn revenue from the parallel licensing of valuable bodies of software code. Significant proportions of such revenue are typically reinvested in academic research. 6 | 7 | ASL is not an open-source licence because it does not allow commercial use – it is an “available source” licence, meaning that the source code is made available subject to the terms of this licence and only for academic non-commercial use. 8 | 9 | ASL is a reciprocal licence very similar to GPL and the core terms are identical to those of GNU GPLv2 (except for the limitation to non-commercial use), making it easier for those who know the GPLv2 to understand the licensing*. As a reciprocal licence, if you redistribute any derivative works you have created based on ASL licenced code, then you are required to license the new work under the ASL - including making your source code available and ensuring that licensees are aware of the terms of the ASL licence. 10 | 11 | The non-commercial limitation makes ASL incompatible with the GPL and other open-source licences with copyleft provisions because these licences require that modified versions of the original program are made available free of charge for any type of use, including commercial, and this is prevented by ASL. As the two sets of reciprocal terms are incompatible, any modified version of the original program combining ASL and copylefted open-source code can be used internally but cannot be licensed out. 12 | 13 | The non-commercial restriction is an integral part of the license and you may not remove it without the consent of the rights holder in the ASL licensed code. Please contact __the original licensor__ for any questions and/or to enquire about commercial use rights. 14 | 15 | This license text here is hereby licensed to you under ASL, i.e. under its own terms. 16 | 17 | *The changes to the GPLv2 are: removing the Preamble, replacing the reference to the “General Public License” in clause 0 with a reference to the “ASL”, removing clause 9 and adding clause 13 with the non-commercial restriction and limited patent grant 18 | 19 | ## TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 20 | 21 | 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". 22 | 23 | Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 24 | 25 | 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. 26 | You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 27 | 28 | 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: 29 | 30 | a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. 31 | 32 | b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. 33 | 34 | c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) 35 | These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. 36 | Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. 37 | In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 38 | 39 | 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: 40 | 41 | a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 42 | 43 | b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 44 | 45 | c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) 46 | The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. 47 | If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 48 | 49 | 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 50 | 51 | 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 52 | 53 | 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 54 | 55 | 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. 56 | If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. 57 | It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. 58 | This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 59 | 60 | 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 61 | 62 | 9. Not used. 63 | 64 | 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. 65 | 66 | ### NO WARRANTY 67 | 68 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 69 | 70 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 71 | 72 | ### Non Commercial Use; Limited Patent Rights Grant 73 | 13. The Preamble of the GPLv2 does not apply to this License. The Program is provided to you by the Licensor subject to the following conditions, which prevail over any clause or indication to the contrary in the GPLv2: 74 | 75 | a) The grant of rights under the License is for academic non-commercial use only. Academic non-commercial use is defined as use for academic research or other not-for-profit scholarly purposes, which are undertaken at an educational, non-profit, charitable or governmental institution, and which does not involve and is not intended to lead to the production or manufacture of products for sale, or the enhancement of a product or service in or proposed for commerce, or the performance of services for a fee. 76 | 77 | b) Subject to your compliance with the License, in the event the Licensor holds patent rights on the Program or any part of it, the Licensor grants you a perpetual, worldwide, non-exclusive, royalty-free, irrevocable (except as stated in this section), limited patent licence to make, use, import and otherwise run, modify and distribute the Program. For the avoidance of doubt, this patent licence is limited to academic non-commercial use, as described above. If you institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program constitutes direct or contributory patent infringement, then any patent license granted to you under this License for the Program shall terminate as of the date such litigation is filed. 78 | 79 | Use other than academic and non-commercial use as above is deemed to be commercial use and outside the scope of this License. If you intend to use the Program for a commercial use, then you must obtain a commercial use license for the Program. In that case, please contact the original licensor to enquire about commercial use licenses. 80 | 81 | ## END OF TERMS AND CONDITIONS 82 | 83 | ## Appendix: Suggested code header and licensing information 84 | autoWTE is © 2024, Balázs Póta, Paramvir Ahlawat, Gábor Csányi, and Michele Simoncelli 85 | 86 | autoWTE is published and distributed under the Academic Software License v1.0 (ASL). 87 | 88 | autoWTE is distributed in the hope that it will be useful for non-commercial academic research, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ASL for more details. 89 | 90 | You should have received a copy of the ASL along with this program; if not, write to Michele Simoncelli ( ms2855@cam.ac.uk or michele.simoncelli@gmail.com ). It is also published at https://github.com/MPA2suite/autoWTE 91 | 92 | You may contact the original licensor at ms2855@cam.ac.uk or michele.simoncelli@gmail.com 93 | 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # autoWTE: Automatic heat-conductivity predictions from the Wigner Transport Equation 2 | [![arXiv](https://img.shields.io/badge/arXiv-1234.56789-b31b1b.svg)](https://arxiv.org/abs/2408.00755) 3 | 4 | autoWTE employs foundation Machine Learning Interatomic Potentials and phono3py to determine the Wigner Thermal conductivity in crystals with arbitrary composition and structure. 5 | 6 | # Install 7 | Clone repository: 8 | ``` 9 | git clone https://github.com/MPA2suite/autoWTE.git 10 | ``` 11 | Then install in editable mode: 12 | ``` 13 | pip install -e . 14 | ``` 15 | 16 | Pre-requisites (need to be installed seperately or added to PYTHONPATH) 17 | - phono3py (see https://phonopy.github.io/phono3py/install.html for installation instructions) 18 | 19 | 20 | Installed automatically during pip install: 21 | - phonopy 22 | - ase 23 | - numpy 24 | - matplotlib 25 | - spglib 26 | - tqdm 27 | - h5py 28 | - pandas 29 | 30 | 31 | 32 | 33 | # Usage 34 | The example scripts showcase a sample workflow for testing a MACE potential and comparing the thermal conductivity with DFT calculations for a collection of different materials. The scripts may be modified easily to use any foundation Machine Learning Interatomic Potentials. See autoWTE/MLPS.py for calculator setup utilities. 35 | 36 | 1. Modify and execute `1_force_sets.py` file in benchmark-scripts to obtain the force sets for second and third order force constants. 37 | 2. Modify and execute `2_thermal_conductivity.py` file in benchmark-scripts to obtain the thermal conductivity results needed for the bencmark evaluation. 38 | 3. Modify and execute `3_evaluate.py` file in benchmark-scripts to obtain the benchmark metrics (SRME) and results. 39 | 40 | # How to cite 41 | 42 | ``` 43 | @misc{póta2024thermalconductivitypredictionsfoundation, 44 | title={Thermal Conductivity Predictions with Foundation Atomistic Models}, 45 | author={Balázs Póta and Paramvir Ahlawat and Gábor Csányi and Michele Simoncelli}, 46 | year={2024}, 47 | eprint={2408.00755}, 48 | archivePrefix={arXiv}, 49 | primaryClass={cond-mat.mtrl-sci}, 50 | url={https://arxiv.org/abs/2408.00755}, 51 | } 52 | ``` 53 | -------------------------------------------------------------------------------- /autoWTE/MLPs.py: -------------------------------------------------------------------------------- 1 | from autoWTE.fc_calc import * 2 | from autoWTE.utils import * 3 | 4 | def setup_CHGNet_calculator(device="cpu"): 5 | from chgnet.model.dynamics import CHGNetCalculator 6 | return CHGNetCalculator(use_device=device) 7 | 8 | def relax_CHGNet_ASE(atoms): 9 | from chgnet.model import StructOptimizer 10 | from pymatgen.io.ase import AseAtomsAdaptor 11 | 12 | structure=AseAtomsAdaptor.get_structure(atoms) 13 | relaxer = StructOptimizer() 14 | result = relaxer.relax(structure) 15 | return AseAtomsAdaptor.get_atoms(structure) 16 | 17 | def relax_M3GNet_ASE(atoms): 18 | from matgl.ext.ase import Relaxer 19 | import matgl 20 | from pymatgen.io.ase import AseAtomsAdaptor 21 | 22 | structure=AseAtomsAdaptor.get_structure(atoms) 23 | pot=matgl.load_model('M3GNet-MP-2021.2.8-PES') 24 | relaxer = Relaxer(potential=pot) 25 | result = relaxer.relax(structure) 26 | return AseAtomsAdaptor.get_atoms(structure) 27 | 28 | 29 | def setup_M3GNet_calculator(device): 30 | import matgl 31 | from matgl.ext.ase import M3GNetCalculator 32 | pot=matgl.load_model('M3GNet-MP-2021.2.8-PES') 33 | calc= M3GNetCalculator(potential=pot) 34 | return calc 35 | 36 | 37 | def setup_MACE_lammps_calculator(ph3,path_MACE_potential='/mnt/scratch2/q13camb_scratch/POTENTIALS/foundational/MACE/m0-L2/2024-01-07-mace-128-L2_epoch-199.model-lammps.pt'): 38 | from ase.calculators.lammpslib import LAMMPSlib 39 | import numpy as np 40 | from ase.symbols import Symbols 41 | 42 | atoms=ph3.unitcell 43 | 44 | atom_type_unique = np.unique(atoms.get_atomic_numbers(), return_index=True) 45 | sort_index = np.argsort(atom_type_unique[1]) 46 | elements_atomic_numbers = np.array(atom_type_unique[0])[sort_index] 47 | atoms_symbols_string=" ".join(list(Symbols(elements_atomic_numbers))) 48 | print("Calculating %s"%(atoms_symbols_string)) 49 | atoms_dict=dict(zip(list(Symbols(elements_atomic_numbers)),range(1,len(elements_atomic_numbers)+1))) 50 | print(atoms_dict) 51 | 52 | 53 | 54 | #lammps commands 55 | lammps_cmds = [ 'pair_style mace no_domain_decomposition', 56 | 'pair_coeff * * %s %s'%(path_MACE_potential,atoms_symbols_string) 57 | ] 58 | 59 | #lammps header 60 | lammps_header=[ 'units metal', 61 | 'boundary p p p', 62 | 'box tilt large', 63 | 'atom_style atomic', 64 | 'atom_modify map yes', 65 | 'newton on' 66 | ] 67 | 68 | 69 | #lammps log file 70 | lammps_log_file='lammps_out.log' 71 | 72 | 73 | #lammps calculator 74 | calculator=LAMMPSlib(lmpcmds=lammps_cmds, 75 | log_file=lammps_log_file, 76 | lammps_header=lammps_header, 77 | atom_types=atoms_dict, 78 | keep_alive=True) 79 | 80 | return calculator 81 | 82 | def setup_MACE_ASE_calculator(device="cpu",path_MACE_potential='/mnt/scratch2/q13camb_scratch/POTENTIALS/foundational/MACE/m0-L2/2024-01-07-mace-128-L2_epoch-199.model'): 83 | from mace.calculators import mace_mp 84 | 85 | calculator=mace_mp(model=path_MACE_potential,device=device,default_dtype="float64") 86 | 87 | return calculator 88 | 89 | def setup_SevenNet_calculator(device="cpu"): 90 | from sevenn.sevennet_calculator import SevenNetCalculator 91 | 92 | calculator= SevenNetCalculator(device=device) 93 | 94 | return calculator 95 | 96 | def setup_ORB_MPtraj_calculator(device="cpu"): 97 | from orb_models.forcefield import pretrained 98 | from orb_models.forcefield.calculator import ORBCalculator 99 | 100 | orbff = pretrained.orb_v1_mptraj_only() # or choose another model using ORB_PRETRAINED_MODELS[model_name]() 101 | calculator = ORBCalculator(orbff, device=device) 102 | 103 | return calculator -------------------------------------------------------------------------------- /autoWTE/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | PKG_NAME = "autoWTE" 5 | __version__ = "0.1.3" 6 | 7 | PKG_DIR = os.path.dirname(__file__) 8 | # repo root directory if editable install, TODO: else the package dir 9 | ROOT = os.path.dirname(PKG_DIR) 10 | DATA_DIR = f"{ROOT}/data" # directory to store default data 11 | BENCHMARK_DATA_DIR = f"{DATA_DIR}" 12 | BENCHMARK_STRUCTURES_FILE = "phononDB-PBE-structures.extxyz" 13 | BENCHMARK_STRUCTURES = f"{DATA_DIR}/{BENCHMARK_STRUCTURES_FILE}" 14 | 15 | BENCHMARK_DFT_NAC_REF_FILE = "kappas_phononDB_PBE_NAC.json.gz" 16 | BENCHMARK_DFT_NONAC_REF_FILE = "kappas_phononDB_PBE_noNAC.json.gz" 17 | BENCHMARK_DFT_NAC_REF = f"{DATA_DIR}/{BENCHMARK_DFT_NAC_REF_FILE}" 18 | BENCHMARK_DFT_NONAC_REF = f"{DATA_DIR}/{BENCHMARK_DFT_NONAC_REF_FILE}" 19 | 20 | ### 21 | pkg_is_editable = True 22 | 23 | 24 | ###### 25 | BENCHMARK_TEMPERATURES = [300] 26 | BENCHMARK_ID = "mp_id" 27 | 28 | from autoWTE.fc_calc import * 29 | from autoWTE.tc_calc import * 30 | from autoWTE.utils import * 31 | from autoWTE.MLPs import * 32 | from autoWTE.relax import * 33 | from autoWTE.data import glob2df 34 | from autoWTE.benchmark import * -------------------------------------------------------------------------------- /autoWTE/benchmark.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | 4 | #from autoWTE import BENCHMARK_TEMPERATURES 5 | 6 | import warnings 7 | 8 | FREQUENCY_THRESHOLD = -1e-2 9 | MODE_KAPPA_THRESHOLD = 1e-6 10 | 11 | LIST2NP_COLS = ["heat_capacity","kappa_TOT_RTA"] 12 | 13 | def fill_na_in_list(lst,y): 14 | return np.asarray([y if pd.isna(x) else x for x in lst]) 15 | 16 | def add_benchmark_descriptors( 17 | df_mlp_filtered, 18 | df_dft_results, 19 | ): 20 | 21 | df_mlp_filtered = df_mlp_filtered.map(lambda x: np.array(x) if isinstance(x, list) else x) 22 | df_dft_results = df_dft_results.map(lambda x: np.array(x) if isinstance(x, list) else x) 23 | df_mlp_filtered[LIST2NP_COLS] = df_mlp_filtered[LIST2NP_COLS].map(lambda x: np.array(x)) 24 | 25 | 26 | 27 | df_mlp_filtered["are_frequencies_positive"] = df_mlp_filtered["frequencies"].apply(are_frequencies_positive) 28 | 29 | df_mlp_filtered["kappa_TOT_ave"] = df_mlp_filtered['kappa_TOT_RTA'].apply(calculate_kappa_ave) 30 | 31 | df_mlp_filtered["SRD"] = 2*(df_mlp_filtered["kappa_TOT_ave"] - df_dft_results['kappa_TOT_ave'])/(df_mlp_filtered["kappa_TOT_ave"] + df_dft_results['kappa_TOT_ave']) 32 | 33 | # turn temperature list to the first temperature (300K) TODO: allow multiple temperatures to be tested 34 | df_mlp_filtered["SRD"] = df_mlp_filtered["SRD"].apply(lambda x : x[0]) 35 | 36 | df_mlp_filtered["SRD"] = df_mlp_filtered["SRD"].fillna(-2) 37 | 38 | df_mlp_filtered["SRE"] = df_mlp_filtered["SRD"].abs() 39 | 40 | df_mlp_filtered["mode_kappa_TOT"] = df_mlp_filtered.apply(calculate_mode_kappa_TOT,axis=1) 41 | 42 | df_mlp_filtered["SRME"] = calculate_SRME_dataframes(df_mlp_filtered,df_dft_results) 43 | 44 | return df_mlp_filtered 45 | 46 | 47 | 48 | def get_metrics(df_mlp_filtered): 49 | 50 | mSRE = df_mlp_filtered["SRE"].mean() 51 | rmseSRE = ((df_mlp_filtered["SRE"]-mSRE)**2).mean() ** 0.5 52 | 53 | mSRME = df_mlp_filtered["SRME"].mean() 54 | rmseSRME = ((df_mlp_filtered["SRME"]-mSRME)**2).mean() ** 0.5 55 | 56 | return mSRE, mSRME, rmseSRE, rmseSRME 57 | 58 | 59 | def are_frequencies_positive(frequencies): 60 | if np.all(pd.isna(frequencies)): 61 | return False 62 | 63 | if np.any(frequencies[0,3:] < 0): 64 | return False 65 | 66 | if np.any(frequencies[0,:3] < FREQUENCY_THRESHOLD): 67 | return False 68 | 69 | if np.any(frequencies[1:] < 0): 70 | return False 71 | 72 | return True 73 | 74 | 75 | def calculate_kappa_ave(kappa): 76 | 77 | if np.any((pd.isna(kappa))): 78 | return np.nan 79 | else: 80 | _kappa = np.asarray(kappa) 81 | 82 | kappa_ave = _kappa[...,:3].mean(axis=-1) 83 | 84 | return kappa_ave 85 | 86 | 87 | 88 | def calculate_SRME_dataframes(df_mlp,df_dft): 89 | 90 | srme_list = [] 91 | for idx, row_mlp in df_mlp.iterrows(): 92 | row_dft = df_dft.loc[idx] 93 | 94 | result = calculate_SRME(row_mlp,row_dft) 95 | srme_list.append(result[0]) # append the first temperature SRME 96 | 97 | #TODO: Multiple temperature tests. 98 | 99 | return srme_list 100 | 101 | 102 | def calculate_SRME(kappas_mlp,kappas_dft): 103 | 104 | if np.all(pd.isna(kappas_mlp["kappa_TOT_ave"])): 105 | return [2] 106 | if np.any(pd.isna(kappas_mlp["kappa_TOT_RTA"])): 107 | return [2] #np.nan 108 | if np.any(pd.isna(kappas_mlp["weights"])): 109 | return [2] #np.nan 110 | if np.any(pd.isna(kappas_dft["kappa_TOT_ave"])): 111 | return [2] #np.nan 112 | 113 | mlp_mode_kappa_TOT_ave = calculate_kappa_ave(calculate_mode_kappa_TOT(kappas_mlp)) 114 | 115 | if "mode_kappa_TOT_ave" not in kappas_dft.keys(): 116 | dft_mode_kappa_TOT_ave = calculate_kappa_ave(calculate_mode_kappa_TOT(kappas_dft)) 117 | else: 118 | dft_mode_kappa_TOT_ave = np.asarray(kappas_dft["mode_kappa_TOT_ave"]) 119 | 120 | 121 | # calculating microscopic error for all temperatures 122 | microscopic_error = (np.abs( 123 | (mlp_mode_kappa_TOT_ave - dft_mode_kappa_TOT_ave) # reduce ndim by 1 124 | ).sum( axis=tuple(range(1,mlp_mode_kappa_TOT_ave.ndim)) ) # summing axes 125 | / kappas_mlp["weights"].sum()) 126 | 127 | 128 | SRME = 2 * microscopic_error / (kappas_mlp["kappa_TOT_ave"]+kappas_dft["kappa_TOT_ave"]) 129 | 130 | return SRME 131 | 132 | 133 | 134 | 135 | def calculate_mode_kappa_TOT(kappas_dict): 136 | if np.any(pd.isna(kappas_dict["mode_kappa_C"])): 137 | return np.nan 138 | if np.any(pd.isna(kappas_dict["heat_capacity"])): 139 | return np.nan 140 | if np.any(pd.isna(kappas_dict["mode_kappa_P_RTA"])): 141 | return np.nan 142 | 143 | mode_kappa_C = np.asarray(kappas_dict["mode_kappa_C"]) 144 | heat_capacity = np.asarray(kappas_dict['heat_capacity']) 145 | mode_kappa_P_RTA = np.asarray(kappas_dict["mode_kappa_P_RTA"]) 146 | kappa_P_RTA = np.asarray(kappas_dict["kappa_P_RTA"]) 147 | 148 | with warnings.catch_warnings(): 149 | warnings.simplefilter("ignore", RuntimeWarning) 150 | mode_kappa_C_per_mode = 2*((mode_kappa_C * heat_capacity[:,:,:,np.newaxis,np.newaxis])/(heat_capacity[:,:,:,np.newaxis,np.newaxis]+heat_capacity[:,:,np.newaxis,:,np.newaxis])).sum(axis=2) 151 | 152 | mode_kappa_C_per_mode[np.isnan(mode_kappa_C_per_mode)]=0 153 | 154 | mode_kappa_TOT = mode_kappa_C_per_mode + mode_kappa_P_RTA 155 | 156 | sum_mode_kappa_TOT = mode_kappa_TOT.sum(axis = tuple(range(1,mode_kappa_TOT.ndim-1)))/np.sum(kappas_dict["weights"]) 157 | 158 | if np.all((sum_mode_kappa_TOT - kappa_P_RTA) <= MODE_KAPPA_THRESHOLD) : 159 | warnings.warn(f"Total mode kappa does not sum to total kappa. mode_kappa_TOT sum : {sum_mode_kappa_TOT}, kappa_TOT_RTA : {kappa_P_RTA}") 160 | 161 | return mode_kappa_TOT 162 | 163 | 164 | 165 | -------------------------------------------------------------------------------- /autoWTE/data.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | from pathlib import Path 4 | from tqdm import tqdm 5 | 6 | 7 | import pandas as pd 8 | from glob import glob 9 | 10 | from typing import Callable, Any 11 | 12 | class FileDownloadError(Exception): 13 | """Custom exception raised when a file cannot be downloaded.""" 14 | pass 15 | 16 | DEFAULT_CACHE_DIR = os.getenv("AUTOWTE_CACHE_DIR", str(Path.home() / ".cache" / "autoWTE")) 17 | 18 | def glob2df( 19 | file_pattern: str, 20 | data_loader: Callable[[Any], pd.DataFrame] = None, 21 | pbar: bool = True, 22 | max_files = None, 23 | **load_options: Any, 24 | ) -> pd.DataFrame: 25 | """Merge multiple data files matching a glob pattern into a single dataframe. 26 | 27 | Args: 28 | file_pattern (str): Glob pattern for file matching (e.g., '*.csv'). 29 | data_loader (Callable[[Any], pd.DataFrame], optional): Function for loading 30 | individual files. Defaults to pd.read_csv for CSVs, otherwise pd.read_json. 31 | show_progress (bool, optional): Show progress bar during file loading. Defaults to True. 32 | **load_options: Additional options passed to the data loader (like pd.read_csv or pd.read_json). 33 | 34 | Returns: 35 | pd.DataFrame: A single DataFrame combining the data from all matching files. 36 | 37 | Raises: 38 | FileNotFoundError: If no files match the given glob pattern. 39 | """ 40 | 41 | # Choose the appropriate data loading function based on file extension if not provided 42 | if data_loader is None: 43 | if ".csv" in file_pattern.lower(): 44 | data_loader = pd.read_csv 45 | else: 46 | data_loader = pd.read_json 47 | 48 | # Find all files matching the given pattern 49 | matched_files = glob(file_pattern) 50 | if not matched_files: 51 | raise FileNotFoundError(f"No files matched the pattern: {file_pattern}") 52 | 53 | if max_files is not None: 54 | max_index = max_files if max_files < len(matched_files) else len(matched_files) 55 | matched_files = matched_files[:max_index] 56 | 57 | # Load data from each file into a dataframe 58 | dataframes = [] 59 | for file_path in tqdm(matched_files, disable=not pbar): 60 | df = data_loader(file_path, **load_options) 61 | dataframes.append(df) 62 | 63 | # Combine all loaded dataframes into one 64 | combined_df = pd.concat(dataframes, ignore_index=True) 65 | 66 | return combined_df 67 | 68 | class Files: 69 | """A class to manage files with associated URLs and cache functionality.""" 70 | 71 | def __init__(self, file_name: str, url: str = None, cache_dir: str = DEFAULT_CACHE_DIR): 72 | """ 73 | Initialize a file object with a name, optional download URL, and cache directory. 74 | 75 | Args: 76 | file_name (str): Name of the file. 77 | url (str): URL to download the file from if not present. 78 | cache_dir (str): Directory to store cached files. Defaults to a global cache dir. 79 | """ 80 | self.file_name = file_name 81 | self.url = url 82 | self.cache_dir = cache_dir 83 | self.file_path = os.path.join(self.cache_dir, file_name) 84 | 85 | def ensure_exists(self): 86 | """Ensure the file exists locally, downloading if necessary.""" 87 | if not os.path.isfile(self.file_path): 88 | if self.url is None: 89 | raise FileDownloadError(f"No URL provided for {self.file_name}. Cannot download.") 90 | self.download_file() 91 | 92 | def download_file(self): 93 | """Download the file from the provided URL.""" 94 | os.makedirs(self.cache_dir, exist_ok=True) 95 | try: 96 | print(f"Downloading {self.file_name} from {self.url}") 97 | response = requests.get(self.url, stream=True) 98 | response.raise_for_status() 99 | 100 | with open(self.file_path, 'wb') as f: 101 | for chunk in tqdm(response.iter_content(chunk_size=8192)): 102 | if chunk: 103 | f.write(chunk) 104 | except requests.RequestException as e: 105 | raise FileDownloadError(f"Failed to download {self.file_name}: {e}") 106 | 107 | def get_path(self): 108 | """Return the local path of the file, downloading if necessary.""" 109 | self.ensure_exists() 110 | return self.file_path 111 | 112 | class DataFiles(Files): 113 | """A class specifically for data files with predefined URLs.""" 114 | 115 | 116 | -------------------------------------------------------------------------------- /autoWTE/fc_calc.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from numpy.typing import ArrayLike 4 | from typing import Tuple, Any 5 | 6 | 7 | from ase import Atoms 8 | from ase.calculators.calculator import Calculator 9 | import numpy as np 10 | from tqdm import tqdm 11 | 12 | 13 | from phono3py.api_phono3py import Phono3py 14 | 15 | from autoWTE.utils import aseatoms2phono3py, log_message, get_chemical_formula, ImaginaryFrequencyError 16 | from autoWTE.benchmark import are_frequencies_positive, FREQUENCY_THRESHOLD 17 | 18 | 19 | 20 | def calculate_fc2_set(ph3,calculator,log=True, pbar_kwargs={}): 21 | # calculate FC2 force set 22 | 23 | 24 | log_message(f"Computing FC2 force set in {get_chemical_formula(ph3)=}.", output=log) 25 | 26 | forces = [] 27 | nat = len(ph3.phonon_supercells_with_displacements[0]) 28 | 29 | for sc in tqdm(ph3.phonon_supercells_with_displacements,desc = f"FC2 calculation: {get_chemical_formula(ph3)}",**pbar_kwargs): 30 | if sc is not None: 31 | atoms = Atoms(sc.symbols, cell=sc.cell, positions=sc.positions, pbc=True) 32 | atoms.calc =calculator 33 | f = atoms.get_forces() 34 | else: 35 | f = np.zeros((nat, 3)) 36 | forces.append(f) 37 | 38 | # append forces 39 | force_set = np.array(forces) 40 | ph3.phonon_forces = force_set 41 | return force_set 42 | 43 | def calculate_fc3_set(ph3,calculator,log=True, pbar_kwargs={}): 44 | # calculate FC3 force set 45 | 46 | log_message(f"Computing FC3 force set in {get_chemical_formula(ph3)=}.", output=log) 47 | 48 | forces = [] 49 | nat = len(ph3.supercells_with_displacements[0]) 50 | 51 | for sc in tqdm(ph3.supercells_with_displacements,desc = f"FC3 calculation: {get_chemical_formula(ph3)}",**pbar_kwargs): 52 | if sc is not None: 53 | atoms = Atoms(sc.symbols, cell=sc.cell, positions=sc.positions, pbc=True) 54 | atoms.calc =calculator 55 | f = atoms.get_forces() 56 | else: 57 | f = np.zeros((nat, 3)) 58 | forces.append(f) 59 | 60 | # append forces 61 | force_set = np.array(forces) 62 | ph3.forces = np.array(forces) 63 | return force_set 64 | 65 | 66 | 67 | def get_force_sets( 68 | atoms : Atoms, 69 | calculator : Calculator | None = None, 70 | fc2_supercell : ArrayLike | None = None, 71 | fc3_supercell : ArrayLike | None = None, 72 | primitive_matrix : ArrayLike | str | None = "auto", 73 | q_mesh : ArrayLike | None = None, 74 | cutoff_pair_distance : float | None = None, 75 | disp_kwargs : dict[str, Any] = {}, 76 | log : str | Path | bool = True, 77 | displacement_output : str | bool = False, 78 | pbar_kwargs : dict = {"leave" : False}, 79 | check_frequencies : bool = False, 80 | **kwargs 81 | ) -> Tuple[Phono3py,list, list]: 82 | """Calculate fc2 and fc3 force lists from phono3py. 83 | 84 | Args: 85 | 86 | 87 | Raises: 88 | 89 | 90 | Returns: 91 | 92 | """ 93 | 94 | if fc2_supercell is not None : 95 | _fc2_supercell = fc2_supercell 96 | else: 97 | if "fc2_supercell" in atoms.info.keys() : 98 | _fc2_supercell = atoms.info["fc2_supercell"] 99 | else: 100 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc2_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 101 | 102 | if fc3_supercell is not None : 103 | _fc3_supercell = fc3_supercell 104 | else: 105 | if "fc3_supercell" in atoms.info.keys() : 106 | _fc3_supercell = atoms.info["fc3_supercell"] 107 | else: 108 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc3_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 109 | 110 | if calculator is not None : 111 | _calculator = calculator 112 | else: 113 | if getattr(atoms, "calc", None) is not None : 114 | _calculator = atoms.calc 115 | else: 116 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "calculator" was not found in atoms object and was not provided as an argument when calculating force sets.') 117 | 118 | if primitive_matrix is not None : 119 | _primitive_matrix = primitive_matrix 120 | elif "primitive_matrix" in atoms.info.keys() : 121 | _primitive_matrix = atoms.info["primitive_matrix"] 122 | else : 123 | _primitive_matrix = primitive_matrix 124 | 125 | if q_mesh is not None : 126 | _q_mesh = q_mesh 127 | else: 128 | if "q_mesh" in atoms.info.keys(): 129 | _q_mesh = atoms.info["q_mesh"] 130 | 131 | 132 | 133 | # Initialise Phono3py object 134 | ph3 = aseatoms2phono3py(atoms, 135 | fc2_supercell=_fc2_supercell, 136 | fc3_supercell=_fc3_supercell, 137 | primitive_matrix=_primitive_matrix, 138 | **kwargs) 139 | 140 | if _q_mesh is not None: 141 | ph3.mesh_numbers = _q_mesh 142 | 143 | if disp_kwargs is None : 144 | disp_kwargs = {"distance" : 0.03, 145 | "cutoff_pair_distance" : cutoff_pair_distance} 146 | ph3.generate_displacements(**disp_kwargs) 147 | 148 | if displacement_output != False : 149 | if displacement_output == True : 150 | ph3.save() 151 | else: 152 | ph3.save(displacement_output) 153 | 154 | fc2_set = calculate_fc2_set(ph3, calculator,log=log,pbar_kwargs=pbar_kwargs) 155 | 156 | if check_frequencies: 157 | frequencies = get_phonon_freqs_ph3(ph3) 158 | 159 | if not are_frequencies_positive(frequencies) : 160 | raise ImaginaryFrequencyError(frequencies[frequencies Phono3py: 51 | 52 | 53 | if log == False: 54 | ph3._log_level = 0 55 | elif log is not None: 56 | ph3._log_level = 1 57 | 58 | 59 | if nac_method in ["Wang","wang"] : 60 | if ph3.nac_params is None: 61 | raise ValueError("No NAC parameters in phono3py object, when setting nac_method Wang.") 62 | else: 63 | ph3.nac_params["method"] = "wang" 64 | elif nac_method in ["Gonze","gonze"]: 65 | if ph3.nac_params is None: 66 | raise ValueError("No NAC parameters in phono3py object, when setting nac_method Wang.") 67 | else: 68 | ph3.nac_params["method"] = 'gonze' 69 | 70 | 71 | 72 | if q_mesh is not None: 73 | ph3.mesh_numbers = q_mesh 74 | 75 | ph3.init_phph_interaction( 76 | symmetrize_fc3q=False, 77 | ) 78 | 79 | _kwargs = kwargs 80 | 81 | if kwargs is None : 82 | _kwargs = CONDUCTIVITY_DEFAULT_KWARGS 83 | else: 84 | for key, value in CONDUCTIVITY_DEFAULT_KWARGS.items(): 85 | if key not in _kwargs: 86 | _kwargs[key] = value 87 | 88 | 89 | ph3.run_thermal_conductivity( 90 | temperatures = temperatures, 91 | **_kwargs 92 | ) 93 | 94 | cond = ph3.thermal_conductivity 95 | 96 | output_names = {} 97 | if dict_output == "benchmark" : 98 | output_names = { 99 | 'frequencies' : True, 100 | 'qpoints' : True, 101 | 'temperatures' : True, 102 | 'weights' : True, 103 | 'kappa_TOT_RTA' : True, 104 | 'kappa_P_RTA' : True, 105 | 'kappa_C' : True, 106 | 'mode_kappa_P_RTA' : True, 107 | 'mode_kappa_C' : True, 108 | 'heat_capacity' : True 109 | } 110 | elif dict_output == "all" : 111 | output_names = { 112 | 'frequencies' : True, 113 | 'qpoints' : True, 114 | 'temperatures' : True, 115 | 'weights' : True, 116 | 'kappa_TOT_RTA' : True, 117 | 'kappa_P_RTA' : True, 118 | 'kappa_C' : True, 119 | 'mode_kappa_P_RTA' : True, 120 | 'mode_kappa_C' : True, 121 | 'heat_capacity' : True, 122 | 'gamma' : True, 123 | 'gamma_isotope' : True, 124 | 'group_velocities' : True, 125 | 'gv_by_gv' : True, 126 | 'velocity_operator' : True, 127 | 'gv_by_gv_operator' : True 128 | } 129 | elif dict_output is dict: 130 | output_names = dict_output 131 | 132 | kappa_dict = {} 133 | for key, value in output_names.items(): 134 | try: 135 | 136 | if value and key in KAPPA_OUTPUT_NAME_MAP: 137 | if KAPPA_OUTPUT_NAME_MAP[key] in CONDUCTIVITY_SIGMAS_LIST and getattr(cond,KAPPA_OUTPUT_NAME_MAP[key]).shape[0] == 1: 138 | kappa_dict[key] = deepcopy(getattr(cond,KAPPA_OUTPUT_NAME_MAP[key])[0]) 139 | else: 140 | kappa_dict[key] = deepcopy(getattr(cond,KAPPA_OUTPUT_NAME_MAP[key])) 141 | elif value : 142 | if key in CONDUCTIVITY_SIGMAS_LIST and getattr(cond,key).shape[0] == 1: 143 | kappa_dict[key] = deepcopy(getattr(cond,key)[0]) 144 | else: 145 | kappa_dict[key] = deepcopy(getattr(cond,key)) 146 | except AttributeError as exc: 147 | warnings.warn(f"Phono3py conductivity does not have attribute {key=}: {exc}") 148 | 149 | 150 | 151 | return ph3, kappa_dict 152 | 153 | def calculate_conductivity_atoms( 154 | atoms : Atoms | PhonopyAtoms, 155 | fc2_set : ArrayLike, 156 | fc3_set : ArrayLike, 157 | q_mesh : ArrayLike, 158 | temperatures : ArrayLike = BENCHMARK_TEMPERATURES, 159 | phono3py_kwargs : dict[str, Any] | None = None, 160 | fc2_supercell : ArrayLike | None = None, 161 | fc3_supercell : ArrayLike | None = None, 162 | primitive_matrix : ArrayLike | str | None = "auto", 163 | symmetrize_fc : bool = True, 164 | save_fc_filename : str | bool = False, 165 | disp_kwargs : dict[str, Any] | None = None, 166 | log : str | Path | bool = True, 167 | dict_output : Union[Literal["all","benchmark"],dict] = "all", 168 | **kwargs 169 | ) -> Tuple[Phono3py, dict]: 170 | 171 | if isinstance(atoms,Atoms) : 172 | if fc2_supercell is not None : 173 | _fc2_supercell = fc2_supercell 174 | else: 175 | if "fc2_supercell" in atoms.info.keys() : 176 | _fc2_supercell = atoms.info["fc2_supercell"] 177 | else: 178 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc2_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 179 | 180 | if fc3_supercell is not None : 181 | _fc3_supercell = fc3_supercell 182 | else: 183 | if "fc3_supercell" in atoms.info.keys() : 184 | _fc3_supercell = atoms.info["fc3_supercell"] 185 | else: 186 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc3_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 187 | 188 | if primitive_matrix is not None : 189 | _primitive_matrix = primitive_matrix 190 | elif "primitive_matrix" in atoms.info.keys() : 191 | _primitive_matrix = atoms.info["primitive_matrix"] 192 | else : 193 | _primitive_matrix = primitive_matrix 194 | 195 | elif isinstance(atoms,PhonopyAtoms) : 196 | if fc2_supercell is not None : 197 | _fc2_supercell = fc2_supercell 198 | else: 199 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc2_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 200 | 201 | if fc3_supercell is not None : 202 | _fc3_supercell = fc3_supercell 203 | else: 204 | raise ValueError(f'{atoms.get_chemical_formula(mode="metal")=} "fc3_supercell" was not found in atoms.info and was not provided as an argument when calculating force sets.') 205 | 206 | if phono3py_kwargs is None: 207 | _phono3py_kwargs = {} 208 | else: 209 | _phono3py_kwargs = phono3py_kwargs 210 | 211 | ph3 = aseatoms2phono3py(atoms, 212 | fc2_supercell=_fc2_supercell, 213 | fc3_supercell=_fc3_supercell, 214 | primitive_matrix=_primitive_matrix, 215 | log_level = 1 if log != False else 0, 216 | **_phono3py_kwargs) 217 | 218 | log_message("Generating displacement",output=log) 219 | if disp_kwargs is None : 220 | disp_kwargs = {"distance" : 0.03, 221 | "cutoff_pair_distance" : None} 222 | ph3.generate_displacements(**disp_kwargs) 223 | 224 | 225 | log_message("Setting and producing force constants",output=log) 226 | ph3.phonon_forces = fc2_set 227 | ph3.forces = fc3_set 228 | ph3.produce_fc2(symmetrize_fc2=symmetrize_fc) 229 | ph3.produce_fc3(symmetrize_fc3r=symmetrize_fc) 230 | 231 | if save_fc_filename != False : 232 | log_message("Saving HDF5 force constants.",output=log) 233 | if save_fc_filename == True: 234 | fc_filename_append = "" 235 | else: 236 | fc_filename_append = f".{save_fc_filename}" 237 | write_fc2_to_hdf5( 238 | ph3.fc2, 239 | p2s_map=ph3.phonon_primitive.p2s_map, 240 | physical_unit="eV/angstrom^2", 241 | filename = f"fc2{fc_filename_append}.hdf5" 242 | ) 243 | write_fc3_to_hdf5( 244 | ph3.fc3, 245 | p2s_map=ph3.primitive.p2s_map, 246 | physical_unit="eV/angstrom^2", 247 | filename = f"fc3{fc_filename_append}.hdf5" 248 | ) 249 | 250 | log_message("Starting thermal conductivity calculation",output=log) 251 | 252 | if kwargs is None: 253 | kwargs = { 254 | "is_isotope" : True, 255 | "conductivity_type" : 'wigner' 256 | } 257 | 258 | result = calculate_conductivity_phono3py(ph3,temperatures,q_mesh=q_mesh,dict_output = dict_output, **kwargs) 259 | 260 | return result 261 | 262 | 263 | 264 | 265 | def calculate_conductivity_load( 266 | displacement_output : str , 267 | q_mesh : ArrayLike, 268 | temperatures : ArrayLike = BENCHMARK_TEMPERATURES, 269 | fc2_set : ArrayLike | None = None, 270 | fc3_set : ArrayLike | None = None, 271 | produce_fc : bool= True, 272 | symmetrize_fc : bool = True, 273 | save_fc_filename : str | bool = False, 274 | log : str | Path | bool = True, 275 | dict_output : Union[Literal["all","benchmark"],dict] = "all", 276 | **kwargs 277 | ) -> Tuple[Phono3py, dict]: 278 | 279 | ph3 = load(displacement_output,produce_fc=produce_fc,symmetrize_fc=symmetrize_fc) 280 | 281 | if fc2_set is not None: 282 | ph3.phonon_forces = fc2_set 283 | ph3.produce_fc2(symmetrize_fc2=symmetrize_fc) 284 | 285 | 286 | if fc3_set is not None: 287 | ph3.forces = fc2_set 288 | ph3.produce_fc3(symmetrize_fc3r=symmetrize_fc) 289 | 290 | if save_fc_filename != False : 291 | log_message("Saving HDF5 force constants.",output=log) 292 | if save_fc_filename == True: 293 | fc_filename_append = "" 294 | else: 295 | fc_filename_append = f".{save_fc_filename}" 296 | write_fc2_to_hdf5( 297 | ph3.fc2, 298 | p2s_map=ph3.phonon_primitive.p2s_map, 299 | physical_unit="eV/angstrom^2", 300 | filename = f"fc2{fc_filename_append}.hdf5" 301 | ) 302 | write_fc3_to_hdf5( 303 | ph3.fc3, 304 | p2s_map=ph3.primitive.p2s_map, 305 | physical_unit="eV/angstrom^2", 306 | filename = f"fc3{fc_filename_append}.hdf5" 307 | ) 308 | 309 | log_message("Starting thermal conductivity calculation",output=log) 310 | 311 | 312 | 313 | 314 | if kwargs is None: 315 | kwargs = { 316 | "is_isotope" : True, 317 | "conductivity_type" : 'wigner' 318 | } 319 | 320 | result = calculate_conductivity_phono3py(ph3,temperatures,q_esh=q_mesh, dict_output = dict_output, **kwargs) 321 | 322 | return result 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | -------------------------------------------------------------------------------- /autoWTE/utils.py: -------------------------------------------------------------------------------- 1 | from phono3py.cui.load import load 2 | from ase.io import read, write 3 | from ase import Atoms 4 | 5 | from phonopy.structure.atoms import PhonopyAtoms 6 | from phono3py.api_phono3py import Phono3py 7 | 8 | import numpy as np 9 | import datetime 10 | import io 11 | import sys 12 | 13 | 14 | 15 | def aseatoms2phonoatoms(atoms): 16 | phonoatoms = PhonopyAtoms(atoms.symbols, cell=atoms.cell, positions=atoms.positions, pbc=True) 17 | return phonoatoms 18 | 19 | 20 | def aseatoms2phono3py(atoms,fc2_supercell,fc3_supercell,primitive_matrix=None, **kwargs) -> Phono3py: 21 | unitcell=aseatoms2phonoatoms(atoms) 22 | return Phono3py(unitcell=unitcell,supercell_matrix=fc3_supercell,phonon_supercell_matrix=fc2_supercell,primitive_matrix=primitive_matrix,**kwargs) 23 | 24 | def aseatoms2str(atoms, format='extxyz'): 25 | buffer = io.StringIO() 26 | write(buffer, Atoms(atoms.symbols,positions=atoms.positions,cell=atoms.cell,pbc=True), format=format) # You can choose different formats (like 'cif', 'pdb', etc.) 27 | atoms_string = buffer.getvalue() 28 | return atoms_string 29 | 30 | def str2aseatoms(atoms_string,format='extxyz'): 31 | buffer = io.StringIO(atoms_string) 32 | return read(buffer, format=format) 33 | 34 | def log_message(*messages,output=True,sep=" ",**kwargs): 35 | 36 | timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 37 | write_message = f"{timestamp} - {sep.join((str(m) for m in messages))}" 38 | 39 | if output == False: 40 | pass 41 | elif output == True: 42 | print(write_message,**kwargs) 43 | sys.stdout.flush() 44 | elif isinstance(output, str): 45 | # Write to the file specified by 'output' 46 | with open(output, 'a') as file: 47 | file.write(write_message + '\n',**kwargs) 48 | elif hasattr(output, 'write'): 49 | # Write to the file object 50 | output.write(write_message + '\n',**kwargs) 51 | output.flush() 52 | 53 | def phono3py2aseatoms(ph3 : Phono3py) -> Atoms: 54 | phonopyatoms=ph3.unitcell 55 | atoms = Atoms(phonopyatoms.symbols, cell=phonopyatoms.cell, positions=phonopyatoms.positions, pbc=True) 56 | 57 | if ph3.supercell_matrix is not None: 58 | atoms.info["fc3_supercell"] = ph3.supercell_matrix 59 | 60 | if ph3.phonon_supercell_matrix is not None: 61 | atoms.info["fc2_supercell"] = ph3.phonon_supercell_matrix 62 | 63 | if ph3.primitive_matrix is not None: 64 | atoms.info["primitive_matrix"] = ph3.primitive_matrix 65 | 66 | if ph3.mesh_numbers is not None: 67 | atoms.info["q_mesh"] = ph3.mesh_numbers 68 | 69 | # TODO : Non-default values and BORN charges to be added 70 | 71 | return atoms 72 | 73 | def get_chemical_formula(ph3 : Phono3py, mode='metal', **kwargs): 74 | unitcell=ph3.unitcell 75 | atoms = Atoms(unitcell.symbols, cell=unitcell.cell, positions=unitcell.positions, pbc=True) 76 | return atoms.get_chemical_formula(mode=mode,**kwargs) 77 | 78 | class ImaginaryFrequencyError(Exception): 79 | def __init__(self, value): 80 | self.value = value 81 | 82 | def __str__(self): 83 | return(repr(self.value)) -------------------------------------------------------------------------------- /benchmark-scripts/1_force_sets.py: -------------------------------------------------------------------------------- 1 | import os 2 | import datetime 3 | import warnings 4 | from typing import Literal, Any 5 | from collections.abc import Callable 6 | 7 | import numpy as np 8 | import pandas as pd 9 | from tqdm import tqdm 10 | 11 | from ase.constraints import FixSymmetry 12 | from ase.filters import ExpCellFilter, FrechetCellFilter 13 | from ase.optimize import FIRE, LBFGS 14 | from ase.optimize.optimize import Optimizer 15 | from ase.spacegroup import get_spacegroup 16 | from ase import Atoms 17 | from ase.io import read 18 | 19 | 20 | from autoWTE import aseatoms2str, get_force_sets, mutlistage_relax, BENCHMARK_ID 21 | from autoWTE.utils import ImaginaryFrequencyError 22 | import autoWTE 23 | 24 | from mace.calculators import mace_mp 25 | import torch 26 | 27 | 28 | 29 | # editable config 30 | model_name = "MACE" 31 | checkpoint = "https://github.com/ACEsuit/mace-mp/releases/download/mace_mp_0/2024-01-07-mace-128-L2_epoch-199.model" #"https://github.com/ACEsuit/mace-mp/releases/download/mace_mp_0b/mace_agnesi_medium.model" 32 | 33 | device = "cuda" if torch.cuda.is_available() else "cpu" 34 | dtype = "float64" 35 | calc = mace_mp(model=checkpoint, device=device, default_dtype=dtype) 36 | 37 | ase_optimizer : Literal["FIRE", "LBFGS"] = "LBFGS" 38 | ase_filter: Literal["frechet", "exp"] = "frechet" 39 | multistage_relaxation = True 40 | max_steps = 500 41 | force_max = 0.005 # Run until the forces are smaller than this in eV/A 42 | prog_bar = True 43 | 44 | 45 | slurm_array_task_count = int(os.getenv("SLURM_ARRAY_TASK_COUNT", "1")) 46 | slurm_array_task_id = int(os.getenv("SLURM_ARRAY_TASK_ID", "0")) 47 | slurm_array_job_id = os.getenv("SLURM_ARRAY_JOB_ID", "debug") 48 | slurm_array_task_min = int(os.getenv("SLURM_ARRAY_TASK_MIN", "0")) 49 | 50 | 51 | task_type = "LTC" # lattice thermal conductivity 52 | job_name = f"{model_name}-phononDB-{task_type}-{ase_optimizer}{'_MSR' if multistage_relaxation else ''}_{force_max}" 53 | module_dir = os.path.dirname(__file__) 54 | out_dir = os.getenv("SBATCH_OUTPUT", f"{module_dir}/{datetime.datetime.now().strftime('%Y-%m-%d')}-{job_name}") 55 | out_path = f"{out_dir}/force_sets_{slurm_array_job_id}-{slurm_array_task_id:>03}.json.gz" 56 | os.makedirs(os.path.dirname(out_path),exist_ok=True) 57 | 58 | warnings.filterwarnings("ignore", category=DeprecationWarning, module="spglib") 59 | 60 | timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 61 | 62 | 63 | 64 | data_path = autoWTE.BENCHMARK_STRUCTURES 65 | 66 | 67 | print(f"\nJob {job_name} started {timestamp}") 68 | print(f"{data_path=}") 69 | 70 | 71 | #check this 72 | print(f"Read data from {data_path}") 73 | atoms_list: list[Atoms] = read(data_path,format="extxyz",index=":") 74 | 75 | if slurm_array_job_id == "debug": 76 | atoms_list = atoms_list[:5] 77 | print("Running in DEBUG mode.") 78 | elif slurm_array_task_count > 1: 79 | atoms_list = np.array_split(np.asarray(atoms_list,dtype = object), slurm_array_task_count)[ 80 | slurm_array_task_id - slurm_array_task_min 81 | ] 82 | 83 | 84 | 85 | 86 | filter_cls: Callable[[Atoms], Atoms] = { 87 | "frechet": FrechetCellFilter, 88 | "exp": ExpCellFilter, 89 | }[ase_filter] 90 | optim_cls: Callable[..., Optimizer] = {"FIRE": FIRE, "LBFGS": LBFGS}[ase_optimizer] 91 | 92 | force_set_results : dict[str, dict[str, Any]] = {} 93 | 94 | tqdm_bar = tqdm(atoms_list, desc="Relaxing and force sets calculation",disable=not prog_bar) 95 | for atoms in tqdm_bar: 96 | mat_id = atoms.info[autoWTE.BENCHMARK_ID] 97 | if mat_id in force_set_results: 98 | continue 99 | if "name" in atoms.info.keys(): 100 | mat_name=atoms.info["name"] 101 | else: 102 | mat_name=f"{atoms.get_chemical_formula(mode='metal')}-{get_spacegroup(atoms).no}" 103 | 104 | tqdm_bar.set_postfix_str(mat_name, refresh=True) 105 | 106 | try: 107 | atoms.calc = calc 108 | if max_steps > 0: 109 | if not multistage_relaxation : 110 | atoms.set_constraint(FixSymmetry(atoms)) 111 | filtered_atoms = filter_cls(atoms,scalar_pressure = 0 if "residual_pressure" not in atoms.info.keys() else atoms.info["residual_pressure"]) 112 | optimizer = optim_cls(filtered_atoms,logfile='relax.log') 113 | optimizer.run(fmax=force_max, steps=max_steps) 114 | if optimizer.step == max_steps: 115 | print(f"Material {mat_name=}, {mat_id=} reached max step {max_steps=} during relaxation.") 116 | 117 | atoms.constraints = None 118 | atoms.calc = None 119 | else: 120 | atoms = mutlistage_relax( 121 | atoms, 122 | fmax=1e-4, 123 | fmax_step2=5e-5, 124 | fmax_init = 1e-3, 125 | allow_tilt = False, 126 | log="relax.log" 127 | ) 128 | 129 | except Exception as exc: 130 | warnings.warn(f"Failed to relax {mat_name=}, {mat_id=}: {exc!r}") 131 | continue 132 | 133 | 134 | try: 135 | if True: 136 | force_set_results[mat_id]={ 137 | "structure" : aseatoms2str(atoms), 138 | "primitive_matrix" : atoms.info["primitive_matrix"] if "primitive_matrix" in atoms.info.keys() else None, 139 | "fc2_supercell" : atoms.info["fc2_supercell"], 140 | "fc3_supercell" : atoms.info["fc3_supercell"], 141 | "q_mesh" : atoms.info["q_mesh"], 142 | "name" : mat_name, 143 | } 144 | 145 | _, fc2_set, fc3_set=get_force_sets(atoms, 146 | calculator=calc, 147 | cutoff_pair_distance=None, 148 | log=False, 149 | pbar_kwargs={"leave" : False}, 150 | check_frequencies=True) 151 | 152 | 153 | force_set_results[mat_id]["fc2_set"] = fc2_set 154 | force_set_results[mat_id]["fc3_set"] = fc3_set 155 | force_set_results[mat_id]["freqs_positive"] = True 156 | 157 | except ImaginaryFrequencyError as exc: 158 | warnings.warn(f"Obtained imaginary phonon frequencies in {mat_name},{mat_id}: {exc!r}") 159 | force_set_results[mat_id]["are_frequencies_positive"] = False 160 | continue 161 | except KeyError as exc: 162 | warnings.warn(f"Failed to calculate force sets {mat_id}: {exc!r}") 163 | continue 164 | 165 | 166 | df_out = pd.DataFrame(force_set_results).T 167 | df_out.index.name = BENCHMARK_ID 168 | df_out.reset_index().to_json(out_path) 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /benchmark-scripts/2_thermal_conductivity.py: -------------------------------------------------------------------------------- 1 | 2 | import warnings 3 | import os 4 | from copy import deepcopy 5 | from typing import Any 6 | import pandas as pd 7 | import numpy as np 8 | from tqdm import tqdm 9 | 10 | from autoWTE.utils import str2aseatoms 11 | from autoWTE.data import glob2df 12 | from autoWTE import calculate_conductivity_atoms, BENCHMARK_TEMPERATURES, BENCHMARK_ID, BENCHMARK_DFT_NAC_REF 13 | 14 | 15 | warnings.filterwarnings("ignore", category=DeprecationWarning, module="spglib") 16 | 17 | module_dir = os.path.dirname(__file__) 18 | 19 | model_name = "MACE" 20 | checkpoint = "https://github.com/ACEsuit/mace-mp/releases/download/mace_mp_0b/mace_agnesi_medium.model" 21 | in_path = f"{module_dir}/2024-10-21-MACE-phononDB-LTC-LBFGS_MSR_0.005/force_sets_0-000.json.gz" 22 | DFT_RESULS_FILE = BENCHMARK_DFT_NAC_REF 23 | 24 | pbar = True 25 | 26 | df_force_sets = glob2df(in_path,pbar=False).set_index(BENCHMARK_ID) 27 | 28 | 29 | slurm_array_task_count = int(os.getenv("SLURM_ARRAY_TASK_COUNT", "1")) 30 | slurm_array_task_id = int(os.getenv("SLURM_ARRAY_TASK_ID", "0")) 31 | slurm_array_job_id = os.getenv("SLURM_ARRAY_JOB_ID", "debug") 32 | slurm_array_task_min = int(os.getenv("SLURM_ARRAY_TASK_MIN", "0")) 33 | 34 | out_path = f"{os.path.dirname(in_path)}/conductivity_{slurm_array_job_id}-{slurm_array_task_id:>03}.json.gz" 35 | 36 | if slurm_array_job_id == "debug": 37 | index_list = df_force_sets.index.tolist()[:3] 38 | elif slurm_array_task_count > 1: 39 | index_list = df_force_sets.index.tolist()[slurm_array_task_id - slurm_array_task_min::slurm_array_task_count] 40 | 41 | df_force_sets = df_force_sets.loc[index_list] 42 | df_force_sets["primitive_matrix"]=df_force_sets["primitive_matrix"].apply(lambda x: None if np.all(pd.isna(x)) else x) 43 | tc_results: dict[str, dict[str, Any]] = {} 44 | 45 | prog_bar = tqdm(df_force_sets.itertuples(),disable=not pbar) 46 | force_columns_to_drop = ["fc2_set","fc3_set"] 47 | 48 | 49 | 50 | for force_sets in prog_bar: 51 | try: 52 | mat_id = force_sets.Index 53 | 54 | prog_bar.set_postfix_str(force_sets.name,refresh=True) 55 | 56 | tc_results[mat_id] = {key: value for key, value in force_sets._asdict().items() if key not in force_columns_to_drop} 57 | 58 | if "freqs_positive" in force_sets._asdict().keys(): 59 | if not force_sets.freqs_positive: 60 | continue 61 | 62 | _, tc_dict = calculate_conductivity_atoms( 63 | atoms=str2aseatoms(force_sets.structure), 64 | temperatures=BENCHMARK_TEMPERATURES, 65 | q_mesh=force_sets.q_mesh, 66 | fc2_set=force_sets.fc2_set, 67 | fc3_set=force_sets.fc3_set, 68 | primitive_matrix=force_sets.primitive_matrix, 69 | fc2_supercell=np.diagonal(force_sets.fc2_supercell), 70 | fc3_supercell=np.diagonal(force_sets.fc3_supercell), 71 | log=False, 72 | dict_output="benchmark" 73 | ) 74 | 75 | tc_results[mat_id].update(tc_dict) 76 | 77 | except Exception as exc: 78 | warnings.warn(f"Failed to conductivity calculation {mat_id}: {exc!r}") 79 | continue 80 | 81 | 82 | df_mlp_results = pd.DataFrame(tc_results).T 83 | df_mlp_results.index.name = BENCHMARK_ID 84 | df_mlp_results.reset_index().to_json(out_path) 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /benchmark-scripts/3_evaluate.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | import os 3 | import pandas as pd 4 | 5 | 6 | from autoWTE import glob2df, BENCHMARK_ID, BENCHMARK_DFT_NAC_REF 7 | from autoWTE.benchmark import get_metrics, add_benchmark_descriptors 8 | 9 | 10 | module_dir = os.path.dirname(__file__) 11 | in_pattern = f"{module_dir}/2024-10-21-MACE-phononDB-LTC-LBFGS_MSR_0.005/conductivity_1058314-*.json.gz" 12 | out_path = f"{module_dir}/2024-10-21-MACE-phononDB-LTC-LBFGS_MSR_0.005/conductivity_1058314.json.gz" 13 | 14 | 15 | model_name = "MACE" 16 | 17 | DFT_RESULTS_FILE = BENCHMARK_DFT_NAC_REF 18 | 19 | DEBUG = False 20 | 21 | df_mlp_results = glob2df(in_pattern,max_files=None).set_index(BENCHMARK_ID) 22 | 23 | df_mlp_results.to_json(out_path) 24 | 25 | 26 | 27 | # Calculating mean SRME and mean SRE 28 | 29 | 30 | # Read DFT results 31 | df_dft_results = pd.read_json(DFT_RESULTS_FILE).set_index(BENCHMARK_ID) 32 | 33 | 34 | if not DEBUG: 35 | df_mlp_filtered=df_mlp_results[df_mlp_results.index.isin(df_dft_results.index)] 36 | df_mlp_filtered = df_mlp_filtered.reindex(df_dft_results.index) 37 | else: 38 | common_indexes = df_mlp_results.index.intersection(df_dft_results.index) 39 | df_mlp_filtered = df_mlp_results.reindex(common_indexes) 40 | df_dft_results = df_dft_results.reindex(common_indexes) 41 | 42 | df_mlp_filtered = add_benchmark_descriptors(df_mlp_filtered,df_dft_results) 43 | 44 | mSRE, mSRME, rmseSRE, rmseSRME = get_metrics(df_mlp_filtered) 45 | 46 | df_mlp_filtered["DFT_kappa_TOT_ave"] = df_dft_results["kappa_TOT_ave"] 47 | 48 | # Print 49 | pd.set_option('display.max_rows', None) 50 | df_mlp_final = df_mlp_filtered[["SRME","SRE","kappa_TOT_ave",'DFT_kappa_TOT_ave']].copy() 51 | df_mlp_final["kappa_TOT_ave"] = df_mlp_final["kappa_TOT_ave"].apply(lambda x : x[0] if not pd.isna(x) else x) 52 | df_mlp_final["DFT_kappa_TOT_ave"] = df_mlp_final["DFT_kappa_TOT_ave"].apply(lambda x : x[0] if not pd.isna(x) else x) 53 | print(df_mlp_final.round(4)) 54 | 55 | print(f"MODEL: {model_name}") 56 | print(f"\tmean SRME: {mSRME}") 57 | print(f"\tmean SRE: {mSRE}") 58 | -------------------------------------------------------------------------------- /data/convert_ph3params_extxyz.py: -------------------------------------------------------------------------------- 1 | import tarfile 2 | import warnings 3 | import io 4 | import os 5 | import autoWTE 6 | from ase.io import write 7 | from tqdm import tqdm 8 | from phono3py.cui.load import load 9 | import numpy as np 10 | import re 11 | import ase 12 | 13 | import pandas as pd 14 | from ase.spacegroup import get_spacegroup 15 | 16 | 17 | symm_no_q_mesh_map = { 18 | 225 : [19,19,19], # rocksalt 19 | 186 : [19,19,15], # wurtzite 20 | 216 : [19,19,19], # zincblende 21 | } 22 | 23 | symm_no_name_map = { 24 | 225 : "rocksalt", 25 | 186 : "wurtzite", 26 | 216 : "zincblende" 27 | } 28 | 29 | tar_dir = '/mnt/scratch2/q13camb_scratch/bp443/foundational_TC/release/phonondb-PBE-data/' 30 | tar_list = ['phono3py_params_RS.tar.xz','phono3py_params_WZ.tar.xz','phono3py_params_ZB.tar.xz'] 31 | 32 | output_file = autoWTE.BENCHMARK_STRUCTURES_FILE 33 | 34 | try: 35 | os.remove(output_file) 36 | except OSError: 37 | pass 38 | 39 | atoms_list= [] 40 | 41 | mp_phonondb_id_file = "mp_id-phonondb_id.txt" 42 | df_mp_id = pd.read_csv(mp_phonondb_id_file, sep=" ", header=None, names=["name", "symm.no", "mp-id"]) 43 | element_pattern = r'([A-Z][a-z]?)' 44 | df_mp_id["element_list"] = df_mp_id["name"].apply(lambda x : sorted(re.findall(element_pattern, x))) 45 | df_mp_id["found"] = False 46 | 47 | def get_mat_info(atoms): 48 | list_chemicals=sorted(np.unique(atoms.get_chemical_symbols()).tolist()) 49 | 50 | # Regular expression to match elements with optional counts 51 | compound = df_mp_id[df_mp_id['element_list'].apply(lambda x: np.all(x==list_chemicals))] 52 | 53 | structure = compound[compound['symm.no'].apply(lambda x : int(x)) == int(get_spacegroup(atoms, symprec=1e-5).no) ] 54 | 55 | if len(structure) == 0: 56 | print(atoms,compound) 57 | return df_mp_id.iloc[0].to_dict() 58 | else: 59 | if len(structure) > 1: 60 | print(structure) 61 | df_mp_id.loc[structure.index,"found"] = True 62 | return structure.iloc[0].to_dict() 63 | 64 | 65 | warnings.filterwarnings("ignore", category=DeprecationWarning, module="spglib") 66 | 67 | for tar_filename in tqdm(tar_list,desc="Tar files"): 68 | 69 | 70 | with tarfile.open(tar_dir+tar_filename, 'r:xz') as tar: 71 | 72 | # Read a specific file from the archive 73 | all_members = tar.getmembers() 74 | 75 | # Filter for directories 76 | files = [member for member in all_members if member.isfile()] 77 | pbar = tqdm(files,leave=False,desc=f"Reading yaml files in tar file {tar_filename}") 78 | for file_to_read in pbar: 79 | 80 | if file_to_read.name.split(".")[-1] != "yaml" : 81 | continue 82 | 83 | file_content = tar.extractfile(file_to_read.name) 84 | 85 | if file_content is not None : 86 | ph3 = load(file_content,produce_fc=False,symmetrize_fc=False) 87 | atoms = autoWTE.phono3py2aseatoms(ph3) 88 | 89 | info = get_mat_info(atoms) 90 | 91 | pbar.set_postfix_str(info['name']) 92 | 93 | 94 | atoms.info["mp_id"] = info["mp-id"] 95 | 96 | atoms.info["q_mesh"] = symm_no_q_mesh_map[ph3.symmetry._dataset.number] 97 | atoms.info["name"] = info["name"] 98 | atoms.info["symm.no"] = info["symm.no"] 99 | 100 | 101 | write(output_file,atoms,format="extxyz",append=True) 102 | 103 | else: 104 | print(f"Could not read {file_to_read}") 105 | 106 | -------------------------------------------------------------------------------- /data/generate_DFT_kappa.py: -------------------------------------------------------------------------------- 1 | import tarfile 2 | import warnings 3 | import os, sys 4 | import autoWTE 5 | from tqdm import tqdm 6 | import pandas as pd 7 | import numpy as np 8 | import gc 9 | from copy import deepcopy 10 | from phono3py.cui.load import load 11 | import re 12 | 13 | from ase.spacegroup import get_spacegroup 14 | 15 | symm_no_q_mesh_map = { 16 | 225 : [19,19,19], # rocksalt 17 | 186 : [19,19,15], # wurtzite 18 | 216 : [19,19,19], # zincblende 19 | } 20 | 21 | symm_no_name_map = { 22 | 225 : "rocksalt", 23 | 186 : "wurtzite", 24 | 216 : "zincblende" 25 | } 26 | 27 | pbar = True 28 | 29 | tar_dir = '/mnt/scratch2/q13camb_scratch/bp443/foundational_TC/release/phonondb-PBE-data/' 30 | tar_list = ['phono3py_params_RS.tar.xz','phono3py_params_WZ.tar.xz','phono3py_params_ZB.tar.xz'] 31 | 32 | conductivity_output= "all" 33 | 34 | atoms_list= [] 35 | 36 | dict_dft_nac_kappa = {} 37 | dict_dft_nonac_kappa = {} 38 | 39 | warnings.filterwarnings("ignore", category=DeprecationWarning, module="spglib") 40 | 41 | slurm_array_task_count = int(os.getenv("SLURM_ARRAY_TASK_COUNT", "1")) 42 | slurm_array_task_id = int(os.getenv("SLURM_ARRAY_TASK_ID", "0")) 43 | slurm_array_job_id = os.getenv("SLURM_ARRAY_JOB_ID", "debug") 44 | slurm_array_task_min = int(os.getenv("SLURM_ARRAY_TASK_MIN", "0")) 45 | 46 | nac_outpath = f"{conductivity_output}_kappas_phonondb_PBE_NAC_{slurm_array_job_id}/{slurm_array_task_id}.json.gz" 47 | nonac_outpath = f"{conductivity_output}_kappas_phonondb_PBE_noNAC_{slurm_array_job_id}/{slurm_array_task_id}.json.gz" 48 | 49 | os.makedirs(os.path.dirname(nac_outpath),exist_ok=True) 50 | os.makedirs(os.path.dirname(nonac_outpath),exist_ok=True) 51 | 52 | print(f"Output to {nac_outpath} and {nonac_outpath}") 53 | 54 | count=0 55 | count_list=list(range(1,104)) 56 | if slurm_array_job_id == "debug": 57 | count_list = count_list[:2] 58 | elif slurm_array_task_count > 1: 59 | count_list = count_list[slurm_array_task_id - slurm_array_task_min::slurm_array_task_count] 60 | 61 | 62 | mp_phonondb_id_file = "mp_id-phonondb_id.txt" 63 | df_mp_id = pd.read_csv(mp_phonondb_id_file, sep=" ", header=None, names=["name", "symm.no", "mp-id"]) 64 | element_pattern = r'([A-Z][a-z]?)' 65 | df_mp_id["element_list"] = df_mp_id["name"].apply(lambda x : sorted(re.findall(element_pattern, x))) 66 | 67 | 68 | def get_mat_info(atoms): 69 | list_chemicals=sorted(np.unique(atoms.get_chemical_symbols()).tolist()) 70 | 71 | # Regular expression to match elements with optional counts 72 | compound = df_mp_id[df_mp_id['element_list'].apply(lambda x: np.all(x==list_chemicals))] 73 | 74 | structure = compound[compound['symm.no'].apply(lambda x : int(x)) == int(get_spacegroup(atoms, symprec=1e-5).no) ] 75 | 76 | return structure.iloc[0].to_dict() 77 | 78 | 79 | 80 | 81 | 82 | for tar_filename in tqdm(tar_list,desc="Tar files",disable= not pbar): 83 | 84 | 85 | with tarfile.open(tar_dir+tar_filename, 'r:xz') as tar: 86 | 87 | # Read a specific file from the archive 88 | all_members = tar.getmembers() 89 | 90 | # Filter for directories 91 | files = [member for member in all_members if member.isfile()] 92 | 93 | for file_to_read in tqdm(files,leave=False,desc=f"Reading yaml files in tar file {tar_filename}",disable= not pbar) : 94 | 95 | if file_to_read.name.split(".")[-1] != "yaml" : 96 | continue 97 | else: 98 | count += 1 99 | if count not in count_list: 100 | continue 101 | 102 | 103 | file_content = tar.extractfile(file_to_read.name) 104 | 105 | if file_content is not None : 106 | ph3 = load(file_content,produce_fc=True,symmetrize_fc=True) 107 | 108 | atoms = autoWTE.phono3py2aseatoms(ph3) 109 | 110 | mat_info = {} 111 | 112 | info = get_mat_info(atoms) 113 | 114 | #mat_info["mp_id"] = info["mp-id"] 115 | mat_info["q_mesh"] = symm_no_q_mesh_map[ph3.symmetry._dataset.number] 116 | mat_info["name"] = info["name"] 117 | mat_info["symm.no"] = info["symm.no"] 118 | 119 | mat_id = info["mp-id"] 120 | 121 | print(mat_id,"\nNAC:\n") 122 | 123 | ph3, kappa_nac = autoWTE.calculate_conductivity_phono3py( 124 | ph3, 125 | q_mesh = symm_no_q_mesh_map[ph3.symmetry._dataset.number], 126 | temperatures = autoWTE.BENCHMARK_TEMPERATURES, 127 | log=True, 128 | dict_output=conductivity_output, 129 | nac_method = "Wang" 130 | ) 131 | 132 | ph3.nac_params = None 133 | 134 | ph3, kappa_nonac = autoWTE.calculate_conductivity_phono3py( 135 | ph3, 136 | q_mesh = symm_no_q_mesh_map[ph3.symmetry._dataset.number], 137 | temperatures = autoWTE.BENCHMARK_TEMPERATURES, 138 | log=True, 139 | dict_output=conductivity_output 140 | ) 141 | 142 | 143 | print(kappa_nac["kappa_TOT_RTA"],"\nnoNAC:\n",kappa_nonac["kappa_TOT_RTA"]) 144 | sys.stdout.flush() 145 | 146 | kappa_nac.update(mat_info) 147 | kappa_nonac.update(mat_info) 148 | 149 | dict_dft_nac_kappa[mat_id] = deepcopy(kappa_nac) 150 | dict_dft_nonac_kappa[mat_id] = deepcopy(kappa_nonac) 151 | 152 | 153 | del ph3 154 | del atoms 155 | del kappa_nonac 156 | del kappa_nac 157 | gc.collect() 158 | 159 | else: 160 | print(f"Could not read {file_to_read}") 161 | 162 | 163 | df_dft_nac_kappa = pd.DataFrame(dict_dft_nac_kappa).T 164 | df_dft_nonac_kappa = pd.DataFrame(dict_dft_nonac_kappa).T 165 | 166 | 167 | df_dft_nac_kappa.index.name = autoWTE.BENCHMARK_ID 168 | df_dft_nonac_kappa.index.name = autoWTE.BENCHMARK_ID 169 | 170 | df_dft_nac_kappa.reset_index().to_json(nac_outpath) 171 | df_dft_nonac_kappa.reset_index().to_json(nonac_outpath) 172 | 173 | 174 | -------------------------------------------------------------------------------- /data/join_dft_kappas.py: -------------------------------------------------------------------------------- 1 | from glob import glob 2 | from autoWTE import calculate_kappa_ave,glob2df, BENCHMARK_ID, calculate_mode_kappa_TOT, BENCHMARK_DFT_NAC_REF,BENCHMARK_DFT_NONAC_REF 3 | from tqdm import tqdm 4 | import numpy as np 5 | import pandas as pd 6 | import os 7 | import gc 8 | 9 | module_dir = os.path.dirname(__file__) 10 | 11 | conductivity_output = "all" 12 | benchmark_drop_list = ["mode_kappa_TOT","kappa_C","mode_kappa_C","mode_kappa_P_RTA","kappa_TOT_RTA","kappa_P_RTA"] 13 | 14 | nac_pattern = f"{conductivity_output}_kappas_phonondb_PBE_NAC_1060107/*.json.gz" 15 | nonac_pattern = f"{conductivity_output}_kappas_phonondb_PBE_noNAC_1060107/*.json.gz" 16 | 17 | nac_outpath = f"{conductivity_output}_kappas_phonondb_PBE_NAC.json.gz" 18 | nonac_outpath = f"{conductivity_output}_kappas_phonondb_PBE_noNAC.json.gz" 19 | 20 | if conductivity_output == "benchmark": 21 | nac_outpath = BENCHMARK_DFT_NAC_REF 22 | nonac_outpath = BENCHMARK_DFT_NONAC_REF 23 | 24 | 25 | nac_files = sorted(glob(f"{module_dir}/{nac_pattern}")) 26 | nonac_files = sorted(glob(f"{module_dir}/{nonac_pattern}")) 27 | 28 | df_nac = glob2df(nac_pattern).set_index(BENCHMARK_ID) 29 | 30 | 31 | 32 | df_nac["kappa_TOT_ave"] = df_nac["kappa_TOT_RTA"].apply(calculate_kappa_ave) 33 | df_nac["mode_kappa_TOT"] = df_nac.apply(calculate_mode_kappa_TOT,axis=1) 34 | df_nac["mode_kappa_TOT_ave"] = df_nac["mode_kappa_TOT"].apply(calculate_kappa_ave) 35 | 36 | if conductivity_output == "benchmark" : 37 | df_nac = df_nac.drop(benchmark_drop_list, axis=1) 38 | 39 | df_nac.reset_index().to_json(nac_outpath) 40 | 41 | del df_nac 42 | gc.collect() 43 | 44 | # join noNAC files 45 | df_nonac = glob2df(nonac_pattern).set_index(BENCHMARK_ID) 46 | 47 | df_nonac["kappa_TOT_ave"] = df_nonac["kappa_TOT_RTA"].apply(calculate_kappa_ave) 48 | df_nonac["mode_kappa_TOT"] = df_nonac.apply(calculate_mode_kappa_TOT,axis=1) 49 | df_nonac["mode_kappa_TOT_ave"] = df_nonac["mode_kappa_TOT"].apply(calculate_kappa_ave) 50 | 51 | if conductivity_output == "benchmark" : 52 | df_nonac = df_nonac.drop(benchmark_drop_list, axis=1) 53 | 54 | df_nonac.reset_index().to_json(nonac_outpath) 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /data/kappas_phononDB_PBE_NAC.json.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MPA2suite/autoWTE/0c3101595daf180b59033b17c2b9ec90cd5a2ad1/data/kappas_phononDB_PBE_NAC.json.gz -------------------------------------------------------------------------------- /data/kappas_phononDB_PBE_noNAC.json.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MPA2suite/autoWTE/0c3101595daf180b59033b17c2b9ec90cd5a2ad1/data/kappas_phononDB_PBE_noNAC.json.gz -------------------------------------------------------------------------------- /data/mp_id-phonondb_id.txt: -------------------------------------------------------------------------------- 1 | RbI 225 mp-22903 2 | InP 186 mp-966800 3 | KCl 225 mp-23193 4 | SrO 225 mp-2472 5 | BN 216 mp-1639 6 | AgCl 225 mp-22922 7 | BeS 216 mp-422 8 | BaSe 225 mp-1253 9 | KI 225 mp-22898 10 | CuH 186 mp-24093 11 | BeO 216 mp-1778 12 | AlP 186 mp-8880 13 | CaSe 225 mp-1415 14 | BAs 216 mp-10044 15 | GaN 186 mp-804 16 | AgI 216 mp-22925 17 | CdS 216 mp-2469 18 | NaI 225 mp-23268 19 | LiBr 225 mp-23259 20 | ZnO 186 mp-2133 21 | NaBr 225 mp-22916 22 | InP 216 mp-20351 23 | GaAs 186 mp-8883 24 | ZnSe 186 mp-380 25 | CaO 225 mp-2605 26 | AlAs 216 mp-2172 27 | CsF 225 mp-1784 28 | InSb 186 mp-1007661 29 | BaO 225 mp-1342 30 | InAs 216 mp-20305 31 | GaAs 216 mp-2534 32 | BeTe 186 mp-1183441 33 | CaS 225 mp-1672 34 | GaSb 186 mp-1018059 35 | RbCl 225 mp-23295 36 | CuCl 186 mp-1184046 37 | LiF 225 mp-1138 38 | BaS 225 mp-1500 39 | CdTe 186 mp-12779 40 | CdO 225 mp-1132 41 | InAs 186 mp-1007652 42 | LiH 225 mp-23703 43 | ZnS 186 mp-561286 44 | CuBr 216 mp-22913 45 | GaP 216 mp-2490 46 | PbSe 225 mp-2201 47 | BN 186 mp-2653 48 | MgO 225 mp-1265 49 | AgI 186 mp-580941 50 | CdTe 216 mp-406 51 | InN 216 mp-20411 52 | AgBr 225 mp-23231 53 | GaP 186 mp-8882 54 | KBr 225 mp-23251 55 | PbTe 225 mp-19717 56 | MgTe 216 mp-13033 57 | CdSe 186 mp-1070 58 | ZnTe 186 mp-8884 59 | AlN 186 mp-661 60 | MgTe 186 mp-1039 61 | CdSe 216 mp-2691 62 | BeSe 186 no-mp-3 63 | LiI 225 mp-22899 64 | CuCl 216 mp-22914 65 | GaN 216 mp-830 66 | PbS 225 mp-21276 67 | InN 186 mp-22205 68 | BP 186 mp-1008559 69 | CaTe 225 mp-1519 70 | BeSe 216 mp-1541 71 | GaSb 216 mp-1156 72 | InSb 216 mp-20012 73 | CuI 216 mp-22895 74 | RbH 225 mp-24721 75 | NaCl 225 mp-22862 76 | BP 216 mp-1479 77 | AlSb 186 mp-1018100 78 | LiCl 225 mp-22905 79 | KF 225 mp-463 80 | AlSb 216 mp-2624 81 | BeO 186 mp-2542 82 | CuI 186 mp-569346 83 | KH 225 mp-24084 84 | AlP 216 mp-1550 85 | ZnTe 216 mp-2176 86 | CdS 186 mp-672 87 | RbF 225 mp-11718 88 | NaF 225 mp-682 89 | SiC 186 mp-7631 90 | BeS 186 no-mp-4 91 | AlAs 186 mp-8881 92 | CuBr 186 no-mp-1 93 | ZnO 216 mp-1986 94 | RbBr 225 mp-22867 95 | SiC 216 mp-8062 96 | ZnSe 216 mp-1190 97 | BAs 186 mp-984718 98 | ZnS 216 mp-10695 99 | CuH 216 no-mp-2 100 | NaH 225 mp-23870 101 | BaTe 225 mp-1000 102 | BeTe 216 mp-252 103 | AlN 216 mp-1700 -------------------------------------------------------------------------------- /data/phononDB-PBE-structures.extxyz: -------------------------------------------------------------------------------- 1 | 8 2 | Lattice="6.571464501545973 0.0 0.0 0.0 6.571464501545973 0.0 0.0 0.0 6.571464501545973" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-19717 q_mesh="_JSON [19, 19, 19]" name=PbTe symm.no=225 pbc="T T T" 3 | Pb 0.00000000 0.00000000 0.00000000 4 | Pb 0.00000000 3.28573225 3.28573225 5 | Pb 3.28573225 0.00000000 3.28573225 6 | Pb 3.28573225 3.28573225 0.00000000 7 | Te 3.28573225 3.28573225 3.28573225 8 | Te 3.28573225 0.00000000 0.00000000 9 | Te 0.00000000 3.28573225 0.00000000 10 | Te 0.00000000 0.00000000 3.28573225 11 | 8 12 | Lattice="4.78162018551907 0.0 0.0 0.0 4.78162018551907 0.0 0.0 0.0 4.781620185519071" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1132 q_mesh="_JSON [19, 19, 19]" name=CdO symm.no=225 pbc="T T T" 13 | Cd 0.00000000 0.00000000 0.00000000 14 | Cd 0.00000000 2.39081009 2.39081009 15 | Cd 2.39081009 0.00000000 2.39081009 16 | Cd 2.39081009 2.39081009 0.00000000 17 | O 2.39081009 2.39081009 2.39081009 18 | O 2.39081009 0.00000000 0.00000000 19 | O 0.00000000 2.39081009 0.00000000 20 | O 0.00000000 0.00000000 2.39081009 21 | 8 22 | Lattice="6.739129385060335 0.0 0.0 0.0 6.739129385060335 0.0 0.0 0.0 6.739129385060335" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23251 q_mesh="_JSON [19, 19, 19]" name=KBr symm.no=225 pbc="T T T" 23 | K 0.00000000 0.00000000 0.00000000 24 | K 0.00000000 3.36956469 3.36956469 25 | K 3.36956469 0.00000000 3.36956469 26 | K 3.36956469 3.36956469 0.00000000 27 | Br 3.36956469 3.36956469 3.36956469 28 | Br 3.36956469 0.00000000 0.00000000 29 | Br 0.00000000 3.36956469 0.00000000 30 | Br 0.00000000 0.00000000 3.36956469 31 | 8 32 | Lattice="4.061103001135945 0.0 0.0 0.0 4.061103001135945 0.0 0.0 0.0 4.061103001135945" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1138 q_mesh="_JSON [19, 19, 19]" name=LiF symm.no=225 pbc="T T T" 33 | Li 0.00000000 0.00000000 0.00000000 34 | Li 0.00000000 2.03055150 2.03055150 35 | Li 2.03055150 0.00000000 2.03055150 36 | Li 2.03055150 2.03055150 0.00000000 37 | F 2.03055150 2.03055150 2.03055150 38 | F 2.03055150 0.00000000 0.00000000 39 | F 0.00000000 2.03055150 0.00000000 40 | F 0.00000000 0.00000000 2.03055150 41 | 8 42 | Lattice="7.088578588216953 0.0 0.0 0.0 7.088578588216953 0.0 0.0 0.0 7.088578588216953" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1000 q_mesh="_JSON [19, 19, 19]" name=BaTe symm.no=225 pbc="T T T" 43 | Ba 0.00000000 0.00000000 0.00000000 44 | Ba 0.00000000 3.54428929 3.54428929 45 | Ba 3.54428929 0.00000000 3.54428929 46 | Ba 3.54428929 3.54428929 0.00000000 47 | Te 3.54428929 3.54428929 3.54428929 48 | Te 3.54428929 0.00000000 0.00000000 49 | Te 0.00000000 3.54428929 0.00000000 50 | Te 0.00000000 0.00000000 3.54428929 51 | 8 52 | Lattice="5.823447283892974 0.0 0.0 0.0 5.823447283892974 0.0 0.0 0.0 5.823447283892974" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23231 q_mesh="_JSON [19, 19, 19]" name=AgBr symm.no=225 pbc="T T T" 53 | Ag 0.00000000 0.00000000 0.00000000 54 | Ag 0.00000000 2.91172364 2.91172364 55 | Ag 2.91172364 0.00000000 2.91172364 56 | Ag 2.91172364 2.91172364 0.00000000 57 | Br 2.91172364 2.91172364 2.91172364 58 | Br 2.91172364 0.00000000 0.00000000 59 | Br 0.00000000 2.91172364 0.00000000 60 | Br 0.00000000 0.00000000 2.91172364 61 | 8 62 | Lattice="6.724862358097949 0.0 0.0 0.0 6.724862358097949 0.0 0.0 0.0 6.72486235809795" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23295 q_mesh="_JSON [19, 19, 19]" name=RbCl symm.no=225 pbc="T T T" 63 | Rb 0.00000000 0.00000000 0.00000000 64 | Rb 0.00000000 3.36243118 3.36243118 65 | Rb 3.36243118 0.00000000 3.36243118 66 | Rb 3.36243118 3.36243118 0.00000000 67 | Cl 3.36243118 3.36243118 3.36243118 68 | Cl 3.36243118 0.00000000 0.00000000 69 | Cl 0.00000000 3.36243118 0.00000000 70 | Cl 0.00000000 0.00000000 3.36243118 71 | 8 72 | Lattice="6.217327314038632 0.0 0.0 0.0 6.217327314038632 0.0 0.0 0.0 6.217327314038632" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2201 q_mesh="_JSON [19, 19, 19]" name=PbSe symm.no=225 pbc="T T T" 73 | Pb 0.00000000 0.00000000 0.00000000 74 | Pb 0.00000000 3.10866366 3.10866366 75 | Pb 3.10866366 0.00000000 3.10866366 76 | Pb 3.10866366 3.10866366 0.00000000 77 | Se 3.10866366 3.10866366 3.10866366 78 | Se 3.10866366 0.00000000 0.00000000 79 | Se 0.00000000 3.10866366 0.00000000 80 | Se 0.00000000 0.00000000 3.10866366 81 | 8 82 | Lattice="7.512107327324654 0.0 0.0 0.0 7.512107327324654 0.0 0.0 0.0 7.512107327324654" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22903 q_mesh="_JSON [19, 19, 19]" name=RbI symm.no=225 pbc="T T T" 83 | Rb 0.00000000 0.00000000 0.00000000 84 | Rb 0.00000000 3.75605366 3.75605366 85 | Rb 3.75605366 0.00000000 3.75605366 86 | Rb 3.75605366 3.75605366 0.00000000 87 | I 3.75605366 3.75605366 3.75605366 88 | I 3.75605366 0.00000000 0.00000000 89 | I 0.00000000 3.75605366 0.00000000 90 | I 0.00000000 0.00000000 3.75605366 91 | 8 92 | Lattice="5.718141537843525 0.0 0.0 0.0 5.718141537843525 0.0 0.0 0.0 5.718141537843525" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-24084 q_mesh="_JSON [19, 19, 19]" name=KH symm.no=225 pbc="T T T" 93 | K 0.00000000 0.00000000 0.00000000 94 | K 0.00000000 2.85907077 2.85907077 95 | K 2.85907077 0.00000000 2.85907077 96 | K 2.85907077 2.85907077 0.00000000 97 | H 2.85907077 2.85907077 2.85907077 98 | H 2.85907077 0.00000000 0.00000000 99 | H 0.00000000 2.85907077 0.00000000 100 | H 0.00000000 0.00000000 2.85907077 101 | 8 102 | Lattice="5.513151436027515 0.0 0.0 0.0 5.513151436027515 0.0 0.0 0.0 5.513151436027515" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23259 q_mesh="_JSON [19, 19, 19]" name=LiBr symm.no=225 pbc="T T T" 103 | Li 0.00000000 0.00000000 0.00000000 104 | Li 0.00000000 2.75657572 2.75657572 105 | Li 2.75657572 0.00000000 2.75657572 106 | Li 2.75657572 2.75657572 0.00000000 107 | Br 2.75657572 2.75657572 2.75657572 108 | Br 2.75657572 0.00000000 0.00000000 109 | Br 0.00000000 2.75657572 0.00000000 110 | Br 0.00000000 0.00000000 2.75657572 111 | 8 112 | Lattice="6.109153252344931 0.0 0.0 0.0 6.109153252344931 0.0 0.0 0.0 6.109153252344931" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1784 q_mesh="_JSON [19, 19, 19]" name=CsF symm.no=225 pbc="T T T" 113 | Cs 0.00000000 0.00000000 0.00000000 114 | Cs 0.00000000 3.05457663 3.05457663 115 | Cs 3.05457663 0.00000000 3.05457663 116 | Cs 3.05457663 3.05457663 0.00000000 117 | F 3.05457663 3.05457663 3.05457663 118 | F 3.05457663 0.00000000 0.00000000 119 | F 0.00000000 3.05457663 0.00000000 120 | F 0.00000000 0.00000000 3.05457663 121 | 8 122 | Lattice="5.964530263146518 0.0 0.0 0.0 5.964530263146518 0.0 0.0 0.0 5.964530263146518" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1415 q_mesh="_JSON [19, 19, 19]" name=CaSe symm.no=225 pbc="T T T" 123 | Ca 0.00000000 0.00000000 0.00000000 124 | Ca 0.00000000 2.98226513 2.98226513 125 | Ca 2.98226513 0.00000000 2.98226513 126 | Ca 2.98226513 2.98226513 0.00000000 127 | Se 2.98226513 2.98226513 2.98226513 128 | Se 2.98226513 0.00000000 0.00000000 129 | Se 0.00000000 2.98226513 0.00000000 130 | Se 0.00000000 0.00000000 2.98226513 131 | 8 132 | Lattice="4.255656884758435 0.0 0.0 0.0 4.255656884758435 0.0 0.0 0.0 4.255656884758435" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1265 q_mesh="_JSON [19, 19, 19]" name=MgO symm.no=225 pbc="T T T" 133 | Mg 0.00000000 0.00000000 0.00000000 134 | Mg 0.00000000 2.12782844 2.12782844 135 | Mg 2.12782844 0.00000000 2.12782844 136 | Mg 2.12782844 2.12782844 0.00000000 137 | O 2.12782844 2.12782844 2.12782844 138 | O 2.12782844 0.00000000 0.00000000 139 | O 0.00000000 2.12782844 0.00000000 140 | O 0.00000000 0.00000000 2.12782844 141 | 8 142 | Lattice="5.149270467335747 0.0 0.0 0.0 5.149270467335747 0.0 0.0 0.0 5.149270467335747" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22905 q_mesh="_JSON [19, 19, 19]" name=LiCl symm.no=225 pbc="T T T" 143 | Li 0.00000000 0.00000000 0.00000000 144 | Li 0.00000000 2.57463523 2.57463523 145 | Li 2.57463523 0.00000000 2.57463523 146 | Li 2.57463523 2.57463523 0.00000000 147 | Cl 2.57463523 2.57463523 2.57463523 148 | Cl 2.57463523 0.00000000 0.00000000 149 | Cl 0.00000000 2.57463523 0.00000000 150 | Cl 0.00000000 0.00000000 2.57463523 151 | 8 152 | Lattice="6.022659648206189 0.0 0.0 0.0 6.022659648206189 0.0 0.0 0.0 6.022659648206189" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22899 q_mesh="_JSON [19, 19, 19]" name=LiI symm.no=225 pbc="T T T" 153 | Li 0.00000000 0.00000000 0.00000000 154 | Li 0.00000000 3.01132982 3.01132982 155 | Li 3.01132982 0.00000000 3.01132982 156 | Li 3.01132982 3.01132982 0.00000000 157 | I 3.01132982 3.01132982 3.01132982 158 | I 3.01132982 0.00000000 0.00000000 159 | I 0.00000000 3.01132982 0.00000000 160 | I 0.00000000 0.00000000 3.01132982 161 | 8 162 | Lattice="6.415845880135988 0.0 0.0 0.0 6.415845880135988 0.0 0.0 0.0 6.415845880135988" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23193 q_mesh="_JSON [19, 19, 19]" name=KCl symm.no=225 pbc="T T T" 163 | K 0.00000000 0.00000000 0.00000000 164 | K 0.00000000 3.20792294 3.20792294 165 | K 3.20792294 0.00000000 3.20792294 166 | K 3.20792294 3.20792294 0.00000000 167 | Cl 3.20792294 3.20792294 3.20792294 168 | Cl 3.20792294 0.00000000 0.00000000 169 | Cl 0.00000000 3.20792294 0.00000000 170 | Cl 0.00000000 0.00000000 3.20792294 171 | 8 172 | Lattice="4.619014662777144 0.0 0.0 0.0 4.619014662777144 0.0 0.0 0.0 4.619014662777144" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-682 q_mesh="_JSON [19, 19, 19]" name=NaF symm.no=225 pbc="T T T" 173 | Na 0.00000000 0.00000000 0.00000000 174 | Na 0.00000000 2.30950733 2.30950733 175 | Na 2.30950733 0.00000000 2.30950733 176 | Na 2.30950733 2.30950733 0.00000000 177 | F 2.30950733 2.30950733 2.30950733 178 | F 2.30950733 0.00000000 0.00000000 179 | F 0.00000000 2.30950733 0.00000000 180 | F 0.00000000 0.00000000 2.30950733 181 | 8 182 | Lattice="7.044904190159548 0.0 0.0 0.0 7.044904190159548 0.0 0.0 0.0 7.044904190159548" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22867 q_mesh="_JSON [19, 19, 19]" name=RbBr symm.no=225 pbc="T T T" 183 | Rb 0.00000000 0.00000000 0.00000000 184 | Rb 0.00000000 3.52245210 3.52245210 185 | Rb 3.52245210 0.00000000 3.52245210 186 | Rb 3.52245210 3.52245210 0.00000000 187 | Br 3.52245210 3.52245210 3.52245210 188 | Br 3.52245210 0.00000000 0.00000000 189 | Br 0.00000000 3.52245210 0.00000000 190 | Br 0.00000000 0.00000000 3.52245210 191 | 8 192 | Lattice="5.203904767083467 0.0 0.0 0.0 5.203904767083467 0.0 0.0 0.0 5.203904767083467" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2472 q_mesh="_JSON [19, 19, 19]" name=SrO symm.no=225 pbc="T T T" 193 | Sr 0.00000000 0.00000000 0.00000000 194 | Sr 0.00000000 2.60195238 2.60195238 195 | Sr 2.60195238 0.00000000 2.60195238 196 | Sr 2.60195238 2.60195238 0.00000000 197 | O 2.60195238 2.60195238 2.60195238 198 | O 2.60195238 0.00000000 0.00000000 199 | O 0.00000000 2.60195238 0.00000000 200 | O 0.00000000 0.00000000 2.60195238 201 | 8 202 | Lattice="6.68489036 0.0 0.0 0.0 6.68489036 0.0 0.0 0.0 6.68489036" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1253 q_mesh="_JSON [19, 19, 19]" name=BaSe symm.no=225 pbc="T T T" 203 | Ba 0.00000000 0.00000000 0.00000000 204 | Ba 0.00000000 3.34244518 3.34244518 205 | Ba 3.34244518 0.00000000 3.34244518 206 | Ba 3.34244518 3.34244518 0.00000000 207 | Se 3.34244518 3.34244518 3.34244518 208 | Se 3.34244518 0.00000000 0.00000000 209 | Se 0.00000000 3.34244518 0.00000000 210 | Se 0.00000000 0.00000000 3.34244518 211 | 8 212 | Lattice="5.461489900791526 0.0 0.0 0.0 5.461489900791526 0.0 0.0 0.0 5.461489900791526" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-463 q_mesh="_JSON [19, 19, 19]" name=KF symm.no=225 pbc="T T T" 213 | K 0.00000000 0.00000000 0.00000000 214 | K 0.00000000 2.73074495 2.73074495 215 | K 2.73074495 0.00000000 2.73074495 216 | K 2.73074495 2.73074495 0.00000000 217 | F 2.73074495 2.73074495 2.73074495 218 | F 2.73074495 0.00000000 0.00000000 219 | F 0.00000000 2.73074495 0.00000000 220 | F 0.00000000 0.00000000 2.73074495 221 | 8 222 | Lattice="4.83007563 0.0 0.0 0.0 4.83007563 0.0 0.0 0.0 4.83007563" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2605 q_mesh="_JSON [19, 19, 19]" name=CaO symm.no=225 pbc="T T T" 223 | Ca 0.00000000 0.00000000 0.00000000 224 | Ca 0.00000000 2.41503781 2.41503781 225 | Ca 2.41503781 0.00000000 2.41503781 226 | Ca 2.41503781 2.41503781 0.00000000 227 | O 2.41503781 2.41503781 2.41503781 228 | O 2.41503781 0.00000000 0.00000000 229 | O 0.00000000 2.41503781 0.00000000 230 | O 0.00000000 0.00000000 2.41503781 231 | 8 232 | Lattice="7.211657339341626 0.0 0.0 0.0 7.211657339341626 0.0 0.0 0.0 7.211657339341626" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22898 q_mesh="_JSON [19, 19, 19]" name=KI symm.no=225 pbc="T T T" 233 | K 0.00000000 0.00000000 0.00000000 234 | K 0.00000000 3.60582867 3.60582867 235 | K 3.60582867 0.00000000 3.60582867 236 | K 3.60582867 3.60582867 0.00000000 237 | I 3.60582867 3.60582867 3.60582867 238 | I 3.60582867 0.00000000 0.00000000 239 | I 0.00000000 3.60582867 0.00000000 240 | I 0.00000000 0.00000000 3.60582867 241 | 8 242 | Lattice="5.59058281 0.0 0.0 0.0 5.59058281 0.0 0.0 0.0 5.59058281" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22922 q_mesh="_JSON [19, 19, 19]" name=AgCl symm.no=225 pbc="T T T" 243 | Ag 0.00000000 0.00000000 0.00000000 244 | Ag 0.00000000 2.79529140 2.79529140 245 | Ag 2.79529140 0.00000000 2.79529140 246 | Ag 2.79529140 2.79529140 0.00000000 247 | Cl 2.79529140 2.79529140 2.79529140 248 | Cl 2.79529140 0.00000000 0.00000000 249 | Cl 0.00000000 2.79529140 0.00000000 250 | Cl 0.00000000 0.00000000 2.79529140 251 | 8 252 | Lattice="6.001828354595023 0.0 0.0 0.0 6.001828354595023 0.0 0.0 0.0 6.001828354595023" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22916 q_mesh="_JSON [19, 19, 19]" name=NaBr symm.no=225 pbc="T T T" 253 | Na 0.00000000 0.00000000 0.00000000 254 | Na 0.00000000 3.00091418 3.00091418 255 | Na 3.00091418 0.00000000 3.00091418 256 | Na 3.00091418 3.00091418 0.00000000 257 | Br 3.00091418 3.00091418 3.00091418 258 | Br 3.00091418 0.00000000 0.00000000 259 | Br 0.00000000 3.00091418 0.00000000 260 | Br 0.00000000 0.00000000 3.00091418 261 | 8 262 | Lattice="6.004160244281624 0.0 0.0 0.0 6.004160244281624 0.0 0.0 0.0 6.004160244281624" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-21276 q_mesh="_JSON [19, 19, 19]" name=PbS symm.no=225 pbc="T T T" 263 | Pb 0.00000000 0.00000000 0.00000000 264 | Pb 0.00000000 3.00208012 3.00208012 265 | Pb 3.00208012 0.00000000 3.00208012 266 | Pb 3.00208012 3.00208012 0.00000000 267 | S 3.00208012 3.00208012 3.00208012 268 | S 3.00208012 0.00000000 0.00000000 269 | S 0.00000000 3.00208012 0.00000000 270 | S 0.00000000 0.00000000 3.00208012 271 | 8 272 | Lattice="4.005171197842863 0.0 0.0 0.0 4.005171197842863 0.0 0.0 0.0 4.005171197842863" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23703 q_mesh="_JSON [19, 19, 19]" name=LiH symm.no=225 pbc="T T T" 273 | Li 0.00000000 0.00000000 0.00000000 274 | Li 0.00000000 2.00258560 2.00258560 275 | Li 2.00258560 0.00000000 2.00258560 276 | Li 2.00258560 2.00258560 0.00000000 277 | H 2.00258560 2.00258560 2.00258560 278 | H 2.00258560 0.00000000 0.00000000 279 | H 0.00000000 2.00258560 0.00000000 280 | H 0.00000000 0.00000000 2.00258560 281 | 8 282 | Lattice="4.80340753959907 0.0 0.0 0.0 4.80340753959907 0.0 0.0 0.0 4.80340753959907" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23870 q_mesh="_JSON [19, 19, 19]" name=NaH symm.no=225 pbc="T T T" 283 | Na 0.00000000 0.00000000 0.00000000 284 | Na 0.00000000 2.40170377 2.40170377 285 | Na 2.40170377 0.00000000 2.40170377 286 | Na 2.40170377 2.40170377 0.00000000 287 | H 2.40170377 2.40170377 2.40170377 288 | H 2.40170377 0.00000000 0.00000000 289 | H 0.00000000 2.40170377 0.00000000 290 | H 0.00000000 0.00000000 2.40170377 291 | 8 292 | Lattice="6.455618874688759 0.0 0.0 0.0 6.455618874688759 0.0 0.0 0.0 6.455618874688759" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1500 q_mesh="_JSON [19, 19, 19]" name=BaS symm.no=225 pbc="T T T" 293 | Ba 0.00000000 0.00000000 0.00000000 294 | Ba 0.00000000 3.22780944 3.22780944 295 | Ba 3.22780944 0.00000000 3.22780944 296 | Ba 3.22780944 3.22780944 0.00000000 297 | S 3.22780944 3.22780944 3.22780944 298 | S 3.22780944 0.00000000 0.00000000 299 | S 0.00000000 3.22780944 0.00000000 300 | S 0.00000000 0.00000000 3.22780944 301 | 8 302 | Lattice="6.398823961850403 0.0 0.0 0.0 6.398823961850403 0.0 0.0 0.0 6.398823961850403" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1519 q_mesh="_JSON [19, 19, 19]" name=CaTe symm.no=225 pbc="T T T" 303 | Ca 0.00000000 0.00000000 0.00000000 304 | Ca 0.00000000 3.19941198 3.19941198 305 | Ca 3.19941198 0.00000000 3.19941198 306 | Ca 3.19941198 3.19941198 0.00000000 307 | Te 3.19941198 3.19941198 3.19941198 308 | Te 3.19941198 0.00000000 0.00000000 309 | Te 0.00000000 3.19941198 0.00000000 310 | Te 0.00000000 0.00000000 3.19941198 311 | 8 312 | Lattice="5.613167555629632 0.0 0.0 0.0 5.613167555629632 0.0 0.0 0.0 5.613167555629632" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1342 q_mesh="_JSON [19, 19, 19]" name=BaO symm.no=225 pbc="T T T" 313 | Ba 0.00000000 0.00000000 0.00000000 314 | Ba 0.00000000 2.80658378 2.80658378 315 | Ba 2.80658378 0.00000000 2.80658378 316 | Ba 2.80658378 2.80658378 0.00000000 317 | O 2.80658378 2.80658378 2.80658378 318 | O 2.80658378 0.00000000 0.00000000 319 | O 0.00000000 2.80658378 0.00000000 320 | O 0.00000000 0.00000000 2.80658378 321 | 8 322 | Lattice="5.650903269421712 0.0 0.0 0.0 5.650903269421712 0.0 0.0 0.0 5.650903269421712" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22862 q_mesh="_JSON [19, 19, 19]" name=NaCl symm.no=225 pbc="T T T" 323 | Na 0.00000000 0.00000000 0.00000000 324 | Na 0.00000000 2.82545163 2.82545163 325 | Na 2.82545163 0.00000000 2.82545163 326 | Na 2.82545163 2.82545163 0.00000000 327 | Cl 2.82545163 2.82545163 2.82545163 328 | Cl 2.82545163 0.00000000 0.00000000 329 | Cl 0.00000000 2.82545163 0.00000000 330 | Cl 0.00000000 0.00000000 2.82545163 331 | 8 332 | Lattice="6.503871536311434 0.0 0.0 0.0 6.503871536311434 0.0 0.0 0.0 6.503871536311434" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-23268 q_mesh="_JSON [19, 19, 19]" name=NaI symm.no=225 pbc="T T T" 333 | Na 0.00000000 0.00000000 0.00000000 334 | Na 0.00000000 3.25193577 3.25193577 335 | Na 3.25193577 0.00000000 3.25193577 336 | Na 3.25193577 3.25193577 0.00000000 337 | I 3.25193577 3.25193577 3.25193577 338 | I 3.25193577 0.00000000 0.00000000 339 | I 0.00000000 3.25193577 0.00000000 340 | I 0.00000000 0.00000000 3.25193577 341 | 8 342 | Lattice="6.07086868147837 0.0 0.0 0.0 6.07086868147837 0.0 0.0 0.0 6.07086868147837" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-24721 q_mesh="_JSON [19, 19, 19]" name=RbH symm.no=225 pbc="T T T" 343 | Rb 0.00000000 0.00000000 0.00000000 344 | Rb 0.00000000 3.03543434 3.03543434 345 | Rb 3.03543434 0.00000000 3.03543434 346 | Rb 3.03543434 3.03543434 0.00000000 347 | H 3.03543434 3.03543434 3.03543434 348 | H 3.03543434 0.00000000 0.00000000 349 | H 0.00000000 3.03543434 0.00000000 350 | H 0.00000000 0.00000000 3.03543434 351 | 8 352 | Lattice="5.71646063 0.0 0.0 0.0 5.71646063 0.0 0.0 0.0 5.71646063" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1672 q_mesh="_JSON [19, 19, 19]" name=CaS symm.no=225 pbc="T T T" 353 | Ca 0.00000000 0.00000000 0.00000000 354 | Ca 0.00000000 2.85823032 2.85823032 355 | Ca 2.85823032 0.00000000 2.85823032 356 | Ca 2.85823032 2.85823032 0.00000000 357 | S 2.85823032 2.85823032 2.85823032 358 | S 2.85823032 0.00000000 0.00000000 359 | S 0.00000000 2.85823032 0.00000000 360 | S 0.00000000 0.00000000 2.85823032 361 | 8 362 | Lattice="5.772475932769535 0.0 0.0 0.0 5.772475932769535 0.0 0.0 0.0 5.772475932769535" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-11718 q_mesh="_JSON [19, 19, 19]" name=RbF symm.no=225 pbc="T T T" 363 | Rb 0.00000000 0.00000000 0.00000000 364 | Rb 0.00000000 2.88623797 2.88623797 365 | Rb 2.88623797 0.00000000 2.88623797 366 | Rb 2.88623797 2.88623797 0.00000000 367 | F 2.88623797 2.88623797 2.88623797 368 | F 2.88623797 0.00000000 0.00000000 369 | F 0.00000000 2.88623797 0.00000000 370 | F 0.00000000 0.00000000 2.88623797 371 | 4 372 | Lattice="3.092081653015247 0.0 0.0 -1.546040826507624 2.677821262086983 0.0 0.0 0.0 5.073003711962245" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-7631 q_mesh="_JSON [19, 19, 15]" name=SiC symm.no=186 pbc="T T T" 373 | Si 0.00000000 1.78521417 0.00639852 374 | Si 1.54604083 0.89260709 2.54290038 375 | C 0.00000000 1.78521417 1.91344415 376 | C 1.54604083 0.89260709 4.44994600 377 | 4 378 | Lattice="3.44010607599205 0.0 0.0 -1.720053037996025 2.979219253522315 0.0 0.0 0.0 5.666256870737439" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=no-mp-4 q_mesh="_JSON [19, 19, 15]" name=BeS symm.no=186 pbc="T T T" 379 | Be 0.00000000 1.98614617 0.01207481 380 | Be 1.72005304 0.99307308 2.84520325 381 | S 0.00000000 1.98614617 2.13228035 382 | S 1.72005304 0.99307308 4.96540879 383 | 4 384 | Lattice="4.392273960777131 0.0 0.0 -2.196136980388566 3.803820830413891 0.0 0.0 0.0 7.165569312700994" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1070 q_mesh="_JSON [19, 19, 15]" name=CdSe symm.no=186 pbc="T T T" 385 | Cd 0.00000000 2.53588055 0.00940028 386 | Cd 2.19613698 1.26794028 3.59218494 387 | Se 0.00000000 2.53588055 2.70235916 388 | Se 2.19613698 1.26794028 6.28514382 389 | 4 390 | Lattice="2.713169172876523 0.0 0.0 -1.356584586438262 2.349673428475883 0.0 0.0 0.0 4.406572251495684" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-2542 q_mesh="_JSON [19, 19, 15]" name=BeO symm.no=186 pbc="T T T" 391 | Be 0.00000000 1.56644895 0.00142428 392 | Be 1.35658459 0.78322448 2.20471041 393 | O 0.00000000 1.56644895 1.66621207 394 | O 1.35658459 0.78322448 3.86949820 395 | 4 396 | Lattice="3.583499379199655 0.0 0.0 -1.791749689599827 3.103401496832666 0.0 0.0 0.0 5.787170958755009" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-22205 q_mesh="_JSON [19, 19, 15]" name=InN symm.no=186 pbc="T T T" 397 | In 0.00000000 2.06893433 5.78546208 398 | In 1.79174969 1.03446717 2.89187660 399 | N 0.00000000 2.06893433 2.19182313 400 | N 1.79174969 1.03446717 5.08540861 401 | 4 402 | Lattice="3.882746856678082 0.0 0.0 -1.941373428339041 3.362557414347395 0.0 0.0 0.0 6.39341662044369" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-8882 q_mesh="_JSON [19, 19, 15]" name=GaP symm.no=186 pbc="T T T" 403 | Ga 0.00000000 2.24170494 0.01369582 404 | Ga 1.94137343 1.12085247 3.21040413 405 | P 0.00000000 2.24170494 2.40584785 406 | P 1.94137343 1.12085247 5.60255616 407 | 4 408 | Lattice="4.680949534367372 0.0 0.0 -2.340474767183686 4.053821210595082 0.0 0.0 0.0 7.671187606713333" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-12779 q_mesh="_JSON [19, 19, 15]" name=CdTe symm.no=186 pbc="T T T" 409 | Cd 0.00000000 2.70254747 0.01473060 410 | Cd 2.34047477 1.35127374 3.85032440 411 | Te 0.00000000 2.70254747 2.88837654 412 | Te 2.34047477 1.35127374 6.72397034 413 | 4 414 | Lattice="3.383809203210204 0.0 0.0 -1.691904601605102 2.930464731539616 0.0 0.0 0.0 5.596602137291701" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-984718 q_mesh="_JSON [19, 19, 15]" name=BAs symm.no=186 pbc="T T T" 415 | B 0.00000000 1.95364315 0.01118878 416 | B 1.69190460 0.97682158 2.80948985 417 | As 0.00000000 1.95364315 2.10680604 418 | As 1.69190460 0.97682158 4.90510711 419 | 4 420 | Lattice="4.204401569938997 0.0 0.0 -2.102200784969499 3.641118567278345 0.0 0.0 0.0 6.840532450654504" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-672 q_mesh="_JSON [19, 19, 15]" name=CdS symm.no=186 pbc="T T T" 421 | Cd 0.00000000 2.42741238 0.00638467 422 | Cd 2.10220078 1.21370619 3.42665090 423 | S 0.00000000 2.42741238 2.58236685 424 | S 2.10220078 1.21370619 6.00263307 425 | 4 426 | Lattice="2.869211200982754 0.0 0.0 -1.434605600491377 2.484809788873924 0.0 0.0 0.0 4.559956404129894" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-24093 q_mesh="_JSON [19, 19, 15]" name=CuH symm.no=186 pbc="T T T" 427 | Cu 0.00000000 1.65653986 4.55119014 428 | Cu 1.43460560 0.82826993 2.27121194 429 | H 0.00000000 1.65653986 1.73444977 430 | H 1.43460560 0.82826993 4.01442798 431 | 4 432 | Lattice="4.612089909167575 0.0 0.0 -2.306044954583788 3.994187025876983 0.0 0.0 0.0 7.504053267312241" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1039 q_mesh="_JSON [19, 19, 15]" name=MgTe symm.no=186 pbc="T T T" 433 | Mg 0.00000000 2.66279135 0.00741639 434 | Mg 2.30604495 1.33139568 3.75944302 435 | Te 0.00000000 2.66279135 2.83243993 436 | Te 2.30604495 1.33139568 6.58446657 437 | 4 438 | Lattice="3.995191241416954 0.0 0.0 -1.997595620708477 3.45993710804417 0.0 0.0 0.0 6.589653709217155" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1183441 q_mesh="_JSON [19, 19, 15]" name=BeTe symm.no=186 pbc="T T T" 439 | Be 0.00000000 2.30662474 0.01532577 440 | Be 1.99759562 1.15331237 3.31015263 441 | Te 0.00000000 2.30662474 2.47848245 442 | Te 1.99759562 1.15331237 5.77330930 443 | 4 444 | Lattice="3.654577121071261 0.0 0.0 -1.827288560535631 3.16495662693711 0.0 0.0 0.0 6.022733743629173" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=no-mp-3 q_mesh="_JSON [19, 19, 15]" name=BeSe symm.no=186 pbc="T T T" 445 | Be 0.00000000 2.10997108 0.01332889 446 | Be 1.82728856 1.05498554 3.02469576 447 | Se 0.00000000 2.10997108 2.26593245 448 | Se 1.82728856 1.05498554 5.27729932 449 | 4 450 | Lattice="4.683111148211356 0.0 0.0 -2.341555574105678 4.055693223097145 0.0 0.0 0.0 7.688983771321617" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1007661 q_mesh="_JSON [19, 19, 15]" name=InSb symm.no=186 pbc="T T T" 451 | In 0.00000000 2.70379548 0.01417358 452 | In 2.34155557 1.35189774 3.85866546 453 | Sb 0.00000000 2.70379548 2.89566839 454 | Sb 2.34155557 1.35189774 6.74016028 455 | 4 456 | Lattice="4.384657880836167 0.0 0.0 -2.192328940418084 3.797225111707762 0.0 0.0 0.0 7.213847707923026" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1018059 q_mesh="_JSON [19, 19, 15]" name=GaSb symm.no=186 pbc="T T T" 457 | Ga 0.00000000 2.53148341 0.01413023 458 | Ga 2.19232894 1.26574170 3.62105409 459 | Sb 0.00000000 2.53148341 2.71589983 460 | Sb 2.19232894 1.26574170 6.32282368 461 | 4 462 | Lattice="4.396342814951445 0.0 0.0 -2.198171407475722 3.80734456149314 0.0 0.0 0.0 7.231535459477172" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1018100 q_mesh="_JSON [19, 19, 15]" name=AlSb symm.no=186 pbc="T T T" 463 | Al 0.00000000 2.53822971 0.01505640 464 | Al 2.19817141 1.26911485 3.63082413 465 | Sb 0.00000000 2.53822971 2.72166746 466 | Sb 2.19817141 1.26911485 6.33743519 467 | 4 468 | Lattice="4.670091569238298 0.0 0.0 -2.335045784619149 4.044417936959899 0.0 0.0 0.0 7.639086716683686" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-580941 q_mesh="_JSON [19, 19, 15]" name=AgI symm.no=186 pbc="T T T" 469 | Ag 0.00000000 2.69627862 0.01423801 470 | Ag 2.33504578 1.34813931 3.83378137 471 | I 0.00000000 2.69627862 2.87672077 472 | I 2.33504578 1.34813931 6.69626413 473 | 4 474 | Lattice="3.287168336080903 0.0 0.0 -1.643584168040451 2.846771285561885 0.0 0.0 0.0 5.304577462453292" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-2133 q_mesh="_JSON [19, 19, 15]" name=ZnO symm.no=186 pbc="T T T" 475 | Zn 0.00000000 1.89784752 5.30288760 476 | Zn 1.64358417 0.94892376 2.65059887 477 | O 0.00000000 1.89784752 2.00916999 478 | O 1.64358417 0.94892376 4.66145872 479 | 4 480 | Lattice="3.199744349504337 0.0 0.0 -1.599872174752169 2.77105989228647 0.0 0.0 0.0 5.301421807553775" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1008559 q_mesh="_JSON [19, 19, 15]" name=BP symm.no=186 pbc="T T T" 481 | B 0.00000000 1.84737326 0.01070486 482 | B 1.59987217 0.92368663 2.66141576 483 | P 0.00000000 1.84737326 1.99558104 484 | P 1.59987217 0.92368663 4.64629194 485 | 4 486 | Lattice="3.887447588303763 0.0 0.0 -1.943723794151881 3.366628367351609 0.0 0.0 0.0 6.37751304738981" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-8880 q_mesh="_JSON [19, 19, 15]" name=AlP symm.no=186 pbc="T T T" 487 | Al 0.00000000 2.24441891 0.01098368 488 | Al 1.94372379 1.12220946 3.19974021 489 | P 0.00000000 2.24441891 2.40254139 490 | P 1.94372379 1.12220946 5.59129792 491 | 4 492 | Lattice="4.039232204642137 0.0 0.0 -2.019616102321069 3.498077701004315 0.0 0.0 0.0 6.647820780283729" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=no-mp-1 q_mesh="_JSON [19, 19, 15]" name=CuBr symm.no=186 pbc="T T T" 493 | Cu 0.00000000 2.33205180 0.02093618 494 | Cu 2.01961610 1.16602590 3.34484657 495 | Br 0.00000000 2.33205180 2.49488497 496 | Br 2.01961610 1.16602590 5.81879536 497 | 4 498 | Lattice="4.054044006321985 0.0 0.0 -2.027022003160992 3.51090509753488 0.0 0.0 0.0 6.653189994164027" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-380 q_mesh="_JSON [19, 19, 15]" name=ZnSe symm.no=186 pbc="T T T" 499 | Zn 0.00000000 2.34060340 0.01365261 500 | Zn 2.02702200 1.17030170 3.34024761 501 | Se 0.00000000 2.34060340 2.50420047 502 | Se 2.02702200 1.17030170 5.83079547 503 | 4 504 | Lattice="4.289279920280546 0.0 0.0 -2.144639960140273 3.714625374905443 0.0 0.0 0.0 7.057554773529792" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-569346 q_mesh="_JSON [19, 19, 15]" name=CuI symm.no=186 pbc="T T T" 505 | Cu 0.00000000 2.47641692 0.01994255 506 | Cu 2.14463996 1.23820846 3.54871994 507 | I 0.00000000 2.47641692 2.65093955 508 | I 2.14463996 1.23820846 6.17971693 509 | 4 510 | Lattice="2.555175359905685 0.0 0.0 -1.277587679952843 2.21284677280237 0.0 0.0 0.0 4.22477936855474" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-2653 q_mesh="_JSON [19, 19, 15]" name=BN symm.no=186 pbc="T T T" 511 | B 0.00000000 1.47523118 4.21344790 512 | B 1.27758768 0.73761559 2.10105821 513 | N 0.00000000 1.47523118 2.63069468 514 | N 1.27758768 0.73761559 0.51830500 515 | 4 516 | Lattice="4.36416165 0.0 0.0 -2.18208082 3.77947486 0.0 0.0 0.0 7.17593435" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-8884 q_mesh="_JSON [19, 19, 15]" name=ZnTe symm.no=186 pbc="T T T" 517 | Zn -0.00000002 2.51964992 0.01640734 518 | Zn 2.18208085 1.25982494 3.60437452 519 | Te -0.00000002 2.51964992 2.69927471 520 | Te 2.18208085 1.25982494 6.28724188 521 | 4 522 | Lattice="3.819392875037852 0.0 0.0 -1.909696437518926 3.307691256816063 0.0 0.0 0.0 6.324732810939524" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1184046 q_mesh="_JSON [19, 19, 15]" name=CuCl symm.no=186 pbc="T T T" 523 | Cu 0.00000000 2.20512750 0.03049515 524 | Cu 1.90969644 1.10256375 3.19286155 525 | Cl 0.00000000 2.20512750 2.36305562 526 | Cl 1.90969644 1.10256375 5.52542202 527 | 4 528 | Lattice="4.207382873834101 0.0 0.0 -2.103691436917051 3.643700452187907 0.0 0.0 0.0 6.89937868832384" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-966800 q_mesh="_JSON [19, 19, 15]" name=InP symm.no=186 pbc="T T T" 529 | In 0.00000000 2.42913363 0.01233035 530 | In 2.10369144 1.21456682 3.46201969 531 | P 0.00000000 2.42913363 2.59869112 532 | P 2.10369144 1.21456682 6.04838046 533 | 4 534 | Lattice="3.848647213787554 0.0 0.0 -1.924323606893777 3.33302625734422 0.0 0.0 0.0 6.309693474882025" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-561286 q_mesh="_JSON [19, 19, 15]" name=ZnS symm.no=186 pbc="T T T" 535 | Zn 0.00000000 2.22201750 0.01236801 536 | Zn 1.92432361 1.11100875 3.16721475 537 | S 0.00000000 2.22201750 2.37549123 538 | S 1.92432361 1.11100875 5.53033796 539 | 4 540 | Lattice="4.369382518204307 0.0 0.0 -2.184691259102153 3.78399625961655 0.0 0.0 0.0 7.165003476846829" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-1007652 q_mesh="_JSON [19, 19, 15]" name=InAs symm.no=186 pbc="T T T" 541 | In 0.00000000 2.52266417 0.01223967 542 | In 2.18469126 1.26133209 3.59474141 543 | As 0.00000000 2.52266417 2.69930564 544 | As 2.18469126 1.26133209 6.28180737 545 | 4 546 | Lattice="3.218492689884597 0.0 0.0 -1.609246344942299 2.787296431334572 0.0 0.0 0.0 5.243025907611203" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-804 q_mesh="_JSON [19, 19, 15]" name=GaN symm.no=186 pbc="T T T" 547 | Ga 0.00000000 1.85819762 5.23450887 548 | Ga 1.60924634 0.92909881 2.61299592 549 | N 0.00000000 1.85819762 3.25919310 550 | N 1.60924634 0.92909881 0.63768014 551 | 4 552 | Lattice="3.128495535931362 0.0 0.0 -1.564247767965681 2.709356609742772 0.0 0.0 0.0 5.015356915531168" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-661 q_mesh="_JSON [19, 19, 15]" name=AlN symm.no=186 pbc="T T T" 553 | Al 0.00000000 1.80623774 0.00390628 554 | Al 1.56424777 0.90311887 2.51158474 555 | N 0.00000000 1.80623774 3.10561501 556 | N 1.56424777 0.90311887 0.59793655 557 | 4 558 | Lattice="4.041975382103259 0.0 0.0 -2.02098769105163 3.500453362372735 0.0 0.0 0.0 6.63791696206733" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-8881 q_mesh="_JSON [19, 19, 15]" name=AlAs symm.no=186 pbc="T T T" 559 | Al 0.00000000 2.33363557 0.01234423 560 | Al 2.02098769 1.16681779 3.33130271 561 | As 0.00000000 2.33363557 2.49972889 562 | As 2.02098769 1.16681779 5.81868737 563 | 4 564 | Lattice="4.054074537129032 0.0 0.0 -2.027037268564516 3.51093153798938 0.0 0.0 0.0 6.672871430581501" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[3, 0, 0], [0, 3, 0], [0, 0, 2]]" fc2_supercell="_JSON [[5, 0, 0], [0, 5, 0], [0, 0, 3]]" mp_id=mp-8883 q_mesh="_JSON [19, 19, 15]" name=GaAs symm.no=186 pbc="T T T" 565 | Ga 0.00000000 2.34062103 0.01354321 566 | Ga 2.02703727 1.17031051 3.34997892 567 | As 0.00000000 2.34062103 2.51175818 568 | As 2.02703727 1.17031051 5.84819389 569 | 8 570 | Lattice="4.37949826250667 0.0 0.0 0.0 4.37949826250667 0.0 0.0 0.0 4.37949826250667" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-8062 q_mesh="_JSON [19, 19, 19]" name=SiC symm.no=216 pbc="T T T" 571 | Si 0.00000000 0.00000000 0.00000000 572 | Si 0.00000000 2.18974913 2.18974913 573 | Si 2.18974913 0.00000000 2.18974913 574 | Si 2.18974913 2.18974913 0.00000000 575 | C 1.09487457 3.28462370 1.09487457 576 | C 1.09487457 1.09487457 3.28462370 577 | C 3.28462370 3.28462370 3.28462370 578 | C 3.28462370 1.09487457 1.09487457 579 | 8 580 | Lattice="4.876111846143554 0.0 0.0 0.0 4.876111846143554 0.0 0.0 0.0 4.876111846143554" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-422 q_mesh="_JSON [19, 19, 19]" name=BeS symm.no=216 pbc="T T T" 581 | Be 0.00000000 0.00000000 0.00000000 582 | Be 0.00000000 2.43805592 2.43805592 583 | Be 2.43805592 0.00000000 2.43805592 584 | Be 2.43805592 2.43805592 0.00000000 585 | S 1.21902796 3.65708388 1.21902796 586 | S 1.21902796 1.21902796 3.65708388 587 | S 3.65708388 3.65708388 3.65708388 588 | S 3.65708388 1.21902796 1.21902796 589 | 8 590 | Lattice="6.20753548 0.0 0.0 0.0 6.20753548 0.0 0.0 0.0 6.20753548" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2691 q_mesh="_JSON [19, 19, 19]" name=CdSe symm.no=216 pbc="T T T" 591 | Cd 0.00000000 0.00000000 0.00000000 592 | Cd 0.00000000 3.10376774 3.10376774 593 | Cd 3.10376774 0.00000000 3.10376774 594 | Cd 3.10376774 3.10376774 0.00000000 595 | Se 1.55188387 4.65565161 1.55188387 596 | Se 1.55188387 1.55188387 4.65565161 597 | Se 4.65565161 4.65565161 4.65565161 598 | Se 4.65565161 1.55188387 1.55188387 599 | 8 600 | Lattice="3.828027467328828 0.0 0.0 0.0 3.828027467328828 0.0 0.0 0.0 3.828027467328828" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1778 q_mesh="_JSON [19, 19, 19]" name=BeO symm.no=216 pbc="T T T" 601 | Be 0.00000000 0.00000000 0.00000000 602 | Be 0.00000000 1.91401373 1.91401373 603 | Be 1.91401373 0.00000000 1.91401373 604 | Be 1.91401373 1.91401373 0.00000000 605 | O 0.95700687 2.87102060 0.95700687 606 | O 0.95700687 0.95700687 2.87102060 607 | O 2.87102060 2.87102060 2.87102060 608 | O 2.87102060 0.95700687 0.95700687 609 | 8 610 | Lattice="5.051420968141833 0.0 0.0 0.0 5.051420968141833 0.0 0.0 0.0 5.051420968141833" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-20411 q_mesh="_JSON [19, 19, 19]" name=InN symm.no=216 pbc="T T T" 611 | In 0.00000000 0.00000000 0.00000000 612 | In 0.00000000 2.52571048 2.52571048 613 | In 2.52571048 0.00000000 2.52571048 614 | In 2.52571048 2.52571048 0.00000000 615 | N 1.26285524 3.78856573 1.26285524 616 | N 1.26285524 1.26285524 3.78856573 617 | N 3.78856573 3.78856573 3.78856573 618 | N 3.78856573 1.26285524 1.26285524 619 | 8 620 | Lattice="5.505738564319521 0.0 0.0 0.0 5.505738564319521 0.0 0.0 0.0 5.505738564319521" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2490 q_mesh="_JSON [19, 19, 19]" name=GaP symm.no=216 pbc="T T T" 621 | Ga 0.00000000 0.00000000 0.00000000 622 | Ga 0.00000000 2.75286928 2.75286928 623 | Ga 2.75286928 0.00000000 2.75286928 624 | Ga 2.75286928 2.75286928 0.00000000 625 | P 1.37643464 4.12930392 1.37643464 626 | P 1.37643464 1.37643464 4.12930392 627 | P 4.12930392 4.12930392 4.12930392 628 | P 4.12930392 1.37643464 1.37643464 629 | 8 630 | Lattice="6.625094531580616 0.0 0.0 0.0 6.625094531580616 0.0 0.0 0.0 6.625094531580616" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-406 q_mesh="_JSON [19, 19, 19]" name=CdTe symm.no=216 pbc="T T T" 631 | Cd 0.00000000 0.00000000 0.00000000 632 | Cd 0.00000000 3.31254727 3.31254727 633 | Cd 3.31254727 0.00000000 3.31254727 634 | Cd 3.31254727 3.31254727 0.00000000 635 | Te 1.65627363 4.96882090 1.65627363 636 | Te 1.65627363 1.65627363 4.96882090 637 | Te 4.96882090 4.96882090 4.96882090 638 | Te 4.96882090 1.65627363 1.65627363 639 | 8 640 | Lattice="4.807115690357836 0.0 0.0 0.0 4.807115690357836 0.0 0.0 0.0 4.807115690357836" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-10044 q_mesh="_JSON [19, 19, 19]" name=BAs symm.no=216 pbc="T T T" 641 | B 0.00000000 0.00000000 0.00000000 642 | B 0.00000000 2.40355785 2.40355785 643 | B 2.40355785 0.00000000 2.40355785 644 | B 2.40355785 2.40355785 0.00000000 645 | As 1.20177892 3.60533677 1.20177892 646 | As 1.20177892 1.20177892 3.60533677 647 | As 3.60533677 3.60533677 3.60533677 648 | As 3.60533677 1.20177892 1.20177892 649 | 8 650 | Lattice="5.937274929173393 0.0 0.0 0.0 5.937274929173393 0.0 0.0 0.0 5.937274929173393" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2469 q_mesh="_JSON [19, 19, 19]" name=CdS symm.no=216 pbc="T T T" 651 | Cd 0.00000000 0.00000000 0.00000000 652 | Cd 0.00000000 2.96863746 2.96863746 653 | Cd 2.96863746 0.00000000 2.96863746 654 | Cd 2.96863746 2.96863746 0.00000000 655 | S 1.48431873 4.45295620 1.48431873 656 | S 1.48431873 1.48431873 4.45295620 657 | S 4.45295620 4.45295620 4.45295620 658 | S 4.45295620 1.48431873 1.48431873 659 | 8 660 | Lattice="4.019232858742986 0.0 0.0 0.0 4.019232858742986 0.0 0.0 0.0 4.019232858742986" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=no-mp-2 q_mesh="_JSON [19, 19, 19]" name=CuH symm.no=216 pbc="T T T" 661 | Cu 0.00000000 0.00000000 0.00000000 662 | Cu 0.00000000 2.00961643 2.00961643 663 | Cu 2.00961643 0.00000000 2.00961643 664 | Cu 2.00961643 2.00961643 0.00000000 665 | H 1.00480821 3.01442464 1.00480821 666 | H 1.00480821 1.00480821 3.01442464 667 | H 3.01442464 3.01442464 3.01442464 668 | H 3.01442464 1.00480821 1.00480821 669 | 8 670 | Lattice="6.513484844930318 0.0 0.0 0.0 6.513484844930318 0.0 0.0 0.0 6.513484844930318" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-13033 q_mesh="_JSON [19, 19, 19]" name=MgTe symm.no=216 pbc="T T T" 671 | Mg 0.00000000 0.00000000 0.00000000 672 | Mg 0.00000000 3.25674242 3.25674242 673 | Mg 3.25674242 0.00000000 3.25674242 674 | Mg 3.25674242 3.25674242 0.00000000 675 | Te 1.62837121 4.88511363 1.62837121 676 | Te 1.62837121 1.62837121 4.88511363 677 | Te 4.88511363 4.88511363 4.88511363 678 | Te 4.88511363 1.62837121 1.62837121 679 | 8 680 | Lattice="5.668512426721681 0.0 0.0 0.0 5.668512426721681 0.0 0.0 0.0 5.668512426721681" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-252 q_mesh="_JSON [19, 19, 19]" name=BeTe symm.no=216 pbc="T T T" 681 | Be 0.00000000 0.00000000 0.00000000 682 | Be 0.00000000 2.83425621 2.83425621 683 | Be 2.83425621 0.00000000 2.83425621 684 | Be 2.83425621 2.83425621 0.00000000 685 | Te 1.41712811 4.25138432 1.41712811 686 | Te 1.41712811 1.41712811 4.25138432 687 | Te 4.25138432 4.25138432 4.25138432 688 | Te 4.25138432 1.41712811 1.41712811 689 | 8 690 | Lattice="5.182134934021509 0.0 0.0 0.0 5.182134934021509 0.0 0.0 0.0 5.182134934021509" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1541 q_mesh="_JSON [19, 19, 19]" name=BeSe symm.no=216 pbc="T T T" 691 | Be 0.00000000 0.00000000 0.00000000 692 | Be 0.00000000 2.59106747 2.59106747 693 | Be 2.59106747 0.00000000 2.59106747 694 | Be 2.59106747 2.59106747 0.00000000 695 | Se 1.29553373 3.88660120 1.29553373 696 | Se 1.29553373 1.29553373 3.88660120 697 | Se 3.88660120 3.88660120 3.88660120 698 | Se 3.88660120 1.29553373 1.29553373 699 | 8 700 | Lattice="6.633446107669624 0.0 0.0 0.0 6.633446107669624 0.0 0.0 0.0 6.633446107669624" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-20012 q_mesh="_JSON [19, 19, 19]" name=InSb symm.no=216 pbc="T T T" 701 | In 0.00000000 0.00000000 0.00000000 702 | In 0.00000000 3.31672305 3.31672305 703 | In 3.31672305 0.00000000 3.31672305 704 | In 3.31672305 3.31672305 0.00000000 705 | Sb 1.65836153 4.97508458 1.65836153 706 | Sb 1.65836153 1.65836153 4.97508458 707 | Sb 4.97508458 4.97508458 4.97508458 708 | Sb 4.97508458 1.65836153 1.65836153 709 | 8 710 | Lattice="6.215778139611429 0.0 0.0 0.0 6.215778139611429 0.0 0.0 0.0 6.215778139611429" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1156 q_mesh="_JSON [19, 19, 19]" name=GaSb symm.no=216 pbc="T T T" 711 | Ga 0.00000000 0.00000000 0.00000000 712 | Ga 0.00000000 3.10788907 3.10788907 713 | Ga 3.10788907 0.00000000 3.10788907 714 | Ga 3.10788907 3.10788907 0.00000000 715 | Sb 1.55394453 4.66183360 1.55394453 716 | Sb 1.55394453 1.55394453 4.66183360 717 | Sb 4.66183360 4.66183360 4.66183360 718 | Sb 4.66183360 1.55394453 1.55394453 719 | 8 720 | Lattice="6.232556572716318 0.0 0.0 0.0 6.232556572716318 0.0 0.0 0.0 6.232556572716318" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2624 q_mesh="_JSON [19, 19, 19]" name=AlSb symm.no=216 pbc="T T T" 721 | Al 0.00000000 0.00000000 0.00000000 722 | Al 0.00000000 3.11627829 3.11627829 723 | Al 3.11627829 0.00000000 3.11627829 724 | Al 3.11627829 3.11627829 0.00000000 725 | Sb 1.55813914 4.67441743 1.55813914 726 | Sb 1.55813914 1.55813914 4.67441743 727 | Sb 4.67441743 4.67441743 4.67441743 728 | Sb 4.67441743 1.55813914 1.55813914 729 | 8 730 | Lattice="6.609589588323182 0.0 0.0 0.0 6.609589588323182 0.0 0.0 0.0 6.609589588323182" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22925 q_mesh="_JSON [19, 19, 19]" name=AgI symm.no=216 pbc="T T T" 731 | Ag 0.00000000 0.00000000 0.00000000 732 | Ag 0.00000000 3.30479479 3.30479479 733 | Ag 3.30479479 0.00000000 3.30479479 734 | Ag 3.30479479 3.30479479 0.00000000 735 | I 1.65239740 4.95719219 1.65239740 736 | I 1.65239740 1.65239740 4.95719219 737 | I 4.95719219 4.95719219 4.95719219 738 | I 4.95719219 1.65239740 1.65239740 739 | 8 740 | Lattice="4.628437447512341 0.0 0.0 0.0 4.628437447512341 0.0 0.0 0.0 4.628437447512341" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1986 q_mesh="_JSON [19, 19, 19]" name=ZnO symm.no=216 pbc="T T T" 741 | Zn 0.00000000 0.00000000 0.00000000 742 | Zn 0.00000000 2.31421872 2.31421872 743 | Zn 2.31421872 0.00000000 2.31421872 744 | Zn 2.31421872 2.31421872 0.00000000 745 | O 1.15710936 3.47132809 1.15710936 746 | O 1.15710936 1.15710936 3.47132809 747 | O 3.47132809 3.47132809 3.47132809 748 | O 3.47132809 1.15710936 1.15710936 749 | 8 750 | Lattice="4.546352208074392 0.0 0.0 0.0 4.546352208074392 0.0 0.0 0.0 4.546352208074392" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1479 q_mesh="_JSON [19, 19, 19]" name=BP symm.no=216 pbc="T T T" 751 | B 0.00000000 0.00000000 0.00000000 752 | B 0.00000000 2.27317610 2.27317610 753 | B 2.27317610 0.00000000 2.27317610 754 | B 2.27317610 2.27317610 0.00000000 755 | P 1.13658805 3.40976416 1.13658805 756 | P 1.13658805 1.13658805 3.40976416 757 | P 3.40976416 3.40976416 3.40976416 758 | P 3.40976416 1.13658805 1.13658805 759 | 8 760 | Lattice="5.505656890283814 0.0 0.0 0.0 5.505656890283814 0.0 0.0 0.0 5.505656890283814" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1550 q_mesh="_JSON [19, 19, 19]" name=AlP symm.no=216 pbc="T T T" 761 | Al 0.00000000 0.00000000 0.00000000 762 | Al 0.00000000 2.75282845 2.75282845 763 | Al 2.75282845 0.00000000 2.75282845 764 | Al 2.75282845 2.75282845 0.00000000 765 | P 1.37641422 4.12924267 1.37641422 766 | P 1.37641422 1.37641422 4.12924267 767 | P 4.12924267 4.12924267 4.12924267 768 | P 4.12924267 1.37641422 1.37641422 769 | 8 770 | Lattice="5.725456649742374 0.0 0.0 0.0 5.725456649742374 0.0 0.0 0.0 5.725456649742374" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22913 q_mesh="_JSON [19, 19, 19]" name=CuBr symm.no=216 pbc="T T T" 771 | Cu 0.00000000 0.00000000 0.00000000 772 | Cu 0.00000000 2.86272832 2.86272832 773 | Cu 2.86272832 0.00000000 2.86272832 774 | Cu 2.86272832 2.86272832 0.00000000 775 | Br 1.43136416 4.29409249 1.43136416 776 | Br 1.43136416 1.43136416 4.29409249 777 | Br 4.29409249 4.29409249 4.29409249 778 | Br 4.29409249 1.43136416 1.43136416 779 | 8 780 | Lattice="5.740347153366097 0.0 0.0 0.0 5.740347153366097 0.0 0.0 0.0 5.740347153366097" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1190 q_mesh="_JSON [19, 19, 19]" name=ZnSe symm.no=216 pbc="T T T" 781 | Zn 0.00000000 0.00000000 0.00000000 782 | Zn 0.00000000 2.87017358 2.87017358 783 | Zn 2.87017358 0.00000000 2.87017358 784 | Zn 2.87017358 2.87017358 0.00000000 785 | Se 1.43508679 4.30526037 1.43508679 786 | Se 1.43508679 1.43508679 4.30526037 787 | Se 4.30526037 4.30526037 4.30526037 788 | Se 4.30526037 1.43508679 1.43508679 789 | 8 790 | Lattice="6.080171993206223 0.0 0.0 0.0 6.080171993206223 0.0 0.0 0.0 6.080171993206223" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22895 q_mesh="_JSON [19, 19, 19]" name=CuI symm.no=216 pbc="T T T" 791 | Cu 0.00000000 0.00000000 0.00000000 792 | Cu 0.00000000 3.04008600 3.04008600 793 | Cu 3.04008600 0.00000000 3.04008600 794 | Cu 3.04008600 3.04008600 0.00000000 795 | I 1.52004300 4.56012899 1.52004300 796 | I 1.52004300 1.52004300 4.56012899 797 | I 4.56012899 4.56012899 4.56012899 798 | I 4.56012899 1.52004300 1.52004300 799 | 8 800 | Lattice="3.625348545595646 0.0 0.0 0.0 3.625348545595646 0.0 0.0 0.0 3.625348545595646" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1639 q_mesh="_JSON [19, 19, 19]" name=BN symm.no=216 pbc="T T T" 801 | B 0.00000000 0.00000000 0.00000000 802 | B 0.00000000 1.81267427 1.81267427 803 | B 1.81267427 0.00000000 1.81267427 804 | B 1.81267427 1.81267427 0.00000000 805 | N 0.90633714 2.71901141 0.90633714 806 | N 0.90633714 0.90633714 2.71901141 807 | N 2.71901141 2.71901141 2.71901141 808 | N 2.71901141 0.90633714 0.90633714 809 | 8 810 | Lattice="6.18371618857359 0.0 0.0 0.0 6.18371618857359 0.0 0.0 0.0 6.18371618857359" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2176 q_mesh="_JSON [19, 19, 19]" name=ZnTe symm.no=216 pbc="T T T" 811 | Zn 0.00000000 0.00000000 0.00000000 812 | Zn 0.00000000 3.09185809 3.09185809 813 | Zn 3.09185809 0.00000000 3.09185809 814 | Zn 3.09185809 3.09185809 0.00000000 815 | Te 1.54592905 4.63778714 1.54592905 816 | Te 1.54592905 1.54592905 4.63778714 817 | Te 4.63778714 4.63778714 4.63778714 818 | Te 4.63778714 1.54592905 1.54592905 819 | 8 820 | Lattice="5.425767890681763 0.0 0.0 0.0 5.425767890681763 0.0 0.0 0.0 5.425767890681763" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-22914 q_mesh="_JSON [19, 19, 19]" name=CuCl symm.no=216 pbc="T T T" 821 | Cu 0.00000000 0.00000000 0.00000000 822 | Cu 0.00000000 2.71288395 2.71288395 823 | Cu 2.71288395 0.00000000 2.71288395 824 | Cu 2.71288395 2.71288395 0.00000000 825 | Cl 1.35644197 4.06932592 1.35644197 826 | Cl 1.35644197 1.35644197 4.06932592 827 | Cl 4.06932592 4.06932592 4.06932592 828 | Cl 4.06932592 1.35644197 1.35644197 829 | 8 830 | Lattice="5.95839096 0.0 0.0 0.0 5.95839096 0.0 0.0 0.0 5.95839096" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-20351 q_mesh="_JSON [19, 19, 19]" name=InP symm.no=216 pbc="T T T" 831 | In 0.00000000 0.00000000 0.00000000 832 | In 0.00000000 2.97919548 2.97919548 833 | In 2.97919548 0.00000000 2.97919548 834 | In 2.97919548 2.97919548 0.00000000 835 | P 1.48959774 4.46879322 1.48959774 836 | P 1.48959774 1.48959774 4.46879322 837 | P 4.46879322 4.46879322 4.46879322 838 | P 4.46879322 1.48959774 1.48959774 839 | 8 840 | Lattice="5.447745940068871 0.0 0.0 0.0 5.447745940068871 0.0 0.0 0.0 5.447745940068871" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-10695 q_mesh="_JSON [19, 19, 19]" name=ZnS symm.no=216 pbc="T T T" 841 | Zn 0.00000000 0.00000000 0.00000000 842 | Zn 0.00000000 2.72387297 2.72387297 843 | Zn 2.72387297 0.00000000 2.72387297 844 | Zn 2.72387297 2.72387297 0.00000000 845 | S 1.36193649 4.08580946 1.36193649 846 | S 1.36193649 1.36193649 4.08580946 847 | S 4.08580946 4.08580946 4.08580946 848 | S 4.08580946 1.36193649 1.36193649 849 | 8 850 | Lattice="6.186879976507591 0.0 0.0 0.0 6.186879976507591 0.0 0.0 0.0 6.186879976507591" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-20305 q_mesh="_JSON [19, 19, 19]" name=InAs symm.no=216 pbc="T T T" 851 | In 0.00000000 0.00000000 0.00000000 852 | In 0.00000000 3.09343999 3.09343999 853 | In 3.09343999 0.00000000 3.09343999 854 | In 3.09343999 3.09343999 0.00000000 855 | As 1.54671999 4.64015998 1.54671999 856 | As 1.54671999 1.54671999 4.64015998 857 | As 4.64015998 4.64015998 4.64015998 858 | As 4.64015998 1.54671999 1.54671999 859 | 8 860 | Lattice="4.548623840525299 0.0 0.0 0.0 4.548623840525299 0.0 0.0 0.0 4.548623840525299" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-830 q_mesh="_JSON [19, 19, 19]" name=GaN symm.no=216 pbc="T T T" 861 | Ga 0.00000000 0.00000000 0.00000000 862 | Ga 0.00000000 2.27431192 2.27431192 863 | Ga 2.27431192 0.00000000 2.27431192 864 | Ga 2.27431192 2.27431192 0.00000000 865 | N 1.13715596 3.41146788 1.13715596 866 | N 1.13715596 1.13715596 3.41146788 867 | N 3.41146788 3.41146788 3.41146788 868 | N 3.41146788 1.13715596 1.13715596 869 | 8 870 | Lattice="4.400798576695656 0.0 0.0 0.0 4.400798576695656 0.0 0.0 0.0 4.400798576695656" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-1700 q_mesh="_JSON [19, 19, 19]" name=AlN symm.no=216 pbc="T T T" 871 | Al 0.00000000 0.00000000 0.00000000 872 | Al 0.00000000 2.20039929 2.20039929 873 | Al 2.20039929 0.00000000 2.20039929 874 | Al 2.20039929 2.20039929 0.00000000 875 | N 1.10019964 3.30059893 1.10019964 876 | N 1.10019964 1.10019964 3.30059893 877 | N 3.30059893 3.30059893 3.30059893 878 | N 3.30059893 1.10019964 1.10019964 879 | 8 880 | Lattice="5.726771081658289 0.0 0.0 0.0 5.726771081658289 0.0 0.0 0.0 5.726771081658289" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2172 q_mesh="_JSON [19, 19, 19]" name=AlAs symm.no=216 pbc="T T T" 881 | Al 0.00000000 0.00000000 0.00000000 882 | Al 0.00000000 2.86338554 2.86338554 883 | Al 2.86338554 0.00000000 2.86338554 884 | Al 2.86338554 2.86338554 0.00000000 885 | As 1.43169277 4.29507831 1.43169277 886 | As 1.43169277 1.43169277 4.29507831 887 | As 4.29507831 4.29507831 4.29507831 888 | As 4.29507831 1.43169277 1.43169277 889 | 8 890 | Lattice="5.747701400602993 0.0 0.0 0.0 5.747701400602993 0.0 0.0 0.0 5.747701400602993" Properties=species:S:1:pos:R:3 fc3_supercell="_JSON [[2, 0, 0], [0, 2, 0], [0, 0, 2]]" fc2_supercell="_JSON [[4, 0, 0], [0, 4, 0], [0, 0, 4]]" primitive_matrix="_JSON [[0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]" mp_id=mp-2534 q_mesh="_JSON [19, 19, 19]" name=GaAs symm.no=216 pbc="T T T" 891 | Ga 0.00000000 0.00000000 0.00000000 892 | Ga 0.00000000 2.87385070 2.87385070 893 | Ga 2.87385070 0.00000000 2.87385070 894 | Ga 2.87385070 2.87385070 0.00000000 895 | As 1.43692535 4.31077605 1.43692535 896 | As 1.43692535 1.43692535 4.31077605 897 | As 4.31077605 4.31077605 4.31077605 898 | As 4.31077605 1.43692535 1.43692535 899 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | import setuptools 3 | import codecs 4 | import os.path 5 | 6 | def read(rel_path): 7 | here = os.path.abspath(os.path.dirname(__file__)) 8 | with codecs.open(os.path.join(here, rel_path), 'r') as fp: 9 | return fp.read() 10 | 11 | def get_version(rel_path): 12 | for line in read(rel_path).splitlines(): 13 | if line.startswith('__version__'): 14 | delim = '"' if '"' in line else "'" 15 | return line.split(delim)[1] 16 | else: 17 | raise RuntimeError("Unable to find version string.") 18 | 19 | 20 | setup( 21 | name='autoWTE', 22 | version=get_version("autoWTE/__init__.py"), 23 | description='Thermal conductivity test for foundation interatomic potentials', 24 | url='https://github.com/MPA2suite/autoWTE', 25 | author='Balázs Póta, Paramvir Ahlawat, Gábor Csányi, and Michele Simoncelli', 26 | author_email='ms2855@cam.ac.uk or michele.simoncelli@gmail.com', 27 | license='Academic Software Licence (ASL)', 28 | packages=setuptools.find_packages(), 29 | install_requires=['numpy', 30 | 'tqdm', 31 | 'ase>=3.23.0', 32 | 'h5py', 33 | 'phonopy>=2.26.6', 34 | 'pandas>=2.2.3' 35 | ], 36 | #phono3py has to be installed separately 37 | 38 | classifiers=[ 39 | 'Development Status :: in development', 40 | 'Intended Audience :: Science/Research', 41 | 'License :: Academic Software Licence (ASL)', 42 | 'Operating System :: Linux', 43 | 'Programming Language :: Python :: 3.10', 44 | ], 45 | ) --------------------------------------------------------------------------------