Re: Button operation that indicates start and finish of simulation
- To: mathgroup at smc.vnet.net
- Subject: [mg126644] Re: Button operation that indicates start and finish of simulation
- From: A Retey <awnl at gmx-topmail.de>
- Date: Mon, 28 May 2012 05:11:21 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jpspc2$hc5$1@smc.vnet.net>
Am 27.05.2012 10:41, schrieb Hugh Goyder:
> In a notebook with many dynamic modules I have a long simulation which I start with a button. I would like to give an indication that the simulation is starting and also when it is finished. Below, in a toy example, I attempt to use a simple message and also an EvaluationMonitor. Both only give results when the simulation is finished. What don't I understand and how do I fix this? Many thanks.
>
> ClearAll[LongSimulation]
> LongSimulation[] :=
> TimeConstrained[NDSolve[{Derivative[2][x][t] + x[t] == 0,
> x[0] == 1, Derivative[1][x][0] == 0}, x, {t, 0, 100000*Pi},
> MaxSteps -> Infinity, Method -> {"Projection", "Invariants" ->
> {x[t]^2 + Derivative[1][x][t]^2}},
> EvaluationMonitor :> k++], 3]
>
> k=0;
>
> DynamicModule[{message = " "},
> Column[{Button["Start Simulation", message = "Starting Simulation";
> LongSimulation[]; message = "Simulation Finished"],
> Dynamic[message],
> Dynamic[k]}]]
>
This should work:
DynamicModule[{message = " "},
Column[{
Button["Start Simulation",
message = "Starting Simulation";
k = 0;
LongSimulation[];
message = "Simulation Finished",
Method -> "Queued"
],
Dynamic[message, TrackedSymbols :> {message}],
Dynamic[k]
}]]
there are other possibilities with which you should also be able to
achieve what you want, but setting Method->"Queued" is a good idea
anyway: if LongSimulation runs longer than about 5 sec. it will be
aborted with the default method "Preemptive". For reasons not entirely
clear to me that helps also to make the Dynamic[k] update as expected.
For even more reasons not clear to me that still doesn't help with the
update of Dynamic[message]. But giving the TrackedSymbols explicitly
does help there, at least on my Mathematica 8.0.4 on Windows 7. That the
latter is necessary I would consider a bug. The problem with Dynamic[k]
I don't exactly understand but it looks like somehow the evaluation
through the preemptive link does block the updates of the Dynamics. I'm
not sure whether this is by design or a bug.
hth,
albert