atmostrans.cpp

来自「计算大气光谱透射率和平均透射率」· C++ 代码 · 共 1,287 行 · 第 1/4 页

CPP
1,287
字号
	}

	sum1 = (GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthbegin, temperature, Hr, height, height1, height2, r)
		+ GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthend, temperature, Hr, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfInclineInAnyHeightFrom3To5(wavelength, temperature, Hr, 
				                                                     height, height1, height2, r);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetCO2AveTransOfHorizonInAnyHeightFrom3To5(double wavelength1, double wavelength2,
															  double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelengthbegin, height, distance)
		+ GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelengthend, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfHorizonInAnyHeightFrom3To5(wavelength, height, distance);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetCO2AveTransOfInclineInAnyHeightFrom3To5(double wavelength1, double wavelength2,
										    double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthbegin, height, height1, height2, r)
		+ GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelengthend, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfInclineInAnyHeightFrom3To5(wavelength, height, height1, height2, r);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetAtmosAveTransOfHorizonInAnyHeightFrom3To5(double wavelength1, double wavelength2, int temperature,
									double Hr, double height, double distance, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfHorizonInAnyHeightFrom3To5(wavelength1, wavelength2, temperature, Hr, height, distance)
		*GetCO2AveTransOfHorizonInAnyHeightFrom3To5(wavelength1, wavelength2, height, distance)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, distance)
		*GetRainSpectrumTrans(Jrain, distance)
		*GetSnowSpectrumTrans(Jsnow, distance);
	return atmosavetrans;
};

double AtmosTrans::GetAtmosAveTransOfInclineInAnyHeightFrom3To5(double wavelength1, double wavelength2, int temperature,
									double Hr, double height, double height1, double height2, double r, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfInclineInAnyHeightFrom3To5(wavelength1, wavelength2, temperature, Hr, height, height1, height2, r)
		*GetCO2AveTransOfInclineInAnyHeightFrom3To5(wavelength1, wavelength2, height, height1, height2, r)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, (height2 - height1)/cos(r*PI/180))
		*GetRainSpectrumTrans(Jrain, (height2 - height1)/cos(r*PI/180))
		*GetSnowSpectrumTrans(Jsnow, (height2 - height1)/cos(r*PI/180));
	return atmosavetrans;
};



double AtmosTrans::GetVaporAveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature, 
																 double Hr, double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, vaporavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthbegin, temperature, Hr, height, distance)
		+ GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthend, temperature, Hr, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfHorizonInAnyHeightFrom8To14(wavelength, temperature, Hr, 
				                                                     height, distance);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetVaporAveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature, 
											double Hr, double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, vaporavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthbegin, temperature, Hr, height, height1, height2, r)
		+ GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthend, temperature, Hr, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetVaporSpectrumTransOfInclineInAnyHeightFrom8To14(wavelength, temperature, Hr, 
				                                                     height, height1, height2, r);
		}
	}
	else{}

	vaporavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return vaporavetrans;
};

double AtmosTrans::GetCO2AveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2,
															   double height, double distance)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthbegin, height, distance)
		+ GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelengthend, height, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfHorizonInAnyHeightFrom8To14(wavelength, height, distance);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetCO2AveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, 
										double height, double height1, double height2, double r)
{
	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, co2avetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthbegin, height, height1, height2, r)
		+ GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelengthend, height, height1, height2, r)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetCO2SpectrumTransOfInclineInAnyHeightFrom8To14(wavelength, height, height1, height2, r);
		}
	}
	else{}

	co2avetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return co2avetrans;
};

double AtmosTrans::GetAtmosAveTransOfHorizonInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature,
											double Hr, double height, double distance, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfHorizonInAnyHeightFrom8To14(wavelength1, wavelength2, temperature, Hr, height, distance)
		*GetCO2AveTransOfHorizonInAnyHeightFrom8To14(wavelength1, wavelength2, height, distance)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, distance)
		*GetRainSpectrumTrans(Jrain, distance)
		*GetSnowSpectrumTrans(Jsnow, distance);
	return atmosavetrans;
};

double AtmosTrans::GetAtmosAveTransOfInclineInAnyHeightFrom8To14(double wavelength1, double wavelength2, int temperature,
											double Hr, double height, double height1, double height2, double r, double Dv, double Jrain, double Jsnow)
{
	double atmosavetrans;
	atmosavetrans = GetVaporAveTransOfInclineInAnyHeightFrom8To14(wavelength1, wavelength2, temperature, Hr, height, height1, height2, r)
		*GetCO2AveTransOfInclineInAnyHeightFrom8To14(wavelength1, wavelength2, height, height1, height2, r)
		*GetDispersionAveTrans(wavelength1, wavelength2, Dv, (height2 - height1)/cos(r*PI/180))
		*GetRainSpectrumTrans(Jrain, (height2 - height1)/cos(r*PI/180))
		*GetSnowSpectrumTrans(Jsnow, (height2 - height1)/cos(r*PI/180));
	return atmosavetrans;
};

double AtmosTrans::GetDispersionAveTrans(double wavelength1, double wavelength2, double Dv, double distance)
{

	double wavelengthbegin, wavelengthend, wavelength, sum1, sum2, dispersionavetrans;
	int n;                                          //循环计数变量                                
	
	if(wavelength1 < wavelength2){                  //确定波长wavelength1,wavelength2的大小
		wavelengthbegin = wavelength1;              //小的赋值给wavelengthbegin
		wavelengthend = wavelength2;                //大的赋值给wavelengthend
	}
	else{
		wavelengthbegin = wavelength2;
		wavelengthend = wavelength1;
	}

	sum1 = (GetDispersionSpectrumTrans(wavelengthbegin, Dv, distance)
		+ GetDispersionSpectrumTrans(wavelengthend, Dv, distance)
		)*0.5;
	
	n = (int)(wavelengthend*10+0.5) - (int)(wavelengthbegin*10+0.5);
	sum2 = 0;
	if(n > 1){
		wavelength = wavelengthbegin;
		for(int i = 1; i <=  (n - 1); i++){
			wavelength = wavelength*10 + 1;
			wavelength = wavelength / 10;
			sum2 += GetDispersionSpectrumTrans(wavelength, Dv, distance);
		}
	}
	else{}

	dispersionavetrans = (sum1 + sum2)*0.1/(wavelengthend - wavelengthbegin);
	return dispersionavetrans;
};

⌨️ 快捷键说明

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