254 "atmosphere is not setup (m_turbAtmo->m_layers size is <= layerNo)" );
269 this->setChangePoint();
277 realT beta = 0.0218 / pow( r0, 5. / 3. ) / pow( ( D / wfSz ) *
m_scrnSz, 2 );
279 realT sqrt_alpha = 0.5 * 11. / 3.;
281 realT L0 =
m_turbAtmo->aosys()->atm.L_0( layerNo );
285 L02 = 1.0 / pow( L0, 2 );
289 std::vector<realT> scs;
295 m_m = std::vector<realT>( { -1.25, -0.75, -0.25, 0.25, 0.75, 1.25, -1.25, 1.25, -1.25, 1.25,
296 -1.25, 1.25, -1.25, 1.25, -1.25, -0.75, -0.25, 0.25, 0.75, 1.25 } );
297 m_n = std::vector<realT>( { -1.25, -1.25, -1.25, -1.25, -1.25, -1.25, -0.75, -0.75, -0.25, -0.25,
298 0.25, 0.25, 0.75, 0.75, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25 } );
299 scs.resize(
m_m.size(), sc );
302 for(
int nl = 1; nl <=
m_level; ++nl )
304 realT sc = pow( 3.0, -nl );
306 for(
int mp = -3; mp < 3; ++mp )
308 for(
int np = -3; np < 3; ++np )
314 if( np == -1 || np == 0 )
319 if( np == -1 || np == 0 )
324 m_m.push_back( sc * ( mp + 0.5 ) );
325 m_n.push_back( sc * ( np + 0.5 ) );
333 std::vector<realT> uniqueM;
334 std::vector<realT> uniqueN;
335 std::vector<realT> uniqueScs;
336 for(
size_t n = 0; n <
m_m.size(); ++n )
338 if(
m_m[n] > 0 || (
m_m[n] == 0 &&
m_n[n] > 0 ) )
340 uniqueM.push_back(
m_m[n] );
341 uniqueN.push_back(
m_n[n] );
342 uniqueScs.push_back( scs[n] );
348 scs.swap( uniqueScs );
358 for(
size_t n = 0; n <
m_m.size(); ++n )
360 realT k = sqrt( ( pow(
m_m[n], 2 ) + pow(
m_n[n], 2 ) ) ) / ( ( D / wfSz ) *
m_scrnSz );
362 realT tpsd = beta / pow( k * k + L02, sqrt_alpha );
379 m_sqrtPSD[n] = sqrt( 2 ) * scs[n] * sqrt( tpsd * ( 1 - Ppiston - Ptiptilt ) );
383 for(
int cc = 0; cc <
m_scrnSz; ++cc )
386 for(
int rr = 0; rr <
m_scrnSz; ++rr )
398 this->setChangePoint();