lunedì, febbraio 18, 2008

Realistic simulation of atmospheric seeing

These movies (click to animate) show a simulation of atmospheric seeing. To provide realistic time flow, the frames have been computed according to the “Taylor” hypotesis ( which assumes that the the turbulent wavefront moves in front of the telescope carried by winds.
For the sake of precision, if we assume that the phase fluctuation to be a function of space (x) and time (t):

then, as in all transport phenomena, we can derive time dependencies as:

The left hand side term is the deformation of the wave front due to rearrangement of the eddies in the flow, the terms to the extreme right is the transport of the wave front caused by fluid flow at speed u, and the first term after the equal sign is the wave front fluctuation seen by the scope pointing at the sem direction (x is considered scalar for simplicity). The Taylor hypothesis means that the thwo terms at the right side of the equation are considered dominant, whereas the rearrangement of the eddies is slower. That means that the scope sees a wave front sliding in front of it.
The R source code does exactly that: 1) first a wave front in the form of a long strip is generated, 2) then it is passed in front of the aperture.
Every time frame the wave front moves 4% of the diameter of the scope. This means that for a scope the size of 500 mm the wave front moves 20 mm every frame. If we assume a typical wind speed of 10 m/s that means the time step is 2ms, or 500 frames per second (20 times slower than reality when reproduced at 25 fps).
The two movies differ for the amount of bad seeing. It is interesting to note the motion and rearrangement of the speckles, and at the same time, the slow wandering of the whole pattern due to largest scale wave front tilt.

The R source code -----------------

size <- 51
t <- turb(size*11,size*3)
p <- pupil(size)
step <- 2
nsteps <- floor((size*10)/step)
star <- star.test(p,size=40,pad=4,draw=FALSE)
zmax <- max(star)
gamma <- 2.2

GDD("turbulence", type="gif", width=400, height=400)

for (i in 1:nsteps) {
tt <- t[((i-1)*step+1):((i-1)*step+size),(size*1):(size*2)]
rms <- sd(as.vector (tt))*20
star <- star.test(p,size=40,pad=4,draw=FALSE)
image ((star/zmax)^(1/gamma), zlim=c(0,1), col=gray256, asp=1, bty='n', axes=FALSE)