Пример #1
0
def generate(argv=None):
    from optparse import OptionParser

    parser = OptionParser(usage='%prog [options] element',
                          version='%prog 0.1')
    parser.add_option('-f', '--xc-functional', type='string', default='LDA',
                      help='Exchange-Correlation functional ' +
                      '(default value LDA)',
                      metavar='<XC>')
    parser.add_option('-P', '--projectors',
                      help='Projector functions - use comma-separated - ' +
                      'nl values, where n can be pricipal quantum number ' +
                      '(integer) or energy (floating point number). ' +
                      'Example: 2s,0.5s,2p,0.5p,0.0d.')
    parser.add_option('-r', '--radius',
                      help='1.2 or 1.2,1.1,1.1')
    parser.add_option('-0', '--zero-potential',
                      metavar='type,nderivs,radius,e0',
                      help='Parameters for zero potential.')
    parser.add_option('-c', '--pseudo-core-density-radius', type=float,
                      metavar='radius',
                      help='Radius for pseudizing core density.')
    parser.add_option('-z', '--pseudize',
                      metavar='type,nderivs',
                      help='Parameters for pseudizing wave functions.')
    parser.add_option('-p', '--plot', action='store_true')
    parser.add_option('-l', '--logarithmic-derivatives',
                      metavar='spdfg,e1:e2:de,radius',
                      help='Plot logarithmic derivatives. ' +
                      'Example: -l spdf,-1:1:0.05,1.3. ' +
                      'Energy range and/or radius can be left out.')
    parser.add_option('-w', '--write', action='store_true')
    parser.add_option('-s', '--scalar-relativistic', action='store_true')
    parser.add_option('--no-check', action='store_true')
    parser.add_option('-t', '--tag', type='string')
    parser.add_option('-a', '--alpha', type=float)

    opt, args = parser.parse_args(argv)

    if len(args) == 0:
        symbols = [symbol for symbol in chemical_symbols
                   if symbol in parameters]
    elif len(args) == 1 and '-' in args[0]:
        Z1, Z2 = args[0].split('-')
        Z1 = str2z(Z1)
        if Z2:
            Z2 = str2z(Z2)
        else:
            Z2 = 86
        symbols = range(Z1, Z2 + 1)
    else:
        symbols = args

    for symbol in symbols:
        Z = str2z(symbol)
        symbol = chemical_symbols[Z]

        kwargs = get_parameters(symbol, opt)
        print kwargs
        gen = _generate(**kwargs)

        if opt.no_check:
            ok = True
        else:
            ok = gen.check_all()

        #gen.test_convergence()

        if opt.write or opt.tag:
            gen.make_paw_setup(opt.tag).write_xml()

        if opt.logarithmic_derivatives or opt.plot:
            import matplotlib.pyplot as plt
            if opt.logarithmic_derivatives:
                r = 1.1 * gen.rcmax
                emin = min(min(wave.e_n) for wave in gen.waves_l) - 0.8
                emax = max(max(wave.e_n) for wave in gen.waves_l) + 0.8
                lvalues, energies, r = parse_ld_str(opt.logarithmic_derivatives,
                                                    (emin, emax, 0.05), r)
                ldmax = 0.0
                for l in lvalues:
                    ld = gen.aea.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, colors[l], label='spdfg'[l])
                    ld = gen.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, '--' + colors[l])

                    # Fixed points:
                    if l < len(gen.waves_l):
                        efix = gen.waves_l[l].e_n
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                    if l == gen.l0:
                        efix = [gen.e0]
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))


                if ldmax != 0.0:
                    plt.axis(ymin=-3 * ldmax, ymax=3 * ldmax)
                plt.xlabel('energy [Ha]')
                plt.ylabel(r'$d\phi_{\ell\epsilon}(r)/dr/\phi_{\ell\epsilon}' +
                           r'(r)|_{r=r_c}$')
                plt.legend(loc='best')


            if opt.plot:
                gen.plot()

            try:
                plt.show()
            except KeyboardInterrupt:
                pass
    return gen
Пример #2
0
def main(argv=None):
    from optparse import OptionParser

    parser = OptionParser(usage='gwap dataset [options] element')
    add = parser.add_option
    add('-f',
        '--xc-functional',
        type='string',
        default='LDA',
        help='Exchange-Correlation functional (default value LDA)',
        metavar='<XC>')
    add('-C',
        '--configuration',
        help='e.g. for Li: "[(1, 0, 2, -1.878564), (2, 0, 1, -0.10554),'
        ' (2, 1, 0, 0.0)]"')
    add('-P',
        '--projectors',
        help='Projector functions - use comma-separated - ' +
        'nl values, where n can be principal quantum number ' +
        '(integer) or energy (floating point number). ' +
        'Example: 2s,0.5s,2p,0.5p,0.0d.')
    add('-r', '--radius', help='1.2 or 1.2,1.1,1.1')
    add('-0',
        '--zero-potential',
        metavar='nderivs,radius',
        help='Parameters for zero potential.')
    add('-c',
        '--pseudo-core-density-radius',
        type=float,
        metavar='radius',
        help='Radius for pseudizing core density.')
    add('-z',
        '--pseudize',
        metavar='type,nderivs',
        help='Parameters for pseudizing wave functions.')
    add('-p', '--plot', action='store_true')
    add('-l',
        '--logarithmic-derivatives',
        metavar='spdfg,e1:e2:de,radius',
        help='Plot logarithmic derivatives. ' +
        'Example: -l spdf,-1:1:0.05,1.3. ' +
        'Energy range and/or radius can be left out.')
    add('-w', '--write', action='store_true')
    add('-s', '--scalar-relativistic', action='store_true')
    add('-n', '--no-check', action='store_true')
    add('-t', '--tag', type='string')
    add('-a', '--alpha', type=float)
    add('-b', '--create-basis-set', action='store_true')
    add('--nlcc',
        action='store_true',
        help='Use NLCC-style pseudo core density (for vdW-DF functionals).')
    add('--core-hole')
    add('-e', '--electrons', type=int)
    add('-o', '--output')

    opt, symbols = parser.parse_args(argv)

    for symbol in symbols:
        kwargs = get_parameters(symbol, opt)
        gen = _generate(**kwargs)

        if not opt.no_check:
            if not gen.check_all():
                raise DatasetGenerationError

        if opt.create_basis_set or opt.write:
            basis = gen.create_basis_set()

            if opt.create_basis_set:
                basis.write_xml()

            if opt.write:
                setup = gen.make_paw_setup(opt.tag)
                parameters = []
                for key, value in kwargs.items():
                    if value is not None:
                        parameters.append('{0}={1!r}'.format(key, value))
                setup.generatordata = ',\n    '.join(parameters)
                setup.write_xml()

        if opt.logarithmic_derivatives or opt.plot:
            if opt.plot:
                import matplotlib.pyplot as plt
            if opt.logarithmic_derivatives:
                r = 1.1 * gen.rcmax
                emin = min(min(wave.e_n) for wave in gen.waves_l) - 0.8
                emax = max(max(wave.e_n) for wave in gen.waves_l) + 0.8
                lvalues, energies, r = parse_ld_str(
                    opt.logarithmic_derivatives, (emin, emax, 0.05), r)
                emin = energies[0]
                de = energies[1] - emin

                error = 0.0
                for l in lvalues:
                    efix = []
                    # Fixed points:
                    if l < len(gen.waves_l):
                        efix.extend(gen.waves_l[l].e_n)
                    if l == gen.l0:
                        efix.append(0.0)

                    ld1 = gen.aea.logarithmic_derivative(l, energies, r)
                    ld2 = gen.logarithmic_derivative(l, energies, r)
                    for e in efix:
                        i = int((e - emin) / de)
                        if 0 <= i < len(energies):
                            ld1 -= round(ld1[i] - ld2[i])
                            if opt.plot:
                                ldfix = ld1[i]
                                plt.plot([energies[i]], [ldfix],
                                         'x' + colors[l])

                    if opt.plot:
                        plt.plot(energies, ld1, colors[l], label='spdfg'[l])
                        plt.plot(energies, ld2, '--' + colors[l])

                    error = abs(ld1 - ld2).sum() * de
                    print('Logarithmic derivative error:', l, error)

                if opt.plot:
                    plt.xlabel('energy [Ha]')
                    plt.ylabel(r'$\arctan(d\log\phi_{\ell\epsilon}(r)/dr)/\pi'
                               r'|_{r=r_c}$')
                    plt.legend(loc='best')

            if opt.plot:
                gen.plot()

                if opt.create_basis_set:
                    gen.basis.generatordata = ''  # we already printed this
                    BasisPlotter(show=True).plot(gen.basis)

            if opt.plot:
                try:
                    plt.show()
                except KeyboardInterrupt:
                    pass

    world.barrier()
    return gen
def main(argv=None):
    from optparse import OptionParser

    parser = OptionParser(usage='gwap dataset [options] element')
    add = parser.add_option
    add('-f', '--xc-functional', type='string', default='LDA',
        help='Exchange-Correlation functional (default value LDA)',
        metavar='<XC>')
    add('-C', '--configuration',
        help='e.g. for Li: "[(1, 0, 2, -1.878564), (2, 0, 1, -0.10554),'
        '(2, 1, 0, 0.0)]"')
    add('-P', '--projectors',
        help='Projector functions - use comma-separated - ' +
        'nl values, where n can be pricipal quantum number ' +
        '(integer) or energy (floating point number). ' +
        'Example: 2s,0.5s,2p,0.5p,0.0d.')
    add('-r', '--radius',
        help='1.2 or 1.2,1.1,1.1')
    add('-0', '--zero-potential',
        metavar='nderivs,radius',
        help='Parameters for zero potential.')
    add('-c', '--pseudo-core-density-radius', type=float,
        metavar='radius',
        help='Radius for pseudizing core density.')
    add('-z', '--pseudize',
        metavar='type,nderivs',
        help='Parameters for pseudizing wave functions.')
    add('-p', '--plot', action='store_true')
    add('-l', '--logarithmic-derivatives',
        metavar='spdfg,e1:e2:de,radius',
        help='Plot logarithmic derivatives. ' +
        'Example: -l spdf,-1:1:0.05,1.3. ' +
        'Energy range and/or radius can be left out.')
    add('-w', '--write', action='store_true')
    add('-s', '--scalar-relativistic', action='store_true')
    add('--no-check', action='store_true')
    add('-t', '--tag', type='string')
    add('-a', '--alpha', type=float)
    add('-b', '--create-basis-set', action='store_true')
    add('--core-hole')
    add('-e', '--electrons', type=int)
    add('-o', '--output')
    
    opt, symbols = parser.parse_args(argv)

    for symbol in symbols:
        kwargs = get_parameters(symbol, opt)
        gen = _generate(**kwargs)

        if not opt.no_check:
            gen.check_all()

        if opt.create_basis_set or opt.write:
            basis = None  # gen.create_basis_set()
            
            if opt.create_basis_set:
                basis.write_xml()

            if opt.write:
                gen.make_paw_setup(opt.tag).write_xml()

        if opt.logarithmic_derivatives or opt.plot:
            import matplotlib.pyplot as plt
            if opt.logarithmic_derivatives:
                r = 1.1 * gen.rcmax
                emin = min(min(wave.e_n) for wave in gen.waves_l) - 0.8
                emax = max(max(wave.e_n) for wave in gen.waves_l) + 0.8
                lvalues, energies, r = parse_ld_str(
                    opt.logarithmic_derivatives, (emin, emax, 0.05), r)
                ldmax = 0.0
                for l in lvalues:
                    ld = gen.aea.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, colors[l], label='spdfg'[l])
                    ld = gen.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, '--' + colors[l])

                    # Fixed points:
                    if l < len(gen.waves_l):
                        efix = gen.waves_l[l].e_n
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                    if l == gen.l0:
                        efix = [0.0]
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                if ldmax != 0.0:
                    plt.axis(ymin=-3 * ldmax, ymax=3 * ldmax)
                plt.xlabel('energy [Ha]')
                plt.ylabel(r'$d\phi_{\ell\epsilon}(r)/dr/\phi_{\ell\epsilon}' +
                           r'(r)|_{r=r_c}$')
                plt.legend(loc='best')

            if opt.plot:
                gen.plot()

                if opt.create_basis_set:
                    gen.basis.generatordata = ''  # we already printed this
                    BasisPlotter(show=True).plot(gen.basis)

            try:
                plt.show()
            except KeyboardInterrupt:
                pass

    world.barrier()
    return gen
Пример #4
0
def generate(argv=None):
    from optparse import OptionParser

    parser = OptionParser(usage="%prog [options] element", version="%prog 0.1")
    parser.add_option(
        "-f",
        "--xc-functional",
        type="string",
        default="LDA",
        help="Exchange-Correlation functional " + "(default value LDA)",
        metavar="<XC>",
    )
    parser.add_option(
        "-P",
        "--projectors",
        help="Projector functions - use comma-separated - "
        + "nl values, where n can be pricipal quantum number "
        + "(integer) or energy (floating point number). "
        + "Example: 2s,0.5s,2p,0.5p,0.0d.",
    )
    parser.add_option("-r", "--radius", help="1.2 or 1.2,1.1,1.1")
    parser.add_option("-0", "--zero-potential", metavar="type,nderivs,radius,e0", help="Parameters for zero potential.")
    parser.add_option(
        "-c", "--pseudo-core-density-radius", type=float, metavar="radius", help="Radius for pseudizing core density."
    )
    parser.add_option("-z", "--pseudize", metavar="type,nderivs", help="Parameters for pseudizing wave functions.")
    parser.add_option("-p", "--plot", action="store_true")
    parser.add_option(
        "-l",
        "--logarithmic-derivatives",
        metavar="spdfg,e1:e2:de,radius",
        help="Plot logarithmic derivatives. "
        + "Example: -l spdf,-1:1:0.05,1.3. "
        + "Energy range and/or radius can be left out.",
    )
    parser.add_option("-w", "--write", action="store_true")
    parser.add_option("-s", "--scalar-relativistic", action="store_true")
    parser.add_option("--no-check", action="store_true")
    parser.add_option("-t", "--tag", type="string")
    parser.add_option("-a", "--alpha", type=float)

    opt, args = parser.parse_args(argv)

    if len(args) == 0:
        symbols = [symbol for symbol in chemical_symbols if symbol in parameters]
    elif len(args) == 1 and "-" in args[0]:
        Z1, Z2 = args[0].split("-")
        Z1 = str2z(Z1)
        if Z2:
            Z2 = str2z(Z2)
        else:
            Z2 = 86
        symbols = range(Z1, Z2 + 1)
    else:
        symbols = args

    for symbol in symbols:
        Z = str2z(symbol)
        symbol = chemical_symbols[Z]

        kwargs = get_parameters(symbol, opt)
        print kwargs
        gen = _generate(**kwargs)

        if opt.no_check:
            ok = True
        else:
            ok = gen.check_all()

        # gen.test_convergence()

        if opt.write or opt.tag:
            gen.make_paw_setup(opt.tag).write_xml()

        if opt.logarithmic_derivatives or opt.plot:
            import matplotlib.pyplot as plt

            if opt.logarithmic_derivatives:
                r = 1.1 * gen.rcmax
                emin = min(min(wave.e_n) for wave in gen.waves_l) - 0.8
                emax = max(max(wave.e_n) for wave in gen.waves_l) + 0.8
                lvalues, energies, r = parse_ld_str(opt.logarithmic_derivatives, (emin, emax, 0.05), r)
                ldmax = 0.0
                for l in lvalues:
                    ld = gen.aea.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, colors[l], label="spdfg"[l])
                    ld = gen.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, "--" + colors[l])

                    # Fixed points:
                    if l < len(gen.waves_l):
                        efix = gen.waves_l[l].e_n
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, "x" + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                    if l == gen.l0:
                        efix = [gen.e0]
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, "x" + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                if ldmax != 0.0:
                    plt.axis(ymin=-3 * ldmax, ymax=3 * ldmax)
                plt.xlabel("energy [Ha]")
                plt.ylabel(r"$d\phi_{\ell\epsilon}(r)/dr/\phi_{\ell\epsilon}" + r"(r)|_{r=r_c}$")
                plt.legend(loc="best")

            if opt.plot:
                gen.plot()

            try:
                plt.show()
            except KeyboardInterrupt:
                pass
    return gen
