Пример #1
0
def initialize_parameters(code, width, h):

    parameters = {}

    if code == 'gpaw':
        from gpaw import GPAW as Calculator
        from gpaw.mpi import rank
        parameters['h'] = h
        parameters['width'] = width
        parameters['stencils'] = (3, 3)
        #parameters['eigensolver'] = 'cg'
        conv_param = parameters['h']
    elif code == 'dacapo':
        from ase.calculators.dacapo import Dacapo as Calculator
        rank = 0
        parameters['kT'] = width
        parameters['planewavecutoff'] = gridspacing2cutoff(h)
        parameters['densitycutoff'] = parameters['planewavecutoff'] * 1.2
        conv_param = parameters['planewavecutoff']
    elif code == 'abinit':
        from ase.calculators.abinit import Abinit as Calculator
        rank = 0
        parameters['width'] = width
        parameters['ecut'] = gridspacing2cutoff(h) * 1.4
        conv_param = parameters['ecut']
    elif code == 'elk':
        parameters['swidth'] = width
        parameters['stype'] = 3
        parameters['autormt'] = True
        parameters['tforce'] = True  # calulate forces
        parameters['nempty'] = 20  # default 5
        #parameters['fixspin'] = -1 # default 0
        #parameters['evalmin'] = -15.0 # default -4.5
        #parameters['autokpt'] = True
        #parameters['nosym'] = True
        #parameters['radkpt'] = 10.0 # default 40.0
        parameters['gmaxvr'] = 16  # default 12 #
        parameters['rgkmax'] = 7.0  # default 7 #
        #parameters['gmaxvr'] = 19 # default 12
        #parameters['rgkmax'] = 9.5 # default 7
        parameters['beta0'] = 0.02  # default 0.05
        parameters['betamax'] = 0.05  # default 0.5
        parameters['maxscl'] = 500  # default 200
        #parameters['mixtype'] = 2 # Pulay # default 1
        #parameters['deband'] = 0.005 # default 0.0025
        #parameters['rmtapm'] = '0.25 0.90' # default (0.25,0.95)
    return parameters
Пример #2
0
def memory_bandwidth(code='gpaw', runs=7):

    slab = Atoms([
        Atom('Al', (0, 0, 0)),
        Atom('Al', (a, 0, 0)),
        Atom('Al', (a / 2, d / 2, -d / 2)),
        Atom('Al', (3 * a / 2, d / 2, -d / 2)),
        Atom('Al', (0, 0, -d)),
        Atom('Al', (a, 0, -d)),
        Atom('Al', (a / 2, d / 2, -3 * d / 2)),
        Atom('Al', (3 * a / 2, d / 2, -3 * d / 2)),
        Atom('Al', (0, 0, -2 * d)),
        Atom('Al', (a, 0, -2 * d)),
        Atom('H', (a / 2 - b / 2, 0, z)),
        Atom('H', (a / 2 + b / 2, 0, z))
    ],
                 cell=(2 * a, d, 5 * d),
                 pbc=(1, 1, 1))

    h = 0.15
    nbands = 28
    kpts = (2, 6, 1)

    parameters = {}

    if code == 'gpaw':
        from gpaw import Calculator
        from gpaw.mpi import rank
        parameters['convergence'] = {'eigenstates': 1e-5}
        parameters['h'] = h
    elif code == 'dacapo':
        from ase.calculators.dacapo import Dacapo as Calculator
        parameters['planewavecutoff'] = gridspacing2cutoff(h)
        parameters['densitycutoff'] = parameters['planewavecutoff'] * 1.5
        rank = 0

    t = 0.0
    t_runs = []
    for n in range(runs):
        t0 = time.time()
        for i in range(1):
            calc = Calculator(nbands=nbands, kpts=kpts, **parameters)
            slab.set_calculator(calc)
            e = slab.get_potential_energy()
            del calc
            if exists('out.nc'): remove('out.nc')
        t1 = time.time()
        t = t + t1 - t0
        t_runs.append(t1 - t0)
        print 'Run: ', n, ' energy ', e, ' rank: ', str(
            rank), ' time: ', time.time() - t0
    if rank == 0:
        print 'Rank ' + str(rank) + ': time [sec]: avg ' + str(
            round(np.average(t_runs), 1)) + ', stddev ' + str(
                round(np.std(t_runs), 1)) + ', min ' + str(
                    round(min(t_runs), 1)) + ', max ' + str(
                        round(max(t_runs), 1))
