Skip to content

Commit

Permalink
Replace constructor of FFTOperator by transform() function.
Browse files Browse the repository at this point in the history
  • Loading branch information
bastikr committed Jun 6, 2017
1 parent 2e11724 commit 440d1b6
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 14 deletions.
4 changes: 1 addition & 3 deletions src/QuantumOptics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ export bases, Basis, GenericBasis, CompositeBasis, basis,
spin, SpinBasis, sigmax, sigmay, sigmaz, sigmap, sigmam, spinup, spindown,
subspace, SubspaceBasis, projector,
particle, PositionBasis, MomentumBasis, samplepoints, gaussianstate,
position, momentum, potentialoperator, FFTOperator,
position, momentum, potentialoperator, transform,
nlevel, NLevelBasis, transition, nlevelstate,
manybody, ManyBodyBasis, fermionstates, bosonstates,
manybodyoperator, onebodyexpect, occupation,
transformations, transform,
phasespace, qfunc, wigner,
metrics, tracenorm, tracenorm_general, tracedistance, tracedistance_general,
entropy_vn, fidelity,
Expand Down Expand Up @@ -92,7 +91,6 @@ using .subspace
using .particle
using .nlevel
using .manybody
using .transformations
using .phasespace
using .timeevolution
using .metrics
Expand Down
22 changes: 15 additions & 7 deletions src/particle.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ using ..bases, ..states, ..operators, ..operators_dense, ..operators_sparse
export PositionBasis, MomentumBasis,
gaussianstate,
spacing, samplepoints,
position, momentum, potentialoperator, FFTOperator
position, momentum, potentialoperator,
transform

"""
PositionBasis(xmin, xmax, Npoints)
Expand Down Expand Up @@ -167,7 +168,7 @@ Position operator in momentum space.
"""
function position(b::MomentumBasis)
b_pos = PositionBasis(b)
particle.FFTOperator(b, b_pos)*full(position(b_pos))*particle.FFTOperator(b_pos, b)
transform(b, b_pos)*full(position(b_pos))*transform(b_pos, b)
end

"""
Expand All @@ -184,7 +185,7 @@ Momentum operator in real space.
"""
function momentum(b::PositionBasis)
b_mom = MomentumBasis(b)
particle.FFTOperator(b, b_mom)*full(momentum(b_mom))*particle.FFTOperator(b_mom, b)
transform(b, b_mom)*full(momentum(b_mom))*transform(b_mom, b)
end

"""
Expand All @@ -204,9 +205,10 @@ Operator representing a potential ``V(x)`` in momentum space.
"""
function potentialoperator(b::MomentumBasis, V::Function)
b_pos = PositionBasis(b)
particle.FFTOperator(b, b_pos)*full(potentialoperator(b_pos, V))*particle.FFTOperator(b_pos, b)
transform(b, b_pos)*full(potentialoperator(b_pos, V))*transform(b_pos, b)
end


"""
FFTOperator(basis_l, basis_r)
Expand All @@ -225,7 +227,13 @@ type FFTOperator <: Operator
mul_after::Vector{Complex128}
end

function FFTOperator(basis_l::MomentumBasis, basis_r::PositionBasis)
"""
transform(b1::MomentumBasis, b2::PositionBasis)
transform(b1::PositionBasis, b2::MomentumBasis)
Transformation operator between position basis and momentum basis.
"""
function transform(basis_l::MomentumBasis, basis_r::PositionBasis)
Lx = (basis_r.xmax - basis_r.xmin)
dp = spacing(basis_l)
dx = spacing(basis_r)
Expand All @@ -239,7 +247,7 @@ function FFTOperator(basis_l::MomentumBasis, basis_r::PositionBasis)
FFTOperator(basis_l, basis_r, plan_bfft!(x), plan_fft!(x), plan_bfft!(A, 2), plan_fft!(A, 1), mul_before, mul_after)
end

function FFTOperator(basis_l::PositionBasis, basis_r::MomentumBasis)
function transform(basis_l::PositionBasis, basis_r::MomentumBasis)
Lx = (basis_l.xmax - basis_l.xmin)
dp = spacing(basis_r)
dx = spacing(basis_l)
Expand All @@ -255,7 +263,7 @@ end

operators.full(op::FFTOperator) = op*identityoperator(DenseOperator, op.basis_r)

operators.dagger(op::FFTOperator) = FFTOperator(op.basis_r, op.basis_l)
operators.dagger(op::FFTOperator) = transform(op.basis_r, op.basis_l)


function operators.gemv!(alpha_, M::FFTOperator, b::Ket, beta_, result::Ket)
Expand Down
1 change: 1 addition & 0 deletions src/transformations.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module transformations

import ..particle: transform
using ..polynomials, ..particle, ..operators_dense, ..fock

export transform
Expand Down
6 changes: 3 additions & 3 deletions test/test_particle.jl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ psi0_bp = gaussianstate(basis_momentum, x0, p0, sigma)
p_bx = momentum(basis_position)
x_bx = position(basis_position)

@test 1e-10 > D(p_bx, particle.FFTOperator(basis_position, basis_momentum)*full(momentum(basis_momentum))*particle.FFTOperator(basis_momentum, basis_position))
@test 1e-10 > D(p_bx, transform(basis_position, basis_momentum)*full(momentum(basis_momentum))*transform(basis_momentum, basis_position))

p_bp = momentum(basis_momentum)
x_bp = position(basis_momentum)
Expand Down Expand Up @@ -94,8 +94,8 @@ psi0_bp_fft = transformation(basis_momentum, basis_position, psi0_bp)
@test 1e-12 > norm(psi0_bp_fft - psi0_bx)


Tpx = particle.FFTOperator(basis_momentum, basis_position)
Txp = particle.FFTOperator(basis_position, basis_momentum)
Tpx = transform(basis_momentum, basis_position)
Txp = transform(basis_position, basis_momentum)
psi0_bx_fft = Tpx*psi0_bx
psi0_bp_fft = Txp*psi0_bp

Expand Down
2 changes: 1 addition & 1 deletion test/test_printing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ op = LazyTensor(b_fock ⊗ b_mb ⊗ b_spin, [1, 3], [SparseOperator(b_fock), Den

bx = PositionBasis(-2, 2, 4)
bp = MomentumBasis(bx)
Tpx = FFTOperator(bp, bx)
Tpx = transform(bp, bx)
@test sprint(show, Tpx) == "FFTOperator(dim=4x4)
basis left: Momentum(pmin=-3.141592653589793, pmax=3.141592653589793, N=4)
basis right: Position(xmin=-2.0, xmax=2.0, N=4)"
Expand Down

0 comments on commit 440d1b6

Please sign in to comment.