예제 #1
0
    def test_morse_fit():
        import numpy as np
        from testing import value_eq
        from unit_converter import convert
        from numerics import morse
        from numerics import morse_rDw_fit,morse_fit,morse_fit_fine

        r_ref,D_ref,w_ref = 1.620,6.87,1009.18
        r_ref_A = r_ref
        p = morse_rDw_fit(r_ref,D_ref,w_ref,'Ti','O',Dunit='eV')

        r_ref = convert(r_ref,'A','B')


        rfine = np.linspace(0.8*r_ref,1.2*r_ref,100)
        Efine = morse(p,rfine)

        pf = morse_fit(rfine,Efine,p)

        pref = tuple(np.array(p,dtype=float))
        pf   = tuple(np.array(pf,dtype=float))

        assert(value_eq(pf,pref))

        pf,Ef = morse_fit_fine(rfine,Efine,p,rfine,both=True)
        pf   = tuple(np.array(pf,dtype=float))
        assert(value_eq(pf,pref))
        assert(value_eq(Ef,Efine))
예제 #2
0
 def translate_and_check(g, shift):
     gt = g.copy()
     gt.translate(shift)
     shift = np.array(shift).ravel()
     assert (value_eq(gt.origin - g.origin, shift))
     dpoints = gt.points - g.points
     for dp in dpoints:
         assert (value_eq(dp, shift))
예제 #3
0
 def struct_same(s1, s2, axes=True):
     same = True
     same &= value_eq(s1.elem, s2.elem)
     same &= value_eq(s1.pos, s2.pos)
     if axes:
         same &= value_eq(s1.axes, s2.axes)
     #end if
     return same
예제 #4
0
def test_nearest_neighbors():
    import numpy as np
    from testing import value_eq
    from numerics import nearest_neighbors

    points = [
        [0,0,0],
        [1,0,0],
        [0,1,0],
        [1,1,0],
        [0,0,1],
        [1,0,1],
        [0,1,1],
        [1,1,1],
        ]
    points = np.array(points,dtype=float)

    plow  = points[:4]
    phigh = points[4:]

    d0 = 0.0
    d1 = 1.0
    d2 = np.sqrt(2.)
    d3 = np.sqrt(3.)

    nn_ref = [[0,1,2],
              [1,0,3],
              [2,0,3],
              [3,1,2]]
    nn_ref = np.array(nn_ref,dtype=int)

    dist_ref = [[d1,d2,d2],
                [d1,d2,d2],
                [d1,d2,d2],
                [d1,d2,d2]]
    dist_ref = np.array(dist_ref,dtype=float)

    def check_nn(nn):
        for n,nr in zip(nn,nn_ref):
            assert(n[0]==nr[0])
            assert(set(n[1:])==set(nr[1:]))
        #end for
    #end def check_nn

    nn = nearest_neighbors(3,plow,phigh,slow=True)
    check_nn(nn)

    nn,dist = nearest_neighbors(3,plow,phigh,return_distances=True,slow=True)
    check_nn(nn)
    assert(value_eq(dist,dist_ref))

    if scipy_available:
        nn = nearest_neighbors(3,plow,phigh)
        check_nn(nn)

        nn,dist = nearest_neighbors(3,plow,phigh,return_distances=True)
        check_nn(nn)
        assert(value_eq(dist,dist_ref))
예제 #5
0
def test_periodic_table():
    from testing import value_eq
    from periodic_table import pt

    elements = set('''
        H He 
        Li Be B C N O F Ne 
        Na Mg Al Si P S Cl Ar 
        K Ca Sc Ti V Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr 
        Rb Sr Y Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb Te I Xe 
        Cs Ba La Ce Pr Nd Pm Sm Eu Gd Tb Dy Ho Er Tm Yb Lu Hf Ta W Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn 
        Fr Ra Ac Th Pa U Np Pu Am Cm Bk Cf Es Fm Md No Lr 
        '''.split())

    atomic_numbers = set(range(1, len(elements) + 1))

    missing = elements - set(pt.keys())
    assert (len(missing) == 0)

    missing = elements - set(pt.elements.keys())
    assert (len(missing) == 0)

    missing = atomic_numbers - set(pt.simple_elements.keys())
    assert (len(missing) == 0)

    fields = '''
        atomic_weight
        atomic_radius
        nuclear_charge
        electron_affinity
        ionization_energy
        ionic_radius
        thermal_cond
        melting_point
        boiling_point
        '''.split()

    for e in elements:
        elem = pt.elements[e]
        assert (id(elem) == id(pt[e]))
        selem = pt.simple_elements[elem.atomic_number]
        for f in fields:
            assert (value_eq(selem[f], elem[f].orig))
        #end for
    #end for

    C = pt.C
    assert (C.atomic_number == 6)
    assert (C.symbol == 'C')
    assert (value_eq(C.atomic_radius.pm, 77.2))
    assert (value_eq(C.atomic_weight.amu, 12.011))
    assert (value_eq(C.boiling_point.degC, 4827.0))
    assert (value_eq(C.electron_affinity.kJ_mol, 121.9))
    assert (value_eq(C.ionic_radius.pm, 260.0))
    assert (value_eq(C.ionization_energy.eV, 11.26))
    assert (value_eq(C.melting_point.degC, 3550.0))
    assert (value_eq(C.nuclear_charge.e, 3.25))
    assert (value_eq(C.thermal_cond.W_mK, 1960.0))
예제 #6
0
    def test_ttest():
        import numpy as np
        from testing import value_eq
        from numerics import ttest

        p = ttest(0.,1.,100,0.,1.,100)
        assert(value_eq(float(p),1.0))

        p = ttest(0.,1.,10000,1.,1.,10000)
        assert(value_eq(float(p),0.479508361523))
