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

📄 generate_report.cpp

📁 利用c++语言写的三维FDTD
💻 CPP
字号:
#include <stdio.h>
#include "generate_report.h"

int gen_report_W(long nx, long ny, long nz, long nr_DIV_x, long nr_DIV_y, long nr_DIV_z,
				 long Save_nr_DIV_x, long Save_nr_DIV_y, long Save_nr_DIV_z, long nPML_x_1,
				 long nPML_x_2, long nPML_y_1, long nPML_y_2, long nPML_z_1, long nPML_z_2,
				 double dx, double dy, double dz, double dt, long num_iter, double limit_time, 
				 int load_workspace_data, char *Path_Load_Workspace_Data, int save_field,
				 long nr_Save, long saveFROMinst, long saveTOinst, long source_type,
				 int pt_source_Ez, int pt_source_Hz, long jel_plane_wave, 
				 int switch_off_time, double X0, double tw, double t0, double omega, 
				 double phase, double const_alfa, long **Coord_ptSource, long n_Coord, 
				 char *path_name_Index, char *path_name_Mat, long n_Mat, 
				 double **Mat, double PML_eps_r_x_1, double PML_mu_r_x_1, 
				 double PML_eps_r_x_2, double PML_mu_r_x_2, double PML_eps_r_y_1, 
				 double PML_mu_r_y_1, double PML_eps_r_y_2, double PML_mu_r_y_2, 
				 double PML_eps_r_z_1, double PML_mu_r_z_1, double PML_eps_r_z_2,
				 double PML_mu_r_z_2,
				 long nr_W_DIV_x, long nr_W_DIV_y, long nr_W_DIV_z, long nx_W_a, 
			     long nx_W_b, long ny_W_a, long ny_W_b, long nz_W_a, long nz_W_b,
				 long eval_W_FROMinst, long eval_W_TOinst, int save_W, int nr_W_Save,
                 int save_W_FROMinst, int save_W_TOinst, long n_x_W_a, long n_x_W_b, 
				 long n_y_W_a, long n_y_W_b, long n_z_W_a, long n_z_W_b,
				 long Save_nr_W_DIV_x, long Save_nr_W_DIV_y, long Save_nr_W_DIV_z)
{
	long i;
	char File_Name[] = "Report.txt";

	FILE *fp = NULL;
	fp = fopen(File_Name, "w+");
	if (!fp)
	{
		return 2;
	}

	fprintf(fp,"//The division of the computational space\n");
	fprintf(fp,"nx = %d\n",nx);
	fprintf(fp,"ny = %d\n",ny);
	fprintf(fp,"nz = %d\n",nz);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Division of the Total Field Zone - for computing with threads\n");
	fprintf(fp,"nr_DIV_x = %d\n",nr_DIV_x);
	fprintf(fp,"nr_DIV_y = %d\n",nr_DIV_y);
	fprintf(fp,"nr_DIV_z = %d\n",nr_DIV_z);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Division for Data Save\n");
	fprintf(fp,"Save_nr_DIV_x = %d\n",Save_nr_DIV_x);
	fprintf(fp,"Save_nr_DIV_y = %d\n",Save_nr_DIV_y);
	fprintf(fp,"Save_nr_DIV_z = %d\n",Save_nr_DIV_z);
	fprintf(fp,"\n");
	
	fprintf(fp,"//The sizes of PML zone [cells]\n");
	fprintf(fp,"nPML_x_1 = %d\n",nPML_x_1);
	fprintf(fp,"nPML_x_2 = %d\n",nPML_x_2);
	fprintf(fp,"nPML_y_1 = %d\n",nPML_y_1); 
	fprintf(fp,"nPML_y_2 = %d\n",nPML_y_2);
	fprintf(fp,"nPML_z_1 = %d\n",nPML_z_1); 
	fprintf(fp,"nPML_z_2 = %d\n",nPML_z_2);
	fprintf(fp,"\n");

	fprintf(fp,"//The cell sizes\n");
	fprintf(fp,"dx = %6.21f\n",dx);
	fprintf(fp,"dy = %6.21f\n",dy);
	fprintf(fp,"dz = %6.21f\n",dz);
	fprintf(fp,"\n");

	fprintf(fp,"//The time steep -- dt = ( 1.0/c/sqrt(1.0/dx^2+1.0/dy^2+1.0/dz^2) )*0.9\n");
	fprintf(fp,"dt = %6.21f\n",dt);
	fprintf(fp,"\n");

	fprintf(fp,"//The number of FDTD iterations\n");
	fprintf(fp,"num_iter = %d\n",num_iter);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Limit time in [s] - after it saves out all workspace data in binary files\n");
	fprintf(fp,"limit_time = %f\n",limit_time);
	fprintf(fp,"\n");

	fprintf(fp,"load_workspace_data = %d\n",load_workspace_data); 
	if (load_workspace_data)
	{
		fprintf(fp,"Path_Load_Workspace_Data = %s\n",Path_Load_Workspace_Data);
	}
	fprintf(fp,"\n");
	    
	fprintf(fp,"//Save slices of Ex, Ey, Ez, Hx, Hy, Hz \n");
	fprintf(fp,"save_field = %d\n",save_field); 
	if(save_field)
	{
		fprintf(fp,"nr_Save = %d\n",nr_Save); 
		fprintf(fp,"saveFROMinst = %d\n",saveFROMinst); 
		fprintf(fp,"saveTOinst = %d\n",saveTOinst); 
	}
	fprintf(fp,"\n");

	fprintf(fp,"//Data referring to the excitation\n");
	fprintf(fp,"source_type = %d\n",source_type); 
	
	fprintf(fp,"jel_plane_wave = %d\n",jel_plane_wave); 
	fprintf(fp,"\n");
	if (jel_plane_wave == 0)
	{
		fprintf(fp,"pt_source_Ez = %d\n",pt_source_Ez); 
		fprintf(fp,"pt_source_Hz = %d\n",pt_source_Hz); 
		if (source_type == 2)
		{
			fprintf(fp,"switch_off_time = %d\n",switch_off_time);
		}
		fprintf(fp,"\n");
		fprintf(fp,"//Coordinates of the pulse\n");
		for ( i = 0; i < n_Coord; i++)
		{
			fprintf(fp,"Coord_ptSource[%d][0] = %d\n",i,Coord_ptSource[i][0]);
			fprintf(fp,"Coord_ptSource[%d][1] = %d\n",i,Coord_ptSource[i][1]);
			fprintf(fp,"Coord_ptSource[%d][2] = %d\n",i,Coord_ptSource[i][2]);
		}
		fprintf(fp,"\n");
	}
	fprintf(fp,"//Parameters of the pulse\n");
	fprintf(fp,"X0 = %6.21f\n",X0);
	fprintf(fp,"tw = %6.21f\n",tw); 
	fprintf(fp,"t0 = %6.21f\n",t0);
	fprintf(fp,"omega = %6.21f\n",omega);
	fprintf(fp,"phase = %6.21f\n",phase);
	fprintf(fp,"const_alfa = %6.21f\n",const_alfa);
	fprintf(fp,"\n");
	
	fprintf(fp,"//The geometry file\n");
	fprintf(fp,"path_name_Index = %s\n",path_name_Index);
	fprintf(fp,"\n");

	fprintf(fp,"//The materials\n");
	fprintf(fp,"path_name_Mat = %s\n",path_name_Mat);
	fprintf(fp,"n_Mat = %d\n",n_Mat);

	for (i =0; i<n_Mat; i++)
	{
		fprintf(fp,"eps_r[%d] = %f",i,Mat[i][0]);
		fprintf(fp,"    mu_r[%d] = %f",i,Mat[i][1]);
		fprintf(fp,"    sigma[%d] = %f\n",i,Mat[i][2]);
	}
	fprintf(fp,"\n");

	fprintf(fp,"//The parameters of the PML\n");
	fprintf(fp,"//x\n");
	fprintf(fp,"PML_eps_r_x_1 = %f\n",PML_eps_r_x_1);
	fprintf(fp,"PML_mu_r_x_1  = %f\n",PML_mu_r_x_1);
	fprintf(fp,"PML_eps_r_x_2 = %f\n",PML_eps_r_x_2);
	fprintf(fp,"PML_mu_r_x_2  = %f\n",PML_mu_r_x_2);
	fprintf(fp,"//y\n");
	fprintf(fp,"PML_eps_r_y_1 = %f\n",PML_eps_r_y_1);
	fprintf(fp,"PML_mu_r_y_1  = %f\n",PML_mu_r_y_1);
	fprintf(fp,"PML_eps_r_y_2 = %f\n",PML_eps_r_y_2);
	fprintf(fp,"PML_mu_r_y_2  = %f\n",PML_mu_r_y_2);
	fprintf(fp,"//z\n");
	fprintf(fp,"PML_eps_r_z_1 = %f\n",PML_eps_r_z_1);
	fprintf(fp,"PML_mu_r_z_1  = %f\n",PML_mu_r_z_1);
	fprintf(fp,"PML_eps_r_z_2 = %f\n",PML_eps_r_z_2);
	fprintf(fp,"PML_mu_r_z_2  = %f\n",PML_mu_r_z_2);
	fprintf(fp,"\n");

	fprintf(fp,"//Data referring to the electromagnetic energy\n");
	fprintf(fp,"nr_W_DIV_x = %d\n",nr_W_DIV_x);
	fprintf(fp,"nr_W_DIV_y = %d\n",nr_W_DIV_y);
	fprintf(fp,"nr_W_DIV_z = %d\n",nr_W_DIV_z);
	fprintf(fp,"\n");

	fprintf(fp,"//Defines the volume where the energy will be computed\n");
	fprintf(fp,"nx_W_a = %d\n",nx_W_a);     fprintf(fp,"nx_W_b = %d\n",nx_W_b); 
	fprintf(fp,"ny_W_a = %d\n",ny_W_a);     fprintf(fp,"ny_W_b = %d\n",ny_W_b); 
	fprintf(fp,"nz_W_a = %d\n",nz_W_a);     fprintf(fp,"nz_W_b = %d\n",nz_W_b);
	fprintf(fp,"\n");

	fprintf(fp,"//Compute the energy between the instants\n");
	fprintf(fp,"eval_W_FROMinst = %d\n",eval_W_FROMinst);
	fprintf(fp,"eval_W_TOinst = %d\n",eval_W_TOinst);
	fprintf(fp,"\n");

	fprintf(fp,"//Save slices from W\n");
	fprintf(fp,"save_W = %d\n",save_W);
	if (save_W)
	{
		fprintf(fp,"nr_W_Save = %d\n",nr_W_Save); 
		fprintf(fp,"save_W_FROMinst = %d\n",save_W_FROMinst);
		fprintf(fp,"save_W_TOinst = %d\n",save_W_TOinst);
	
		fprintf(fp,"//Defines the volume where the energy will be saved\n");
		fprintf(fp,"n_x_W_a = %d\n",n_x_W_a);  
		fprintf(fp,"n_x_W_b= %d\n",n_x_W_b); 
		fprintf(fp,"n_y_W_a = %d\n",n_y_W_a);       
		fprintf(fp,"n_y_W_b= %d\n",n_y_W_b); 
		fprintf(fp,"n_z_W_a = %d\n",n_z_W_a);       
		fprintf(fp,"n_z_W_b= %d\n",n_z_W_b);
	
		fprintf(fp,"//Division - for saving W with threads\n");
		fprintf(fp,"Save_nr_W_DIV_x = %d\n",Save_nr_W_DIV_x);
		fprintf(fp,"Save_nr_W_DIV_y = %d\n",Save_nr_W_DIV_y);
		fprintf(fp,"Save_nr_W_DIV_z = %d\n",Save_nr_W_DIV_z);
		fprintf(fp,"\n");
	}

	fclose(fp);

	return 0;
}

