diff --git a/REQUIRE b/REQUIRE index 02af2de..d18e4b0 100644 --- a/REQUIRE +++ b/REQUIRE @@ -2,3 +2,4 @@ julia 0.3 Compat Docile ODE 0.2.1 +ProgressMeter diff --git a/src/propmachinery.jl b/src/propmachinery.jl index 9404bbf..035ed74 100644 --- a/src/propmachinery.jl +++ b/src/propmachinery.jl @@ -1,3 +1,5 @@ +import ProgressMeter + abstract QuPropagatorMethod @doc """ @@ -173,6 +175,54 @@ QuEvolutionOp{QE<:QuEquation}(eq::QE, dt::Float64) = QuEvolutionOp(operator(eq), QuEvolutionOp{QE<:QuEquation}(eq::QE, tf::Float64, ti::Float64) = QuEvolutionOp(eq, tf-ti) +macro showprogress(qprop) + return quote + n = length(@eval $qprop.tlist) + evolved_states = Array(QuBase.AbstractQuArray, n-1) + p = ProgressMeter.Progress(n, 1, "Computation of evolved states in progress ... ", 50) + i = 1 + for (t, psi) in $(esc(qprop)) + evolved_states[i] = psi + i = i + 1 + ProgressMeter.next!(p) + end + evolved_states + end +end + +macro showprogress_trace(qprop) + return quote + n = length(@eval $qprop.tlist) + trace_evolved_states = Array(Complex128, n-1) + p = ProgressMeter.Progress(n, 1, "Computation of the trace of evolved states in progress ... ", 50) + i = 1 + for (t, psi) in $(esc(qprop)) + trace_evolved_states[i] = trace(psi) + i = i + 1 + ProgressMeter.next!(p) + end + trace_evolved_states + end +end + +macro showprogress_expectation(qprop, expectation_operators) + return quote + n = length(@eval $qprop.tlist) + m = length(@eval $expectation_operators) + expectation_values = zeros(Complex128, n, m) + p = ProgressMeter.Progress(n, 1, "Computation of expectation values with respect to evolved states in progress ... ", 50) + i = 1 + for (t, psi) in $(esc(qprop)) + for j in 1:m + expectation_values[i, j] = expectationvalue(psi, @eval $expectation_operators[m]) + end + i = i + 1 + ProgressMeter.next!(p) + end + expectation_values + end +end + function Base.show(io::IO, qprop::QuPropagator) field_params = fieldnames(qprop.eq) println(io, "Summarizing the system :") @@ -198,4 +248,7 @@ end export QuStateEvolution, QuPropagator, QuEvolutionOp, - QuPropagatorState + QuPropagatorState, + @showprogress, + @showprogress_trace, + @showprogress_expectation