예제 #7
0
def test_parallelotope_grid_points():

    import numpy as np
    from testing import value_eq
    from grid_functions import unit_grid_points
    from grid_functions import parallelotope_grid_points

    axes_dim = {
        1: [[1]],
        2: [[1, 1], [0, 1]],
        3: [[1, 1, 1], [0, 1, 1], [0, 0, 1]],
    }
    shapes_dim = {
        1: (5, ),
        2: (5, 3),
        3: (5, 3, 7),
    }

    for d in range(1, 4):
        axes = axes_dim[d]
        shape = shapes_dim[d]

        for c in (False, True):
            for e in (False, True):
                ep = d * [e]
                u = unit_grid_points(shape=shape, centered=c, endpoint=ep)
                ref = np.dot(u, axes)
                p = parallelotope_grid_points(axes=axes,
                                              shape=shape,
                                              centered=c,
                                              endpoint=ep)
                assert (value_eq(p, ref))

                cells = np.array(shape, dtype=int)
                if not c:
                    cells -= np.array(ep, dtype=int)
                #end if
                p = parallelotope_grid_points(axes=axes,
                                              cells=cells,
                                              centered=c,
                                              endpoint=ep)
                assert (value_eq(p, ref))

                dr = 1.0 / cells
                for i in range(len(dr)):
                    dr[i] *= np.linalg.norm(axes[i])
                #end for
                p = parallelotope_grid_points(axes=axes,
                                              dr=dr,
                                              centered=c,
                                              endpoint=ep)
                assert (value_eq(p, ref))
예제 #8
0
def test_simstats():
    import numpy as np
    from testing import value_eq
    from numerics import simstats

    m,v,e,k = simstats(rstream)

    m_ref = 0.507154277182
    v_ref = 0.0840257344388
    e_ref = 0.00949486225214
    k_ref = 1.07291426596

    assert(value_eq(float(m),m_ref))
    assert(value_eq(float(v),v_ref))
    assert(value_eq(float(e),e_ref))
    assert(value_eq(float(k),k_ref))

    m_ref = np.array(10*[m_ref])
    v_ref = np.array(10*[v_ref])
    e_ref = np.array(10*[e_ref])
    k_ref = np.array(10*[k_ref])
    
    m,v,e,k = simstats(rstream_wide)
    
    assert(value_eq(m,m_ref))
    assert(value_eq(v,v_ref))
    assert(value_eq(e,e_ref))
    assert(value_eq(k,k_ref))
예제 #9
0
def test_incorporate_result():
    from generic import obj
    tpath = testing.setup_unit_test_output_directory('pwscf_simulation','test_incorporate_result',**pseudo_inputs)

    sim = get_pwscf_sim('scf')

    sim_start = sim.to_obj().copy()

    assert(object_eq(sim.to_obj(),sim_start))

    # charge density
    result = obj(
        locdir = sim.locdir,
        )

    sim.incorporate_result('charge_density',result,None)

    assert(object_eq(sim.to_obj(),sim_start))

    # restart
    sim.incorporate_result('restart',result,None)

    c = sim.input.control
    assert(c.restart_mode=='restart')
    del c.restart_mode
    assert(object_eq(sim.to_obj(),sim_start))
    
    # structure
    altered_structure = sim.system.structure.copy()
    altered_structure.pos += 0.1

    result = obj(
        structure = altered_structure,
        )

    sim.incorporate_result('structure',result,None)

    sim_ref = sim_start.copy()
    pos_ref = sim_ref.system.structure.delete('pos')+0.1
    sim_ref.input.atomic_positions.delete('positions')

    pos = sim.system.structure.delete('pos')
    apos = sim.input.atomic_positions.delete('positions')

    assert(value_eq(pos,pos_ref))
    assert(value_eq(apos,pos_ref))
    assert(object_eq(sim.to_obj(),sim_ref))

    clear_all_sims()
    restore_nexus()
예제 #10
0
def test_jackknife():
    from testing import value_eq
    from numerics import jackknife

    def value(v):
        return v
    #end def value

    jm_ref = np.array(10*[0.50715428],dtype=float)
    je_ref = np.array(10*[0.00917114],dtype=float)

    jm,je = jackknife(rstream_wide.T,value)

    assert(value_eq(jm,jm_ref))
    assert(value_eq(je,je_ref))
예제 #11
0
def test_ndgrid():
    import numpy as np
    from testing import value_eq
    from numerics import ndgrid

    x = [0,1,2.]
    y = [3,4.,5,6]
    z = [7,8,9,10,11.]

    points = np.zeros((3,len(x)*len(y)*len(z)),dtype=float)
    n = 0
    for xv in x:
        for yv in y:
            for zv in z:
                points[:,n] = xv,yv,zv
                n += 1
            #end for
        #end for
    #end for
    points = np.array(points)
    points.shape = 3,len(x),len(y),len(z)
    points = points

    grid = ndgrid(x,y,z)

    assert(value_eq(grid,points))
예제 #12
0
 def shift_and_test_inside(g, p, upoints, d, sign):
     us = upoints.copy()
     us[:, d] += ushift
     ps = g.points_from_unit(us)
     ps_ref = ps.copy()
     inside = g.inside(ps)
     assert (value_eq(ps, ps_ref))
     if isinstance(g, SpheroidSurfaceGrid):
         assert (inside.all())
     elif isinstance(g, SpheroidGrid):
         if d == 0:
             assert (not inside.any())  # radial coord
         else:
             assert (inside.all())  # angular coords
         #end if
     elif isinstance(g, ParallelotopeGrid):
         if g.bconds[d] == 'o':
             assert (not inside.any())
         elif g.bconds[d] == 'p':
             assert (inside.all())
         else:
             assert (1 == 0)
         #end if
     else:
         assert (1 == 0)
