亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fdtd_1d_eh_pml_loss.cpp

?? 用vc編寫的FDTD有限差分程序
?? CPP
字號:
#include "FDTD_1D_EH_PML_LOSS.h"
#include "run_enviroment.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFDTD_1D_EH_PML_LOSS::CFDTD_1D_EH_PML_LOSS(void)
{
	E_1D   = NULL;
	//F_1 = NULL;
	F_2 = NULL;
	H_1D   = NULL;

	K_F_a = NULL;
	K_F_b = NULL;
	K_H_a = NULL;
	K_H_b = NULL;

	pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
	//permittivity of free space 
	eps_0 = 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12; // [F/m]
	//permeability of free space 
    mu_0  = 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6;  // [H_1D/m]

	num_threads = 1;
}

CFDTD_1D_EH_PML_LOSS::~CFDTD_1D_EH_PML_LOSS(void)
{
	Free_Mem();
}

///////////////////////////////////////////////////////////////////////////////////////
//Initialize the nr of threads
///////////////////////////////////////////////////////////////////////////////////////
#ifdef _OPENMP
	void CFDTD_1D_EH_PML_LOSS::Init_nr_THR(int nr_threads)
	{
		num_threads = nr_threads;
	}
#endif

///////////////////////////////////////////////////////////////////////////////////////
//Initialize the class parameters
///////////////////////////////////////////////////////////////////////////////////////
bool CFDTD_1D_EH_PML_LOSS::Init(long N, long n_pml, double d_t, double D, double Eps_r, 
								double Mu_r, double Sigma)
{
	n = N;
	dt = d_t;
	d = D;
	inv_d = 1.0/d;
	n_PML = n_pml;

	n_TS_a = n_PML+10;

	//some usefull constants
	n_PML_MIN_1 = n_PML - 1;
	n_MIN_n_PML_MIN_1 = n - n_PML - 1;
	n_MIN_1 = n - 1;
	n_MIN_n_PML = n - n_PML;

	eps_r = Eps_r;
	mu_r = Mu_r;
	sigma = Sigma;

	beta = sqrt(eps_0*eps_r*mu_0*mu_r);
	eta  = sqrt( mu_0*mu_r/(eps_0*eps_r) );

	E_1D = (double *)calloc(n,sizeof(double));
	if (!E_1D)
	{
		return false;
	}

	/*F_1 = (double *)calloc(n_PML,sizeof(double));
	if (!F_1)
	{
		Free_Mem();
		return false;
	}*/

	F_2 = (double *)calloc(n_PML,sizeof(double));
	if (!F_2)
	{
		Free_Mem();
		return false;
	}

	K_F_a = (double *)calloc(n_PML,sizeof(double));
	if (!K_F_a)
	{
		Free_Mem();
		return false;
	}

	K_F_b = (double *)calloc(n_PML,sizeof(double));
	if (!K_F_b)
	{
		Free_Mem();
		return false;
	}

	H_1D = (double *)calloc(n_MIN_1,sizeof(double));
	if (!H_1D)
	{
		Free_Mem();
		return false;
	}

	K_H_a = (double *)calloc(n_PML,sizeof(double));
	if (!K_H_a)
	{
		Free_Mem();
		return false;
	}

 	K_H_b = (double *)calloc(n_PML,sizeof(double));
	if (!K_H_b)
	{
		Free_Mem();
		return false;
	}

	K_E_a = ( 2.0*eps_r*eps_0 - sigma*dt )/( 2.0*eps_r*eps_0 + sigma*dt );
	K_E_b =  2.0*dt/( 2.0*eps_r*eps_0 + sigma*dt )*inv_d;

	K_H = dt*inv_d/(mu_0*mu_r);
	
	return true;
}

