示例#1
0
def TestBanded():
    conf = pyprop.Load("config.ini")
    conf.KineticEnergy0.geometry0 = "Dense"
    conf.KineticEnergy0.geometry1 = "Dense"
    conf.KineticEnergy1.geometry0 = "Dense"
    conf.KineticEnergy1.geometry1 = "Dense"
    conf.TestPotential.geometry0 = "Dense"
    conf.TestPotential.geometry1 = "Dense"
    propDense = pyprop.Problem(conf)
    propDense.SetupStep()
    tempDense = propDense.GetTempPsi()
    tempDense.GetData()[:] = 0
    propDense.MultiplyHamiltonian(tempDense)

    conf = pyprop.Load("config.ini")
    conf.KineticEnergy0.geometry0 = "Banded"
    conf.KineticEnergy0.geometry1 = "Banded"
    conf.KineticEnergy1.geometry0 = "Banded"
    conf.KineticEnergy1.geometry1 = "Banded"
    conf.TestPotential.geometry0 = "Banded"
    conf.TestPotential.geometry1 = "Banded"
    propBanded = pyprop.Problem(conf)
    propBanded.SetupStep()
    tempBanded = propBanded.GetTempPsi()
    tempBanded.GetData()[:] = 0
    propBanded.MultiplyHamiltonian(tempBanded)

    figure()
    pcolormesh(tempDense.GetData().real.copy())
    figure()
    pcolormesh(tempBanded.GetData().real.copy())
示例#2
0
def Test():
    conf = pyprop.Load("find_groundstate.ini")
    prop = pyprop.Problem(conf)
    prop.SetupStep()

    print prop.GetEnergyExpectationValue()
    print prop.GetEnergyExpectationValue()
示例#3
0
def SetupConfig(**args):
    #Decide which config file to use
    configFile = "config.ini"
    if "config" in args:
        configFile = args["config"]

    #Load the config file
    conf = pyprop.Load(configFile)

    #Modify the config
    if "imtime" in args:
        imtime = args["imtime"]
        propSection = conf.Propagation
        dt = abs(propSection.timestep)
        renormalize = False
        if imtime:
            dt = -1.0j * dt
            renormalize = True

        propSection.timestep = dt
        propSection.renormalization = renormalize

    if "amplitude" in args:
        amplitude = args["amplitude"]
        conf.DynamicPotential.amplitude = amplitude

    if "duration" in args:
        duration = args["duration"]
        conf.Propagation.duration = duration

    return conf
示例#4
0
def SetupConfig(**args):
    configFile = args.get("configFile", "config_radial.ini")
    conf = pyprop.Load(configFile)

    if "silent" in args:
        silent = args["silent"]
        conf.Propagation.silent = silent

    if "imtime" in args:
        imtime = args["imtime"]
        if imtime:
            conf.Propagation.timestep = -1.0j * abs(conf.Propagation.timestep)
            conf.Propagation.renormalization = True
        else:
            conf.Propagation.timestep = abs(conf.Propagation.timestep)
            conf.Propagation.renormalization = False

    if "duration" in args:
        duration = args["duration"]
        conf.Propagation.duration = duration

    if "eigenvalueCount" in args:
        conf.Arpack.krylov_eigenvalue_count = args["eigenvalueCount"]

    if "index_iterator" in args:
        conf.AngularRepresentation.index_iterator = args["index_iterator"]

    additionalPotentials = args.get("additionalPotentials", [])
    conf.Propagation.grid_potential_list += additionalPotentials

    return conf
