Exemplo n.º 1
0
def main():
    initial_structs = []
    final_structs = []
    with connect(dft_db) as db:
        groups = set()
        for row in db.select():
            groups.add(row.get('group', -1))

        for g in groups:
            try:
                init = db.get([('group', '=', g),
                               ('struct_type', '=', 'initial')])
                final = db.get([('group', '=', g),
                                ('struct_type', '=', 'relaxed')])
                initial_structs.append(init.toatoms())
                final_structs.append(final.toatoms())
            except KeyError:
                pass

    # Sanity checks
    for i, f in zip(initial_structs, final_structs):
        i_formula = i.get_chemical_formula()
        f_formula = f.get_chemical_formula()
        assert i_formula == f_formula

    print(f"Extracted {len(initial_structs)} structures")

    new_struct = NewStructures(settings)
    for i, f in zip(initial_structs, final_structs):
        print(f"Inserting struct {i.get_chemical_formula()}")
        try:
            new_struct.insert_structure(i, f)
        except:
            pass
def initialize_db():
    db_name = "data/almgsiX_clease_voldep.db"

    settings = CEBulk(
        Concentration(basis_elements=[['Al', 'Mg', 'Si', 'X']]),
        crystalstructure='fcc',
        a=4.05, size=[1, 1, 1], max_cluster_size=3,
        max_cluster_dia=[5.0, 5.0],
        db_name=db_name
    )
    settings.basis_func_type = 'binary_linear'

    newStruct = NewStructures(settings)

    # Insert all initial structures
    counter = 0
    with connect(db_local) as db:
        for row in db.select():
            counter += 1
            print(f"Inserting structure {counter}")
            name = f"group{row.group}"
            atoms = row.toatoms()
            newStruct.insert_structure(atoms, name=name)
    
    data = pd.read_csv("data/bulk_mod_fit.csv")
    db = connect(settings.db_name)
    counter = 0
    for row in data.itertuples():
        print(f"Inserting final structure {counter}")
        counter += 1
        try:
            name = f"group{row[1]}"
            #print(name)
            #exit()
            E = row[2]
            B = row[3]
            V = row[4]
            dBdP = row[5]
            L = V**(1.0/3.0)
            atoms = Atoms(cell=[L, L, L])
            calc = SinglePointCalculator(atoms, energy=E)
            atoms.set_calculator(calc)

            print(name)
            init_id = db.get([('name', '=', name)]).id
            update_db(init_id, final_struct=atoms, db_name=settings.db_name,
                    custom_kvp_init={'bulk_mod': B, 'dBdP': dBdP})
        except Exception as exc:
            print(exc)
            traceback.print_exc()

    settings.save("data/settings_almgsiX_voldev.json")
Exemplo n.º 3
0
def main():
    conc = Concentration(basis_elements=[['Al', 'Mg']],
                         A_lb=[[10, 0]],
                         b_lb=[7])
    settings = CEBulk(conc,
                      crystalstructure='fcc',
                      a=4.05,
                      size=[4, 4, 4],
                      max_cluster_size=4,
                      max_cluster_dia=[4.1, 4.1, 4.1],
                      db_name='almg_ce.db')

    # Generate 30 structures
    new_struct = NewStructures(settings, struct_per_gen=30)
    new_struct.generate_random_structures()
Exemplo n.º 4
0
def insert_from_db(old_db_name, setting):
    db = connect(old_db_name)
    names = []
    for row in db.select(converged=1):
        names.append(row.name)

    ns = NewStructures(setting, struct_per_gen=10)
    for name in names:
        ignore = False
        print(name)
        init_struct = None
        final_struct = None
        energy = 0.0
        num_occ = sum(1 for _ in db.select(name=name))
        for row in db.select(name=name):
            if row["calculator"] == "unknown":
                energy = row.energy
                init_struct = row.toatoms()

                if num_occ != 2:
                    final_struct = row.toatoms()
            elif row["calculator"] == 'none':
                init_struct = row.toatoms()

                fid = row.get('final_struct_id', -1)
                if fid != -1:
                    final_struct = db.get(id=fid).toatoms()
                    energy = db.get(id=fid).get('energy', None)
                    if energy is None:
                        ignore = True
                    break
            else:
                final_struct = row.toatoms()

        calc = SinglePointCalculator(final_struct, energy=energy)
        final_struct.set_calculator(calc)
        try:
            ns.insert_structure(init_struct=init_struct,
                                final_struct=final_struct,
                                generate_template=True)
        except Exception as exc:
            print(str(exc))
Exemplo n.º 5
0
def reconfigure_almgsi(): 
    conc = Concentration(basis_elements=[["Al", "Mg", "Si"]])
    kwargs = dict(crystalstructure="fcc", a=4.05, size=[1, 1, 1], \
        db_name=db_name, max_cluster_size=4, concentration=conc, max_cluster_dia=[7.8, 5.0, 5.0])
    ceBulk = CEBulk(**kwargs)

    db = connect(db_name_old)
    counter = 0
    new_struct = NewStructures(ceBulk)
    for row in db.select([('converged', '=', 1)]):
        print("ROW: {}".format(counter))
        counter += 1
        init = row.toatoms()
        final = init.copy()
        energy = row.get('energy', None)
        if energy is None:
            final_struct_id = row.final_struct_id
            energy = db.get(id=final_struct_id).energy
        calc = SinglePointCalculator(final, energy=energy)
        final.set_calculator(calc)
        new_struct.insert_structure(init_struct=init, final_struct=final)
Exemplo n.º 6
0
def main():
    setting = settingFromJSON("almgsixSettings.json")
    setting.db_name = 'almgsiX_dft.db'
    new_struct = NewStructures(setting)
    new_struct.insert_structures(traj_init="data/restricted_gs_5x1x1.traj")