Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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