int gen_report(long nx, long ny, long nz, long nr_DIV_x, long nr_DIV_y, long nr_DIV_z,
	           long Save_nr_DIV_x, long Save_nr_DIV_y, long Save_nr_DIV_z, long nPML_x_1,
			   long nPML_x_2, long nPML_y_1, long nPML_y_2, long nPML_z_1, long nPML_z_2,
			   double dx, double dy, double dz, double dt, long num_iter, double limit_time, 
			   int load_workspace_data, char *Path_Load_Workspace_Data, int save_field,
			   long nr_Save, long saveFROMinst, long saveTOinst, long source_type, 
			   int pt_source_Ez, int pt_source_Hz, long jel_plane_wave, 
			   int switch_off_time, double X0, double tw, double t0, double omega, 
			   double phase, double const_alfa, long **Coord_ptSource, long n_Coord,
			   char *path_name_Index, char *path_name_Mat, long n_Mat, double **Mat,
			   double PML_eps_r_x_1, double PML_mu_r_x_1, double PML_eps_r_x_2,
			   double PML_mu_r_x_2, double PML_eps_r_y_1, double PML_mu_r_y_1, 
			   double PML_eps_r_y_2, double PML_mu_r_y_2, double PML_eps_r_z_1,
			   double PML_mu_r_z_1, double PML_eps_r_z_2, double PML_mu_r_z_2)
{
	long i;
	char File_Name[] = "Report.txt";

	FILE *fp = NULL;
	fp = fopen(File_Name, "w+");
	if (!fp)
	{
		return 2;
	}

	fprintf(fp,"//The division of the computational space\n");
	fprintf(fp,"nx = %d\n",nx);
	fprintf(fp,"ny = %d\n",ny);
	fprintf(fp,"nz = %d\n",nz);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Division of the Total Field Zone - for computing with threads\n");
	fprintf(fp,"nr_DIV_x = %d\n",nr_DIV_x);
	fprintf(fp,"nr_DIV_y = %d\n",nr_DIV_y);
	fprintf(fp,"nr_DIV_z = %d\n",nr_DIV_z);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Division for Data Save\n");
	fprintf(fp,"Save_nr_DIV_x = %d\n",Save_nr_DIV_x);
	fprintf(fp,"Save_nr_DIV_y = %d\n",Save_nr_DIV_y);
	fprintf(fp,"Save_nr_DIV_z = %d\n",Save_nr_DIV_z);
	fprintf(fp,"\n");
	
	fprintf(fp,"//The sizes of PML zone [cells]\n");
	fprintf(fp,"nPML_x_1 = %d\n",nPML_x_1);
	fprintf(fp,"nPML_x_2 = %d\n",nPML_x_2);
	fprintf(fp,"nPML_y_1 = %d\n",nPML_y_1); 
	fprintf(fp,"nPML_y_2 = %d\n",nPML_y_2);
	fprintf(fp,"nPML_z_1 = %d\n",nPML_z_1); 
	fprintf(fp,"nPML_z_2 = %d\n",nPML_z_2);
	fprintf(fp,"\n");

	fprintf(fp,"//The cell sizes\n");
	fprintf(fp,"dx = %6.21f\n",dx);
	fprintf(fp,"dy = %6.21f\n",dy);
	fprintf(fp,"dz = %6.21f\n",dz);
	fprintf(fp,"\n");

	fprintf(fp,"//The time steep -- dt = ( 1.0/c/sqrt(1.0/dx^2+1.0/dy^2+1.0/dz^2) )*0.9\n");
	fprintf(fp,"dt = %6.21f\n",dt);
	fprintf(fp,"\n");

	fprintf(fp,"//The number of FDTD iterations\n");
	fprintf(fp,"num_iter = %d\n",num_iter);
	fprintf(fp,"\n");
	
	fprintf(fp,"//Limit time in [s] - after it saves out all workspace data in binary files\n");
	fprintf(fp,"limit_time = %f\n",limit_time);
	fprintf(fp,"\n");

	fprintf(fp,"load_workspace_data = %d\n",load_workspace_data); 
	if (load_workspace_data)
	{
		fprintf(fp,"Path_Load_Workspace_Data = %s\n",Path_Load_Workspace_Data);
	}
	fprintf(fp,"\n");
	    
	fprintf(fp,"//Save slices of Ex, Ey, Ez, Hx, Hy, Hz \n");
	fprintf(fp,"save_field = %d\n",save_field); 
	if(save_field)
	{
		fprintf(fp,"nr_Save = %d\n",nr_Save); 
		fprintf(fp,"saveFROMinst = %d\n",saveFROMinst); 
		fprintf(fp,"saveTOinst = %d\n",saveTOinst); 
	}
	fprintf(fp,"\n");

	fprintf(fp,"//Data referring to the excitation\n");
	fprintf(fp,"source_type = %d\n",source_type); 
	
	fprintf(fp,"jel_plane_wave = %d\n",jel_plane_wave); 
	fprintf(fp,"\n");
	if (jel_plane_wave == 0)
	{
		fprintf(fp,"pt_source_Ez = %d\n",pt_source_Ez); 
		fprintf(fp,"pt_source_Hz = %d\n",pt_source_Hz); 
		if (source_type == 2)
		{
			fprintf(fp,"switch_off_time = %d\n",switch_off_time);
		}
		fprintf(fp,"\n");
		fprintf(fp,"//Coordinates of the pulse\n");
		for ( i = 0; i < n_Coord; i++)
		{
			fprintf(fp,"Coord_ptSource[%d][0] = %d\n",i,Coord_ptSource[i][0]);
			fprintf(fp,"Coord_ptSource[%d][1] = %d\n",i,Coord_ptSource[i][1]);
			fprintf(fp,"Coord_ptSource[%d][2] = %d\n",i,Coord_ptSource[i][2]);
		}
		fprintf(fp,"\n");
	}

	fprintf(fp,"//Parameters of the pulse\n");
	fprintf(fp,"X0 = %6.21f\n",X0);
	fprintf(fp,"tw = %6.21f\n",tw); 
	fprintf(fp,"t0 = %6.21f\n",t0);
	fprintf(fp,"omega = %6.21f\n",omega);
	fprintf(fp,"phase = %6.21f\n",phase);
	fprintf(fp,"const_alfa = %6.21f\n",const_alfa);
	fprintf(fp,"\n");

	fprintf(fp,"//The geometry file\n");
	fprintf(fp,"path_name_Index = %s\n",path_name_Index);
	fprintf(fp,"\n");

	fprintf(fp,"//The materials\n");
	fprintf(fp,"path_name_Mat = %s\n",path_name_Mat);
	fprintf(fp,"n_Mat = %d\n",n_Mat);

	for (i =0; i<n_Mat; i++)
	{
		fprintf(fp,"eps_r[%d] = %f",i,Mat[i][0]);
		fprintf(fp,"    mu_r[%d] = %f",i,Mat[i][1]);
		fprintf(fp,"    sigma[%d] = %f\n",i,Mat[i][2]);
	}
	fprintf(fp,"\n");

	fprintf(fp,"//The parameters of the PML\n");
	fprintf(fp,"//x\n");
	fprintf(fp,"PML_eps_r_x_1 = %f\n",PML_eps_r_x_1);
	fprintf(fp,"PML_mu_r_x_1  = %f\n",PML_mu_r_x_1);
	fprintf(fp,"PML_eps_r_x_2 = %f\n",PML_eps_r_x_2);
	fprintf(fp,"PML_mu_r_x_2  = %f\n",PML_mu_r_x_2);
	fprintf(fp,"//y\n");
	fprintf(fp,"PML_eps_r_y_1 = %f\n",PML_eps_r_y_1);
	fprintf(fp,"PML_mu_r_y_1  = %f\n",PML_mu_r_y_1);
	fprintf(fp,"PML_eps_r_y_2 = %f\n",PML_eps_r_y_2);
	fprintf(fp,"PML_mu_r_y_2  = %f\n",PML_mu_r_y_2);
	fprintf(fp,"//z\n");
	fprintf(fp,"PML_eps_r_z_1 = %f\n",PML_eps_r_z_1);
	fprintf(fp,"PML_mu_r_z_1  = %f\n",PML_mu_r_z_1);
	fprintf(fp,"PML_eps_r_z_2 = %f\n",PML_eps_r_z_2);
	fprintf(fp,"PML_mu_r_z_2  = %f\n",PML_mu_r_z_2);
	fprintf(fp,"\n");

	fclose(fp);

	return 0;
}

⌨️ 快捷键说明

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