def read(self): """ """ tree = os.walk(self.ps_name+'_df_run_full') for dirs in tree: file_name = os.path.join(dirs[0], 'deltadata.txt') if os.path.isfile(file_name): f = open(file_name, 'r') lines = f.readlines() try: df = float(lines[0].split()[3]) except ValueError: print('warning', lines[0].split()[3]) df = abs(complex(lines[0].split()[3])) #print lines[0], df #print dirs[0] location = os.path.split(dirs[0]) #print location base = os.path.join(*location[0:len(location)-1]) out_file = os.path.join(base, 't3', 'outdata', 'out_GSR.nc') #print out_file out = NetcdfReader(out_file) if not isinstance(out.read_value('ecut'), collections.Iterable): ecut = out.read_value('ecut') etotal = out.read_value('etotal') elif not isinstance(out.read_value('ecut')[0], collections.Iterable): ecut = out.read_value('ecut')[0] etotal = out.read_value('etotal')[0] else: raise Exception self.etotal_data.update({ecut: etotal}) self.df_data.update({ecut: df}) self.pseudo.dojo_report['delta_factor'] = self.df_data self.pseudo.dojo_report['total_energy'] = self.etotal_data
def read_convergence_data(self, data_dir): gwrun = os.path.join(data_dir, 'out_SIGRES.nc') scfrunout = os.path.join(data_dir, 'out_OUT.nc') scfruneig = os.path.join(data_dir, 'out_EIG.nc') results = {} if os.path.isfile(gwrun): # return the gap at gamma data = NetcdfReader(gwrun) data.print_tree() if not isinstance(data.read_value('ecuteps'), collections.Iterable): ecuteps = data.read_value('ecuteps') elif not isinstance(data.read_value('ecuteps')[0], collections.Iterable): ecuteps = data.read_value('ecuteps')[0] else: raise Exception if not isinstance(data.read_value('sigma_nband'), collections.Iterable): sigma_nband = data.read_value('sigma_nband') elif not isinstance(data.read_value('sigma_nband')[0], collections.Iterable): sigma_nband = data.read_value('sigma_nband')[0] else: raise Exception gwgap = data.read_value('egwgap')[0][0] #gwgap = min(data.read_value('egwgap')[0]) if not isinstance(gwgap, float): raise Exception results = {'ecuteps': float(Ha_to_eV * ecuteps), 'nbands': int(sigma_nband), 'gwgap': float(gwgap)} data.close() return results if os.path.isfile(scfruneig): # return the lowest and hightest eigenvalue at gamma data = NetcdfReader(scfruneig) out = NetcdfReader(scfrunout) if data.read_value('Eigenvalues')[0][0][-1] < 2.0: # bad way to select only the scf results .. if not isinstance(out.read_value('ecut'), collections.Iterable): ecut = out.read_value('ecut') elif not isinstance(out.read_value('ecut')[0], collections.Iterable): ecut = out.read_value('ecut')[0] else: raise Exception results = {'ecut': Ha_to_eV * ecut, 'min': data.read_value('Eigenvalues')[0][0][0]*Ha_to_eV, 'max': data.read_value('Eigenvalues')[0][0][-1]*Ha_to_eV, 'full_width': (data.read_value('Eigenvalues')[0][0][-1] - data.read_value('Eigenvalues')[0][0][0])*Ha_to_eV} data.close() return results
def read_convergence_data(self, data_dir): gwrun = os.path.join(data_dir, 'out_SIGRES.nc') scfrunout = os.path.join(data_dir, 'out_OUT.nc') scfruneig = os.path.join(data_dir, 'out_EIG.nc') results = {} if os.path.isfile(gwrun): # return the gap at gamma data = NetcdfReader(gwrun) data.print_tree() if not isinstance(data.read_value('ecuteps'), collections.Iterable): ecuteps = data.read_value('ecuteps') elif not isinstance( data.read_value('ecuteps')[0], collections.Iterable): ecuteps = data.read_value('ecuteps')[0] else: raise Exception if not isinstance(data.read_value('sigma_nband'), collections.Iterable): sigma_nband = data.read_value('sigma_nband') elif not isinstance( data.read_value('sigma_nband')[0], collections.Iterable): sigma_nband = data.read_value('sigma_nband')[0] else: raise Exception gwgap = data.read_value('egwgap')[0][0] #gwgap = min(data.read_value('egwgap')[0]) if not isinstance(gwgap, float): raise Exception results = { 'ecuteps': float(Ha_to_eV * ecuteps), 'nbands': int(sigma_nband), 'gwgap': float(gwgap) } data.close() return results if os.path.isfile(scfruneig): # return the lowest and hightest eigenvalue at gamma data = NetcdfReader(scfruneig) out = NetcdfReader(scfrunout) if data.read_value('Eigenvalues')[0][0][ -1] < 2.0: # bad way to select only the scf results .. if not isinstance(out.read_value('ecut'), collections.Iterable): ecut = out.read_value('ecut') elif not isinstance( out.read_value('ecut')[0], collections.Iterable): ecut = out.read_value('ecut')[0] else: raise Exception results = { 'ecut': Ha_to_eV * ecut, 'min': data.read_value('Eigenvalues')[0][0][0] * Ha_to_eV, 'max': data.read_value('Eigenvalues')[0][0][-1] * Ha_to_eV, 'full_width': (data.read_value('Eigenvalues')[0][0][-1] - data.read_value('Eigenvalues')[0][0][0]) * Ha_to_eV } data.close() return results