def get_fock_basis(): edrixs.write_fock_dec_by_N(12, 9, 'ed/fock_i.in') shutil.copy('ed/fock_i.in', 'xas/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_f.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_f.in') edrixs.write_fock_dec_by_N(12, 10, 'xas/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_pp/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_ps/fock_n.in')
def get_fock_basis(nval_orb, noccu): edrixs.write_fock_dec_by_N(nval_orb, noccu, 'ed/fock_i.in') shutil.copy('ed/fock_i.in', 'xas/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_f.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_f.in') edrixs.write_fock_dec_by_N(nval_orb, noccu + 1, 'xas/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_pp/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_ps/fock_n.in')
#!/usr/bin/env python import sys import edrixs from edrixs.fedrixs import ed_fsolver from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() fcomm = comm.py2f() if len(sys.argv) > 1: noccu = int(sys.argv[1]) else: noccu = 15 if rank == 0: print("edrixs >>> build fock basis", noccu, "/", 30) edrixs.write_fock_dec_by_N(30, noccu, "fock_i.in") comm.Barrier() ed_fsolver(fcomm, rank, size)
#!/usr/bin/env python import shutil import argparse import edrixs if __name__ == "__main__": parser = argparse.ArgumentParser( description="Get fock basis by total occupancy number") parser.add_argument('-norb', type=int, default=1, help='Total number of valence orbitals') parser.add_argument('-noccu', type=int, default=1, help='Total occupancy number') args = parser.parse_args() norbs, occu = args.norb, args.noccu edrixs.write_fock_dec_by_N(norbs, occu, 'ed/fock_i.in') shutil.copy('ed/fock_i.in', 'xas/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_i.in') shutil.copy('ed/fock_i.in', 'rixs_pp/fock_f.in') shutil.copy('ed/fock_i.in', 'rixs_ps/fock_f.in') edrixs.write_fock_dec_by_N(norbs, occu + 1, 'xas/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_pp/fock_n.in') shutil.copy('xas/fock_n.in', 'rixs_ps/fock_n.in')
config = [ "&control", "num_val_orbs=" + str(Norb), "ed_solver=" + str(ied), "neval=" + str(nev), "nvector=" + str(nvector), "maxiter=" + str(maxiter), "eigval_tol=" + str(tol), "idump=.false.", "&end" ] f = open('config.in', 'w') for item in config: f.write(item + "\n") f.close() flog = open("search_gs.log", 'w') res = [] for occu in range(occu_start, occu_end + 1): ndim = edrixs.write_fock_dec_by_N(Norb, occu, 'fock_i.in') f = open(args.mpi_cmd, 'r') mpi_args = f.readline().split() f.close() # For mpi_cmd: mpirun -np number_of_cpus ed.x # if number_fo_cpus > ndim, please reduce the number_of_cpus to ndim subprocess.check_call(mpi_args) eig_f = open('eigvals.dat', 'r') e_gs = float(eig_f.readline().split()[1]) eig_f.close() data = np.loadtxt('denmat.dat') den = (data[:, 3].reshape( (nvector, Norb, Norb)) + 1j * data[:, 4].reshape( (nvector, Norb, Norb)))
hsoc_i = edrixs.atom_hsoc('f', zeta_f_i) # prepare files for ed.x # write control parameters to file edrixs.write_config(ed_solver=2, num_val_orbs=norbs, neval=100, ncv=200, nvector=1, idump=True) # write nonzeros terms of two-fermion terms hsoc_i to file 'hopping_i.in', read by ed.x edrixs.write_emat(hsoc_i, 'hopping_i.in', 1E-10) # write nonzeros terms of four-fermion terms umat to file 'coulomb_i.in', read by ed.x edrixs.write_umat(umat_i, 'coulomb_i.in', 1E-10) # write fock basis of decimal format to file 'fock_i.in', read by ed.x edrixs.write_fock_dec_by_N(norbs, noccu, "fock_i.in") # we also use pure Python ED solver to get the eigenvalues print("edrixs >>> building Fock basis ...") basis_i = edrixs.get_fock_bin_by_N(norbs, noccu) print("edrixs >>> Done!") print("edrixs >>> building Hamiltonian ...") H = edrixs.build_opers(2, hsoc_i, basis_i) H += edrixs.build_opers(4, umat_i, basis_i) print("edrixs >>> Done!") print("edrixs >>> diagonalize Hamiltonian ...") eval_i, evec_i = scipy.linalg.eigh(H) edrixs.write_tensor(eval_i, "eval_i.dat", fmt_float='{:20.10f}') print("edrixs >>> Done!")