def get_qpts(inp, ngqpt, manager=None, workdir="."): qpt_vars = dict( ngkpt=ngqpt, shiftk=[0., 0., 0.], nshiftk=1, prtvol=-2, ) w = _setup_faketask('qpt', manager=manager, workdir=workdir) fake_input = inp.deepcopy() fake_input.set_variables(**qpt_vars) fake_task = w.register(fake_input) w.allocate() w.start() nc = NetcdfReader(fake_task.opath_from_ext('OUT')) qpts = nc.read_variable('kpt')[:].reshape((-1, 3)) mem = 0 for line in fake_task.log_file.readlines(): if "P This job should need less than" in line: mem = float(line.split()[7]) break w.rmtree() return qpts, mem
def check_hm(flow, n = 9): tasks = [] i = 0 for fl in flow[:n]: for task in fl: tasks.append(task) for i,task in enumerate(flow[n]): dos = task.outdir.has_abiext('DOS') if dos: ncdf = NetcdfReader(task.outdir.has_abiext('GSR')) acell = 2*ncdf.read_variable('primitive_vectors')[0][1] cycle = GroundStateScfCycle.from_file(tasks[i].output_file.path) moment = cycle.last_iteration['magn'] etotal = cycle.last_etotal gapup,gapdn = is_hm(dos) name = tasks[i]._name.split('_') alloy = name[0] phase = name[1] print '%s\t%s\t%f\t%f\t%f\t%f\t%f' % (alloy,phase,acell,etotal,moment,gapup,gapdn)
def check_hm(flow): tasks = [] i = 0 for fl in flow[:9]: for task in fl: tasks.append(task) for i,task in enumerate(flow[9]): dos = task.outdir.has_abiext('DOS') if dos: print(tasks[i]._name) ncdf = NetcdfReader(task.outdir.has_abiext('GSR')) acell = 2*ncdf.read_variable('primitive_vectors')[0][1] cycle = GroundStateScfCycle.from_file(tasks[i].output_file.path) moment = cycle.last_iteration['magn'] etotal = cycle.last_etotal print(' acell:' + str(acell*0.529177249)) print(' momen:' + str(moment)) print(' etotl:' + str(etotal)) is_hm(dos)
def get_all_kpoints(inp, manager=None, workdir="."): kpt_vars = dict( prtvol=-1, kptopt=3, ) w = _setup_faketask('kpt', manager=manager, workdir=workdir) fake_input = inp.deepcopy() fake_input.set_variables(**kpt_vars) fake_task = w.register(fake_input) w.allocate() w.start(wait=True) nc = NetcdfReader(fake_task.opath_from_ext('OUT')) kpts = nc.read_variable('kpt')[:].reshape((-1, 3)) mem = 0 for line in fake_task.log_file.readlines(): if "P This job should need less than" in line: mem = float(line.split()[7]) break w.rmtree() return kpts, mem