MAOS
Multithreaded Adaptive Optics Simulator
recon_tomo.c File Reference

Setup tomography parameters. More...

Macros

#define TIMING   0
 
#define TIC_tm
 
#define tic_tm
 
#define toc_tm(A)
 

Functions

void setup_recon_tomo_reg (recon_t *recon, const parms_t *parms)
 
void setup_recon_tomo_matrix (recon_t *recon, const parms_t *parms)
 
void setup_recon_tomo (recon_t *recon, const parms_t *parms, const powfs_t *powfs)
 
void Tomo_nea_gpt (Tomo_T *data, int nthread, int gpt)
 
void TomoR (dcell **xout, const void *A, const dcell *gin, const real alpha)
 
void TomoRt (dcell **gout, const void *A, const dcell *xin, const real alpha)
 
void TomoL (dcell **xout, const void *A, const dcell *xin, const real alpha)
 

Detailed Description

Setup tomography parameters.

Function Documentation

◆ setup_recon_tomo_reg()

void setup_recon_tomo_reg ( recon_t recon,
const parms_t parms 
)

Regularization terms for tomography. Can be called multiple times for Cn2 update.

◆ setup_recon_tomo_matrix()

void setup_recon_tomo_matrix ( recon_t recon,
const parms_t parms 
)

assemble tomography matrix. In CG mode, this function is not executed if tomo.assemble=0, Instead, the algorithm is contained in recon.c. When you modify anything, make sure you also do it there.

For integrated tomograhy:

\(\hat{x}=(G_{lgs}^{T}C_{lgs}^{-1}G_{lgs}+C_{x}^{-1}+G_{ngs}^{T}C_{ngs}^{-1} G_{ngs})^{-1}(G_{lgs}^{T}C_{lgs}^{-1}s_{lgs}+G_{ngs}^{T}C_{ngs}^{-1}s_{ngs}){\equiv}RL^{-1}RR s.\)

For split tomography, the terms regarding NGS are dropped:

\(\hat{x}_{lgs}=(G_{lgs}^{T}C_{lgs}^{-1}G_{lgs}+C_{x}^{-1})^{-1} G_{lgs}^{T}C_{lgs}^{-1}s_{lgs}\equiv R_L^{-1} R_R s.\)

The left hand side of linear equation (inside the inverse) is stored in RL. The right hand side of the linear equation (outside of the inverse) is stored in RR. The terms regarding the NGS are handled using low rank terms. The gradients from LGS and NGS and concatenated to \(s\).

In the LGS part, there is a global tip/tilt removal operator because LGS is insensitive to global tip/tilts.

For details see www.opticsinfobase.org/abstract.cfm?URI=josaa-19-9-1803

◆ setup_recon_tomo()

void setup_recon_tomo ( recon_t recon,
const parms_t parms,
const powfs_t powfs 
)

Sets up the tomogrpahy turbulence reconstruction structs including wavefront reconstructor and DM fitting operator

Calls setup_recon_tomo_matrix() and setup_recon_fit_matrix() to setup the tomography and DM fitting matrix.

AHST is handled in setup_ngsmod().

MVST is handled in setup_recon_mvst().

MOAO is handled in setup_recon_moao().

◆ Tomo_nea_gpt()

void Tomo_nea_gpt ( Tomo_T *  data,
int  nthread,
int  gpt 
)

Apply NEA weighting with optional Gp' gg = GP' * NEAI * gg;

◆ TomoR()

void TomoR ( dcell **  xout,
const void *  A,
const dcell gin,
const real  alpha 
)

Apply tomography right hand operator without using assembled matrix. Fast and saves memory. The operation is the same as the Tomo_nea_gpt and Tomo_iprop in TomoL, so merge the implemenations.

xout=HXW'GP'*NEAI(1-TTF*PTTF)*gin.

◆ TomoRt()

void TomoRt ( dcell **  gout,
const void *  A,
const dcell xin,
const real  alpha 
)

Transpose operation of TomoRt. From xout -> gin

◆ TomoL()

void TomoL ( dcell **  xout,
const void *  A,
const dcell xin,
const real  alpha 
)

Apply tomography left hand side operator without using assembled matrix. Fast and saves memory. Only useful in CG. Accumulates to xout;

Some timing information: Generated in T410s with Intel Core i5 520 M @ 2.4 GHz (1 T is 1 thread, 2 T is 2 thread) and Poweredge with dual Xeon X5355 2.66Ghz (1 P is 1 thread, 8 P is 8 thread) Time 1 T 2 T 1 P 8 P HXW: 7.8 5.4 7.7 5.0 GP: 4.3 2.6 3.6 1.4 remove_mode: 0.3 0.3 0.4 0.6 neai: 0.5 0.3 0.5 0.4 GP': 3.2 2.1 3.4 1.0 HXW': 5.5 4.7 7.4 4.9 cxx: 3.2 2.5 3.5 2.7