ceo 0.1.0

CUDA Engined Optics
Documentation
#ifndef __GMTMIRRORS_H_
#define __GMTMIRRORS_H_

#ifndef __RAYTRACING_H__
#include "rayTracing.h"
#endif

#ifndef __SOURCE_H__
#include "source.h"
#endif

__device__ rtd bending_modes_surface(vector *v, const int N_mode, rtd *b,
                                     double *BM,
                                     const int BM_N_SAMPLE, const double BM_radius);
__device__ rtd partial_x_bending_modes_surface(vector *v, const int N_mode, rtd *b,
                                               double *BM,
                                               const int BM_N_SAMPLE, const double BM_radius);
__device__ rtd partial_y_bending_modes_surface(vector *v, const int N_mode, rtd *b,
                                               double *BM,
                                               const int BM_N_SAMPLE, const double BM_radius);
__device__ rtd partial_z_bending_modes_surface(void);



struct bending_modes {
  double *d__x_BM, *d__y_BM;
  double *d__BM;
  double *d__BMS;
  double BM_radius;
  int BM_N_SAMPLE;
  double *d__BM_buffer;
  int n_mode;
  rtd *b, *d__b;
  int N;  
  void setup(int n_mode);
  void setup(int n_mode, int N_SET);
  void setupKL(int n_mode);
  void setupKL(int n_mode, int N_SET);
  void setupPolish(int n_mode, int N_SET);
  void cleanup(void);
  void load(void);
  void load_reg(void);
  void load_KL(void);
  void load_polish(void);
  void nearest_neighbor(rtd *d__BMi,
                   rtd *d__partial_x_BMi,
                   rtd *d__partial_y_BMi,
                   int NI, rtd di, int k_mode);
  void bilinear(rtd *d__BMi,
           rtd *d__partial_x_BMi,
           rtd *d__partial_y_BMi,
           int NI, rtd di, int k_mode);
  void update(rtd *b);
};
struct modes {
  double *d__x_BM, *d__y_BM;
  double *d__BM;
  double *d__BMS;
  double BM_radius;
  int BM_N_SAMPLE;
  double *d__BM_buffer;
  int n_mode;
  rtd *b, *d__b;
  int N;  
  char filename[256];
  int N_SET;
  int N_MODE;
  int *d__s2b;  
  void setup(char *filename, int N, int n_mode);
  void setup(int _BM_N_SAMPLE_, double _BM_radius_,
             int _N_SET_, int _N_MODE_, int *s2b,
             double *buffer, int _N_, int _n_mode_);
  void cleanup(void);
  void load(void);
  void load(int _BM_N_SAMPLE_, double _BM_radius_,
            int _N_SET_, int _N_MODE_, int *s2b,
            double *buffer);
  void reset_modes(double *buffer);
  void update(rtd *b);
};
struct gmt_m1 {
  int M_ID;
  rtd D_assembly;
  rtd D_clear;
  rtd D_full;
  rtd ri;
  rtd beta;
  rtd L;
    //rtd D;
    //int D_px;
  rtd area0, area_fraction;
  float area0_px;
  rtd area;
  int N;
  rtd depth;
  coordinate_system aperture_CS;
  coordinate_system conic_CS;
  vector conic_origin[7], *d__conic_origin;
  rtd conic_c, conic_k;
  rtd *d__conic_c, *d__conic_k;
  coordinate_system rigid_body_CS;
  coordinate_system motion_CS;
  rtd height;
  mask *V;
  int idx_offset;
  zernikeS *ZS;
  int *d__piston_mask;
  coordinate_system TT_CS;
  double *d__C, *d__D;
  cublasHandle_t handle;
  char *d__valid_segments;
    //bending_modes *BS;
  modes BS;
  float *d__segment_reflectivity;  
  
  void setup(void);
  //void setup(modes *_BS_);
  void setup(char *_filename_, int _N_, int _n_mode_);
  void setup(zernikeS *ZS);
  void cleanup(void);
  void update(vector _origin_, vector _euler_angles_,int idx);
  void reset(void);
  void trace(bundle *rays);
  void traceall(bundle *rays);
  void blocking(bundle *rays);
  void global_tiptilt(float tip, float tilt);
  void test_ray_tracing(void);
  void track(float *x, float *y, float *z, int N, int idx);
  void locate(float *x, float *y, float *z, int N, int idx);
  void remove(int *seg_ID, int N_ID);
  void keep(int *seg_ID, int N_ID);
  void update_conic_c(rtd *_conic_c_);
  void update_conic_k(rtd *_conic_k_);
  void set_reflectivity(float *reflectivity);
  void preset(bundle *rays, rtd margin);
  void edge_sensors_data(void);
};
struct gmt_m2 {
  int M_ID;
  rtd D_assembly;
  rtd D_clear;
  rtd D_full;
  rtd ri;
  rtd beta;
  rtd L;
    //rtd D;
    //int D_px;
  rtd area0, area_fraction;
  float area0_px;
  rtd area;
  int N;
  rtd depth;
  coordinate_system aperture_CS;
  coordinate_system conic_CS;
  vector conic_origin[7], *d__conic_origin;
  rtd conic_c, conic_k;
  rtd *d__conic_c, *d__conic_k;
  coordinate_system rigid_body_CS;
  coordinate_system motion_CS;
  rtd height;
  mask *V;
  int idx_offset;
  zernikeS *ZS;
  int *d__piston_mask;
  coordinate_system TT_CS;
  double *d__C, *d__D;
  cublasHandle_t handle;
  char *d__valid_segments;
    //bending_modes *BS;
  modes BS;
  float *d__segment_reflectivity;  
  void setup(void);
  //void setup(modes *_BS_);
  void setup(char *_filename_, int _N_, int _n_mode_);
  void setup(zernikeS *ZS);
  void cleanup(void);
  void update(vector _origin_, vector _euler_angles_,int idx);
  void reset(void);
  void trace(bundle *rays);
  void traceall(bundle *rays);
  void blocking(bundle *rays);
  void global_tiptilt(float tip, float tilt);
  void test_ray_tracing(void);
  void track(float *x, float *y, float *z, int N, int idx);
  void locate(float *x, float *y, float *z, int N, int idx);
  void remove(int *seg_ID, int N_ID);
  void keep(int *seg_ID, int N_ID);
  void update_conic_c(rtd *_conic_c_);
  void update_conic_k(rtd *_conic_k_);
  void set_reflectivity(float *reflectivity);
  void pointing_neutral(float tip, float tilt);
  void coma_neutral(float tip, float tilt);
};
struct stereoscopic_edge_sensors {
int N, N_DATA;
int n_byte, n_byte_DATA;
rtd alpha;
gmt_m1 *mirror;
vector *v0, *v, *d__v0, *d__v;
vector *dv0, *d__dv0;
vector *dv, *d__dv;
void setup(gmt_m1 *_mirror_);
void cleanup(void);
void data(void);
};
struct lateral_edge_sensors {
int N, N_DATA, N_HEIGHT;
rtd alpha;
rtd height;
gmt_m1 *mirror;
int n_byte_DATA;
rtd *x, *y, *d__x, *d__y, *d, *d__d;
vector *k_cam, *d__k_cam;
vector *k_laser, *d__k_laser;
vector *uP, *d__uP;
vector *vP, *d__vP;
vector *A, *A0, *B, *B0, *d__A, *d__A0, *d__B, *d__B0;
void setup(gmt_m1 *_mirror_);
void setup(gmt_m1 *_mirror_, rtd _height_);
void cleanup(void);
void data(void);
};

#endif // __GMTMIRRORS_H_