def get_test_info(): if len(test_info) == 0: import os tpath = testing.setup_unit_test_output_directory('qmca', 'test_qmca') exe = testing.executable_path('qmca') dirs = ['diamond_gamma', 'diamond_twist'] for dir in dirs: qa_files_path = testing.unit_test_file_path( 'qmcpack_analyzer', dir) command = 'rsync -a {} {}'.format(qa_files_path, tpath) out, err, rc = execute(command) assert (rc == 0) data_path = os.path.join(tpath, dir) assert (os.path.exists(data_path)) #end for paths = dict( vmc='diamond_gamma/vmc', opt='diamond_gamma/opt', dmc='diamond_gamma/dmc', vmc_twist='diamond_twist/vmc', multi='diamond_gamma', ) test_info['tpath'] = tpath test_info['exe'] = exe for name, path in paths.items(): directories[name] = os.path.join(tpath, path)
def test_fit(): import os tpath = testing.setup_unit_test_output_directory('qmc_fit', 'test_fit') exe = testing.executable_path('qmc-fit') qa_files_path = testing.unit_test_file_path('qmcpack_analyzer', 'diamond_gamma/dmc') command = 'rsync -a {} {}'.format(qa_files_path, tpath) out, err, rc = execute(command) assert (rc == 0) dmc_path = os.path.join(tpath, 'dmc') dmc_infile = os.path.join(dmc_path, 'dmc.in.xml') assert (os.path.exists(dmc_infile)) command = "{} ts --noplot -e 10 -s 1 -t '0.02 0.01 0.005' {}/*scalar*".format( exe, dmc_path) out, err, rc = execute(command) out_ref = ''' fit function : linear fitted formula: (-10.5271 +/- 0.0021) + (-0.28 +/- 0.17)*t intercept : -10.5271 +/- 0.0021 Ha ''' def process_text(t): return t.replace('(', ' ( ').replace(')', ' ) ') #end def process_text out = process_text(out) out_ref = process_text(out_ref) assert (text_eq(out, out_ref, atol=1e-2, rtol=1e-2))
def test_density(): import os tpath = testing.setup_unit_test_output_directory('qdens','test_density') exe = testing.executable_path('qdens') qa_files_path = testing.unit_test_file_path('qmcpack_analyzer','diamond_gamma/dmc') command = 'rsync -a {} {}'.format(qa_files_path,tpath) out,err,rc = execute(command) assert(rc==0) dmc_path = os.path.join(tpath,'dmc') dmc_infile = os.path.join(dmc_path,'dmc.in.xml') assert(os.path.exists(dmc_infile)) files_bef = ''' dmc.err dmc.s000.scalar.dat dmc.s001.stat.h5 dmc.s003.scalar.dat dmc.in.xml dmc.s000.stat.h5 dmc.s002.scalar.dat dmc.s003.stat.h5 dmc.out dmc.s001.scalar.dat dmc.s002.stat.h5 '''.split() assert(check_value_eq(set(os.listdir(dmc_path)),set(files_bef))) command = '{0} -v -e 4 -f xsf -i {1}/dmc.in.xml {1}/*stat.h5'.format(exe,dmc_path) out,err,rc = execute(command) files_aft = ''' dmc.err dmc.s001.stat.h5 dmc.in.xml dmc.s002.scalar.dat dmc.out dmc.s002.SpinDensity_d-err.xsf dmc.s000.scalar.dat dmc.s002.SpinDensity_d+err.xsf dmc.s000.SpinDensity_d-err.xsf dmc.s002.SpinDensity_d.xsf dmc.s000.SpinDensity_d+err.xsf dmc.s002.SpinDensity_u-d-err.xsf dmc.s000.SpinDensity_d.xsf dmc.s002.SpinDensity_u-d+err.xsf dmc.s000.SpinDensity_u-d-err.xsf dmc.s002.SpinDensity_u+d-err.xsf dmc.s000.SpinDensity_u-d+err.xsf dmc.s002.SpinDensity_u+d+err.xsf dmc.s000.SpinDensity_u+d-err.xsf dmc.s002.SpinDensity_u-d.xsf dmc.s000.SpinDensity_u+d+err.xsf dmc.s002.SpinDensity_u+d.xsf dmc.s000.SpinDensity_u-d.xsf dmc.s002.SpinDensity_u-err.xsf dmc.s000.SpinDensity_u+d.xsf dmc.s002.SpinDensity_u+err.xsf dmc.s000.SpinDensity_u-err.xsf dmc.s002.SpinDensity_u.xsf dmc.s000.SpinDensity_u+err.xsf dmc.s002.stat.h5 dmc.s000.SpinDensity_u.xsf dmc.s003.scalar.dat dmc.s000.stat.h5 dmc.s003.SpinDensity_d-err.xsf dmc.s001.scalar.dat dmc.s003.SpinDensity_d+err.xsf dmc.s001.SpinDensity_d-err.xsf dmc.s003.SpinDensity_d.xsf dmc.s001.SpinDensity_d+err.xsf dmc.s003.SpinDensity_u-d-err.xsf dmc.s001.SpinDensity_d.xsf dmc.s003.SpinDensity_u-d+err.xsf dmc.s001.SpinDensity_u-d-err.xsf dmc.s003.SpinDensity_u+d-err.xsf dmc.s001.SpinDensity_u-d+err.xsf dmc.s003.SpinDensity_u+d+err.xsf dmc.s001.SpinDensity_u+d-err.xsf dmc.s003.SpinDensity_u-d.xsf dmc.s001.SpinDensity_u+d+err.xsf dmc.s003.SpinDensity_u+d.xsf dmc.s001.SpinDensity_u-d.xsf dmc.s003.SpinDensity_u-err.xsf dmc.s001.SpinDensity_u+d.xsf dmc.s003.SpinDensity_u+err.xsf dmc.s001.SpinDensity_u-err.xsf dmc.s003.SpinDensity_u.xsf dmc.s001.SpinDensity_u+err.xsf dmc.s003.stat.h5 dmc.s001.SpinDensity_u.xsf '''.split() assert(check_value_eq(set(os.listdir(dmc_path)),set(files_aft),verbose=True)) tot_file = os.path.join(dmc_path,'dmc.s003.SpinDensity_u+d.xsf') pol_file = os.path.join(dmc_path,'dmc.s003.SpinDensity_u-d.xsf') tot = open(tot_file,'r').read() pol = open(pol_file,'r').read() tot_ref = ''' CRYSTAL PRIMVEC 1.78500000 1.78500000 0.00000000 -0.00000000 1.78500000 1.78500000 1.78500000 -0.00000000 1.78500000 PRIMCOORD 2 1 6 0.00000000 0.00000000 0.00000000 6 0.89250000 0.89250000 0.89250000 BEGIN_BLOCK_DATAGRID_3D density BEGIN_DATAGRID_3D_density 4 4 4 0.59500000 0.59500000 0.59500000 1.78500000 1.78500000 0.00000000 -0.00000000 1.78500000 1.78500000 1.78500000 -0.00000000 1.78500000 0.73126076 0.62407496 0.51676366 0.73126076 0.62575089 0.19225114 0.18686389 0.62575089 0.51847569 0.18457799 0.42203355 0.51847569 0.73126076 0.62407496 0.51676366 0.73126076 0.62659840 0.19325900 0.18422995 0.62659840 0.19219866 0.04873728 0.13184395 0.19219866 0.18474638 0.13013188 0.10227670 0.18474638 0.62659840 0.19325900 0.18422995 0.62659840 0.51793019 0.18615766 0.41806405 0.51793019 0.18425005 0.13092538 0.10088238 0.18425005 0.41967003 0.10133434 0.14471118 0.41967003 0.51793019 0.18615766 0.41806405 0.51793019 0.73126076 0.62407496 0.51676366 0.73126076 0.62575089 0.19225114 0.18686389 0.62575089 0.51847569 0.18457799 0.42203355 0.51847569 0.73126076 0.62407496 0.51676366 0.73126076 END_DATAGRID_3D_density END_BLOCK_DATAGRID_3D ''' pol_ref = ''' CRYSTAL PRIMVEC 1.78500000 1.78500000 0.00000000 -0.00000000 1.78500000 1.78500000 1.78500000 -0.00000000 1.78500000 PRIMCOORD 2 1 6 0.00000000 0.00000000 0.00000000 6 0.89250000 0.89250000 0.89250000 BEGIN_BLOCK_DATAGRID_3D density BEGIN_DATAGRID_3D_density 4 4 4 0.59500000 0.59500000 0.59500000 1.78500000 1.78500000 0.00000000 -0.00000000 1.78500000 1.78500000 1.78500000 -0.00000000 1.78500000 0.00106753 0.00015792 -0.00122859 0.00106753 -0.00003402 0.00018762 -0.00051347 -0.00003402 0.00154254 0.00067654 0.00073434 0.00154254 0.00106753 0.00015792 -0.00122859 0.00106753 0.00263956 0.00079744 -0.00118289 0.00263956 -0.00039348 -0.00026396 -0.00069392 -0.00039348 0.00087929 0.00000719 0.00113934 0.00087929 0.00263956 0.00079744 -0.00118289 0.00263956 -0.00013655 -0.00041508 -0.00235212 -0.00013655 0.00003805 -0.00025962 -0.00133495 0.00003805 0.00040692 0.00051699 -0.00198263 0.00040692 -0.00013655 -0.00041508 -0.00235212 -0.00013655 0.00106753 0.00015792 -0.00122859 0.00106753 -0.00003402 0.00018762 -0.00051347 -0.00003402 0.00154254 0.00067654 0.00073434 0.00154254 0.00106753 0.00015792 -0.00122859 0.00106753 END_DATAGRID_3D_density END_BLOCK_DATAGRID_3D ''' assert(text_eq(tot,tot_ref,atol=1e-7)) assert(text_eq(pol,pol_ref,atol=1e-7))
def test_radial_density(): import os tpath = testing.setup_unit_test_output_directory( 'qdens_radial', 'test_radial_density') exe = testing.executable_path('qdens-radial') qr_vmc_files_path = testing.unit_test_file_path( 'qdens_radial', 'diamond_twist/vmc') command = 'rsync -a {} {}'.format(qr_vmc_files_path, tpath) out, err, rc = execute(command) assert (rc == 0) vmc_path = os.path.join(tpath, 'vmc') vmc_infile = os.path.join(vmc_path, 'vmc.g000.twistnum_0.in.xml') assert (os.path.exists(vmc_infile)) vmc_infile = os.path.join(vmc_path, 'vmc.g001.twistnum_1.in.xml') assert (os.path.exists(vmc_infile)) vmc_infile = os.path.join(vmc_path, 'vmc.g002.twistnum_2.in.xml') assert (os.path.exists(vmc_infile)) vmc_infile = os.path.join(vmc_path, 'vmc.g003.twistnum_3.in.xml') assert (os.path.exists(vmc_infile)) files_bef = ''' vmc.avg.s000.SpinDensity_u+d+err.xsf vmc.avg.s000.SpinDensity_u+d-err.xsf vmc.avg.s000.SpinDensity_u+d.xsf vmc.g000.twistnum_0.in.xml vmc.g000.s000.scalar.dat vmc.g001.s000.scalar.dat vmc.g000.twistnum_0.in.g000.qmc vmc.g001.twistnum_1.in.g001.qmc vmc.g001.twistnum_1.in.xml vmc.g002.twistnum_2.in.xml vmc.g002.s000.scalar.dat vmc.g003.s000.scalar.dat vmc.g002.twistnum_2.in.g002.qmc vmc.g003.twistnum_3.in.g003.qmc vmc.g003.twistnum_3.in.xml vmc.out vmc.in vmc.info.xml '''.split() qr_dmc_files_path = testing.unit_test_file_path( 'qdens_radial', 'diamond_twist/dmc') command = 'rsync -a {} {}'.format(qr_dmc_files_path, tpath) out, err, rc = execute(command) assert (rc == 0) dmc_path = os.path.join(tpath, 'dmc') dmc_infile = os.path.join(dmc_path, 'dmc.g000.twistnum_0.in.xml') assert (os.path.exists(dmc_infile)) dmc_infile = os.path.join(dmc_path, 'dmc.g001.twistnum_1.in.xml') assert (os.path.exists(dmc_infile)) dmc_infile = os.path.join(dmc_path, 'dmc.g002.twistnum_2.in.xml') assert (os.path.exists(dmc_infile)) dmc_infile = os.path.join(dmc_path, 'dmc.g003.twistnum_3.in.xml') assert (os.path.exists(dmc_infile)) files_bef = ''' dmc.avg.s001.SpinDensity_u+d+err.xsf dmc.avg.s001.SpinDensity_u+d-err.xsf dmc.avg.s001.SpinDensity_u+d.xsf dmc.g001.s001.scalar.dat dmc.g000.s000.scalar.dat dmc.g000.s001.scalar.dat dmc.g000.twistnum_0.in.g000.qmc dmc.g001.twistnum_1.in.g001.qmc dmc.g000.twistnum_0.in.xml dmc.g001.twistnum_1.in.xml dmc.g001.s000.scalar.dat dmc.g002.s000.scalar.dat dmc.g002.s001.scalar.dat dmc.g003.s001.scalar.dat dmc.g002.twistnum_2.in.g002.qmc dmc.g003.twistnum_3.in.g003.qmc dmc.g002.twistnum_2.in.xml dmc.g003.twistnum_3.in.xml dmc.g003.s000.scalar.dat dmc.in dmc.out '''.split() assert (check_value_eq(set(os.listdir(dmc_path)), set(files_bef))) # VMC non-cumulative command = '{0} -s C -r 0.6 {1}/vmc.avg.s000.SpinDensity_u+d.xsf'.format( exe, vmc_path) out, err, rc = execute(command) # Assert that return code is 0 assert (rc == 0) # Assert that output is consistent with reference out_ref = ''' Norm: tot = 8.00000003 Non-Cumulative Value of C Species at Cutoff 0.6 is: 4.773264912162242 ''' assert (text_eq(out, out_ref)) # VMC cumulative command = '{0} -s C -r 0.6 -c {1}/vmc.avg.s000.SpinDensity_u+d.xsf'.format( exe, vmc_path) out, err, rc = execute(command) # Assert that return code is 0 assert (rc == 0) # Assert that output is consistent with reference out_ref = ''' Norm: tot = 8.00000003 Cumulative Value of C Species at Cutoff 0.6 is: 1.0684248641866259 ''' # DMC extrapolated non-cumulative command = '{0} -s C -r 0.6 --vmc={1}/vmc.avg.s000.SpinDensity_u+d.xsf {2}/dmc.avg.s001.SpinDensity_u+d.xsf'.format( exe, vmc_path, dmc_path) out, err, rc = execute(command) # Assert that return code is 0 assert (rc == 0) # Assert that output is consistent with reference out_ref = ''' Extrapolating from VMC and DMC densities... Norm: tot = 7.999999969999998 Non-Cumulative Value of C Species at Cutoff 0.6 is: 4.910093964664309 ''' assert (text_eq(out, out_ref)) # DMC extrapolated cumulative command = '{0} -s C -r 0.6 -c --vmc={1}/vmc.avg.s000.SpinDensity_u+d.xsf {2}/dmc.avg.s001.SpinDensity_u+d.xsf'.format( exe, vmc_path, dmc_path) out, err, rc = execute(command) # Assert that return code is 0 assert (rc == 0) # Assert that output is consistent with reference out_ref = ''' Extrapolating from VMC and DMC densities... Norm: tot = 7.999999969999998 Cumulative Value of C Species at Cutoff 0.6 is: 1.1078267486386275 ''' assert (text_eq(out, out_ref)) # DMC extrapolated cumulative with error bar command = '{0} -s C -r 0.6 -c -n 3 --seed=0 --vmc={1}/vmc.avg.s000.SpinDensity_u+d.xsf --vmcerr={1}/vmc.avg.s000.SpinDensity_u+d+err.xsf --dmcerr={2}/dmc.avg.s001.SpinDensity_u+d+err.xsf {2}/dmc.avg.s001.SpinDensity_u+d.xsf'.format( exe, vmc_path, dmc_path) out, err, rc = execute(command) # Assert that return code is 0 assert (rc == 0) # Assert that output is consistent with reference out_ref = ''' Extrapolating from VMC and DMC densities... Resampling to obtain error bar (NOTE: This can be slow)... Will compute 3 samples... sample: 0 sample: 1 sample: 2 Norm: tot = 7.999999969999998 Cumulative Value of C Species at Cutoff 0.6 is: 1.1078267486386275+/-0.0016066467833404942 ''' assert (text_eq(out, out_ref))
def test_incorporate_result(): import os import shutil from subprocess import Popen, PIPE from numpy import array from generic import NexusError, obj from nexus_base import nexus_core from test_vasp_simulation import setup_vasp_sim as get_vasp_sim from test_vasp_simulation import pseudo_inputs as vasp_pseudo_inputs from test_qmcpack_converter_simulations import get_pw2qmcpack_sim from test_qmcpack_converter_simulations import get_convert4qmc_sim from test_qmcpack_converter_simulations import get_pyscf_to_afqmc_sim pseudo_inputs = obj(vasp_pseudo_inputs) tpath = testing.setup_unit_test_output_directory( 'qmcpack_simulation', 'test_incorporate_result', **pseudo_inputs) nexus_core.runs = '' nexus_core.results = '' # incorporate vasp structure sim = get_qmcpack_sim(identifier='qmc_vasp_structure', tiling=(2, 2, 2)) vasp_struct = get_vasp_sim(tpath, identifier='vasp_structure', files=True) assert (sim.locdir.strip('/') == tpath.strip('/')) pc_file = 'diamond_POSCAR' cc_file = vasp_struct.identifier + '.CONTCAR' shutil.copy2(os.path.join(tpath, pc_file), os.path.join(tpath, cc_file)) result = vasp_struct.get_result('structure', None) ion0 = sim.input.get('ion0') c = ion0.groups.C cp0 = c.position[0].copy() s = result.structure.copy() s.change_units('B') rp0 = s.pos[0] zero = array([0, 0, 0], dtype=float) assert (value_eq(c.position[0], cp0, atol=1e-8)) c.position[0] += 0.1 assert (not value_eq(c.position[0], cp0, atol=1e-8)) assert (not value_eq(c.position[0], rp0, atol=1e-8)) sim.incorporate_result('structure', result, vasp_struct) ion0 = sim.input.get('ion0') c = ion0.groups.C assert (value_eq(c.position[0], rp0, atol=1e-8)) # incorporate pw2qmcpack orbitals sim = get_qmcpack_sim(identifier='qmc_p2q_orbitals') p2q_orb = get_pw2qmcpack_sim(identifier='p2q_orbitals') result = p2q_orb.get_result('orbitals', None) p2q_output_path = os.path.join(tpath, 'pwscf_output') if not os.path.exists(p2q_output_path): os.makedirs(p2q_output_path) #end if p2q_h5file = os.path.join(p2q_output_path, 'pwscf.pwscf.h5') f = open(p2q_h5file, 'w') f.write('') f.close() assert (os.path.exists(p2q_h5file)) spo = sim.input.get('bspline') assert (spo.href == 'MISSING.h5') sim.incorporate_result('orbitals', result, p2q_orb) assert (spo.href == 'pwscf_output/pwscf.pwscf.h5') # incorporate convert4qmc orbitals sim = get_qmcpack_sim(identifier='qmc_c4q_orbitals') c4q_orb = get_convert4qmc_sim(identifier='c4q_orbitals') result = c4q_orb.get_result('orbitals', None) wfn_file = os.path.join(tpath, 'c4q_orbitals.wfj.xml') wfn_file2 = os.path.join(tpath, 'c4q_orbitals.orbs.h5') input = sim.input.copy() dset = input.get('determinantset') dset.href = 'orbs.h5' qs = input.simulation.qmcsystem del input.simulation input.qmcsystem = qs input.write(wfn_file) assert (os.path.exists(wfn_file)) open(wfn_file2, 'w').write('fake') assert (os.path.exists(wfn_file2)) from qmcpack_input import QmcpackInput inp = QmcpackInput(wfn_file) dset = sim.input.get('determinantset') assert ('href' not in dset) sim.incorporate_result('orbitals', result, c4q_orb) dset = sim.input.get('determinantset') assert (dset.href == 'c4q_orbitals.orbs.h5') # incorporate qmcpack jastrow sim = get_qmcpack_sim(identifier='qmc_jastrow') qa_files_path = testing.unit_test_file_path('qmcpack_analyzer', 'diamond_gamma/opt') command = 'rsync -a {} {}'.format(qa_files_path, tpath) process = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, close_fds=True) out, err = process.communicate() opt_path = os.path.join(tpath, 'opt') opt_infile = os.path.join(opt_path, 'opt.in.xml') assert (os.path.exists(opt_infile)) opt_file = os.path.join(opt_path, 'opt.s004.opt.xml') assert (os.path.exists(opt_file)) result = obj(opt_file=opt_file) sim.incorporate_result('jastrow', result, sim) j = sim.input.get('jastrow') j_text = j.write().replace('"', ' " ') j_text_ref = ''' <jastrow type="Two-Body" name="J2" function="bspline" print="yes"> <correlation speciesA="u" speciesB="u" size="8" rcut="2.3851851232"> <coefficients id="uu" type="Array"> 0.2576630369 0.1796686015 0.1326653657 0.09407180823 0.06267013118 0.03899100023 0.02070235604 0.009229775746 </coefficients> </correlation> <correlation speciesA="u" speciesB="d" size="8" rcut="2.3851851232"> <coefficients id="ud" type="Array"> 0.4385891515 0.3212399072 0.2275448261 0.1558506324 0.1009589176 0.06108433554 0.03154274436 0.01389485975 </coefficients> </correlation> </jastrow> '''.replace('"', ' " ') assert (text_eq(j_text, j_text_ref)) # incorporate qmcpack wavefunction sim = get_qmcpack_sim(identifier='qmc_wavefunction') sim.incorporate_result('wavefunction', result, sim) j = sim.input.get('jastrow') j_text = j.write().replace('"', ' " ') assert (text_eq(j_text, j_text_ref)) # incorporate qmcpack wavefunction afqmc sim = get_qmcpack_sim(type='afqmc', identifier='qmc_wf_afqmc') p2a_wf = get_pyscf_to_afqmc_sim(identifier='p2a_wavefunction') result = p2a_wf.get_result('wavefunction', None) del result.xml wfn = sim.input.get('wavefunction') ham = sim.input.get('hamiltonian') assert (wfn.filename == 'MISSING.h5') assert (ham.filename == 'MISSING.h5') sim.incorporate_result('wavefunction', result, p2a_wf) assert (wfn.filename == 'p2a_wavefunction.afqmc.h5') assert (ham.filename == 'p2a_wavefunction.afqmc.h5') clear_all_sims() restore_nexus()
def test_get_result(): import os from subprocess import Popen, PIPE from generic import NexusError, obj from nexus_base import nexus_core from qmcpack_analyzer import QmcpackAnalyzer tpath = testing.setup_unit_test_output_directory('qmcpack_simulation', 'test_get_result', divert=True) nexus_core.runs = '' nexus_core.results = '' sim = get_qmcpack_sim() assert (sim.locdir.rstrip('/') == tpath.rstrip('/')) try: sim.get_result('unknown', None) raise FailedTest except NexusError: None except FailedTest: failed() except Exception as e: failed(str(e)) #end try result = sim.get_result('cuspcorr', None) result_ref = obj( updet_cusps='updet.cuspInfo.xml', spo_dn_cusps='qmcpack.spo-dn.cuspInfo.xml', spo_up_cusps='qmcpack.spo-up.cuspInfo.xml', dndet_cusps='downdet.cuspInfo.xml', ) assert (set(result.keys()) == set(result_ref.keys())) for k, v in result.items(): assert (v.replace(tpath, '').lstrip('/') == result_ref[k]) #end for qa_files_path = testing.unit_test_file_path('qmcpack_analyzer', 'diamond_gamma/opt') command = 'rsync -a {} {}'.format(qa_files_path, tpath) process = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, close_fds=True) out, err = process.communicate() opt_path = os.path.join(tpath, 'opt') opt_infile = os.path.join(opt_path, 'opt.in.xml') assert (os.path.exists(opt_infile)) qa = QmcpackAnalyzer(opt_infile, analyze=True, equilibration=5) assert (qa.results.optimization.optimal_file == 'opt.s003.opt.xml') sim.create_directories() qa.save(os.path.join(sim.imresdir, sim.analyzer_image)) result = sim.get_result('jastrow', None) result_ref = obj(opt_file='opt.s003.opt.xml', ) assert (set(result.keys()) == set(result_ref.keys())) for k, v in result.items(): assert (v.replace(tpath, '').lstrip('/') == result_ref[k]) #end for clear_all_sims() restore_nexus()