示例#5
0
def CalculateDensityOfStates(configFile):

    #Set up config
    conf = pyprop.Load(configFile)

    #Set up pyprop problem
    prop = pyprop.Problem(conf)
    prop.SetupStep()

    #Calculate eigenvalues
    E, V = SetupEigenstates(prop)

    #Calculate DOS
    dos = 1.0 / diff(E)

    #Calculate exact dos
    xmax = conf.RadialRepresentation.xmax
    dos_exact = xmax / (pi * sqrt(2 * E[1:]))

    #Estimate highest reliable energy, about 2/3*E_max for B-splines
    maxIdx = int(2 * len(E) / 3.0)
    maxReliableEnergy = E[maxIdx]
    print "Estimated highest reliable energy = %1.1e" % maxReliableEnergy

    return E[1:], dos_exact, dos
示例#6
0
def test(gridType=RadialGridType.CARTESIAN):
    conf = pyprop.Load("kulander.ini")
    SetRadialGridType(conf, gridType)

    prop = pyprop.Problem(conf)
    prop.SetupStep()
    return prop
示例#7
0
def TestSolveOverlapSpeed():
    def timeIt(func):
        t1 = time.time()
        func()
        t2 = time.time()
        Print("  Function '%s' took %4.1f s." % (func.func_name, (t2 - t1)))

    numSolves = 100

    Print("")
    Print("Now testing multiple S^-1 * psi...")
    pyprop.Redirect.Enable(silent=True)

    seed(0)

    conf = pyprop.Load("config_eigenvalues.ini")
    psi = pyprop.CreateWavefunction(conf)
    tmpPsi = psi.Copy()

    Print("  Size of wavefunction is: %s" % repr(psi.GetData().shape))

    #Calculate S^-1 * psi
    Print("  Performing %i solves..." % numSolves)

    def solve():
        for i in range(numSolves):
            psi.GetRepresentation().MultiplyOverlap(tmpPsi)

    timeIt(solve)

    #finish and cleanup
    pypar.barrier()
    pyprop.Redirect.Disable()
    Print("\n...done!")
示例#8
0
def test(**args):
    conf = pyprop.Load("config.ini")
    SetupConfig(conf, **args)

    prop = pyprop.Problem(conf)
    prop.SetupStep()
    return prop
示例#9
0
def TestStability():
    conf = pyprop.Load("config.ini")
    prop = pyprop.Problem(conf)
    prop.SetupStep()
    for t in prop.Advance(50):
        print "t = %.4f, E(t) = %.6f" % (t, prop.GetEnergyExpectationValue())

    initPsi = prop.psi

    conf = pyprop.Load("config_radial.ini")
    conf.Propagation.timestep = abs(conf.Propagation.timestep)
    conf.Propagation.renormalization = False
    prop = pyprop.Problem(conf)
    prop.SetupStep()
    prop.psi.GetData()[:] = initPsi.GetData()
    for t in prop.Advance(50):
        print "t = %.4f, N(t) = %.6f, P(t) = %.6f" % (
            t, prop.psi.GetNorm(), abs(prop.psi.InnerProduct(initPsi))**2)
示例#10
0
    def SetupProblem(geometry0, geometry1):
        conf = pyprop.Load("config_radial.ini")
        conf.Propagation.silent = True
        conf.Propagation.grid_potential_list = ["LaserPotential"]
        conf.LaserPotential.geometry0 = geometry0
        conf.LaserPotential.geometry1 = geometry1
        prop = pyprop.Problem(conf)
        prop.SetupStep()

        return prop
示例#11
0
def FindEigenvalues():
    conf = pyprop.Load("find_groundstate.ini")
    conf.Propagation.silent = pyprop.ProcId != 0
    prop = pyprop.Problem(conf)
    prop.SetupStep()
    solver = pyprop.PiramSolver(prop)
    solver.Solve()

    print "Eigenvalues = ", solver.Solver.GetEigenvalues().real
    return solver
示例#12
0
def FindGroundstate(**args):
    conf = pyprop.Load("groundstate.ini")
    SetupConfig(conf, **args)

    prop = pyprop.Problem(conf)
    prop.SetupStep()

    for t in prop.Advance(5):
        print "t = ", t, " E = ", prop.GetEnergyImTime()

    return prop
