Skip to content

Commit

Permalink
refactored 1D fdtd
Browse files Browse the repository at this point in the history
  • Loading branch information
abc0990cba committed Apr 1, 2022
1 parent 2871310 commit 1fb8f86
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 111 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "napi-addon-fdtd",
"version": "3.0.49",
"version": "3.1.2",
"description": "Build N-API native addon with CMake and node-addon-api C++ wrapper. FDTD physics simulation",
"main": "index.js",
"scripts": {
Expand Down
95 changes: 14 additions & 81 deletions src/FDTD/2D_UPDATED/FDTD_2D_UPDATED.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ FDTD_2D_UPDATED::FDTD_2D_UPDATED(double lambda, double tau, std::vector<double>&
}

//Getters
size_t FDTD_2D_UPDATED::GetNx() {
size_t FDTD_2D_UPDATED::GetNx()
{
return jmax;
}

double FDTD_2D_UPDATED::GetTau(){
double FDTD_2D_UPDATED::GetTau()
{
return tau;
}

Expand All @@ -34,27 +36,13 @@ void FDTD_2D_UPDATED::setParams(std::vector<double>& Epsilon, std::vector<double
{
time_step = 0;

// Grid steps.
// dx = 0.05;
// dt = 0.025;


// Physics params.
// aa1 = lambda * lambda / (0.09 * tau * tau);
// tMax = 4 * tau / (lambda / 0.3);


float eaf;

for (int i = 0; i < jmax; i++)
{
Ex[i] = 0;
// Ex_prev[i] = 0;

Hy[i] = 0;
// Hy_prev[i] = 0;

// eps[i] = refractive_index;

eps[i] = Epsilon[i];
omega[i] = Omega[i];

Expand Down Expand Up @@ -84,44 +72,25 @@ double FDTD_2D_UPDATED::SourceFunction(double time_step)
return exp(-pow((time_step - t0),2) / pow(tau,2)) * sin(w0 * time_step * dt);
}

void FDTD_2D_UPDATED::Calculation() {
// Calculate the Ex field.
for (int k = 1; k < jmax; ++k) {
Ex[k] = ca[k] * Ex[k] + cb[k] * (Hy[k - 1] - Hy[k]);
// Ex[k] = Ex[k] + cfl_factor * (Hy[k - 1] - Hy[k]);
}
}

void FDTD_2D_UPDATED::CalcNextLayer( std::vector<double> &vectX,
std::vector<double> &vectEx,
std::vector<double> &vectHy)
{





// Ex[jmax - 1] = Ex_prev[jmax - 2];
// Ex[0] = Ex_prev[1];
// Calculate the Ex field.
for (int k = 1; k < jmax; ++k)
{
Ex[k] = ca[k] * Ex[k] + cb[k] * (Hy[k - 1] - Hy[k]);
}

// Electromagnetic "hard" source.
// Put a Gaussian pulse in the middle.
double pulse = exp(-cfl_factor * pow((t0 - time_step) / spread, 2));//* sin(freq_in * time_step * dt);

///asdasdasdas!!!!!!!!!!!!!!!!!!!!
// pulse = 0.2; //sin(time_step);

// int source_dist = 0;

// source_position = jmax * 0.4;


/////-----------------------
Ex[source_position] += pulse;
// Ex_prev[source_position] = Ex[source_position];


// Absorbing Boundary Conditions
// Absorbing Boundary Conditions.
Ex[0] = boundary_low.front();
boundary_low.erase(boundary_low.begin());
boundary_low.push_back(Ex[1]);
Expand All @@ -130,50 +99,14 @@ void FDTD_2D_UPDATED::CalcNextLayer( std::vector<double> &vectX,
boundary_high.push_back(Ex[jmax - 2]);

// Calculate the Hy field.
for (int k = 0; k < jmax-1; ++k) {
for (int k = 0; k < jmax-1; ++k)
{
Hy[k] = Hy[k] + cfl_factor * (Ex[k] - Ex[k + 1]);
}
// Calculation();
// BoundaryConditionsFirst();
// BoundaryConditionsSecond();

// Update magnetic field boundaries.
// Hy[jmax - 1] = Hy_prev[jmax - 2];


// for(int j = 0; j < (jmax - 1); ++j)
// {
// // Hy[j] = Hy_prev[j] + dt / (dx * mu0) * (Ex[j + 1] - Ex[j]);
// Hy[j] = ca[j] * Hy_prev[j] + cb[j] * (Ex[j + 1] - Ex[j]);
// Hy_prev[j] = Hy[j];
// }

// // Magnetic field source.
// Hy[source_position - 1] -= SourceFunction(time_step) / imp0;
// Hy_prev[source_position - 1] = Hy[source_position - 1];

// // Update electric field boundaries.
// Ex[0] = Ex_prev[1];

// // Update electric field.
// for(int j = 1; j < jmax; ++j)
// {
// // Ex[j] = Ex_prev[j] + dt / (dx * eps[j]) * (Hy[j] - Hy[j - 1]);
// Ex[j] = ca[j] * Ex_prev[j] + cb[j] * (Hy[j] - Hy[j - 1]);

// Ex_prev[j] = Ex[j];
// }

// // Electric field source.
// Ex[source_position - 1] -= SourceFunction(time_step + 1);
// Ex_prev[source_position] = Ex[source_position];



for (int i = 0; i < jmax; i++)
for (int i = 0; i < jmax; i++)
{
// Ex_prev[i] = Ex[i];

vectX.push_back(i);
vectEx.push_back(Ex[i]);
vectHy.push_back(Hy[i]);
Expand Down
35 changes: 8 additions & 27 deletions src/FDTD/2D_UPDATED/FDTD_2D_UPDATED.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,11 @@ class FDTD_2D_UPDATED
size_t time_step;
const double PI = 3.141592653;

// Constants
double aa1; //??
double Ti; //??
double tMax; //??


// Grid size
static const size_t jmax = 300;
// static const size_t Ny = 501;
static const size_t jmax = 400;



double ca[jmax];
double cb[jmax];

Expand All @@ -30,24 +24,18 @@ class FDTD_2D_UPDATED
// omega - conductivity
double omega[jmax];

//magnetic field strength
// Magnetic field strength.
double Hy[jmax];
// double Hy_prev[jmax];

//electric field strength
// Electric field strength.
double Ex[jmax];
// double Ex_prev[jmax];

// lambda - wave length
double lambda;

// tau - pulse duration
double tau;

// Constants/
// double eps0 = 4.85418e-12;
// double mu0 = 1.25664e-10;

// Light speed.
double c0 = 3e8;

Expand All @@ -64,45 +52,38 @@ class FDTD_2D_UPDATED



// Wave lenght in meters.
// double lambda_min = 500e-6;

// Frequency in MHz.
double freq_in = 700e6;

double lambda0 = c0 / freq_in;

double epsz = 8.854e-12;
double sigma = 0.04;

// Grid steps.
double dx = lambda0 / 40;
double dx = lambda0 / 25;
double dt = dx / (2*c0);

double t0 = 50;
int spread = 10;




// Absorbing boundary condition.
void BoundaryConditions();

// Moor`s boundary condition.
// void BoundaryConditionsFirst();

// Moor`s boundary condition.
// void BoundaryConditionsSecond();

// Updating values for new time layer.
void Calculation();

// void Calculation();




public:
FDTD_2D_UPDATED(double lambda, double tau, std::vector<double>& Epsilon, std::vector<double>& Omega, int source_position);

//double lambda, double tau, double refractive_index
void setParams(std::vector<double>& Epsilon, std::vector<double>& Omega);

// Getters.
Expand Down

0 comments on commit 1fb8f86

Please sign in to comment.