COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
sutra_tscreen.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_TSCREEN_H_
18 #define _SUTRA_TSCREEN_H_
19 
20 #include <sutra_phase.h>
21 #include <sutra_utils.h>
22 
24  public:
25  int device; // The device #
26  SutraPhase *d_tscreen; // The phase screen
28  *d_tscreen_o; // Additional space of the same size as the phase screen
29  CarmaObj<float> *d_mat_a; // A matrix for extrusion
30  CarmaObj<float> *d_mat_b; // B matrix for extrusion
31  CarmaObj<unsigned int> *d_istencilx; // stencil for column extrusion
32  CarmaObj<unsigned int> *d_istencily; // stencil for row extrusion
33  CarmaObj<float> *d_z; // tmp array for extrusion process
34  CarmaObj<float> *d_noise; // tmp array containing random numbers
35  CarmaObj<float> *d_ytmp; // contains the extrude update (row or column)
36  long screen_size; // size of phase screens
37  float r0; // layer r0 (pixel units)
38  float amplitude; // amplitude for extrusion (r0^-5/6)
39  float altitude;
40  float windspeed;
41  float winddir;
42  float deltax; // number of rows to extrude per iteration
43  float deltay; // number of lines to extrude per iteration
44  // internal
45  float accumx;
46  float accumy;
47  cudaChannelFormatDesc
48  channel_desc; // Channel descriptor for texture memory access
49 
51  *d_tscreen_c; // Additional space for von karman screen generation
52  float norm_vk;
53  bool vk_on;
55 
56  public:
57  SutraTurbuScreen(CarmaContext *context, long size, long size2, float amplitude,
58  float altitude, float windspeed, float winddir, float deltax,
59  float deltay, int device);
60  // SutraTurbuScreen(const SutraTurbuScreen &tscreen);
62 
63  int init_screen(float *h_A, float *h_B, unsigned int *h_istencilx,
64  unsigned int *h_istencily, int seed);
65  int extrude(int dir);
66  int init_vk(int seed, int pupd);
67  int generate_vk(float l0, int nalias);
69  int set_seed(int seed);
70  int set_deltax(float deltax);
71  int set_deltay(float deltay);
72  int set_istencilx(unsigned int* istencil);
73  int set_istencily(unsigned int* istencil);
74 };
75 
76 int gene_vonkarman(cuFloatComplex *d_odata, float *d_idata, float k0,
77  int nalias, int nx, int ny, int block_size);
78 int norm_pscreen(float *d_odata, float *d_idata, int nx, int ny,
79  float norm_fact, CarmaDevice *device);
80 
81 #endif // _SUTRA_TSCREEN_H_
this class provides the context in which CarmaObj are created
Definition: carma_context.h:79
this class provides the phase features to COMPASS
Definition: sutra_phase.h:31
this class provides the turbulent screen features to COMPASS
Definition: sutra_tscreen.h:23
CarmaObj< float > * d_ytmp
Definition: sutra_tscreen.h:35
CarmaObj< float > * d_noise
Definition: sutra_tscreen.h:34
cudaChannelFormatDesc channel_desc
Definition: sutra_tscreen.h:48
SutraPhase * d_tscreen
Definition: sutra_tscreen.h:26
int generate_vk(float l0, int nalias)
int init_screen(float *h_A, float *h_B, unsigned int *h_istencilx, unsigned int *h_istencily, int seed)
CarmaObj< unsigned int > * d_istencilx
Definition: sutra_tscreen.h:31
int set_seed(int seed)
int set_istencilx(unsigned int *istencil)
CarmaObj< float > * d_tscreen_o
Definition: sutra_tscreen.h:28
CarmaObj< unsigned int > * d_istencily
Definition: sutra_tscreen.h:32
int init_vk(int seed, int pupd)
int set_deltax(float deltax)
SutraTurbuScreen(CarmaContext *context, long size, long size2, float amplitude, float altitude, float windspeed, float winddir, float deltax, float deltay, int device)
CarmaContext * current_context
Definition: sutra_tscreen.h:54
int set_istencily(unsigned int *istencil)
CarmaObj< cuFloatComplex > * d_tscreen_c
Definition: sutra_tscreen.h:51
CarmaObj< float > * d_mat_a
Definition: sutra_tscreen.h:29
int extrude(int dir)
CarmaObj< float > * d_mat_b
Definition: sutra_tscreen.h:30
CarmaObj< float > * d_z
Definition: sutra_tscreen.h:33
int set_deltay(float deltay)
int gene_vonkarman(cuFloatComplex *d_odata, float *d_idata, float k0, int nalias, int nx, int ny, int block_size)
int norm_pscreen(float *d_odata, float *d_idata, int nx, int ny, float norm_fact, CarmaDevice *device)