示例#13
0
def FindGroundstateEnergy(transformType, N, dt):
    conf = pyprop.Load("config.ini")
    conf.Representation.n = N
    conf.Representation.transform_type = transformType
    conf.Propagation.timestep = abs(dt) * -1.0j

    prop = pyprop.Problem(conf)
    prop.SetupStep()

    for t in prop.Advance(1):
        pass
    return prop.GetEnergy()
示例#14
0
def SetupConfig(**args):
    #Decide which config file to use
    configFile = "config.ini"
    if "config" in args:
        configFile = args["config"]

    #Load the config file
    conf = pyprop.Load(configFile)

    #Modify the config
    if "imtime" in args:
        imtime = args["imtime"]
        propSection = conf.Propagation
        dt = abs(propSection.timestep)
        renormalize = False
        if imtime:
            dt = -1.0j * dt
            renormalize = True
        else:
            conf.DynamicPotential.frequency = eval(
                conf.DynamicPotential.frequency)

        propSection.timestep = dt
        propSection.renormalization = renormalize

    if "amplitude" in args:
        amplitude = args["amplitude"]
        conf.DynamicPotential.amplitude = amplitude

    if "xmax" in args:
        xMax = args['xmax']
        conf.BSplineRepresentation.xmax = xMax

    if "xsize" in args:
        xSize = args['xsize']
        conf.BSplineRepresentation.xsize = xSize

    if "dt" in args:
        timeStep = args['dt']
        conf.Propagation.timestep = timeStep

    if "pulseDuration" in args:
        T = args['pulseDuration']
        conf.Propagation.duration = T
        DynamicPotential.pulse_duration = T

    if "lmax" in args:
        lmax = args['lmax']
        conf.AngularRepresentation.lmax = lmax
        conf.BSplinePropagator.lmax = lmax

    return conf
示例#15
0
    def SetupProblem(geometry0, geometry1):
        conf = pyprop.Load("config.ini")
        conf.Propagation.silent = True
        conf.KineticEnergy0.geometry0 = geometry0
        conf.KineticEnergy0.geometry1 = geometry1
        conf.KineticEnergy1.geometry0 = geometry0
        conf.KineticEnergy1.geometry1 = geometry1
        conf.TestPotential.geometry0 = geometry0
        conf.TestPotential.geometry1 = geometry1
        prop = pyprop.Problem(conf)
        prop.SetupStep()

        return prop
示例#16
0
def test():
    conf = pyprop.Load("test.ini")
    gen = TensorPotentialGenerator(config=conf)
    A = gen.GeneratePotential(conf, conf.TestPotential)
    B = gen.GeneratePotential(conf, conf.KineticEnergy)
    Overlap = gen.GeneratePotential(conf, conf.OverlapMatrix)

    #A = MultiplyInverseOverlapMatrix(A, Overlap, 0)
    A = MultiplyInverseOverlapMatrix(A, Overlap, 1)
    #B = MultiplyInverseOverlapMatrix(B, Overlap, 0)
    B = MultiplyInverseOverlapMatrix(B, Overlap, 1)

    return A, B, Overlap
示例#17
0
def Setup(**args):
    """
	Setup Krotov problem
	"""
    conf = pyprop.Load('config.ini')

    if "timestep" in args:
        config.Propagation.timestep = args["timestep"]

    prob = pyprop.Problem(conf)
    prob.SetupStep()
    krotov = pyprop.Krotov(prob)
    return krotov
示例#18
0
def SetupDegani(config, **args):
    """
	Setup Degani problem
	"""

    conf = pyprop.Load(config)

    prop = pyprop.Problem(conf)
    prop.SetupStep()
    degani = pyprop.Degani(prop)
    degani.ApplyConfigSection(conf.Degani)
    degani.Setup()

    return degani
