📄 fdtd_3d_complex.h
字号:
#pragma once
#include "run_enviroment.h"
#include "FDTD_3D_PML.h"
#ifndef NULL
#define NULL 0
#endif
class CFDTD_3D_COMPLEX
{
private:
double pi;
CFDTD_3D_PML FDTD_3D_re, FDTD_3D_im;
double **Param_Source_re, **Param_Source_im;
//the electric fields to apply the Bolch boundary conditions
double ***Ex_re, ***Ey_re, ***Ez_re;
double ***Ex_im, ***Ey_im, ***Ez_im;
//dimensions of the computational space
long nx, ny, nz;
double dx, dy, dz;
//dimensions of the PML region
long nPML_x_1, nPML_y_1, nPML_z_1;
long nPML_x_2, nPML_y_2, nPML_z_2;
double dt, dtDIV2;
double sin_kxORa, sin_kyORb, sin_kzORc, cos_kxORa, cos_kyORb, cos_kzORc; // -pi:pi
#ifndef run_enviroment //IBM AIX
char *Path_Load_Workspace_Data, *Path_Save_Workspace_Data;
//to measure the ellapsed time UNIX IBM_AIX
double time_start, el_time, limit_time;
struct timeval tv;
struct timezone tz;
int load_workspace_data, myrank;
#endif
public:
CFDTD_3D_COMPLEX(void);
~CFDTD_3D_COMPLEX(void);
int Init(long ***&Index, long n_x, long n_y, long n_z, double **&Materials, long n_Mat,
long n_PML_x_1, long n_PML_x_2, long n_PML_y_1, long n_PML_y_2, long n_PML_z_1,
long n_PML_z_2, double dt, double d_x, double d_y, double d_z,
double PML_eps_r_x1, double PML_mu_r_x1, double PML_eps_r_x2,
double PML_mu_r_x2, double PML_eps_r_y1, double PML_mu_r_y1,
double PML_eps_r_y2, double PML_mu_r_y2, double PML_eps_r_z1,
double PML_mu_r_z1, double PML_eps_r_z2, double PML_mu_r_z2);
int Init_ptSource(long **Coord_ptSource, long n_Coord, double **Param_Source, int source_Type,
int Pt_Source_Ex, int Pt_Source_Ey, int Pt_Source_Ez,
int Pt_Source_Hx, int Pt_Source_Hy, int Pt_Source_Hz);
int Init_TS(double Teta, double Phi, double Gamma, long N_TS,
long nPML_1D, int source_type, double X0, double t0,
double tw, double omega, double phase, double PML_eps_r_1D,
double PML_mu_r_1D, int *Jel_TS_planes);
int Init_Save_FieldSlices(long nxa, long nxb, long nya, long nyb, long nza, long nzb,
long nz_xy, long ny_xz, long nx_yz, long nr_Save, long saveFROMinst,
long saveTOinst, char *path);
int Init_Followed(long **Ind_Followed, long n_Ind_F, long num_iter);
void Init_Symmetries(int jel_Sym_ia, int jel_Sym_ib, int jel_Sym_ja,
int jel_Sym_jb, int jel_Sym_ka, int jel_Sym_kb,
int jel_ASym_ia, int jel_ASym_ib, int jel_ASym_ja,
int jel_ASym_jb, int jel_ASym_ka, int jel_ASym_kb);
void Get_Data_Followed(double **&hx_foll_re, double **&hy_foll_re, double **&hz_foll_re,
double **&ex_foll_re, double **&ey_foll_re, double **&ez_foll_re,
double **&hx_foll_im, double **&hy_foll_im, double **&hz_foll_im,
double **&ex_foll_im, double **&ey_foll_im, double **&ez_foll_im);
int fdtd_marching(long n_max_steep);
void Reset_Field_Comp();
void Init_KxORa_KyORb_KzORc(double kx, double ky, double kz);
#ifndef run_enviroment //IBM AIX
int Init_Mesure_Ellapsed_Time(double TimeStart, double LimitTime, int MyRank,
int LoadWorkspaceData, char *path_load, char *path_save);
#endif
private:
//Bloch type Boundary conditions
void bc_Bloch_Ex_jDir(double ***&Ex_re, double ***Ex_im,
double cos_kyORb, double sin_kyORb);
void bc_Bloch_Ex_kDir(double ***&Ex_re, double ***Ex_im,
double cos_kzORc, double sin_kzORc);
void bc_Bloch_Ey_iDir(double ***&Ey_re, double ***&Ey_im,
double cos_kxORa, double sin_kxORa);
void bc_Bloch_Ey_kDir(double ***&Ey_re, double ***&Ey_im,
double cos_kzORc, double sin_kzORc);
void bc_Bloch_Ez_iDir(double ***&Ez_re, double ***&Ez_im,
double cos_kxORa, double sin_kxORa);
void bc_Bloch_Ez_jDir(double ***&Ez_re, double ***&Ez_im,
double cos_kyORb, double sin_kyORb);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -