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
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
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