18 #pragma clang diagnostic ignored "-Wdeprecated-register"
21 #include "eigen3/Eigen/Eigen"
37 double a1, a2, a3,
ap;
39 Eigen::Matrix<comp, 2, 2>
wq, wh, wp, j1, j2, j3, jp;
40 Eigen::Matrix<comp, 2, 2>
mvals;
41 Eigen::Matrix<comp, 2, 2>
rmat(
double alpha){
42 Eigen::Matrix<comp, 2, 2> in;
43 in(0, 0) = cos(alpha);
44 in(0, 1) = -1*sin(alpha);
50 return "jones_matrix";
53 std::shared_ptr<writer> dat(
new writer(
true));
55 double avals[4] = {a1, a2, a3, ap};
57 holder->add_writer(dat);
58 j1=rmat(a1)*wq*rmat(-1*a1);
59 j2=rmat(a2)*wq*rmat(-1*a2);
60 j3=rmat(a3)*wh*rmat(-1*a3);
61 jp=rmat(ap)*wp*rmat(-1*ap);
69 void setup(std::vector<std::shared_ptr<variable> > avars){
70 wq(1, 0) = wq (0, 1) = 0;
71 wq(0, 0)=std::exp(-1.0*
Id*3.14159*0.25);
72 wq(1, 1)=std::exp(1.0*
Id*3.14159*0.25);
79 avars[0]->add_ref(a1,
this);
80 avars[1]->add_ref(a2,
this);
81 avars[2]->add_ref(a3,
this);
82 avars[3]->add_ref(ap,
this);
94 std::string deps[] = {
"num_jones_segments",
"jones_int_dist"};
99 func_dat=fopen(
"python/grad_data2.out",
"w");
100 func_score = fopen(
"python/score_data2.out",
"w");
102 func_dat=fopen(
"python/grad_data.out",
"w");
103 func_score = fopen(
"python/score_data.out",
"w");
108 err(
"System jones_optical requires an even dimension",
"jones_optical::postprocess",
112 invals.
retrieve(num_segments,
"num_jones_segments",
this);
113 if(num_segments < 0){
114 err(
"Number of jones segments must be greater than or equal to zero",
115 "jones_optical::postprocess",
"system/jones_optical.cpp",
FATAL_ERROR);
119 err(
"The distance between jones segments, jones_int_dist, must be greater than or equal to zero",
120 "jones_optical::postprocess",
"system/jones_optical.cpp",
FATAL_ERROR);
125 double dt = 60.0/
nts;
127 for(
size_t i = 0; i <
nts; i++){
128 t[i] = dt*(i-nts/2.0);
130 for(
size_t i = 0; i <
nts; i++){
143 for(
int i = 0; i < num_segments; i++){
144 std::vector<std::shared_ptr<variable> > vv(4);
146 val = std::make_shared<variable>();
151 val->set(0*2*3.1415*(rand()*1.0/RAND_MAX));
158 std::shared_ptr<jones_matrix> m = std::make_shared<jones_matrix>(
get_unique_name(mat_base), i,
holder);
175 for(
size_t i = 0; i <
nts; i++){
202 Eigen::Map<Eigen::Matrix<comp, 2, Eigen::Dynamic, Eigen::RowMajor>, Eigen::Aligned> dmap(
ucur, 2,
nts);
224 double norm, change_norm;
225 norm = change_norm = 0;
226 for(
size_t j = 0; j <
nts; j++){
236 cfsq = sqrt(cfsq)-sqrt(fsq);
237 change_norm += cfsq*cfsq;
242 return sqrt(change_norm/norm);
253 return "jones_optical";