Ejemplo n.º 1
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))
Ejemplo n.º 2
0
    def read_stat_h5(self,*files,equil=0,savefile=None):

        save = False
        if savefile is not None:
            if os.path.exists(savefile):
                vlog('\nLoading from save file {}'.format(savefile))
                self.load(savefile)
                vlog('Done',n=1,time=True)
                return
            else:
                save = True
            #end if            
        #end if

        vlog('\nReading n(k) data from stat.h5 files',time=True)
        k   = []
        nk  = []
        nke = []
        if len(files)==1 and isinstance(files[0],(list,tuple)):
            files = files[0]
        #end if
        for file in files:
            if isinstance(file,StatFile):
                stat = file
            else:
                vlog('Reading stat.h5 file',n=1,time=True)
                stat = StatFile(file,observables=['momentum_distribution'])
            #end if
            vlog('Processing n(k) data from stat.h5 file',n=1,time=True)
            vlog('filename = {}'.format(stat.filepath),n=2)
            group = stat.observable_groups(self,single=True)

            kpoints = np.array(group['kpoints'])
            nofk    = np.array(group['value'])

            nk_mean,nk_var,nk_error,nk_kappa = simstats(nofk[equil:],dim=0)

            k.extend(kpoints)
            nk.extend(nk_mean)
            nke.extend(nk_error)
        #end for
        vlog('Converting concatenated lists to arrays',n=1,time=True)
        data = obj(
            tot = obj(
                k      = np.array(k),
                nk     = np.array(nk),
                nk_err = np.array(nke),
                )
            )
        self.set_attribute('raw',data)

        if save:
            vlog('Saving to file {}'.format(savefile),n=1)
            self.save(savefile)
        #end if

        vlog('stat.h5 file read finished',n=1,time=True)
Ejemplo n.º 3
0
 def md_statistics(self, equil=None, autocorr=None):
     import numpy as np
     from numerics import simstats, simplestats
     mds = obj()
     for q, v in self.md_data.items():
         if equil is not None:
             v = v[equil:]
         #end if
         if autocorr is None:
             mean, var, error, kappa = simstats(v)
         else:
             nv = len(v)
             nb = int(np.floor(float(nv) / autocorr))
             nexclude = nv - nb * autocorr
             v = v[nexclude:]
             v.shape = nb, autocorr
             mean, error = simplestats(v.mean(axis=1))
         #end if
         mds[q] = mean, error
     #end for
     return mds
Ejemplo n.º 4
0
        nm.append(nm_tmp)
    #end for

    nm = np.array(nm)

    # Obtain dimensions of number matrices

    nblocks, nstates, nstates = nm[0][0].shape

    # Store stats of number matrix corresponding to single determinant with no jastrow, projected
    # on MO basis

    from numerics import simstats

    m_mo, v_mo, e_mo, k_mo = simstats(nm, dim=2)  # stats over blocks

    # Perform "unitary" transform on each block's number matrix individually
    # and store in nmqmcu (i.e., up component of number matrix prime)
    # After the transformation, number matrix has been transformed from
    # the MO basis to the AO basis

    s = sp

    nmqmc = np.empty((nKpoints, nSpin, nblocks, nAtomicWFC, nAtomicWFC),
                     dtype=complex)
    for k in range(nKpoints):
        for b in range(nblocks):
            nmqmc[k][s][b] = kWeights[k] * np.matmul(
                atomicProjections[k][s][:, :],
                np.matmul(nm[k][0][b][:, :],