예제 #13
0
def test_textfile():
    from fileio import TextFile

    files = get_files()

    # test empty initialization
    empty = TextFile()

    # test read
    f = TextFile(files['scf.in'])

    assert(len(f.read())==1225)
    assert(len(f.lines())==55)
    assert(len(f.tokens())==125)

    assert(f.readline()=='&CONTROL\n')
    assert(f.readline()=="   calculation     = 'scf'\n")

    assert(f.readline('celldm')=='celldm(1)       = 1.0\n')

    assert(f.readtokens('ecutwfc')==['ecutwfc', '=', '272'])

    val = f.readtokensf('CELL_PARAMETERS',float,float,float)
    ref = [28.34589199, 0.0, 0.0]
    assert(value_eq(val,ref))

    f.close()
예제 #14
0
def test_get_output_files():
    import os

    tpath = testing.setup_unit_test_output_directory('vasp_simulation',
                                                     'test_get_output_files',
                                                     **pseudo_inputs)

    sim = setup_vasp_sim(tpath)

    vfiles = 'INCAR KPOINTS POSCAR CONTCAR OUTCAR'.split()
    for vfile in vfiles:
        f = open(os.path.join(tpath, vfile), 'w')
        f.write('')
        f.close()
    #end for

    files = sim.get_output_files()

    assert (value_eq(files, vfiles))

    for vfile in vfiles:
        assert (os.path.exists(
            os.path.join(tpath, sim.identifier + '.' + vfile)))
    #end for

    clear_all_sims()
    restore_nexus()
예제 #15
0
def test_grid_cell_indices():

    import numpy as np
    from testing import value_eq, object_eq
    from grid_functions import ParallelotopeGrid
    from grid_functions import SpheroidGrid
    from grid_functions import SpheroidSurfaceGrid

    p = ParallelotopeGrid(
        cells=(10, 10),
        axes=[[1, 0, 0], [1, 1, 1]],
    )
    pc = ParallelotopeGrid(cells=(10, 10),
                           axes=[[1, 0, 0], [1, 1, 1]],
                           centered=True)

    s = SpheroidGrid(
        cells=(10, 10),
        axes=[[1, 0, 0], [1, 1, 1]],
    )
    sc = SpheroidGrid(
        cells=(10, 10),
        axes=[[1, 0, 0], [1, 1, 1]],
        centered=True,
    )

    c = SpheroidSurfaceGrid(
        cells=(10, 10),
        axes=[[1, 0, 0], [1, 1, 0], [1, 1, 1]],
    )
    cc = SpheroidSurfaceGrid(
        cells=(10, 10),
        axes=[[1, 0, 0], [1, 1, 0], [1, 1, 1]],
        centered=True,
    )

    imap = np.arange(100, dtype=int)

    assert ((pc.cell_indices() == imap).all())
    assert ((p.cell_indices(pc.r) == imap).all())
    assert ((sc.cell_indices() == imap).all())
    assert ((s.cell_indices(sc.r) == imap).all())
    assert ((cc.cell_indices() == imap).all())
    assert ((c.cell_indices(cc.r) == imap).all())

    indices = {
        1: np.arange(5, dtype=int),
        2: np.arange(5**2, dtype=int),
        3: np.arange(5**3, dtype=int),
    }

    grids = get_grids()
    props = get_props()
    for name in sorted(grids.keys()):
        p = props[name]
        if p.centered:
            g = grids[name].copy()
            gref = g.copy()
            assert (value_eq(g.cell_indices(), indices[p.grid_dim]))
            assert (object_eq(g, gref))
예제 #16
0
def test_grid_radius():
    from testing import value_eq
    from grid_functions import SpheroidGrid, SpheroidSurfaceGrid
    grids = get_grids()
    for name in sorted(grids.keys()):
        g = grids[name]
        if isinstance(g, (SpheroidGrid, SpheroidSurfaceGrid)):
            if g.isotropic:
                assert (value_eq(g.radius(), 1.0))
예제 #17
0
def test_change_units():
    from physical_system import generate_physical_system

    sys = generate_physical_system(
        units='A',
        axes=[[3.57, 0.00, 0.00], [0.00, 3.57, 0.00], [0.00, 0.00, 3.57]],
        elem=8 * ['C'],
        posu=[[0.00, 0.00, 0.00], [0.25, 0.25, 0.25], [0.00, 0.50, 0.50],
              [0.25, 0.75, 0.75], [0.50, 0.00, 0.50], [0.75, 0.25, 0.75],
              [0.50, 0.50, 0.00], [0.75, 0.75, 0.25]],
        C=4,
    )

    s = sys.structure

    assert (value_eq(s.pos[-1], np.array([2.6775, 2.6775, 0.8925])))
    sys.change_units('B')
    assert (value_eq(s.pos[-1], np.array([5.05974172, 5.05974172,
                                          1.68658057])))
예제 #18
0
def test_eos():
    import numpy as np
    from testing import value_eq
    from unit_converter import convert
    from numerics import eos_fit,eos_eval,eos_param

    data = np.array([
            [0.875, -83.31851261], 
            [0.900, -83.38085214], 
            [0.925, -83.42172843], 
            [0.950, -83.44502216], 
            [0.975, -83.45476035], 
            [1.025, -83.44564229], 
            [1.050, -83.43127254], 
            [1.000, -83.45412846], 
            [1.100, -83.39070714], 
            [1.125, -83.36663810], 
            ])

    a = 5.539 # lattice constant

    V = (a*data[:,0])**3
    E = convert(data[:,1],'Ry','eV')

    # done originally to get params below
    #pf = eos_fit(V,E,'vinet')

    Einf = -1.13547294e+03
    V0   =  1.62708941e+02
    B0   =  1.34467867e-01
    Bp0  =  4.55846963e+00

    pf = Einf,V0,B0,Bp0

    Ef = eos_eval(pf,V,'vinet')

    assert(value_eq(Ef,E,atol=4e-3))

    assert(value_eq(float(eos_param(pf,'Einf','vinet')),Einf))
    assert(value_eq(float(eos_param(pf,'V','vinet')),V0))
    assert(value_eq(float(eos_param(pf,'B','vinet')),B0))
    assert(value_eq(float(eos_param(pf,'Bp','vinet')),Bp0))
