Description
Hello @benbovy,
I noted a strange behavior with the framework. It is illustrated in the following basic model. It should produce an output array that goes from 0 to 1 by updating the a variable junk
by one unit per time step. At every time step it also prints the value of junk
as well as the step_start
and step_end
times.
Two features seem unrealistic: first, the end times are smaller than the start times and the first end time is not defined; second, the result seems to be stored in the final array ds_out.empty__junk
with a negative offset of -1 and the result for the last time step is repeated from the previous one (i.e., the output should be [0,1,2,3,4,5,6,7,8,9,10]
whereas it is [1,2,3,4,5,6,7,8,9,10,10]
).
Am I doing something wrong or is it a problem with the framework? I am surprised that we would not have noted this behavior before.
I attach a description of the environment I am using for this.
Thanks in advance for your help
Jean
import numpy as np
import xsimlab as xs
@xs.process
class Empty:
junk = xs.variable(intent="inout")
@xs.runtime(args=("step_delta","step_start","step_end"))
def run_step(self, dt, t0, t1):
print('time', t0,t1,dt)
print('junk before', self.junk)
self.junk = self.junk + 1
print('junk after', self.junk)
model = xs.Model({"empty": Empty})
ds_in = xs.create_setup(
model=model,
clocks={"time": np.linspace(0,.2,11),
"out": np.linspace(0,.2,11)},
master_clock = "time",
input_vars={"empty__junk": 0},
output_vars={"empty__junk":"out"})
with model, xs.monitoring.ProgressBar():
ds_out = ds_in.xsimlab.run()
print(ds_out.empty__junk)