Hi,
I noticed a weird phenomena while using the sampler plugin. I am running a case with std rk4 time stepping and dt = 0.00125. I want to sample a bunch of points every 1000 steps. Some configurations are showed as following:
[solver-time-integrator]
formulation = std
scheme = rk4 ; tvd-rk3
controller = none
tstart = 0.0
tend = 30000
dt = 0.00125
[soln-plugin-sampler]
nsteps = 1000
samp-pts=[a lot of points]
format = primitive
file = point-data.csv
header = true
However, when I check sample result, time t is showing something different:
t,x,y,z,rho,u,v,w,p
1.249999999345, ....
....
2.49999999869, ....
....
3.749999998035, ....
....
4.99999999738, ....
....
6.248749999346, .....
.
.
.
36.24124999935, .....
From the 5th output, it shows it samples 999 steps rather than 1000. And it will accumulate error: till t = 36.24125 it missed 7 steps. Do you have any idea about this? I couldn’t see something odd from the source code. Is that because I have sampled too many points?
Regards,
Zhenyang
This is expected behaviour. Certain plugins (most notably the solution writer) have specific output times. In order to hit these times within a prescribed tolerance, PyFR will vary dt as required. Often these variations can be somewhat non-intuitive due to floating point round-off error.
Case in point, if you run the included Euler vortex example and dump the stats file at t = 100
you’ll see that it takes nsteps = 20005
to get to t = 100
with a dt = 0.005
.
Floating point math is often non-intuitive. For example:
sum([0.00125]*2000)
2.500000000000041
which would cause anything scheduled to happen at t = 2.5
to overshoot. Thus, if you have a plugin scheduled to run at this time PyFR will take a smaller step than usual to ensure we don’t overshoot.
Regards, Freddie.
Ok. This will cause problems when restarting the program and do spectral analysis with data sampled. I slightly changed time step and it seems sampling at the frequency I want. Thanks for the explain.
Regards,
Zhenyang
You can simply put a cubic spline through the sampled data and then use the spline to resample as appropriate.
Regards, Freddie.