Example #1
0
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')
Example #3
0
#!/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)
Example #4
0
#!/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')
Example #5
0
    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!")