Пример #3
0
def memory_bandwidth(code='gpaw', runs=7):

    slab = Atoms([Atom('Al', (0, 0, 0)),
                        Atom('Al', (a, 0, 0)),
                        Atom('Al', (a/2, d/2, -d/2)),
                        Atom('Al', (3*a/2, d/2, -d/2)),
                        Atom('Al', (0, 0, -d)),
                        Atom('Al', (a, 0, -d)),
                        Atom('Al', (a/2, d/2, -3*d/2)),
                        Atom('Al', (3*a/2, d/2, -3*d/2)),
                        Atom('Al', (0, 0, -2*d)),
                        Atom('Al', (a, 0, -2*d)),
                        Atom('H', (a/2-b/2, 0, z)),
                        Atom('H', (a/2+b/2, 0, z))],
                       cell=(2*a, d, 5*d), pbc=(1, 1, 1))

    h = 0.15
    nbands = 28
    kpts = (2, 6, 1)

    parameters = {}

    if code == 'gpaw':
        from gpaw import Calculator
        from gpaw.mpi import rank
        parameters['convergence'] = {'eigenstates': 1e-5}
        parameters['h'] = h
    elif code == 'dacapo':
        from ase.calculators.dacapo import Dacapo as Calculator
        parameters['planewavecutoff'] = gridspacing2cutoff(h)
        parameters['densitycutoff'] = parameters['planewavecutoff']*1.5
        rank = 0

    t = 0.0
    t_runs = []
    for n in range(runs):
        t0 = time.time()
        for i in range(1):
            calc = Calculator(
                nbands=nbands,
                kpts=kpts,
                **parameters)
            slab.set_calculator(calc)
            e = slab.get_potential_energy()
            del calc
            if exists('out.nc'): remove('out.nc')
        t1 = time.time()
        t = t + t1 - t0
        t_runs.append(t1 - t0)
        print 'Run: ', n, ' energy ', e, ' rank: ', str(rank), ' time: ', time.time() - t0
    if rank == 0:
        print 'Rank '+str(rank)+': time [sec]: avg '+str(round(np.average(t_runs),1))+', stddev '+str(round(np.std(t_runs),1))+', min '+str(round(min(t_runs),1))+', max '+str(round(max(t_runs),1))
Пример #4
0
def memory_bandwidth(code="gpaw", runs=7):

    slab = Atoms(
        [
            Atom("Al", (0, 0, 0)),
            Atom("Al", (a, 0, 0)),
            Atom("Al", (a / 2, d / 2, -d / 2)),
            Atom("Al", (3 * a / 2, d / 2, -d / 2)),
            Atom("Al", (0, 0, -d)),
            Atom("Al", (a, 0, -d)),
            Atom("Al", (a / 2, d / 2, -3 * d / 2)),
            Atom("Al", (3 * a / 2, d / 2, -3 * d / 2)),
            Atom("Al", (0, 0, -2 * d)),
            Atom("Al", (a, 0, -2 * d)),
            Atom("H", (a / 2 - b / 2, 0, z)),
            Atom("H", (a / 2 + b / 2, 0, z)),
        ],
        cell=(2 * a, d, 5 * d),
        pbc=(1, 1, 1),
    )

    h = 0.15
    nbands = 28
    kpts = (2, 6, 1)

    parameters = {}

    if code == "gpaw":
        from gpaw import Calculator
        from gpaw.mpi import rank

        parameters["convergence"] = {"eigenstates": 1e-5}
        parameters["h"] = h
    elif code == "dacapo":
        from ase.calculators.dacapo import Dacapo as Calculator

        parameters["planewavecutoff"] = gridspacing2cutoff(h)
        parameters["densitycutoff"] = parameters["planewavecutoff"] * 1.5
        rank = 0

    t = 0.0
    t_runs = []
    for n in range(runs):
        t0 = time.time()
        for i in range(1):
            calc = Calculator(nbands=nbands, kpts=kpts, **parameters)
            slab.set_calculator(calc)
            e = slab.get_potential_energy()
            del calc
            if exists("out.nc"):
                remove("out.nc")
        t1 = time.time()
        t = t + t1 - t0
        t_runs.append(t1 - t0)
        print("Run: ", n, " energy ", e, " rank: ", str(rank), " time: ", time.time() - t0)
    if rank == 0:
        print(
            "Rank "
            + str(rank)
            + ": time [sec]: avg "
            + str(round(np.average(t_runs), 1))
            + ", stddev "
            + str(round(np.std(t_runs), 1))
            + ", min "
            + str(round(min(t_runs), 1))
            + ", max "
            + str(round(max(t_runs), 1))
        )