///////////////////////////////////////////////////////////////////////////////////////
//Set the PML matrices
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Init_PML_Param()
{
	long i;

	//PML parameters
	double ka_max = 2.0;
	double exponent = 4.0;

	double R_err = 1.0e-16;
	double eta = sqrt( mu_0*mu_r/(eps_0*eps_r) );

	double sigma_PML, sigma_max, ka_PML;
		
	sigma_max= -(exponent+1.0)*log(R_err)/(2.0*eta*n_PML*d);

	for (i = 0; i < n_PML; i++)
	{
		sigma_PML     = sigma_max*pow( (n_PML - i)/((double) n_PML) ,exponent);
		ka_PML        = 1.0 + (ka_max - 1.0)*pow( (n_PML-i)/((double) n_PML) ,exponent);

		K_F_a[i]      = (2.0*eps_0*ka_PML - sigma_PML*dt)/(2.0*eps_0*ka_PML + sigma_PML*dt);
		
		K_F_b[i]      = 2.0*eps_0/(2.0*eps_0*ka_PML + sigma_PML*dt);
		
		sigma_PML     = sigma_max*pow( (n_PML - i - 0.5)/n_PML ,exponent);
		ka_PML        = 1.0 + (ka_max - 1.0)*pow( (n_PML - i - 0.5)/n_PML ,exponent);

        K_H_a[i]      = (2.0*eps_0*ka_PML - sigma_PML*dt)/(2.0*eps_0*ka_PML + sigma_PML*dt);
		
		K_H_b[i]      = 2.0*eps_0*dt/( (2.0*eps_0*ka_PML + sigma_PML*dt)*d*mu_0*mu_r);
	}
}

///////////////////////////////////////////////////////////////////////////////////////
//Initialize a sinusoidal source
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Init_Sin_Source(double E_0, double om, double Phase)
{
	E0 = E_0;
	omega = om;
	phase = Phase;

	alfa = 1.0*omega/(2.0*pi);

	Source_Type = 1;
}

///////////////////////////////////////////////////////////////////////////////////////
//Initialize  a Gaussian source
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Init_Gauss_Source(double E_0, double t_0, double t_w)
{
	E0 = E_0;
	t0 = t_0;
	tw = t_w;
	
	Source_Type = 2;
}

///////////////////////////////////////////////////////////////////////////////////////
//Initialize a sinusoidal modulated Gaussian pulse
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Init_GaussSin_Source(double E_0, double om, double Phase, double t_0, double t_w)
{
	E0 = E_0;
	omega = om;
	phase = Phase;
	t0 = t_0;
	tw = t_w;

	Source_Type = 3;
}

///////////////////////////////////////////////////////////////////////////////////////
//Calculate E_1D field
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Calc_E(double time)
{
	long i, ii, ia;
	double Fz_r;

	/*for (i = 1; i < n_PML; i++)
	{
		Fz_r = F_1[i];
		
		F_1[i] = K_F_a[i]*F_1[i] + K_F_b[i]*( H_1D[i-1] - H_1D[i]);

		E_1D[i] = K_E_a*E_1D[i] + K_E_b*( F_1[i] - Fz_r );
	}*/

	#pragma omp parallel for shared(H_1D,K_E_a,K_E_b,E_1D,n_MIN_n_PML) private(i) num_threads(num_threads)
	for (i = 1; i < n_MIN_n_PML; i++)
	{
		E_1D[i] = K_E_a*E_1D[i] + K_E_b*( H_1D[i-1] - H_1D[i]);
	}

	ia = 0;
	ii = n_PML_MIN_1;
	for (i = n_MIN_n_PML; i < n_MIN_1; i++)
	{
		Fz_r = F_2[ia];
		
		F_2[ia] = K_F_a[ii]*F_2[ia] + K_F_b[ii]*( H_1D[i-1] - H_1D[i]);

		E_1D[i] = K_E_a*E_1D[i] + K_E_b*( F_2[ia] - Fz_r );
		
		ia++;
		ii--;
	}

	switch (Source_Type)
	{
		case 1:
			E_1D[0] = (1.0-exp(-alfa*time))*E0*cos(omega*time + phase);
			break;
		case 2:
			E_1D[0] = E0*exp( - (time - t0)*(time - t0)/(tw*tw) );
			break;
		case 3:
			E_1D[0] = E0*cos(omega*(time-t0) + phase)*exp( - (time - t0)*(time - t0)/(tw*tw) );
			break;
	}
}

