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())
def Test(): conf = pyprop.Load("find_groundstate.ini") prop = pyprop.Problem(conf) prop.SetupStep() print prop.GetEnergyExpectationValue() print prop.GetEnergyExpectationValue()
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
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
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
def test(gridType=RadialGridType.CARTESIAN): conf = pyprop.Load("kulander.ini") SetRadialGridType(conf, gridType) prop = pyprop.Problem(conf) prop.SetupStep() return prop
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!")
def test(**args): conf = pyprop.Load("config.ini") SetupConfig(conf, **args) prop = pyprop.Problem(conf) prop.SetupStep() return prop
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)
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
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
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
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()
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
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
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
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
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
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
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!")
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
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
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!")
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
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
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
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
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!")
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
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