# 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)):
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)
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):
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)