示例#19
0
def SetupConfig(**args):
	conf = pyprop.Load("config.ini")

	if 'scaling' in args:
		scaling = args['scaling']
		conf.SubRepresentation.scaling = scaling

	if 'silent' in args:
		silent = args['silent']
		conf.Propagation.silent = silent

	if 'gridSize' in args:
		gridSize = args['gridSize']
		conf.SubRepresentation.n = gridSize

	return conf
示例#20
0
def TestMultiplyOverlap():
    pyprop.PrintOut("Now testing S * psi...")
    pyprop.Redirect.Enable(silent=True)

    fileName = "test_multiplyoverlap.h5"
    seed(0)

    conf = pyprop.Load("config-test.ini")
    psi = pyprop.CreateWavefunction(conf)
    initPsi = pyprop.CreateWavefunction(conf)

    if pyprop.ProcCount == 1:
        psi.GetData()[:] = random(psi.GetData().shape)
        print "Normalizing wavefunction..."
        psi.Normalize()
        initPsi.GetData()[:] = psi.GetData()[:]
        pyprop.serialization.SaveWavefunctionHDF(fileName, "/wavefunction",
                                                 psi, conf)
        psi.GetRepresentation().MultiplyOverlap(psi)
        pyprop.serialization.SaveWavefunctionHDF(fileName,
                                                 "/wavefunctionoverlap", psi,
                                                 conf)
    else:
        pyprop.serialization.LoadWavefunctionHDF(fileName, "/wavefunction",
                                                 initPsi)
        pyprop.serialization.LoadWavefunctionHDF(fileName,
                                                 "/wavefunctionoverlap", psi)

    destPsi = initPsi.Copy()
    destPsi.Clear()
    tmpPsi = initPsi.Copy()
    tmpPsi.Clear()

    destPsi.GetData()[:] = initPsi.GetData()[:]
    destPsi.GetRepresentation().MultiplyOverlap(destPsi)

    Print()
    Print("  Proc %s: ||S * psi - S'*psi||_max = %s" %
          (pyprop.ProcId,
           numpy.max(numpy.max(psi.GetData() - destPsi.GetData()))))
    Print("  Proc %s: ||S * psi - S'*psi|| = %s" %
          (pyprop.ProcId, linalg.norm(psi.GetData() - destPsi.GetData())))

    #finish and cleanup
    pypar.barrier()
    pyprop.Redirect.Disable()
    pyprop.PrintOut("\n...done!")
示例#21
0
def SetupKrotov(config, **args):
    """
	Setup Krotov problem
	"""

    conf = pyprop.Load(config)

    if "timestep" in args:
        config.Propagation.timestep = args["timestep"]

    prop = pyprop.Problem(conf)
    prop.SetupStep()
    krotov = pyprop.Krotov(prop)
    krotov.ApplyConfigSection(conf.Krotov)
    krotov.Setup()

    return krotov
示例#22
0
def SetupZhuRabitz(config, **args):
    """
	Setup ZhuRabitz problem
	"""

    conf = pyprop.Load(config)

    if "timestep" in args:
        config.Propagation.timestep = args["timestep"]

    prop = pyprop.Problem(conf)
    prop.SetupStep()
    zhurabitz = pyprop.ZhuRabitz(prop)
    zhurabitz.ApplyConfigSection(conf.ZhuRabitz)
    zhurabitz.Setup()

    return zhurabitz