예제 #19
0
def test_simplestats():
    import numpy as np
    from testing import value_eq
    from numerics import simplestats

    m,e = simplestats(rstream)

    m_ref = 0.507154277182
    e_ref = 0.00916655521114

    assert(value_eq(float(m),m_ref))
    assert(value_eq(float(e),e_ref))

    m_ref = np.array(10*[m_ref])
    e_ref = np.array(10*[e_ref])

    m,e = simplestats(rstream_wide)

    assert(value_eq(m,m_ref))
    assert(value_eq(e,e_ref))
예제 #20
0
def test_grid_cell_volumes():
    from testing import value_eq
    from grid_functions import SpheroidSurfaceGrid

    grids = get_grids()

    for name in sorted(grids.keys()):
        g = grids[name]
        if not isinstance(g, SpheroidSurfaceGrid) or g.isotropic:
            assert (value_eq(g.volume(), g.cell_volumes().sum()))
        else:
            None  # not supported
예제 #21
0
 def check(r=None, theta=None, phi=None):
     if r is not None:
         r = unique(r)
         dr = unique(r[1:] - r[:-1])
         assert (len(r) == n)
         assert (len(dr) == 1)
         assert (value_eq(dr[0], 1.0 / n))
     #end if
     if theta is not None:
         t = unique(theta)
         dt = unique(t[1:] - t[:-1])
         assert (len(t) == n)
         assert (len(dt) == 1)
         assert (value_eq(dt[0], np.pi / n))
     #end if
     if phi is not None:
         p = unique(phi)
         dp = unique(p[1:] - p[:-1])
         assert (len(p) == n)
         assert (len(dp) == 1)
         assert (value_eq(dp[0], 2 * np.pi / n))
예제 #22
0
def test_grid_volume():
    import numpy as np
    from testing import value_eq
    from grid_functions import ParallelotopeGrid
    from grid_functions import SpheroidGrid
    from grid_functions import SpheroidSurfaceGrid

    grids = get_grids()
    props = get_props()

    for name in sorted(grids.keys()):
        g = grids[name]
        p = props[name]

        gd, sd = g.grid_dim, g.space_dim

        if isinstance(g, ParallelotopeGrid):
            vratio = g.volume() / g.axes_volume()
            assert (value_eq(vratio, 1.0))
        elif isinstance(g, SpheroidGrid):
            volume = g.volume()
            if not g.isotropic:
                vratio = volume / g.axes_volume()
                if gd == 2:
                    assert (value_eq(vratio, np.pi * r**2))
                elif gd == 3:
                    assert (value_eq(vratio, 4 * np.pi / 3 * r**3))
                else:
                    assert (1 == 0)
                #end if
            else:
                r = g.radius()
                if gd == 2:
                    assert (value_eq(volume, np.pi * r**2))
                elif gd == 3:
                    assert (value_eq(volume, 4 * np.pi / 3 * r**3))
                else:
                    assert (1 == 0)
                #end if
        elif isinstance(g, SpheroidSurfaceGrid):
            if g.isotropic:
                volume = g.volume()
                r = g.radius()
                if gd == 1:
                    assert (value_eq(volume, 2 * np.pi * r))
                elif gd == 2:
                    assert (value_eq(volume, 4 * np.pi * r**2))
                else:
                    assert (1 == 0)
                #end if
            else:
                None  # not supported
            #end if
        else:
            assert (1 == 0)
예제 #23
0
def test_pyscf_to_afqmc_input_init():
    from qmcpack_converters import PyscfToAfqmcInput
    from qmcpack_converters import generate_pyscf_to_afqmc_input

    # empty init
    pi = PyscfToAfqmcInput()
    assert (pi.is_valid())
    assert (set(pi.keys()) == set(PyscfToAfqmcInput.input_defaults.keys()))
    for v in pi:
        assert (v is None or v == False or v == 'pyscf_to_afqmc.py')
    #end for

    pi2 = generate_pyscf_to_afqmc_input()
    assert (pi2.is_valid())
    assert (object_eq(pi2, pi))

    # simple init
    pi = generate_pyscf_to_afqmc_input(
        input='scf.chk',
        output='afqmc.h5',
        cholesky_threshold=1e-5,
        verbose=True,
    )
    assert (pi.is_valid())
    assert (pi.input == 'scf.chk')
    assert (pi.output == 'afqmc.h5')
    assert (value_eq(pi.cholesky_threshold, 1e-5))
    assert (value_eq(pi.verbose, True))

    pi2 = generate_pyscf_to_afqmc_input(
        i='scf.chk',
        o='afqmc.h5',
        t=1e-5,
        v=True,
    )
    assert (pi2.is_valid())
    assert (object_eq(pi2, pi))
