Пример #1
0
def readDispersion(
    datapath, Omega2 = 'Omega2', Polarizations = 'Polarizations',
    Qgridinfo = 'Qgridinfo', DOS = 'DOS'):
    "read dispersion in idf format"

    Qgridinfo = os.path.join( datapath, Qgridinfo )
    Omega2 = os.path.join( datapath, Omega2 )
    Polarizations = os.path.join( datapath, Polarizations )
    DOS = os.path.join( datapath, DOS )

    from DOS import read
    dummy, v, Z = read( DOS )
    # v is in terahertz, and it is not angular frequency
    from math import pi
    E = v * 2*pi * 1e12 * hertz2mev
    dos = E,Z

    from Qgridinfo import read
    reciprocalcell, ngridpnts = read( Qgridinfo )

    from Omega2 import read as readOmega2
    omega2 = readOmega2( Omega2 )[1]
    #!!!
    # sometime omega2 has negative values. have to make sure all values are
    # positive
    omega2[ omega2<0 ] = 0
    
    import numpy as N
    energies = N.sqrt(omega2) * hertz2mev

    from Polarizations import read as readP
    polarizations = readP( Polarizations )[1]
    
    N_q, N_b_times_D, N_b, D, temp = polarizations.shape
    assert temp == 2
    
    assert N_b_times_D == N_b*D
    assert D == len( ngridpnts )
    assert D == len( reciprocalcell )
    import operator
    assert N_q == reduce( operator.mul, ngridpnts )

    polarizations.shape = ngridpnts + (N_b_times_D, N_b, D, 2)
    
    energies.shape = ngridpnts + (N_b_times_D, )

    nAtoms = N_b
    dimension = D
    #Qaxes = [
    #    (0, length(reciprocalcell[i]) / (ngridpnts[i] - 1), ngridpnts[i])
    #    for i in range( D )
    #    ]
    Qaxes = zip(reciprocalcell, ngridpnts)
    return nAtoms, dimension, Qaxes, polarizations, energies, dos
Пример #2
0
def readDOS(datapath):
    from DOS import read
    dummy, v, Z = read( datapath )
    # v is in terahertz, and it is not angular frequency
    from math import pi
    E = v * 2*pi * 1e12 * hertz2mev
    dos = E,Z
    return dos