COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
sutra_gamora.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_GAMORA_H_
18 #define _SUTRA_GAMORA_H_
19 
20 #include <carma.h>
21 #include <carma_host_obj.h>
22 #include <carma_obj.h>
23 #include <carma_sparse_obj.h>
24 #include <map>
25 #include <vector>
26 
27 class SutraGamora {
28  public:
30  int device;
31 
32  int nactus; // number of actuators
33  int niter; // number of iterations
34  int nmodes; // number of modes
35  // PSF reconstruction from roket data
43  float scale;
44  int size;
45  int Npts;
46  // PSF reconstruction with Vii functions
59 
60  public:
61  SutraGamora(CarmaContext *context, int device, char *type, int nactus,
62  int nmodes, int niter, float *IFvalue, int *IFrowind,
63  int *IFcolind, int IFnz, float *d_TT, float *pupil, int size,
64  int Npts, float scale, float *Btt, float *covmodes);
66 
67  int psf_rec_roket(float *err);
68  int psf_rec_Vii();
69 
71 
72  private:
73  std::vector<CarmaObj<cuFloatComplex> *> d_amplipup_ngpu;
74  std::vector<CarmaObj<cuFloatComplex> *> d_newmodek_ngpu;
75  std::vector<CarmaObj<float> *> d_Btt_ngpu;
76  std::vector<CarmaObj<float> *> d_covmodes_ngpu;
77  std::vector<CarmaObj<float> *> d_term1_ngpu;
78  std::vector<CarmaObj<float> *> d_term2_ngpu;
79  std::vector<CarmaSparseObj<float> *> d_IF_ngpu;
80  std::vector<CarmaObj<float> *> d_TT_ngpu;
81  std::vector<CarmaObj<float> *> d_phase_ngpu;
82  std::vector<CarmaObj<int> *> d_wherephase_ngpu;
83  std::vector<CarmaObj<cuFloatComplex> *> d_pupfft_ngpu;
84  std::vector<CarmaObj<cuFloatComplex> *> d_Dphi_ngpu;
85 };
86 
87 int fill_amplipup(cuFloatComplex *amplipup, float *phase, int *wherephase,
88  float scale, int Npts, int nx, int Nx, int puponly,
89  CarmaDevice *device);
90 int cumulpsf(float *d_odata, cuFloatComplex *d_idata, int N,
91  CarmaDevice *device);
92 int abs2complex(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N,
93  CarmaDevice *device);
94 int real(float *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device);
95 int fill_mask(float *d_odata, float *d_idata, int N, int norm,
96  CarmaDevice *device);
97 int modulus2(float *d_odata, cuFloatComplex *d_idata, int N,
98  CarmaDevice *device);
99 int pow2(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N,
100  CarmaDevice *device);
101 int fill_term1(float *d_odata, cuFloatComplex *d_idata,
102  cuFloatComplex *d_pupfft, int N, CarmaDevice *device);
103 int add2Dphi(cuFloatComplex *d_odata, float *d_term1, float *d_term2, float e,
104  int N, CarmaDevice *device);
105 int computeOTFvii(float *d_otfVii, cuFloatComplex *d_Dphi, float *d_otftel,
106  float *d_mask, float scale, int N, CarmaDevice *device);
107 int ifftscale(cuFloatComplex *d_odata, float scale, int N,
108  CarmaDevice *device);
109 
110 #endif
this class provides the context in which CarmaObj are created
Definition: carma_context.h:79
this class provides the gamora features to COMPASS
Definition: sutra_gamora.h:27
CarmaObj< cuFloatComplex > * d_Dphi
Definition: sutra_gamora.h:57
CarmaObj< cuFloatComplex > * d_pupfft
Definition: sutra_gamora.h:58
CarmaObj< float > * d_covmodes
Definition: sutra_gamora.h:54
CarmaObj< float > * d_otftel
Definition: sutra_gamora.h:49
CarmaObj< float > * d_psf
Definition: sutra_gamora.h:38
CarmaObj< float > * d_Btt
Definition: sutra_gamora.h:53
void compute_Dphi_on_mode_k(int k)
CarmaHostObj< float > * h_eigenvals
Definition: sutra_gamora.h:55
SutraGamora(CarmaContext *context, int device, char *type, int nactus, int nmodes, int niter, float *IFvalue, int *IFrowind, int *IFcolind, int IFnz, float *d_TT, float *pupil, int size, int Npts, float scale, float *Btt, float *covmodes)
CarmaObj< cuFloatComplex > * d_amplipup
Definition: sutra_gamora.h:37
CarmaObj< float > * d_eigenvals
Definition: sutra_gamora.h:52
CarmaSparseObj< float > * d_IF
Definition: sutra_gamora.h:41
CarmaObj< float > * d_term2
Definition: sutra_gamora.h:48
CarmaObj< float > * d_phase
Definition: sutra_gamora.h:39
CarmaObj< float > * d_err
Definition: sutra_gamora.h:36
CarmaObj< int > * d_wherephase
Definition: sutra_gamora.h:40
int psf_rec_roket(float *err)
CarmaObj< cuFloatComplex > * d_newmodek
Definition: sutra_gamora.h:56
CarmaContext * current_context
Definition: sutra_gamora.h:29
int psf_rec_Vii()
CarmaObj< float > * d_TT
Definition: sutra_gamora.h:42
CarmaObj< float > * d_term1
Definition: sutra_gamora.h:47
CarmaObj< float > * d_mask
Definition: sutra_gamora.h:51
CarmaObj< float > * d_otfVii
Definition: sutra_gamora.h:50
int ifftscale(cuFloatComplex *d_odata, float scale, int N, CarmaDevice *device)
int add2Dphi(cuFloatComplex *d_odata, float *d_term1, float *d_term2, float e, int N, CarmaDevice *device)
int pow2(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device)
int computeOTFvii(float *d_otfVii, cuFloatComplex *d_Dphi, float *d_otftel, float *d_mask, float scale, int N, CarmaDevice *device)
int fill_term1(float *d_odata, cuFloatComplex *d_idata, cuFloatComplex *d_pupfft, int N, CarmaDevice *device)
int modulus2(float *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device)
int fill_amplipup(cuFloatComplex *amplipup, float *phase, int *wherephase, float scale, int Npts, int nx, int Nx, int puponly, CarmaDevice *device)
int real(float *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device)
int abs2complex(cuFloatComplex *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device)
int fill_mask(float *d_odata, float *d_idata, int N, int norm, CarmaDevice *device)
int cumulpsf(float *d_odata, cuFloatComplex *d_idata, int N, CarmaDevice *device)