예제 #24
0
def test_string2val():
    import numpy as np
    from testing import value_eq
    from superstring import string2val

    v = string2val('False')
    assert(isinstance(v,bool))
    assert(v==False)

    v = string2val('True')
    assert(isinstance(v,bool))
    assert(v==True)

    v = string2val('43')
    assert(isinstance(v,int))
    assert(v==43)

    v = string2val('3.14')
    assert(isinstance(v,float))
    assert(np.abs(v-3.14)<1e-6)

    v = string2val('1 2 3 4',delim=' ')
    assert(isinstance(v,np.ndarray))
    assert(value_eq(v,np.array([1,2,3,4],dtype=int)))

    v = string2val('1, 2, 3, 4',delim=',')
    assert(isinstance(v,np.ndarray))
    assert(value_eq(v,np.array([1,2,3,4],dtype=int)))

    v = string2val('1. 2 3 4',delim=' ')
    assert(isinstance(v,np.ndarray))
    assert(value_eq(v,np.array([1,2,3,4],dtype=float)))

    v = string2val('1., 2, 3, 4',delim=',')
    assert(isinstance(v,np.ndarray))
    assert(value_eq(v,np.array([1,2,3,4],dtype=float)))
예제 #25
0
def test_twist_average_analysis():
    import os
    from generic import obj
    from qmcpack_analyzer import QmcpackAnalyzer

    tpath = testing.setup_unit_test_output_directory(
        test='qmcpack_analyzer',
        subtest='test_twist_average_analysis',
        file_sets=['diamond_twist'],
    )

    # test analysis of twist averaged vmc data
    infile = os.path.join(tpath, 'diamond_twist/vmc/vmc.in')

    qa = QmcpackAnalyzer(infile, analyze=True, equilibration=5)

    qa_keys = 'info wavefunction vmc qmc bundled_analyzers'.split()
    assert (set(qa.keys()) == set(qa_keys))

    ba = qa.bundled_analyzers
    ba_keys = [0, 1, 2, 3]
    assert (set(ba.keys()) == set(ba_keys))
    for n in ba_keys:
        assert (isinstance(ba[n], QmcpackAnalyzer))
    #end for

    qa2 = ba[2]
    qa2_keys = 'info wavefunction vmc qmc'.split()
    assert (set(qa2.keys()) == set(qa2_keys))

    le_twists = obj()
    for n in ba_keys:
        le_twists[n] = ba[n].qmc[0].scalars.LocalEnergy.mean
    #end for

    le_twists_ref = obj({
        0: -10.477644724210526,
        1: -11.54064069741053,
        2: -11.547046178357895,
        3: -11.809361818642103,
    })

    assert (object_eq(le_twists, le_twists_ref))

    le_avg = qa.qmc[0].scalars.LocalEnergy.mean
    le_avg_ref = -11.343673354655264
    assert (value_eq(le_avg, le_avg_ref))
예제 #26
0
    def test_density_analysis():
        import os
        from numpy import array
        from generic import obj
        from qmcpack_analyzer import QmcpackAnalyzer

        tpath = testing.setup_unit_test_output_directory(
            test='qmcpack_analyzer',
            subtest='test_density_analysis',
            file_sets=['diamond_gamma'],
        )

        infile = os.path.join(tpath, 'diamond_gamma/dmc/dmc.in.xml')

        qa = QmcpackAnalyzer(infile, analyze=True, equilibration=5)

        qmc = qa.qmc[0]

        qmc_keys = 'info data scalars scalars_hdf SpinDensity'.split()
        assert (set(qmc.keys()) == set(qmc_keys))

        sd = qmc.SpinDensity

        sd_keys = 'info method_info data u d'.split()
        assert (set(sd.keys()) == set(sd_keys))

        d_keys = 'mean error'.split()
        assert (set(sd.u.keys()) == set(d_keys))
        assert (set(sd.d.keys()) == set(d_keys))

        d_mean = sd.u.mean + sd.d.mean

        d_mean_ref = array(
            [[[0.72833333, 0.604, 0.514], [0.63666667, 0.19533333, 0.19683333],
              [0.51166667, 0.19183333, 0.4175]],
             [[0.6065, 0.19533333, 0.19], [0.19066667, 0.052, 0.129],
              [0.18783333, 0.13433333, 0.10483333]],
             [[0.50633333, 0.19633333, 0.42483333],
              [0.1775, 0.12966667, 0.09983333], [0.417, 0.106, 0.15583333]]],
            dtype=float)

        assert (d_mean.shape == (3, 3, 3))
        assert (value_eq(d_mean, d_mean_ref))
예제 #27
0
    def check_settings_core_noncore():
        nckeys_check = set([
            'command_line', 'debug', 'dependent_modes', 'emulate',
            'file_locations', 'generate_only', 'graph_sims', 'indent',
            'load_images', 'local_directory', 'mode', 'modes', 'monitor',
            'primary_modes', 'progress_tty', 'pseudo_dir', 'pseudopotentials',
            'remote_directory', 'results', 'runs', 'skip_submit', 'sleep',
            'stages', 'stages_set', 'status', 'status_modes', 'status_only',
            'trace', 'verbose'
        ])
        nnckeys_check = set(
            ['basis_dir', 'basissets', 'pseudo_dir', 'pseudopotentials'])
        setkeys_check = set([
            'command_line', 'basis_dir', 'basissets', 'debug',
            'dependent_modes', 'emulate', 'file_locations', 'generate_only',
            'graph_sims', 'indent', 'load_images', 'local_directory', 'mode',
            'modes', 'monitor', 'primary_modes', 'progress_tty', 'pseudo_dir',
            'pseudopotentials', 'remote_directory', 'results', 'runs',
            'skip_submit', 'sleep', 'stages', 'stages_set', 'status',
            'status_modes', 'status_only', 'trace', 'verbose'
        ])
        setkeys_allowed = setkeys_check | Settings.allowed_vars

        nckeys = set(nexus_core.keys())
        nnckeys = set(nexus_noncore.keys())
        setkeys = set(settings.keys())

        assert (nckeys == nckeys_check)
        assert (nnckeys == nnckeys_check)
        assert (setkeys >= setkeys_check)
        assert (setkeys <= setkeys_allowed)

        pairs = [(settings, nexus_core), (settings, nexus_noncore),
                 (nexus_core, nexus_noncore)]
        for o1, o2 in pairs:
            shared_keys = set(o1.keys()) & set(o2.keys())
            for k in shared_keys:
                v1 = o1[k]
                v2 = o2[k]
                if isinstance(v1, obj):
                    assert (object_eq(v1, v2))
                else:
                    assert (value_eq(v1, v2))
