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"); } }
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 } } }