///////////////////////////////////////////////////////////////////////////////////////
//Calculate H_1D field
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Calc_H()
{
	long i, ii;

	/*for (i = 0; i < n_PML; i++)
	{
		H_1D[i] = K_H_a[i]*H_1D[i] + K_H_b[i]*( E_1D[i] - E_1D[i+1]);
	}*/

	#pragma omp parallel for shared(H_1D,K_H,E_1D,n_MIN_n_PML_MIN_1) private(i) num_threads(num_threads)
	for (i = 0; i < n_MIN_n_PML_MIN_1; i++)
	{
		H_1D[i] += K_H*( E_1D[i] - E_1D[i+1]);
	}

	ii = n_PML_MIN_1;
	for (i = n_MIN_n_PML_MIN_1; i < n_MIN_1; i++)
	{
		H_1D[i] = K_H_a[ii]*H_1D[i] + K_H_b[ii]*( E_1D[i] - E_1D[i+1] );
		ii--;
	}
}

///////////////////////////////////////////////////////////////////////////////////////
//Get the address of E_1D and H_1D
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Get_Data(double *&e, double *&h)
{
	e = E_1D;
	h = H_1D;
}

///////////////////////////////////////////////////////////////////////////////////////
//Save out the workspace data - the possibility to continue computations
///////////////////////////////////////////////////////////////////////////////////////
int CFDTD_1D_EH_PML_LOSS::Save_FDTD_1D_Workspace(char *path)
{	
	char *path_name = NULL, *file_name = NULL;
	path_name =(char *) calloc(256,sizeof(char));
	file_name =(char *) calloc(256,sizeof(char));
	if (!path_name && !file_name)
	{
		if (path_name)
			free(path_name);
		if (file_name)
			free(file_name);
		return 1;
	}
	strcpy(path_name,path);
	strcat(path_name,"/data_fdtd_1D");

	//make directory to save F G E_1D
	#ifdef run_enviroment 
		CreateDirectory(path_name,0);
	#else
		mode_t Mode = S_IRWXU;
		mkdir(path_name,Mode);//for UNIX-AIX
	#endif

	//save F_2
	strcpy(file_name,path_name);
	strcat(file_name,"/F_1D");
	if (save_1D_binary(F_2, n_PML, 0, file_name))
	{
		free(path_name);
		free(file_name);
		return 2; //faild to save data
	}

	//save E_1D
	strcpy(file_name,path_name);
	strcat(file_name,"/E_1D");
	if (save_1D_binary(E_1D, n, 0, file_name))
	{
		free(path_name);
		free(file_name);
		return 2; //faild to save data
	}

	//save H_1D
	strcpy(file_name,path_name);
	strcat(file_name,"/H_1D");
	if(save_1D_binary(H_1D, n-1, 0, file_name))
	{
		free(path_name);
		free(file_name);
		return 2; //faild to save data
	}


	free(path_name);
	free(file_name);

	return 0;
}

int CFDTD_1D_EH_PML_LOSS::Load_FDTD_1D_Workspace(char *path)
{
	char *file_name = NULL;
	file_name =(char *) calloc(256,sizeof(char));
	if (!file_name)
	{
		return 1;
	}
	
	//load F2
	strcpy(file_name,path);
	strcat(file_name,"/F_1D_0.dat");
	if (load_1D_binary(F_2, n_PML, file_name))
	{
		free(file_name);
		return 2; //faild to load data
	}

	//load E_1D
	strcpy(file_name,path);
	strcat(file_name,"/E_1D_0.dat");
	if (load_1D_binary(E_1D, n, file_name))
	{
		free(file_name);
		return 2; //faild to load data
	}

	//load Hx_1D
	strcpy(file_name,path);
	strcat(file_name,"/H_1D_0.dat");
	if (load_1D_binary(H_1D, n-1, file_name))
	{
		free(file_name);
		return 2; //faild to load data
	}

	free(file_name);

	return 0;
}