예제 #28
0
def test_convert_scalar_to_all():
    from testing import value_eq
    from unit_converter import UnitConverter

    eV_to = {
        'J': 1.60217646e-19,
        'Ha': 0.03674932439858279,
        'Ry': 0.07349864879716558,
        'eV': 1.0,
        'kcal_mol': 23.0605419446755,
        'kJ_mol': 96.48533350089092,
        'K': 11604.505934630948,
        'degC': 11331.355934630948,
        'degF': 20428.440682335706,
    }

    v = UnitConverter.convert_scalar_to_all('eV', 1.0)

    for unit in eV_to.keys():
        assert (value_eq(v[unit], eV_to[unit]))
예제 #29
0
def test_grid_axes_volume():
    import numpy as np
    from testing import value_eq

    grids = get_grids()
    props = get_props()

    for name in sorted(grids.keys()):
        g = grids[name]
        p = props[name]

        gd, sd = g.grid_dim, g.space_dim
        gsd = gd, sd

        embedded = gd != sd

        axvol = g.axes_volume()

        if not g.surface and not embedded:
            assert (value_eq(axvol, 1.0))
        elif g.surface:
            if gsd == (1, 3) and p.sheared:
                assert (value_eq(axvol, np.sqrt(2.0)))
            else:
                assert (value_eq(axvol, 1.0))
            #end if
        else:  # embedded
            if gsd == (1, 2):
                assert (value_eq(axvol, np.sqrt(2.0)))
            elif gsd == (1, 3):
                assert (value_eq(axvol, np.sqrt(3.0)))
            elif gsd == (2, 3):
                if p.sheared:
                    assert (value_eq(axvol, np.sqrt(2.0)))
                else:
                    assert (value_eq(axvol, 1.0))
                #end if
            else:
                assert (1 == 0)
