예제 #1
0
# poscar.write_file("POSCAR.vasp")

################### model setup ###############################
# baseinput = VaspInput.from_directory("baseinput")
# energy_calculator = vasp_runner(base_input_dir="./baseinput",
#                                path_to_vasp="/home/i0009/i000900/src/vasp.5.3/vasp.spawnready.gamma",
#                                nprocs_per_vasp=nprocs_per_replica,
#                                comm=MPI.COMM_SELF, perturb=0.1)
energy_calculator = SolverBase()
model = dft_latgas(energy_calculator, save_history=True)
##############################################################

################### RXMC calculation #########################
kTs = kB * np.array([kTstart * kTstep**i for i in range(nreplicas)])
grid = grid_1D(dr, dr, maxr)
RXcalc = TemperatureRX_MPI(comm, CanonicalMonteCarlo, model, configs, kTs)

obs = RXcalc.run(eqsteps,
                 RXtrial_frequency,
                 sample_frequency,
                 observfunc=observables,
                 subdirs=True)
# RXcalc.reload()
obs = RXcalc.run(nsteps,
                 RXtrial_frequency,
                 sample_frequency,
                 observfunc=observables,
                 subdirs=True)

if comm.Get_rank() == 0:
    for i in range(len(kTs)):
예제 #2
0
파일: main.py 프로젝트: gmp007/abICS
def main():
    tomlfile = sys.argv[1] if len(sys.argv) > 1 else "input.toml"
    rxparams = RXParams.from_toml(tomlfile)
    nreplicas = rxparams.nreplicas
    nprocs_per_replica = rxparams.nprocs_per_replica

    kB = 8.6173e-5

    comm = RX_MPI_init(rxparams)

    # RXMC parameters
    # specify temperatures for each replica, number of steps, etc.
    kTstart = rxparams.kTstart
    kTend = rxparams.kTend
    kTs = kB * np.linspace(kTstart, kTend, nreplicas)

    # Set Lreload to True when restarting
    Lreload = rxparams.reload

    nsteps = rxparams.nsteps
    RXtrial_frequency = rxparams.RXtrial_frequency
    sample_frequency = rxparams.sample_frequency
    print_frequency = rxparams.print_frequency

    dftparams = DFTParams.from_toml(tomlfile)

    if dftparams.solver == 'vasp':
        solver = VASPSolver(dftparams.path)
    elif dftparams.solver == 'qe':
        solver = QESolver(dftparams.path)
    else:
        print('unknown solver: {}'.format(dftparams.solver))
        sys.exit(1)

    # model setup
    # we first choose a "model" defining how to perform energy calculations and trial steps
    # on the "configuration" defined below
    energy_calculator = runner(base_input_dir=dftparams.base_input_dir,
                               Solver=solver,
                               nprocs_per_solver=nprocs_per_replica,
                               comm=MPI.COMM_SELF,
                               perturb=dftparams.perturb,
                               solver_run_scheme=dftparams.solver_run_scheme)
    model = dft_latgas(energy_calculator, save_history=False)

    # defect sublattice setup

    configparams = DFTConfigParams.from_toml(tomlfile)

    spinel_config = defect_config(configparams)

    configs = []
    for i in range(nreplicas):
        configs.append(copy.deepcopy(spinel_config))

    obsparams = ObserverParams.from_toml(tomlfile)

    # RXMC calculation
    RXcalc = TemperatureRX_MPI(comm, CanonicalMonteCarlo, model, configs, kTs)
    if Lreload:
        RXcalc.reload()
    obs = RXcalc.run(
        nsteps,
        RXtrial_frequency,
        sample_frequency,
        print_frequency,
        observer=default_observer(comm, Lreload),
        subdirs=True,
    )

    if comm.Get_rank() == 0:
        print(obs)
예제 #3
0
    drone = SimpleVaspToComputedEntryDrone(inc_structure=True)
    queen = BorgQueen(drone)
    model = dft_HAp(calcode="VASP",
                    vasp_run=vasprun,
                    base_vaspinput=baseinput,
                    queen=queen)
    # matcher=matcher, matcher_site=matcher_site, queen=queen, selective_dynamics=["Pt"])

    if worldrank == 0:
        print(config.structure)
        # print(model.xparam(config))

    kTs = kB * np.array([500.0 * 1.1**i for i in range(nreplicas)])
    # configs = pickle.load(open("config.pickle","rb"))
    # configs = [copy.deepcopy(config) for i in range(nreplicas)]
    RXcalc = TemperatureRX_MPI(comm, CanonicalMonteCarlo, model, configs, kTs)
    # RXcalc.reload()
    obs = RXcalc.run(
        nsteps=10,
        RXtrial_frequency=2,
        sample_frequency=1,
        observfunc=observables,
        subdirs=True,
    )
    if worldrank == 0:
        for i in range(len(kTs)):
            with open("T" + str(i) + ".dat", "w") as f:
                f.write("\n".join(
                    [str(obs[i, j]) for j in range(len(obs[i, :]))]))

    for i in range(9):
예제 #4
0
        for i in asites:
            if calc_state.config.structure.species[i] == Element(self.Bspecie):
                x += 1
        x /= float(len(asites))
        return x

    def logfunc(self, calc_state):
        return calc_state.energy, self.DOI(calc_state)


Asite_struct = cation_str.copy()
Asite_struct.remove_species(["Al"])
myobserver = observer_spinel(Asite_struct, "Al")

################### RXMC calculation #########################
RXcalc = TemperatureRX_MPI(comm, CanonicalMonteCarlo, model, configs, kTs)
# obs = RXcalc.run(eqsteps, RXtrial_frequency, sample_frequency, observer=myobserver, subdirs=True)
if Lreload:
    RXcalc.reload()
obs = RXcalc.run(
    nsteps,
    RXtrial_frequency,
    sample_frequency,
    print_frequency,
    observer=myobserver,
    subdirs=True,
)


if comm.Get_rank() == 0:
    print(obs)