///////////////////////////////////////////////////////////////////////////////////////
//Free the allocated memory
///////////////////////////////////////////////////////////////////////////////////////
void CFDTD_1D_EH_PML_LOSS::Free_Mem(void)
{
	if (E_1D)
	{
		free(E_1D);
		E_1D = NULL;
	}

	/*if (F_1)
	{
		free(F_1);
		F_1 = NULL;
	}*/

	if (F_2)
	{
		free(F_2);
		F_2 = NULL;
	}

	if (K_F_a)
	{
		free(K_F_a);
		K_F_a = NULL;
	}

	if (K_F_b)
	{
		free(K_F_b);
		K_F_b = NULL;
	}

	if (H_1D)
	{
		free(H_1D);
		H_1D = NULL;
	}

	if (K_H_a)
	{
		free(K_H_a);
		K_H_a = NULL;
	}

	if (K_H_b)
	{
		free(K_H_b);
		K_H_b = NULL;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久蜜桃香蕉精品一区二区三区| 日韩av网站在线观看| 欧美成人伊人久久综合网| 91理论电影在线观看| 国产一区二区伦理| 亚洲一区二区三区爽爽爽爽爽| 久久精品这里都是精品| 久久成人久久爱| 美女尤物国产一区| 亚洲一区二区三区爽爽爽爽爽 | 91精品在线麻豆| 中文字幕在线观看一区| 亚洲精品视频免费看| 亚洲va欧美va人人爽午夜| 久久精品99久久久| 白白色 亚洲乱淫| 欧美久久久久久久久久| 精品国产乱码久久| 中文字幕一区不卡| 亚洲成av人片| 波多野结衣欧美| 91精品国产综合久久香蕉麻豆| 精品sm捆绑视频| 亚洲一区二区在线视频| 美女视频免费一区| 国产福利精品导航| 欧美电视剧免费全集观看| 亚洲三级在线免费| 国产揄拍国内精品对白| 91在线观看地址| 国产精品麻豆欧美日韩ww| 奇米888四色在线精品| 91久久精品网| 亚洲激情欧美激情| 99久久99久久精品国产片果冻| 久久综合给合久久狠狠狠97色69| 国产欧美va欧美不卡在线| 精品在线播放午夜| 日韩一区二区三区观看| 亚洲美女在线国产| 色综合天天综合网天天狠天天 | 国产人久久人人人人爽| 久久99久久久久| www亚洲一区| 国产一区二区三区国产| 欧美国产一区二区| 97成人超碰视| 视频一区欧美精品| 欧美一三区三区四区免费在线看| 午夜在线电影亚洲一区| 91精品国产91久久综合桃花 | 色综合久久九月婷婷色综合| 国产精品国产三级国产aⅴ原创| 成熟亚洲日本毛茸茸凸凹| 国产女人18毛片水真多成人如厕 | 久久久精品国产免大香伊| 国产v日产∨综合v精品视频| 欧美mv日韩mv国产网站| 国产不卡在线一区| 一区二区免费看| 26uuu成人网一区二区三区| 国产精品一区久久久久| 亚洲素人一区二区| 欧美人妖巨大在线| 国产精品亚洲一区二区三区妖精| 国产精品乱码久久久久久| 欧美日韩一区二区三区免费看| 精品一区二区国语对白| 亚洲女同ⅹxx女同tv| 精品少妇一区二区三区日产乱码 | 亚洲综合精品自拍| 久久这里只有精品6| 欧美日韩精品专区| 国内精品第一页| 日av在线不卡| 亚洲国产视频一区二区| 亚洲天堂a在线| 欧美高清在线视频| 国产婷婷色一区二区三区四区 | 国产精品丝袜黑色高跟| 欧美一区二区三区思思人| 一区二区三区资源| 久久九九99视频| 久久久久久毛片| 精品国产sm最大网站免费看| 欧美一区二区视频在线观看| 91黄色免费版| 欧美无砖砖区免费| 欧美日韩精品三区| 91精品午夜视频| 欧美一区二区性放荡片| 欧美三级日韩三级| 欧美性极品少妇| 欧美精品日韩一本| 欧美xxxxxxxx| 国产精品女主播av| 亚洲一区二区三区国产| 亚洲v日本v欧美v久久精品| 性欧美疯狂xxxxbbbb| 性做久久久久久久久| 精品一区二区国语对白| 国产在线精品一区二区不卡了| 国产一区二区三区| 97超碰欧美中文字幕| 日韩一区二区在线观看视频 | 日本女优在线视频一区二区| 蜜桃av一区二区三区电影| 国产二区国产一区在线观看| 成人av高清在线| 欧美一区二区人人喊爽| 久久久噜噜噜久久中文字幕色伊伊| 国产精品乱码妇女bbbb| 五月激情综合网| 成人av电影在线| 久久久美女毛片| 日韩和欧美的一区| 日本精品裸体写真集在线观看| 欧美疯狂做受xxxx富婆| 久久亚洲捆绑美女| 亚洲国产一区视频| 成人午夜电影久久影院| 日韩精品一区二区三区视频| 国产精品乱人伦| 国产成a人亚洲精品| 精品国产91洋老外米糕| 婷婷综合另类小说色区| 一本色道**综合亚洲精品蜜桃冫| 久久久国产精品麻豆| 日韩精品一二三四| 欧美精品第一页| 亚洲第一狼人社区| 欧美日韩一级黄| 亚洲四区在线观看| 欧美最猛黑人xxxxx猛交| ...xxx性欧美| 欧美日韩一区二区欧美激情 | 96av麻豆蜜桃一区二区| 亚洲国产精品成人综合| 色综合色综合色综合色综合色综合| 久久香蕉国产线看观看99| 国产不卡视频一区| 中文字幕欧美一区| 在线一区二区三区做爰视频网站| 自拍偷自拍亚洲精品播放| av爱爱亚洲一区| 天堂一区二区在线| 精品久久久影院| 9i在线看片成人免费| 一区二区三区91| 久久天堂av综合合色蜜桃网| 国产成人啪午夜精品网站男同| 亚洲伦理在线免费看| 欧美剧情电影在线观看完整版免费励志电影| 肉丝袜脚交视频一区二区| 久久这里都是精品| 欧美理论电影在线| 成人精品一区二区三区中文字幕| 一区二区三区高清| 国产欧美日韩在线视频| 欧美性大战久久久| fc2成人免费人成在线观看播放| 亚洲最新在线观看| 久久久久久久网| 精品欧美一区二区在线观看| 99久久精品一区二区| 国产一区二区精品久久| 日欧美一区二区| 亚洲国产色一区| 亚洲激情校园春色| 国产精品久久久久久久久图文区 | 国产欧美综合在线| 岛国精品在线播放| 男男gaygay亚洲| 午夜精品一区二区三区三上悠亚| 国产欧美日本一区视频| 日韩欧美一二三四区| 欧美日韩免费观看一区三区| 国产成人综合亚洲网站| 国产一区二区三区高清播放| 麻豆久久久久久| 国产精品原创巨作av| 国产自产v一区二区三区c| 精久久久久久久久久久| 美女一区二区三区| 国产成人午夜高潮毛片| 成人动漫av在线| 欧洲国内综合视频| 欧美亚洲禁片免费| 欧美成人精品高清在线播放| 日韩午夜精品视频| 久久久久九九视频| 一区二区三区精品在线| 丝瓜av网站精品一区二区 | av网站免费线看精品| 日本大香伊一区二区三区| 欧美一区二区三区在| 国产欧美日韩综合| 亚洲成人在线观看视频| 国产伦理精品不卡| 欧美三日本三级三级在线播放|