layer.h
1.45 KB
#ifndef LAYER_H
#define LAYER_H
#include <vector>
#include <complex>
using namespace std;
void crossProduct(vector<complex<double>>* a, vector<complex<double>>* b, vector<complex<double>>* c);
complex<double> Norm(vector<complex<double>>* E);
void Normalize(vector<complex<double>>* E);
vector<vector<double> > transpose(vector<vector<double> >* matrix);
void orthogonalize(vector<complex<double>>* E_0, vector<complex<double>>* E0, vector<complex<double>>* d);
class layersample {
public:
double k; //wavenumber.
vector<complex<double>> n; //refractive index.
vector<double> z; //z postions.
vector<complex<double>> s; //propagation direction. Keep it for output.
vector<complex<double>> sz; //propagation direction. Keep it for output.
vector<complex<double>> d; //direction of propagation of the plane wave.
vector<complex<double>> Pt; //transimission.
vector<complex<double>> Pr; //reflection.
//Calulate the index of the field component associated with a layer.
// l is the layer index. c is the component(x, y, z). d is the direction(0for transmission, 1 for reflection).
size_t ii(size_t l, size_t c, size_t d);
//Generate the linear system corresponding to this layered sample and plane wave.
void generate_linsys(size_t LAYERS, vector<complex<double>>& M, vector<complex<double>>& b, vector<complex<double>>& E, vector<complex<double>>* P, bool CPU_op);
//Build matrix and get E.
void solve(vector<complex<double>>* E, bool CPU_op);
};
#endif