Source code for schroedinger

#!/usr/bin/env python
"""
Solver for basic electronic structure problems.

Examples
--------

Compute the 2D predefined problems::

  $ ./schroedinger.py --well
  $ ./schroedinger.py --oscillator
  $ ./schroedinger.py --hydrogen
  $ ./schroedinger.py --boron

See ``examples/quantum/`` directory for the problem description files
corresponding to the above examples.
"""
import os
from optparse import OptionParser

import sfepy
from sfepy.base.conf import ProblemConf, get_standard_keywords
from sfepy.physics.schroedinger_app import SchroedingerApp

[docs]def fix_path(filename): return os.path.join(sfepy.data_dir, filename)
usage = """%prog [options] [filename_in]\n""" + __doc__.rstrip() help = { 'conf' : 'override problem description file items, written as python' ' dictionary without surrounding braces', 'options' : 'override options item of problem description,' ' written as python dictionary without surrounding braces', 'filename' : 'basename of output file(s) [default: <basename of input file mesh>]', 'well' : 'solve infinite potential well (particle in a box) problem', 'oscillator' : 'solve spherically symmetric linear harmonic oscillator ' '(1 electron) problem', 'hydrogen' : 'solve the hydrogen atom', 'boron' : 'solve the boron atom with 1 electron', 'n_eigs' : 'number of eigenpairs to compute [default: as set in the examples]', 'tau' : 'target value of the Pysparse eigenvalue solver. Eigenvalues in the' ' vicinity of tau will be computed [default: as set in the examples]', }
[docs]def main(): parser = OptionParser(usage=usage, version='%prog ' + sfepy.__version__) parser.add_option('-c', '--conf', metavar='"key : value, ..."', action='store', dest='conf', type='string', default=None, help= help['conf']) parser.add_option('-O', '--options', metavar='"key : value, ..."', action='store', dest='app_options', type='string', default=None, help=help['options']) parser.add_option('-o', '', metavar='filename', action='store', dest='output_filename_trunk', default=None, help=help['filename']) parser.add_option('--oscillator', action='store_true', dest='oscillator', default=False, help=help['oscillator']) parser.add_option('--well', action='store_true', dest='well', default=False, help=help['well']) parser.add_option('--hydrogen', action='store_true', dest='hydrogen', default=False, help=help['hydrogen']) parser.add_option('--boron', action='store_true', dest='boron', default=False, help=help['boron']) parser.add_option('-n', '--n-eigs', type='int', metavar='int', action='store', dest='n_eigs', default=None, help=help['n_eigs']) parser.add_option('-t', '--tau', type='float', metavar='float', action='store', dest='tau', default=None, help=help['tau']) options, args = parser.parse_args() if len(args) == 1: filename_in = args[0]; elif len(args) == 0: if options.oscillator: filename_in = fix_path("examples/quantum/oscillator.py") elif options.well: filename_in = fix_path("examples/quantum/well.py") elif options.hydrogen: filename_in = fix_path("examples/quantum/hydrogen.py") elif options.boron: filename_in = fix_path("examples/quantum/boron.py") else: parser.print_help() return else: parser.print_help() return define_args = {} if options.n_eigs is not None: define_args['n_eigs'] = options.n_eigs if options.tau is not None: define_args['tau'] = options.tau required, other = get_standard_keywords() conf = ProblemConf.from_file_and_options(filename_in, options, required, other, define_args=define_args) app = SchroedingerApp(conf, options, 'schroedinger:') opts = conf.options if hasattr(opts, 'parametric_hook'): # Parametric study. parametric_hook = conf.get_function(opts.parametric_hook) app.parametrize(parametric_hook) app()
if __name__ == '__main__': main()