Menu

Tutorial.2DHarmonicOscillator

Ulf Lorenz
There is a newer version of this page. You can find it here.

Valid for version 0.1.1.

Here, we start doing a few more complex things, such as setting up multidimensional grids, composing operators, and using the Chebychev propagator.

Program

The following code snipplet is taken from Demos/HarmonicOscillator/Gaussian2D/1/demo.cpp minus the comments:

#include <boost/math/constants/constants.hpp> // definition of pi
#include <wavepacket.hpp>

using namespace wavepacket;
using namespace tensor;
using namespace boost::math::double_constants;

int main() {
    auto xgrid = std::make_shared<FFTGrid>(-15, 15, 128);
    auto ygrid = std::make_shared<FFTGrid>(-15, 15, 128);
    auto rep = Representation::create( {xgrid, ygrid} );

    auto hamiltPrimitive = std::make_shared<CartesianKineticEnergy>(rep, 0, 1)

            + std::make_shared<CartesianKineticEnergy>(rep, 1, 1)
            + std::make_shared<HarmonicPotential>(rep, 0, 1, 1)
            + std::make_shared<HarmonicPotential>(rep, 1, 1, 1);
    auto hamiltonian = std::make_shared<SchroedingerOperator>(hamiltPrimitive);

    auto builder = std::make_shared<StateBuilder>(rep);
    CTensor psi0 = builder->buildProductWavefunction({
            Gaussian(-5, 0, 1),
            Gaussian(-5, -5, 1) });

    auto propaPrimitive = std::make_shared<ChebychevPrimitive>(hamiltonian,
            hamiltPrimitive->getSpectralMin(), hamiltPrimitive->getSpectralMax());
    auto propagator = std::make_shared<Propagator>(propaPrimitive, pi/20);
    propagator->addObserver(std::make_shared<LoggingOutput>(hamiltPrimitive), 1);

    propagator->propagate(psi0, 0, 40);

    return 0;
}

MongoDB Logo MongoDB