hrushikesh-s / atomate2

atomate2 is a library of computational materials science workflows
https://materialsproject.github.io/atomate2/
Other
0 stars 0 forks source link

Jupyter notebooks #6

Open hrushikesh-s opened 4 months ago

hrushikesh-s commented 4 months ago
hrushikesh-s commented 3 months ago
from atomate2.vasp.flows.hiphive import HiphiveMaker
from atomate2.forcefields.flows.hiphive import HiphiveMaker as HiphiveMakerFF
from atomate2.forcefields.jobs import (
    CHGNetRelaxMaker, CHGNetStaticMaker, M3GNetRelaxMaker, M3GNetStaticMaker, MACERelaxMaker, MACEStaticMaker 
)
from jobflow import run_locally
import numpy as np
from fireworks import LaunchPad
from jobflow.managers.fireworks import flow_to_workflow

from mp_api.client import MPRester
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer

with MPRester("...") as mpr:    
    mpids = ["mp-1265"] # MgO
    for i, mpid in enumerate(mpids):    
        fields = ["material_id", "band_gap", "bulk_modulus", "formula_pretty", "nsites", "structure"]
        data = mpr.materials.summary.search(material_ids=[mpid], fields=fields)
        example_doc = data[0]
        struct = example_doc.structure
        struct = SpacegroupAnalyzer(struct).find_primitive()
        mpid_new = example_doc.material_id
        k_vrh = example_doc.bulk_modulus['vrh']
        nsites = example_doc.nsites

        try:
            bulk_mod = k_vrh
            print(f'bulk_mod = {bulk_mod}')
        except:
            pass

        sa = SpacegroupAnalyzer(struct)
        sym_operations: list = sa.get_point_group_operations()
        num_operations = len(sym_operations)
        print(f"number of point group operations: {num_operations}")
        crystal_system = sa.get_crystal_system()
        print(f"crystal system: {crystal_system}")
        if crystal_system == "cubic":
            n_configs_per_std = int(nsites/2)
        else:
            n_configs_per_std = int(nsites/2*np.sqrt(48)/num_operations)
        print(f"n_configs_per_std: {n_configs_per_std}")

        factor = np.around(np.mean(struct.atomic_numbers)/40,1) # displacement scaler factor - TO BE ADJUSTED
        fixed_displs = [0.01,0.03,0.08,0.1] # new displacement values
        perturbed_structure_kwargs={"rattle_stds": fixed_displs,"n_configs_per_std":n_configs_per_std},
        calculate_lattice_thermal_conductivity=True,
        fit_method = ["rfe"]
        disp_cut = 0.05
        min_atoms=150 #150 #4
        max_atoms=60 #600 #10
        min_length=18 #18 #6
        supercell_matrix_kwargs={"min_atoms":min_atoms, "max_atoms":max_atoms, "force_diagonal":True}

        hiphive_flow = HiphiveMakerFF(
                                supercell_matrix_kwargs=supercell_matrix_kwargs,
                                min_length=min_length,
                                THERM_COND_SOLVER="shengbte", # almabte
                                ).make(  
                                                            mpid=mpid,  
                                                            structure=struct,
                                                            bulk_modulus=bulk_mod,
                                                            renormalize=False,
                                                            n_structures=n_configs_per_std,
                                                            fixed_displs=fixed_displs,
                                                            disp_cut=disp_cut)

        # # run the job locally
        # run_locally(hiphive_flow, create_folders=True)

        # convert the flow to a fireworks WorkFlow object and submit the job to the LaunchPad
        wf = flow_to_workflow(hiphive_flow)
        lpad = LaunchPad.from_file('/Users/HPSahasrabuddhe/fw_config_perlmutter/my_launchpad.yaml')
        lpad.add_wf(wf)