示例#23
0
def TestEpetraMatvecSpeed():
    numMatVecs = 500

    Print("")
    Print("Now testing Epetra matvec speed...")
    pyprop.Redirect.Enable(silent=True)

    #Test
    conf = pyprop.Load("config_propagation.ini")
    psi = pyprop.CreateWavefunction(conf)
    Print("  Size of wavefunction is: %s" % repr(psi.GetData().shape))

    #Setup problem
    Print("  Setting up propagator w/potentials...")
    prop = SetupProblem(config='config_propagation.ini')
    psi = prop.psi
    tmpPsi = psi.Copy()
    tmpPsi.Clear()

    Print("  Local size of wavefunction is: %s" %
          str(prop.psi.GetData().shape))
    Print("  Global size of wavefunction is: %s" %
          str(prop.psi.GetRepresentation().GetFullShape()))

    #Get Epetra potential
    #pot = prop.Propagator.BasePropagator.PotentialList[1]
    Print("  Number of potentials: %s" %
          len(prop.Propagator.BasePropagator.PotentialList))

    #Calculate S^-1 * psi
    Print("  Performing %i matvecs..." % numMatVecs)

    def matvecs():
        for i in range(numMatVecs):
            #pot.MultiplyPotential(psi, tmpPsi, 0, 0)
            prop.Propagator.BasePropagator.MultiplyHamiltonianNoOverlap(
                psi, tmpPsi, 0, 0)
            #tmpPsi.GetRepresentation().SolveOverlap(tmpPsi)

    timeIt(matvecs)

    #finish and cleanup
    pypar.barrier()
    pyprop.Redirect.Disable()
    pyprop.PrintOut("\n...done!")
示例#24
0
def SetupConfig(**args):
    #Decide which config file to use
    configFile = "config.ini"
    if "config" in args:
        configFile = args["config"]

    #Load the config file
    conf = pyprop.Load(configFile)

    #Modify the config
    if "imtime" in args:
        imtime = args["imtime"]
        propSection = conf.Propagation
        dt = abs(propSection.timestep)
        renormalize = False
        if imtime:
            print "yes"
            dt = -1.0j * dt
            renormalize = True

        propSection.timestep = dt
        propSection.renormalization = renormalize

    if "amplitude" in args:
        amplitude = args["amplitude"]
        conf.DynamicPotential.amplitude = amplitude

    if "xmax" in args:
        xMax = args['xmax']
        conf.BSplineRepresentation.xmax = xMax

    if "xsize" in args:
        xSize = args['xsize']
        conf.BSplineRepresentation.xsize = xSize

    if "dt" in args:
        timeStep = args['dt']
        conf.Propagation.timestep = timeStep

    if "duration" in args:
        duration = args['duration']
        conf.Propagation.duration = duration

    return conf
示例#25
0
def SetupConfig(**args):
    configFile = args.get("config", "config.ini")
    #if configfile is a string, load it, otherwise, treat it as
    #a config parser object
    if isinstance(configFile, str):
        conf = pyprop.Load(configFile)
    elif isinstance(configFile, pyprop.Config):
        #Let's make a deep copy here to avoid changing input
        conf = objectcopier.deepcopy(configFile)
    else:
        conf = pyprop.Config(configFile)

    if "silent" in args:
        silent = args["silent"]
        conf.SetValue("Propagation", "silent", silent)

    #Update config object from possible changed ConfigParser object
    newConf = pyprop.Config(conf.cfgObj)

    return newConf
示例#26
0
def FindGroundstate():
    #load config
    conf = pyprop.Load("find_groundstate.ini")
    prop = pyprop.Problem(conf)
    prop.SetupStep()

    #propagate to find ground state
    for t in prop.Advance(10):
        print "t = ", t, ", E =", prop.GetEnergy()

    #save groundstate to disk
    prop.SaveWavefunctionHDF("groundstate.h5", "/wavefunction")

    #Find energy
    E1 = prop.GetEnergyImTime()
    E2 = prop.GetEnergyExpectationValue()
    print "Groundstate energy:\n\t %s a.u.\n\t %s" % (E1, E2)
    pyprop.Plot1D(prop)

    return prop
