def from_dict(cls,d): path = Path.from_dict(d['kpath']) instance = cls(d['bands'],d['kpoints'],kpath=path, fermie=d['fermie'],weights=d['weights'],**d['kwargs']) instance._xlim = d['_xlim'] instance._ylim = d['_ylim'] return instance
def test_yamboanalyse_gw_si(self): """ Analyse the yambo GW .json output files """ y = YamboAnalyser('gw_conv') netcdf_files = y.get_files_type('netcdf_gw') keys = sorted(netcdf_files.keys()) assert keys == [ 'BndsRnXp_1_20', 'BndsRnXp_1_30', 'FFTGvecs_00010', 'FFTGvecs_00015', 'NGsBlkXp_00002', 'NGsBlkXp_00005', 'reference' ] netcdf_files = y.get_files_type('netcdf_gw', 'FFTGvecs') keys = sorted(netcdf_files.keys()) assert keys == ['FFTGvecs_00010', 'FFTGvecs_00015'] netcdf_files = y.get_files_type('netcdf_gw', ('FFTGvecs', 'reference')) keys = sorted(netcdf_files.keys()) assert keys == ['FFTGvecs_00010', 'FFTGvecs_00015', 'reference'] #test getting data ks_bands, qp_bands = y.get_bands(tags='reference') ks_bands.plot(show=False) print(ks_bands) qp_bands.plot(show=False) print(qp_bands) #test get_path path = Path([[[1.0, 1.0, 1.0], 'G'], [[0.0, 0.5, 0.5], 'X'], [[0.0, 0.0, 0.0], 'G'], [[0.5, 0.0, 0.0], 'L']], [20, 20, 20]) ks_bands_path, qp_bands_path = y.get_bands(tags='FFTGvecs', path_kpoints=path, type_calc=('gw')) qp_bands_path.plot(show=False)
def test_yamboexcitondb(self): #define path in reduced coordinates npoints = 20 path = Path( [[[0.0, 0.0, 0.0], '$\\Gamma$'], [[0.5, 0.0, 0.0], 'M'], [[1. / 3, 1. / 3, 0.0], 'K'], [[0.0, 0.0, 0.0], '$\\Gamma$']], [int(npoints * 2), int(npoints), int(np.sqrt(5) * npoints)]) #load databases lat = YamboLatticeDB.from_db_file( os.path.join(test_path, 'SAVE', 'ns.db1')) exc = YamboExcitonDB.from_db_file(lat, folder=os.path.join( test_path, 'yambo')) electrons = YamboElectronsDB(lat, save=os.path.join(test_path, 'SAVE')) #show output sort_e, sort_i = exc.get_sorted() exc.get_degenerate(1) #write exc_I.dat and exc_E.dat exc.write_sorted('exc') #calculate chi w, chi = exc.get_chi() #load reference eps_filename = os.path.join(test_path, 'o-yambo.eps_q1_diago_bse') w_ref, chi_imag_ref, chi_real_ref = np.loadtxt(eps_filename, unpack=True)[:3] #get amplitude and phases kpoints, amplitude, phase = exc.get_amplitudes_phases(( 1, 0, )) #exciton_bandstructure exc.plot_exciton_bs(electrons, path, ( 1, 2, ), args_plot={'c': 'g'}, space='bands', show=False)
def test_yambolatticedb(self): """ test latticedb """ #open latticedb filename = os.path.join(test_path,'SAVE/ns.db1') ydb = YamboLatticeDB.from_db_file(filename) #write json file ydb.write_json('lattice.json') string1 = str(ydb) #read jsonfile ydb.from_json_file('lattice.json') string2 = str(ydb) assert string1 == string2 p = Path([ [[1.0,1.0,1.0],'G'], [[0.0,0.5,0.5],'X'], [[0.0,0.0,0.0],'G'], [[0.5,0.0,0.0],'L']], [20,20,20]) bands_kpoints, bands_indexes, path_car = ydb.get_path(p) print(ydb)
import shutil from yambopy.data.structures import BN from qepy.lattice import Path from qepy.matdyn import Matdyn from yambopy.io.factories import PwNscfTasks, PwBandsTasks, PwRelaxTasks from yambopy.flow import YambopyFlow, PwTask, E2yTask, YamboTask from schedulerpy import Scheduler from yambopy import yambopyenv nscf_bands = 60 kpoints = [6,6,1] nscf_kpoints = [12,12,1] ecut = 20 npoints = 10 path_kpoints = Path([ [[0.0, 0.0, 0.0],'G'], [[0.5, 0.0, 0.0],'M'], [[1./3,1./3,0.0],'K'], [[0.0, 0.0, 0.0],'G']], [int(npoints*2),int(npoints),int(sqrt(5)*npoints)]) def relax(): qe_relax_atoms_task, qe_relax_cell_task, qe_scf_task = PwRelaxTasks(BN,kpoints,ecut,cell_dofree='2Dxy',pseudo_dir="/Users/alejandro/Software/yambopy/tutorial/bn/pseudos") relax_flow = YambopyFlow.from_tasks('relax_flow',[qe_relax_atoms_task,qe_relax_cell_task,qe_scf_task]) relax_flow.create(agressive=True) relax_flow.run() def bands(): pw_scf,pw_bands = PwBandsTasks(BN,kpoints,ecut,nscf_bands,path_kpoints,spin="spinor",pseudo_dir="/Users/alejandro/Software/yambopy/tutorial/bn/pseudos") bands_flow = YambopyFlow.from_tasks('bands_flow',[pw_scf,pw_bands]) bands_flow.create(agressive=True) bands_flow.run()
import shutil from yambopy.data.structures import Si from qepy import PwXML from qepy.lattice import Path from qepy.matdyn import Matdyn from yambopy.io.factories import PwNscfTasks, PwBandsTasks, PwRelaxTasks from yambopy.flow import YambopyFlow, PwTask, E2yTask, YamboTask from schedulerpy import Scheduler from yambopy import yambopyenv nscf_bands = 10 kpoints = [2, 2, 2] nscf_kpoints = [4, 4, 4] ecut = 30 path_kpoints = Path([[[1.0, 1.0, 1.0], '$\Gamma$'], [[0.0, 0.5, 0.5], '$X$'], [[0.0, 0.0, 0.0], '$\Gamma$'], [[0.5, 0.0, 0.0], '$L$']], [20, 20, 20]) pseudo_dir = '../../pseudos' def relax(): qe_relax_atoms_task, qe_relax_cell_task, qe_scf_task = PwRelaxTasks( Si, kpoints, ecut, cell_dofree='all', pseudo_dir=pseudo_dir) relax_flow = YambopyFlow.from_tasks( 'relax_flow', [qe_relax_atoms_task, qe_relax_cell_task, qe_scf_task]) relax_flow.create(agressive=True) relax_flow.run() def bands():
N=[14.0067,"N.pbe-mt_fhi.UPF"]) atoms_sc = [['N' , [0.0000000000 , 0.0000000000 ,-0.0000000000 ]], ['N' , [0.5000000000 , 0.0000000000 , 0.0000000000 ]], ['N' , [0.0000000000 , 0.5000000000 , 0.0000000000 ]], ['N' , [0.5000000000 , 0.5000000000 , 0.0000000000 ]], ['B' , [0.1666666667 , 0.3333333333 , 0.0000000000 ]], ['B' , [0.6666666667 , 0.3333333333 , 0.0000000000 ]], ['B' , [0.1666666667 , 0.8333333333 , 0.0000000000 ]], ['B' , [0.6666666667 , 0.8333333333 , 0.0000000000 ]]] #occ = dict(occupations='smearing', smearing='mp', degauss=0.01) BN_sc = dict(lattice=lattice_sc,atypes=atypes,atoms=atoms_sc) path_kpoints_pc = Path([ [[0.0, 0.0, 0.0],'$\Gamma$'], [[0.5, 0.0, 0.0],'M'], [[1./3, 1./3,0.0],'K'], [[0.0, 0.0, 0.0],'$\Gamma$']], [int(npoints*2),int(npoints),int(sqrt(5)*npoints)]) path_kpoints_sc = Path([ [[0.0, 0.0, 0.0],'$\Gamma$'], [[1.0, 0.0, 0.0],'M'], [[2./3, 2./3,0.0],'K'], [[0.0, 0.0, 0.0],'$\Gamma$']], [int(npoints*2),int(npoints),int(sqrt(5)*npoints)]) def bands(): pw_scf_pc,pw_bands_pc = PwBandsTasks(BN,kpoints_pc,ecut,nscf_bands_pc,path_kpoints_pc,spin="spinor",pseudo_dir="../../../bn/pseudos") bands_flow = YambopyFlow.from_tasks('bands_pc',[pw_scf_pc,pw_bands_pc]) bands_flow.create(agressive=True) bands_flow.run()