function wavefront,d_over_r0,nterms=nterms,level=level scale = (d_over_r0)^(5.0/3.0) if not keyword_set(nterms) then nterms = 15 if nterms lt 10 then message, "C'mon, at least use ten terms..." if keyword_set(level) then begin narr = findgen(400)+2 coef = sqrt(0.2944*scale*((narr-1)^(-0.866) - narr^(-0.866))) wh = where(coef lt level) n = wh[0] norder = ceil(sqrt(2*n)-0.5) nterms = norder*(norder+1)/2 if nterms lt 15 then nterms = 15 endif wf = fltarr(256,256) resid = fltarr(nterms) coeff = fltarr(nterms)*0.0 resid[0:9] = [1.030,0.582,0.134,0.111,0.088,0.065,0.059,0.053,0.046,0.040] if nterms gt 10 then begin for i=10,nterms-1 do resid[i]=0.2944*(i+1)^(-0.866) endif for j=2,nterms do begin coeff[j-1] = sqrt((resid[j-2]-resid[j-1])*scale) wf = wf + coeff[j-1]*randomn(seed)*zernike(j) endfor print, "Computed Zernikes to term ",nterms," and to rms level ",coeff[nterms-1] return, wf end