예제 #30
0
def test_analyze():
    import os
    from numpy import array, ndarray
    from generic import obj
    from vasp_analyzer import VaspAnalyzer, VXML, VXMLcoll, OutcarData

    tpath = testing.setup_unit_test_output_directory(
        test='vasp_analyzer',
        subtest='test_analyze',
        file_sets=relax_files,
    )

    incar_path = os.path.join(tpath, 'relax.INCAR')

    # empty init
    va = VaspAnalyzer(incar_path)

    va_ref = obj(info=obj(
        incar_file='relax.INCAR',
        neb=False,
        outcar_file='relax.OUTCAR',
        prefix='relax.',
        xml=False,
        xml_file='relax.vasprun.xml',
        incar=obj(
            ediff=1e-06,
            ediffg=-0.01,
            elmin=5,
            ibrion=1,
            istart=0,
            nelect=130.0,
            nsw=20,
            prec='normal',
        ),
    ), )

    del va.info.path

    assert (object_eq(va, va_ref))

    # full analysis
    va = VaspAnalyzer(incar_path, xml=True, analyze=True)

    del va.info.path

    info = obj(
        incar_file='relax.INCAR',
        neb=False,
        outcar_file='relax.OUTCAR',
        prefix='relax.',
        xml=True,
        xml_file='relax.vasprun.xml',
        incar=obj(
            ediff=1e-06,
            ediffg=-0.01,
            elmin=5,
            ibrion=1,
            istart=0,
            nelect=130.0,
            nsw=20,
            prec='normal',
        ),
    )
    assert (object_eq(va.info, info))

    types = dict(
        Efermi=float,
        core_potential_radii=ndarray,
        core_potentials=ndarray,
        force=ndarray,
        info=obj,
        ion_steps=obj,
        lattice_vectors=ndarray,
        memory=obj,
        position=ndarray,
        pressure=float,
        stress=obj,
        stress_kb=obj,
        time=obj,
        total_drift=ndarray,
        total_energy=float,
        volume=float,
        xmldata=VXML,
    )
    for name, type in types.items():
        assert (name in va)
        assert (isinstance(va[name], type))
    #end for

    simple_data = obj(
        Efermi=-0.5064,
        core_potential_radii=array([1.2059], dtype=float),
        core_potentials=array([
            -56.6601, -56.6601, -56.6601, -56.6601, -57.1969, -57.2036,
            -57.5372, -57.1969, -56.9801, -56.9801, -56.9801, -56.9801,
            -56.4963
        ],
                              dtype=float),
        force=array(
            [[0.132123, -0.132123, -0.009177
              ], [-0.132123, -0.132123, -0.009177],
             [0.132123, 0.132123, -0.009177], [-0.132123, 0.132123, -0.009177],
             [0., 0., 0.002104], [0., 0., -0.000878], [0., 0., 0.004689],
             [0., 0., 0.002104], [-0.0019, 0.0019, 0.005077],
             [0.0019, 0.0019, 0.005077], [-0.0019, -0.0019, 0.005077],
             [0.0019, -0.0019, 0.005077], [0., 0., 0.008385]],
            dtype=float),
        lattice_vectors=array(
            [[5.62024, 0., 0.], [0., 5.62024, 0.], [0., 0., 16.86072]],
            dtype=float),
        position=array(
            [[1.40506, 1.40506, 1.98704], [4.21518, 1.40506, 1.98704],
             [1.40506, 4.21518, 1.98704], [4.21518, 4.21518, 1.98704],
             [0., 0., 3.88944], [0., 2.81012, 3.89432], [2.81012, 0., 3.95815],
             [2.81012, 2.81012, 3.88944], [1.44092, 1.3692, 5.85353],
             [4.17932, 1.3692, 5.85353], [1.44092, 4.25104, 5.85353],
             [4.17932, 4.25104, 5.85353], [0., 2.81012, 7.49145]],
            dtype=float),
        pressure=-29.47,
        total_drift=array([0., 0., 0.042555], dtype=float),
        total_energy=-71.46392704,
        volume=532.58,
    )
    for name, data in simple_data.items():
        assert (value_eq(va[name], data))
    #end for

    memory = obj(
        average=0.0,
        maximum=58808.0,
    )
    assert (object_eq(va.memory, memory))

    stress = obj(
        xx=-12.73119,
        xy=0.0,
        yy=-12.73119,
        yz=0.0,
        zx=0.0,
        zz=-3.92272,
    )
    assert (object_eq(va.stress, stress))

    stress_kb = obj(
        xx=-38.29957,
        xy=0.0,
        yy=-38.29957,
        yz=0.0,
        zx=0.0,
        zz=-11.80082,
    )
    assert (object_eq(va.stress_kb, stress_kb))

    time = obj(
        cpu=229.665,
        elapsed=245.015,
        system=5.815,
        user=223.85,
    )
    assert (object_eq(va.time, time))

    assert (len(va.ion_steps) == 10)
    for n in range(1, 11):
        assert (n in va.ion_steps)
    #end for

    last_step = va.ion_steps[10]
    assert (len(last_step) == 4)
    for n in range(1, 4):
        assert (n in last_step)
        assert (isinstance(last_step[n], OutcarData))
    #end for

    last_data = obj(
        Efermi=-0.5064,
        core_potential_radii=array([1.2059], dtype=float),
        core_potentials=array([
            -56.6601, -56.6601, -56.6601, -56.6601, -57.1969, -57.2036,
            -57.5372, -57.1969, -56.9801, -56.9801, -56.9801, -56.9801,
            -56.4963
        ],
                              dtype=float),
        force=array(
            [[0.132123, -0.132123, -0.009177
              ], [-0.132123, -0.132123, -0.009177],
             [0.132123, 0.132123, -0.009177], [-0.132123, 0.132123, -0.009177],
             [0., 0., 0.002104], [0., 0., -0.000878], [0., 0., 0.004689],
             [0., 0., 0.002104], [-0.0019, 0.0019, 0.005077],
             [0.0019, 0.0019, 0.005077], [-0.0019, -0.0019, 0.005077],
             [0.0019, -0.0019, 0.005077], [0., 0., 0.008385]],
            dtype=float),
        lattice_vectors=array(
            [[5.62024, 0., 0.], [0., 5.62024, 0.], [0., 0., 16.86072]],
            dtype=float),
        position=array(
            [[1.40506, 1.40506, 1.98704], [4.21518, 1.40506, 1.98704],
             [1.40506, 4.21518, 1.98704], [4.21518, 4.21518, 1.98704],
             [0., 0., 3.88944], [0., 2.81012, 3.89432], [2.81012, 0., 3.95815],
             [2.81012, 2.81012, 3.88944], [1.44092, 1.3692, 5.85353],
             [4.17932, 1.3692, 5.85353], [1.44092, 4.25104, 5.85353],
             [4.17932, 4.25104, 5.85353], [0., 2.81012, 7.49145]],
            dtype=float),
        pressure=-29.47,
        total_drift=array([0., 0., 0.042555], dtype=float),
        total_energy=-71.46392704,
        volume=532.58,
        memory=obj(
            average=0.0,
            maximum=58808.0,
        ),
        stress=obj(
            xx=-12.73119,
            xy=0.0,
            yy=-12.73119,
            yz=0.0,
            zx=0.0,
            zz=-3.92272,
        ),
        stress_kb=obj(
            xx=-38.29957,
            xy=0.0,
            yy=-38.29957,
            yz=0.0,
            zx=0.0,
            zz=-11.80082,
        ),
        time=obj(
            cpu=229.665,
            elapsed=245.015,
            system=5.815,
            user=223.85,
        ),
    )

    assert (object_eq(va.ion_steps[10][4], last_data))

    vxml = va.xmldata

    keys = '''
        atominfo
        calculation
        finalpos
        generator
        incar
        initialpos
        kpoints
        parameters
        '''.split()
    assert (set(vxml.modeling.keys()) == set(keys))

    parameters = obj(
        gga_compat=True,
        i_constrained_m=0,
        icorelevel=0,
        lberry=False,
        ldau=False,
        dos=obj(
            efermi=0.0,
            emax=-10.0,
            emin=10.0,
            lorbit=False,
            nedos=301,
            rwigs=-1.0,
        ),
        electronic=obj(
            ediff=1e-06,
            enaug=358.966,
            enmax=230.283,
            eref=0.0,
            ialgo=38,
            irestart=0,
            iwavpr=11,
            nbands=96,
            nelect=130.0,
            nmin=0,
            nreboot=0,
            prec='normal',
            turbo=0,
            electronic_convergence=obj(
                enini=230.283,
                nelm=60,
                nelmdl=-5,
                nelmin=2,
                electronic_convergence_detail=obj(
                    deper=0.3,
                    ebreak=0.0,
                    ldiag=True,
                    lsubrot=True,
                    nrmm=4,
                    time=0.4,
                    weimin=0.001,
                ),
            ),
            electronic_dipolcorrection=obj(
                dipol=array([-100., -100., -100.], dtype=float),
                efield=0.0,
                epsilon=1.0,
                idipol=0,
                ldipol=False,
                lmono=False,
            ),
            electronic_exchange_correlation=obj(
                lasph=False,
                lmetagga=False,
            ),
            electronic_mixer=obj(
                amin=0.1,
                amix=0.4,
                amix_mag=1.6,
                bmix=1.0,
                bmix_mag=1.0,
                electronic_mixer_details=obj(
                    imix=4,
                    inimix=1,
                    maxmix=-45,
                    mixpre=1,
                    mremove=5,
                    wc=100.0,
                ),
            ),
            electronic_projectors=obj(
                lmaxmix=2,
                lmaxpaw=-100,
                lreal=False,
                nlspline=False,
                ropt=0.0,
            ),
            electronic_smearing=obj(
                ismear=1,
                kgamma=True,
                kspacing=0.5,
                sigma=0.2,
            ),
            electronic_spin=obj(
                ispin=1,
                lnoncollinear=False,
                lsorbit=False,
                lspiral=False,
                lzeroz=False,
                magmom=array(
                    [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
                    dtype=float),
                nupdown=-1.0,
                qspiral=array([0., 0., 0.], dtype=float),
                saxis=array([0., 0., 1.], dtype=float),
            ),
            electronic_startup=obj(
                icharg=2,
                iniwav=1,
                istart=0,
            ),
        ),
        electronic_exchange_correlation=obj(
            aexx=0.0,
            aggac=1.0,
            aggax=1.0,
            aldac=1.0,
            aldax=1.0,
            encut4o=-1.0,
            evenonly=False,
            exxoep=0,
            fourorbit=0,
            gga='--',
            hfalpha=0.0,
            hfscreen=0.0,
            hfscreenc=0.0,
            lfockaedft=False,
            lhfcalc=False,
            lhfone=False,
            lmaxfock=0,
            lmodelhf=False,
            lrhfcalc=False,
            lsymgrad=False,
            lthomas=False,
            mcalpha=0.0,
            nbandsgwlow=0,
            nkredx=1,
            nkredy=1,
            nkredz=1,
            nmaxfockae=0,
            oddonly=False,
            precfock='',
            shiftred=False,
            voskown=0,
        ),
        general=obj(
            lcompat=False,
            system=array(['unknown', 'system'], dtype=str),
        ),
        grids=obj(
            addgrid=False,
            ngx=24,
            ngxf=48,
            ngy=24,
            ngyf=48,
            ngz=64,
            ngzf=128,
        ),
        ionic=obj(
            ediffg=-0.01,
            ibrion=1,
            isif=2,
            nfree=0,
            nsw=20,
            potim=0.5,
            pstress=0.0,
            scalee=1.0,
            smass=-3.0,
        ),
        ionic_md=obj(
            apaco=16.0,
            kblock=20,
            nblock=1,
            npaco=256,
            tebeg=0.0001,
            teend=0.0001,
        ),
        linear_response_parameters=obj(
            cshift=0.1,
            deg_threshold=0.002,
            kinter=0,
            lepsilon=False,
            lnabla=False,
            lrpa=False,
            lvel=False,
            omegamax=-1.0,
        ),
        miscellaneous=obj(
            darwinr=0.0,
            darwinv=1.0,
            idiot=3,
            lcorr=True,
            lmusic=False,
            pomass=195.08,
        ),
        model_gw=obj(
            model_alpha=1.0,
            model_eps0=24.58067119,
            model_gw=0,
        ),
        orbital_magnetization=obj(
            avecconst=array([0., 0., 0.], dtype=float),
            lchimag=False,
            lgauge=True,
            lmagbloch=False,
            lnicsall=True,
            magatom=0,
            magdipol=array([0., 0., 0.], dtype=float),
            magpos=array([0., 0., 0.], dtype=float),
            nucind=False,
            orbitalmag=False,
        ),
        performance=obj(
            lasync=False,
            lorbitalreal=False,
            lplane=True,
            lscaaware=False,
            lscalapack=False,
            lscalu=False,
            nblk=-1,
            npar=32,
            nsim=4,
        ),
        response_functions=obj(
            antires=0,
            cshift=-0.1,
            dim=3,
            encutgw=-2.0,
            encutgwsoft=-2.0,
            encutlf=-1.0,
            evenonlygw=False,
            ibse=0,
            l2order=False,
            ladder=False,
            lfxc=False,
            lfxceps=False,
            lhartree=True,
            lmaxmp2=-1,
            lspectral=False,
            ltcte=False,
            ltete=False,
            ltriplet=False,
            lusew=False,
            maxmem=1800,
            nbandsgw=-1,
            nbandso=-1,
            nbandsv=-1,
            nelm=1,
            nkredlfx=1,
            nkredlfy=1,
            nkredlfz=1,
            nomega=0,
            nomegar=0,
            oddonlygw=False,
            omegagrid=0,
            omegamax=-30.0,
            omegatl=-200.0,
            scissor=0.0,
            selfenergy=False,
            telescope=0,
        ),
        symmetry=obj(
            isym=2,
            symprec=1e-05,
        ),
        vdw_dft=obj(
            luse_vdw=False,
            param1=0.1234,
            param2=1.0,
            param3=0.0,
            zab_vdw=-0.8491,
        ),
        writing=obj(
            lcharg=True,
            lelf=False,
            loptics=False,
            lpard=False,
            lvhar=False,
            lvtot=False,
            lwave=True,
            nwrite=2,
            stm=array([0., 0., 0., 0., 0., 0., 0.], dtype=float),
        ),
    )

    assert (object_eq(vxml.modeling.parameters, parameters))