Пример #5
0
def main(argv=None):
    from optparse import OptionParser

    parser = OptionParser(usage='gwap dataset [options] element')
    add = parser.add_option
    add('-f',
        '--xc-functional',
        type='string',
        default='LDA',
        help='Exchange-Correlation functional (default value LDA)',
        metavar='<XC>')
    add('-C',
        '--configuration',
        help='e.g. for Li: "[(1, 0, 2, -1.878564), (2, 0, 1, -0.10554),'
        '(2, 1, 0, 0.0)]"')
    add('-P',
        '--projectors',
        help='Projector functions - use comma-separated - ' +
        'nl values, where n can be pricipal quantum number ' +
        '(integer) or energy (floating point number). ' +
        'Example: 2s,0.5s,2p,0.5p,0.0d.')
    add('-r', '--radius', help='1.2 or 1.2,1.1,1.1')
    add('-0',
        '--zero-potential',
        metavar='nderivs,radius',
        help='Parameters for zero potential.')
    add('-c',
        '--pseudo-core-density-radius',
        type=float,
        metavar='radius',
        help='Radius for pseudizing core density.')
    add('-z',
        '--pseudize',
        metavar='type,nderivs',
        help='Parameters for pseudizing wave functions.')
    add('-p', '--plot', action='store_true')
    add('-l',
        '--logarithmic-derivatives',
        metavar='spdfg,e1:e2:de,radius',
        help='Plot logarithmic derivatives. ' +
        'Example: -l spdf,-1:1:0.05,1.3. ' +
        'Energy range and/or radius can be left out.')
    add('-w', '--write', action='store_true')
    add('-s', '--scalar-relativistic', action='store_true')
    add('--no-check', action='store_true')
    add('-t', '--tag', type='string')
    add('-a', '--alpha', type=float)
    add('-b', '--create-basis-set', action='store_true')
    add('--core-hole')
    add('-e', '--electrons', type=int)
    add('-o', '--output')

    opt, symbols = parser.parse_args(argv)

    for symbol in symbols:
        kwargs = get_parameters(symbol, opt)
        gen = _generate(**kwargs)

        if not opt.no_check:
            gen.check_all()

        if opt.create_basis_set or opt.write:
            basis = None  # gen.create_basis_set()

            if opt.create_basis_set:
                basis.write_xml()

            if opt.write:
                gen.make_paw_setup(opt.tag).write_xml()

        if opt.logarithmic_derivatives or opt.plot:
            import matplotlib.pyplot as plt
            if opt.logarithmic_derivatives:
                r = 1.1 * gen.rcmax
                emin = min(min(wave.e_n) for wave in gen.waves_l) - 0.8
                emax = max(max(wave.e_n) for wave in gen.waves_l) + 0.8
                lvalues, energies, r = parse_ld_str(
                    opt.logarithmic_derivatives, (emin, emax, 0.05), r)
                ldmax = 0.0
                for l in lvalues:
                    ld = gen.aea.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, colors[l], label='spdfg'[l])
                    ld = gen.logarithmic_derivative(l, energies, r)
                    plt.plot(energies, ld, '--' + colors[l])

                    # Fixed points:
                    if l < len(gen.waves_l):
                        efix = gen.waves_l[l].e_n
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                    if l == gen.l0:
                        efix = [0.0]
                        ldfix = gen.logarithmic_derivative(l, efix, r)
                        plt.plot(efix, ldfix, 'x' + colors[l])
                        ldmax = max(ldmax, max(abs(ld) for ld in ldfix))

                if ldmax != 0.0:
                    plt.axis(ymin=-3 * ldmax, ymax=3 * ldmax)
                plt.xlabel('energy [Ha]')
                plt.ylabel(r'$d\phi_{\ell\epsilon}(r)/dr/\phi_{\ell\epsilon}' +
                           r'(r)|_{r=r_c}$')
                plt.legend(loc='best')

            if opt.plot:
                gen.plot()

                if opt.create_basis_set:
                    gen.basis.generatordata = ''  # we already printed this
                    BasisPlotter(show=True).plot(gen.basis)

            try:
                plt.show()
            except KeyboardInterrupt:
                pass

    world.barrier()
    return gen