⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myarray.h

📁 该代码可以用来计算二维TM波的FDTD程序。 外加理想匹配层(PML)。 有一定的广泛性。
💻 H
字号:


double  **D2dmatrix(int row,int col){//申请二维数组:0~row,0~col
	int ii,jj;
	double **temp;
	temp=(double **)malloc(long(row)*sizeof(double *));
	if(!temp){
		cout<<"Allocation Failed!"<<endl;
		exit(1);
	}
	for(ii=0;ii<row;ii++){
		temp[ii]=(double *)malloc(long(col)*sizeof(double));
		if(!temp[ii]){
			cout<<"Allocation Failed!"<<endl;
			exit(1);
		}
	}
	for(ii=0;ii<row;ii++)
		for(jj=0;jj<col;jj++)
			temp[ii][jj]=0.0;
	return temp;
}

class PML_2D_Arr_ez{
private:
	int XM,YM,Nx1,Nx2,Ny1,Ny2;
	double *pi1,*pi2,*pj1,*pj2,pzero;
public:
	PML_2D_Arr_ez(int i,int I1,int I2,int j,int J1,int J2);
	~PML_2D_Arr_ez();
	double& operator()(int i,int j);
};

PML_2D_Arr_ez::PML_2D_Arr_ez(int i,int I1,int I2,int j,int J1,int J2){
	int index;
	XM=i;YM=j;Nx1=I1;Nx2=I2;Ny1=J1;Ny2=J2;
	pi1=new double[(Nx1+1)*(YM+1)];VERIFY(pi1!=NULL);
	pi2=new double[(Nx2+1)*(YM+1)];VERIFY(pi2!=NULL);
	pj1=new double[(XM-Nx1-Nx2-1)*(Ny1+1)];VERIFY(pj1!=NULL);
	pj2=new double[(XM-Nx1-Nx2-1)*(Ny2+1)];VERIFY(pj2!=NULL);
	
	for(index=0;index<((Nx1+1)*(YM+1));index++) pi1[index]=0.0;
	for(index=0;index<((Nx2+1)*(YM+1));index++) pi2[index]=0.0;
	for(index=0;index<((XM-Nx1-Nx2-1)*(Ny1+1));index++) pj1[index]=0.0;
	for(index=0;index<((XM-Nx1-Nx2-1)*(Ny2+1));index++) pj2[index]=0.0;
	pzero=0.0;
}

PML_2D_Arr_ez::~PML_2D_Arr_ez(){
	delete pi1;
	delete pi2;
	delete pj1;
	delete pj2;
}

double& PML_2D_Arr_ez::operator ()(int i,int j ){
		VERIFY((i>=0)&&(j>=0));
		VERIFY((i<=XM)&&(j<=YM));
		if(i<=Nx1) return pi1[i*(YM+1)+j];
		else if(i>=(XM-Nx2)) return pi2[(i-XM+Nx2)*(YM+1)+j];
		else if(j<=Ny1) return pj1[(i-Nx1-1)*(Ny1+1)+j];
		else if(j>=(YM-Ny2)) return pj2[(i-Nx1-1)*(Ny2+1)+j-YM+Ny2];
		else{
		  cout<<i<<" "<<j<<" "<<"ez"<<"illegal access!"<<endl;
		  return pzero;
		}
}

class PML_2D_Arr_hz{
private:
	int XM,YM,Nx1,Nx2,Ny1,Ny2;
	double *pi1,*pi2,*pj1,*pj2,pzero;
public:
	PML_2D_Arr_hz(int i,int I1,int I2,int j,int J1,int J2);
	~PML_2D_Arr_hz();
	double& operator()(int i,int j);
};

PML_2D_Arr_hz::PML_2D_Arr_hz(int i,int I1,int I2,int j,int J1,int J2){
	int index;
	XM=i;YM=j;Nx1=I1;Nx2=I2;Ny1=J1;Ny2=J2;
	pi1=new double[Nx1*YM];VERIFY(pi1!=NULL);
	pi2=new double[Nx2*YM];VERIFY(pi2!=NULL);
	pj1=new double[(XM-Nx1-Nx2)*Ny1];VERIFY(pj1!=NULL);
	pj2=new double[(XM-Nx1-Nx2)*Ny2];VERIFY(pj2!=NULL);
	
	for(index=0;index<(Nx1*YM);index++) pi1[index]=0.0;
	for(index=0;index<(Nx2*YM);index++) pi2[index]=0.0;
	for(index=0;index<((XM-Nx1-Nx2)*Ny1);index++) pj1[index]=0.0;
	for(index=0;index<((XM-Nx1-Nx2)*Ny2);index++) pj2[index]=0.0;
	pzero=0.0;
}

PML_2D_Arr_hz::~PML_2D_Arr_hz(){
	delete pi1;
	delete pi2;
	delete pj1;
	delete pj2;
}

double& PML_2D_Arr_hz::operator ()(int i,int j){
		VERIFY((i>=0)&&(j>=0));
		VERIFY((i<XM)&&(j<YM));
		if(i<Nx1) return pi1[i*YM+j];
		else if(i>=(XM-Nx2)) return pi2[(i-XM+Nx2)*YM+j];
		else if(j<Ny1) return pj1[(i-Nx1)*Ny1+j];
		else if(j>=(YM-Ny2)) return pj2[(i-Nx1)*Ny2+j-YM+Ny2];
		else{
		  cout<<i<<" "<<j<<" "<<"hz"<<"illegal access!"<<endl;
		  return pzero;
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -