int main(int argc, char* argv[]){
	std::cout << argv[0] << std::endl;
	std::string config_path = "../config.csv";
	if (argc > 1)
		config_path = argv[1];
	ImgProc EXP1(config_path);
	if (EXP1.IsExist()){
		//EXP1.print_cmd();
		EXP1.main_flow();
	}
	else{
		std::cout << "Config does not exitst or no commands" << std::endl;
		system("pause");
	}
}
Beispiel #2
0
void eval_direct_yukawa(FmmvHandle *FMMV, Box *target, Box *source)
#endif
{
	DEFINE_IDA_LOCAL_ALIASES(FMMV)
        
        _FLOAT_ beta = FMMV->beta;

        _FLOAT_ beta_r, exp_minus_beta_r_over_r;

	_FLOAT_ x, y, z, one_over_r, r2;
	_FLOAT_ xi,yi,zi, qj;
	#if ((FMM_KIND==FMM_STANDARD)||(FMM_KIND==FMM_GRAD) \
	   ||(FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD))
	_FLOAT_ qi;
	#endif
	int i,j,ni,nj,i0,j0,j00,j1;
	#if ((FMM_KIND==FMM_GRAD)||(FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD) \
	   ||(FMM_KIND==FMM_ST_GRAD)||(FMM_KIND==FMM_ST_DIPOLE)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
	_FLOAT_ hh0;
	#endif
	#if ((FMM_KIND==FMM_GRAD)||(FMM_KIND==FMM_DIPOLE_GRAD) \
	   ||(FMM_KIND==FMM_ST_GRAD)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
	_FLOAT_ hh1;
	#endif
	#if ((FMM_KIND==FMM_DIPOLE_GRAD) \
	   ||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
	_FLOAT_  hh2;
	_FLOAT_ beta2 = beta*beta;	
	#endif
	#if ((FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD) \
 	   ||(FMM_KIND==FMM_ST_DIPOLE)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
	_FLOAT_ mxj, myj, mzj;
	_FLOAT_ m_times_rj;	
	#endif
	#if ((FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD)) 
	_FLOAT_ mxi, myi, mzi;
	_FLOAT_ m_times_ri;	
	#endif

	i0 = target->firstTarget;
	ni = target->noOfTargets;
	j0 = source->firstParticle;
	nj = source->noOfParticles;

	#if ((FMM_KIND==FMM_ST_STANDARD)||(FMM_KIND==FMM_ST_GRAD) \
   	   ||(FMM_KIND==FMM_ST_DIPOLE)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
	j00 =j0;
	FMMV->noOfDirectInteractions += ni*nj;
	#else
	if (i0==j0) {
		FMMV->noOfDirectInteractions += (ni*(ni-1))/2;
	}
	else { 
		FMMV->noOfDirectInteractions += (ni*(ni-1))/2;
	}
	#endif
	j1 = j0+nj;

	for (i=i0; i<i0+ni; i++) {
		#ifdef PERIODIC
		xi = access_tx(i) - dx;
		yi = access_ty(i) - dy;
		zi = access_tz(i) - dz;
		#else
		xi = access_tx(i);
		yi = access_ty(i);
		zi = access_tz(i);
		#endif
		#if ((FMM_KIND==FMM_STANDARD)||(FMM_KIND==FMM_GRAD) \
		   ||(FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD))
		qi = access_q(i);
		#endif
		#if ((FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD)) 
		mxi = access_mx(i);
		myi = access_my(i);
		mzi = access_mz(i);		
		#endif
		
		#if ((FMM_KIND==FMM_ST_STANDARD)||(FMM_KIND==FMM_ST_GRAD) \
		   ||(FMM_KIND==FMM_ST_DIPOLE)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
		#else
		j00 = (i<j0 ? j0 : i+1);
		#endif

		for (j=j00; j<j1; j++) {
			x = xi - access_x(j);
			y = yi - access_y(j);
			z = zi - access_z(j);
                        r2 = x*x + y*y + z*z;
			#if (EVAL_DIRECT_ACCURACY==0)
			one_over_r = RECIP_SQRT0(r2); 
			#elif (EVAL_DIRECT_ACCURACY==1)
			one_over_r = RECIP_SQRT1(r2); 
			#elif (EVAL_DIRECT_ACCURACY==2)
			one_over_r = RECIP_SQRT2(r2); 
			#endif
                        beta_r = beta*r2*one_over_r;
			#if (EVAL_DIRECT_ACCURACY==0)
                        exp_minus_beta_r_over_r = EXP0(-beta_r)*one_over_r;
			#elif (EVAL_DIRECT_ACCURACY==1)
                        exp_minus_beta_r_over_r = EXP1(-beta_r)*one_over_r;
			#elif (EVAL_DIRECT_ACCURACY==2)
                        exp_minus_beta_r_over_r = EXP2(-beta_r)*one_over_r;
			#endif


			qj = access_q(j);
			#if ((FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD) \
			  ||(FMM_KIND==FMM_ST_DIPOLE)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
			mxj = access_mx(j);
			myj = access_my(j);
			mzj = access_mz(j);
			m_times_rj = x*mxj + y*myj + z*mzj;
                        hh0 = (1.0+beta_r)*one_over_r*one_over_r*exp_minus_beta_r_over_r;
			access_pot(i) += qj*exp_minus_beta_r_over_r + m_times_rj*hh0;
			#if ((FMM_KIND==FMM_DIPOLE)||(FMM_KIND==FMM_DIPOLE_GRAD)) 
			m_times_ri = x*mxi + y*myi + z*mzi;
			access_pot(j) += qi*exp_minus_beta_r_over_r - m_times_ri*hh0;
			#endif
			#else
			access_pot(i) += qj*exp_minus_beta_r_over_r;
			#if ((FMM_KIND==FMM_STANDARD)||(FMM_KIND==FMM_GRAD)) 
			access_pot(j) += qi*exp_minus_beta_r_over_r;
			#endif
			#endif
			
			#if ((FMM_KIND==FMM_GRAD)||(FMM_KIND==FMM_ST_GRAD))
                        hh0 = (1.0+beta_r)*one_over_r*one_over_r*exp_minus_beta_r_over_r;
                        hh1 = qj*hh0;
			access_gradx(i) -= x*hh1;
			access_grady(i) -= y*hh1;
			access_gradz(i) -= z*hh1;
			#endif
			#if (FMM_KIND==FMM_GRAD)
                        hh1 = qi*hh0;
			access_gradx(j) += x*hh1;
			access_grady(j) += y*hh1;
			access_gradz(j) += z*hh1;
			#endif
			#if ((FMM_KIND==FMM_DIPOLE_GRAD)||(FMM_KIND==FMM_ST_DIPOLE_GRAD))
                        hh1 = one_over_r*one_over_r*m_times_rj;
                        hh2 = (qj + 3.0*hh1)*hh0 + beta2*hh1*exp_minus_beta_r_over_r;
			access_gradx(i) -= x*hh2 - mxj*hh0;
			access_grady(i) -= y*hh2 - myj*hh0;
			access_gradz(i) -= z*hh2 - mzj*hh0;
			#endif
			#if (FMM_KIND==FMM_DIPOLE_GRAD)
                        hh1 = one_over_r*one_over_r*m_times_ri;
                        hh2 = (qi - 3.0*hh1)*hh0 - beta2*hh1*exp_minus_beta_r_over_r;
			access_gradx(j) += x*hh2 + mxi*hh0;
			access_grady(j) += y*hh2 + myi*hh0;
			access_gradz(j) += z*hh2 + mzi*hh0;	
			#endif
		}
	}
}