COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
sutra_groot.h
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------
2 // This file is part of COMPASS <https://anr-compass.github.io/compass/>
3 //
4 // Copyright (C) 2011-2023 COMPASS Team <https://github.com/ANR-COMPASS>
5 // All rights reserved.
6 
7 // -----------------------------------------------------------------------------
8 
16 
17 #ifndef _SUTRA_GROOT_H_
18 #define _SUTRA_GROOT_H_
19 
20 #include <carma.h>
21 #include <carma_cublas.h>
22 #include <carma_host_obj.h>
23 #include <carma_obj.h>
24 #include <carma_sparse_obj.h>
25 
26 class SutraGroot {
27  public:
29  int device;
30 
31  int nactus; // number of actuators
32  int nssp; // number of valid ssp
33  int nlayers; // number of atmos layers
34  int npts; // number of samples for aliasig computation
35  float gsangle; // Guide star angle [rad]
36  float fc; // DM cut-off frequency [m]
37  float scale;
38  float d;
39 
40  CarmaHostObj<float> *h_vdt; // v*dt/g [m/s]
41  CarmaHostObj<float> *h_Htheta; // H*theta (theta = GS radial distance) [m]
43  CarmaHostObj<float> *h_winddir; // wind directions [rad]
44  CarmaHostObj<float> *h_scale; // r0**(-5/3) * frac * (lambda/2pi)**2
45  CarmaHostObj<float> *h_weights; // Simpson method weights for integration
46  // Covariance matrix estimation
47  CarmaObj<float> *d_Cerr; // Residual error covariance matrix on DM actuators
49  *d_TT; // TT component of the residual error covariance matrix
50  CarmaObj<float> *d_CaXX; // XX aliasing covariance matrix
51  CarmaObj<float> *d_CaYY; // YY aliasing covariance matrix
52 
54  *d_TTPfilter; // Tip-tilt and piston filter matrix (= Btt.dot(P))
55  CarmaObj<float> *d_pzt2tt; // pzt to TT matrix
56  CarmaObj<float> *d_Nact; // Coupling matrix
57  CarmaObj<float> *d_xpos; // X-positions of DM actuators or ssp [m]
58  CarmaObj<float> *d_ypos; // Y-positions of DM actuators or ssp [m]
59 
60  // Dphi lowpass
61  CarmaObj<float> *d_tab_int_x; // Tabulated integral
63 
64  public:
65  SutraGroot(CarmaContext *context, int device, int nactus, int nlayers,
66  float gsangle, float *vdt, float *Htheta, float *L0,
67  float *winddir, float *scale, float *pzt2tt, float *TTPfilter,
68  float *Nact, float *xpos, float *ypos, float fc);
69 
70  SutraGroot(CarmaContext *context, int device, int nssp, float *weights,
71  float scale, float *xpos, float *ypos, float fc, float d,
72  int npts);
74 
75  cublasHandle_t cublas_handle() { return current_context->get_cublas_handle(); }
76  void init_common(CarmaContext *context, int device, float *xpos, float *ypos,
77  int N, float fc);
78  int compute_Cerr();
80 };
81 template <class T_data>
82 int compute_Cerr_layer(T_data *Cerr, int N, T_data *tab_int_x,
83  T_data *tab_int_y, T_data *xpos, T_data *ypos,
84  T_data vdt, T_data Htheta, T_data L0, T_data fc,
85  T_data winddir, T_data gsangle, T_data scale, int Ntab,
86  CarmaDevice *device);
87 template <class T_data>
88 int compute_Ca(T_data *CaXX, T_data *CaYY, int nssp, T_data *tab_int_x,
89  T_data *tab_int_y, T_data *xpos, T_data *ypos, T_data offset,
90  T_data d, T_data fc, T_data scale, T_data weight, int Ntab,
91  CarmaDevice *device);
92 template <class T_data>
93 int tab_u831J0(T_data *tab_int_x, T_data *tab_int_y, int N,
94  CarmaDevice *device);
95 template <class T_data>
96 void cumsum(T_data *odata, T_data *idata, int N);
97 template <class T_data>
98 int add_transpose(T_data *Cerr, int N, CarmaDevice *device);
99 
100 #endif
this file provides the cublas features to CarmaObj
this class provides the context in which CarmaObj are created
Definition: carma_context.h:79
cublasHandle_t get_cublas_handle()
this class provides the groot features to COMPASS
Definition: sutra_groot.h:26
CarmaObj< float > * d_pzt2tt
Definition: sutra_groot.h:55
int compute_Calias()
CarmaObj< float > * d_Cerr
Definition: sutra_groot.h:47
CarmaHostObj< float > * h_weights
Definition: sutra_groot.h:45
SutraGroot(CarmaContext *context, int device, int nactus, int nlayers, float gsangle, float *vdt, float *Htheta, float *L0, float *winddir, float *scale, float *pzt2tt, float *TTPfilter, float *Nact, float *xpos, float *ypos, float fc)
CarmaObj< float > * d_CaXX
Definition: sutra_groot.h:50
CarmaObj< float > * d_TTPfilter
Definition: sutra_groot.h:54
CarmaHostObj< float > * h_Htheta
Definition: sutra_groot.h:41
CarmaHostObj< float > * h_scale
Definition: sutra_groot.h:44
CarmaObj< float > * d_tab_int_x
Definition: sutra_groot.h:61
CarmaHostObj< float > * h_L0
Definition: sutra_groot.h:42
cublasHandle_t cublas_handle()
Definition: sutra_groot.h:75
float fc
Definition: sutra_groot.h:36
int compute_Cerr()
void init_common(CarmaContext *context, int device, float *xpos, float *ypos, int N, float fc)
CarmaContext * current_context
Definition: sutra_groot.h:28
CarmaObj< float > * d_tab_int_y
Definition: sutra_groot.h:62
CarmaHostObj< float > * h_winddir
Definition: sutra_groot.h:43
CarmaObj< float > * d_ypos
Definition: sutra_groot.h:58
CarmaObj< float > * d_Nact
Definition: sutra_groot.h:56
CarmaObj< float > * d_xpos
Definition: sutra_groot.h:57
float gsangle
Definition: sutra_groot.h:35
CarmaObj< float > * d_CaYY
Definition: sutra_groot.h:51
SutraGroot(CarmaContext *context, int device, int nssp, float *weights, float scale, float *xpos, float *ypos, float fc, float d, int npts)
CarmaObj< float > * d_TT
Definition: sutra_groot.h:49
CarmaHostObj< float > * h_vdt
Definition: sutra_groot.h:40
float scale
Definition: sutra_groot.h:37
int compute_Ca(T_data *CaXX, T_data *CaYY, int nssp, T_data *tab_int_x, T_data *tab_int_y, T_data *xpos, T_data *ypos, T_data offset, T_data d, T_data fc, T_data scale, T_data weight, int Ntab, CarmaDevice *device)
void cumsum(T_data *odata, T_data *idata, int N)
int tab_u831J0(T_data *tab_int_x, T_data *tab_int_y, int N, CarmaDevice *device)
int compute_Cerr_layer(T_data *Cerr, int N, T_data *tab_int_x, T_data *tab_int_y, T_data *xpos, T_data *ypos, T_data vdt, T_data Htheta, T_data L0, T_data fc, T_data winddir, T_data gsangle, T_data scale, int Ntab, CarmaDevice *device)
int add_transpose(T_data *Cerr, int N, CarmaDevice *device)