示例#27
0
def SetupConfig(**args):
	conf = pyprop.Load("config.ini")

	if 'silent' in args:
		silent = args['silent']
	else:
		silent = pyprop.ProcId != 0
	conf.Propagation.silent=silent


	if 'dx' in args:	
		dx = args['dx']

		#Modify grid
		confSection = conf.Representation
		xmin = confSection.rank0[0]
		xmax = confSection.rank0[1]
		nx = int((xmax - xmin) / dx)

		for rank in r_[0:4]:
			range = [xmin, xmax, nx]
			confSection.Set('rank' + str(rank), range)

	if 'dt' in args:
		dt = args['dt']
		conf.Propagation.timestep = dt

	if 'soft' in args:
		soft = args['soft']
		conf.GridPotential.soft = soft

	if 'imtime' in args:
		imtime = args['imtime']
		if imtime:
			conf.Propagation.timestep = -1.0j * abs(conf.Propagation.timestep)
			conf.Propagation.renormalization = True
		else:
			conf.Propagation.timestep = abs(conf.Propagation.timestep)
			conf.Propagation.renormalization = True
	        	
	return conf	
示例#28
0
def TestInnerProduct():
    pyprop.PrintOut("")
    pyprop.PrintOut("Now testing innerproduct...")
    pyprop.Redirect.Enable(silent=True)

    seed(0)

    fileName = "test_innerproduct.h5"

    conf = pyprop.Load("config-test.ini")
    psi = pyprop.CreateWavefunction(conf)
    tmpPsi = pyprop.CreateWavefunction(conf)

    if pyprop.ProcCount == 1:
        psi.GetData()[:] = random(psi.GetData().shape)
        psi.Normalize()

        tmpPsi.GetData()[:] = random(psi.GetData().shape)
        tmpPsi.Normalize()

        pyprop.serialization.SaveWavefunctionHDF(fileName, "/wavefunction1",
                                                 psi, conf)
        pyprop.serialization.SaveWavefunctionHDF(fileName, "/wavefunction2",
                                                 tmpPsi, conf)
    else:
        pyprop.serialization.LoadWavefunctionHDF(fileName, "/wavefunction1",
                                                 psi)
        pyprop.serialization.LoadWavefunctionHDF(fileName, "/wavefunction2",
                                                 tmpPsi)

    inner1 = psi.InnerProduct(tmpPsi)
    inner2 = psi.InnerProduct(psi)

    Print()
    Print("<psi|tmpPsi> = %s" % inner1, range(pyprop.ProcCount))
    Print("<psi|psi> = %s" % inner2, range(pyprop.ProcCount))

    #finish and cleanup
    pypar.barrier()
    pyprop.Redirect.Disable()
    pyprop.PrintOut("\n...done!")
示例#29
0
def Propagate():
    conf = pyprop.Load("propagation.ini")
    prop = pyprop.Problem(conf)
    prop.SetupStep()
    prop.psi.Normalize()

    #Create a copy of the wavefunction so that we can calculate
    #the autocorrelation function during propagation
    initPsi = prop.psi.Copy()

    #Propagate the system to the time specified in propagation.ini,
    #printing the autocorrelation function, and plotting the wavefunction
    #10 evenly spaced times during the propagation
    for t in prop.Advance(10):
        corr = abs(prop.psi.InnerProduct(initPsi))**2
        norm = prop.psi.GetNorm()
        if pyprop.ProcId == 0:
            print "t = ", t, ", P(t) = ", corr, ", N(t) = ", norm
        #pyprop.Plot2DFull(prop)

    return prop
示例#30
0
def CompareFortran(**args):
    conf = pyprop.Load("config_compare_fortran.ini")
    prop = pyprop.Problem(conf)
    prop.SetupStep()

    init = prop.psi.Copy()

    for t in prop.Advance(5):
        corr = abs(prop.psi.InnerProduct(init))**2
        print "Time = %f, initial state correlation = %f" % (t, corr)

    corr = abs(prop.psi.InnerProduct(init))**2
    t = prop.PropagatedTime
    print "Time = %f, initial state correlation = %f" % (t, corr)

    #Load fortran data and compare
    fdata = pylab.load("fortran_propagation.dat")
    print "Max difference pyprop/fortran: %e" % nmax(
        abs(prop.psi.GetData())**2 - fdata[1:])

    return prop