def calculate(model, domain_size, buffer_size=0, diis=True):
    hf = dchf.DCHF(model)
    assign_chain_domains(hf, domain_size, buffer_size)

    # Since the convergence criterion is never met an exception will be raised
    try:
        hf.kernel(tolerance=0, maxiter=maxiter, fock_hook="diis" if diis else None)
    except RuntimeError:
        pass
    return hf.convergence_history
def setup_full(model):
    hf = dchf.DCHF(model)
    assign_chain_domains(hf, model.natm, 0)
    return hf
times = []
titles = []
errors = []

pyplot.figure(figsize=(12, 4.8))
pyplot.subplot(121)
for domain_size in [2, 4, 6, 8, 12, 24]:
    print "Size={:d}".format(domain_size)
    x = list(sorted(set([0, 2, (domain_size // 4) * 2, domain_size])))
    y = []
    for buffer_size in x:
        print "  buff={:d}".format(buffer_size)

        t = time.time()
        hf = dchf.DCHF(model)
        assign_chain_domains(hf, domain_size, buffer_size)
        hf.kernel(tolerance=1e-9, maxiter=30)
        t = time.time() - t
        times.append(t)

        error = abs(ref_e - hf.e_tot)

        titles.append("{:d}({:d})".format(domain_size, buffer_size))
        errors.append(error)
        y.append(error)

        if buffer_size + domain_size >= N:
            break

    pyplot.semilogy(x[:len(y)],
def setup(model):
    hf = dchf.DCHF(model)
    assign_chain_domains(hf, 1, 0)
    return hf