Example #1
0
qhandle_t trap_R_GenerateTexture( const byte *data, int x, int y )
{
	qhandle_t handle;
	std::vector<byte> mydata(x * y * 4);
	memcpy(mydata.data(), data, x * y * 4 * sizeof( byte ) );
	VM::SendMsg<Render::GenerateTextureMsg>(mydata, x, y, handle);
	return handle;
}
int fevec7(Epetra_Comm& Comm, bool verbose)
{
  const int NumVectors = 4;
  const int NumElements = 4;
  Epetra_Map     Map(NumElements, 0, Comm);
  std::vector<double> mydata(NumElements*NumVectors, 1.0);
  Epetra_FEVector x1(View, Map, &mydata[0], NumElements, NumVectors);

  x1.PutScalar (0);

        // let all processors set global entry 0 to 1
  const int GID = 0;
  const double value = 1;
  x1.ReplaceGlobalValues(1, &GID, &value);
  x1.GlobalAssemble (Insert);

  if (Comm.MyPID()==0 && x1[0][0] != value) return -1;
  return 0;
}
int main(void)
{
    try
	{
		Array mydata(3); //배열 사이즈가 3으로 설정됨

		for (int i=0; i<3; i++)  mydata[i] = i*10;

		for (i=0; i<=3; i++) //i=3이면 범위를 초과하게 된다.
			cout << mydata[i] << endl;
    }

    catch(Array::ESize &err) //ESize 예외 처리 
    {
		cout << "## Exception ##\t" ;
		err.print();
    }

	cout << "계속 실행" << endl;

    return 0;
}
int main(int argc, char* argv[]) {
  // This code will take a configuration file of the form:
  // 1. datafile (containing column delimited x y e1 e2 sigma_e)
  // 2. int constsigma (0 to use the parameters in the datafile, 
  //                    1 to use the parameter in line 3)
  // 3. double sigma_e (if constsigma=0, then this number is thrown away)
  // 4. Eta
  // 4a. niter
  // 5. output filename
  // 6. idx associated with h (e.g. h=h1*rho0^(-0.5)/(rho/rho0)^idx), idx=0.5 means constant noise
  //                                             idx=0.=constant length
  // 7. h1, the length scale associated with a density of "1".  
  // 8. The number of modeled isothermal spheres assumed for the initial conditions
  // 9-11, 12-14, ..., xc, yc, theta_e for each of the isothermal spheres
if (argc == 1) {
    cerr << "calling procedure is: kappapbl [configfile] \n";
    return(0);
  } 
 
 fstream datafile, configfile;
 configfile.open(argv[1],ios::in);
 if (! configfile.is_open()) {
   cerr << "Boo!  File does not exist.\n";
   return(0);
 } 

 char dataname[200],outpblfile[200];
 
 vector<double> x,y,w,e1,e2,psi0,ktrue;
 configfile >> dataname;
 datafile.open(dataname,ios::in);
 int constsigma,n_iso,niter;
 double sige,h1,idx,eta;
 
 configfile >> constsigma;
 configfile >> sige;
 configfile >> eta;
 configfile >> niter;
 configfile >> outpblfile;
 configfile >> idx;
 configfile >> h1;

 int n=0;
 
 string line;
 double d1,d2,d3,d4,d5,d6,d7,d8;
 while  (! (datafile.eof() || datafile.peek()== EOF)) {
   datafile >> d1 >> d2 >> d3 >> d4 >> d5>> d6;  // >> d5 >> d6 >> d7 >> d8;
   if (d1 < 530. && d1 > 200. && d2 < 450. && d2 > 250 && d5 > 1. && (d3*d3+d4*d4)<1){
     x.push_back(d1);
     y.push_back(d2);
     e1.push_back(d3);
     e2.push_back(d4);
     ktrue.push_back(d5);
     w.push_back(d5);
     //w.push_back(1./(d5*d5));
     //psi0.push_back(d7);
     if (constsigma == 1) {
     w[n]=d5/(sige*sige);
     }
     n++;
   }
   getline(datafile,line);
    
  }
 datafile.close();
 cerr << "n=" << n << "\n";

 double xmax=*max_element(x.begin(),x.end());
 double xmin=*min_element(x.begin(),x.end());
 double ymax=*max_element(y.begin(),y.end());
 double ymin=*min_element(y.begin(),y.end());
 double del;
 if ((xmax-xmin) >(ymax-ymin)) del=(xmax-xmin);
 else del=(ymax-ymin);

 cerr<<xmax<<" "<<xmin<<endl;
 cerr<<ymax<<" "<<ymin<<endl;

 for(int i=0;i<n;i++){
   x[i]=(x[i]-xmin)/del;
   y[i]=(y[i]-ymin)/del;
 }
 // Now, do we want to start the initial conditions with an isothermal sphere (or two)?
 configfile >> n_iso;
 cerr << "initializing with " << n_iso << " isothermal spheres\n";
 vector<double>psi_new;
 for (int i=0; i < n; i++) {
   psi_new.push_back(0.);
 }
 double xc[2],yc[2],te[2];
 for (int i_iso=0; i_iso < n_iso; i_iso++) {
   configfile >> xc[i_iso];
   configfile >> yc[i_iso];
   configfile >> te[i_iso];
   cerr<<xc[i_iso]<<"  "<<yc[i_iso]<<"  "<<te[i_iso]<<endl;
 }
 double chi_store[20],xc0[20],yc0[20];
 double sgn1,sgn2;
 //for(int init=0; init < 20; init++){
 
   for (int i=0; i < n; i++) {
     double theta1=sqrt(pow(x[i]-xc[0],2)+pow(y[i]-yc[0],2));
     double theta2=sqrt(pow(x[i]-xc[1],2)+pow(y[i]-yc[1],2));
     //cerr<<x[i]<<" "<<y[i]<<endl;
     psi_new[i]+=te[0]*theta1+te[1]*theta2;
     // cout<<x[i]<<"  "<<y[i]<<"  "<<psi_new[i]<<endl;
   }
 
   configfile.close();

   // Initialize the data
   datapbl mydata(x,y,e1,e2,w);
   vector<double> rho=mydata.compute_density();
   
   /* for(int i=0;i<n;i++){
      cerr<<x[i]<<"  "<<y[i]<<"  "<<rho[i]<<endl;
      }*/
   double rho0=n;
   int nx0=20;
   vector<double> rho_grid;
   
   if (idx==1){
     grid_field rhobin(x,y,rho,nx0,nx0);
     cerr<<"I am HERE"<<endl;
     rho_grid=rhobin.bin_pbl();
     
     double dx=rhobin.max(x)-rhobin.min(x);
     double dy=rhobin.max(y)-rhobin.min(y);
     for(int i=0; i < n; i++) {
       int i0=floor((x[i]/dx) *nx0);
       int j0=floor((y[i]/dx) *nx0);
       double wx=abs((x[i]/dx) *nx0-i0);
       double wy=abs((y[i]/dx) *nx0-j0);
       rho[i]=rho_grid[i0*nx0+j0]*(1-wx)*(1-wy)+rho_grid[i0*nx0+j0-1]*(1-wx)*wy
	 +rho_grid[(i0-1)*nx0+j0]*wx*(1-wy)+rho_grid[(i0-1)*nx0+j0-1]*wx*wy;
     }
   }
   
   cerr<<"I am HERE"<<endl;
   
   vector<double> h;
   for (int i=0; i < n; i++) {
     h.push_back(h1/sqrt(rho0)/pow(rho[i],idx));
     //cerr<<h[i]<<endl;
   }
 
   modelpbl mymodel(x,y,h,3);
   mymodel.set_data(mydata);
   mymodel.set_eta_step(30.);
   mymodel.set_eta(eta);
   mymodel.set_psi(psi_new);
   mymodel.update_all();
   
   //***************************************************************
 // 
 // At this point, both the model and the data are configured
 // and initialized.
 // Below, we minimize chi^2
 //
 //***************************************************************

   double dof=n-1.;
   cerr << "chi2= " << mymodel.chi2()/dof << "\n";
   
   int npts=mymodel.get_npts();
   Array1D<double> dpsi(n);
   
   for(int j=0;j<n;j++){
     dpsi[j]=0;
   }
   
   double chi0;
   time_t seconds1,seconds2;
   double factor;
   factor=0.45;
   double dchi=1000.;
   double eps=0.01;
   double chi=mymodel.chi2()/dof;
   while (dchi > eps){
     seconds1=time(NULL);
     dpsi=mymodel.psi_newton_pbl();
     for(int j=0;j<n;j++){
       psi_new[j]+=factor*dpsi[j];
     }
     seconds2=time(NULL);
     cerr<<"time for each iteration= "<<(seconds2-seconds1)<< " sec.\n";
     mymodel.set_psi(psi_new);
     cerr << "chi2= " << mymodel.chi2()/dof << "\n";
     chi0=mymodel.chi2()/dof;
     dchi=fabs(chi-chi0);
     chi=chi0;
   }

   mymodel.set_eta(0.);
   cerr<<"final chi^2=  "<<mymodel.chi2()/dof<<endl;
   
   //****************************************************************
   // We have completed our minimization.  Now, time to export
 //****************************************************************
 


 // First, grid up the data...
 vector<double> gamma1;
 vector<double> gamma2;
 vector<double> kappa;
 
 gamma1=mymodel.get_data("GAMMA1");
 gamma2=mymodel.get_data("GAMMA2");
 kappa=mymodel.get_data("KAPPA");

 int nx=60;
 int ny=60;

 vector<double> g1_bin;
 vector<double> g2_bin;
 vector<double> k_bin;
 vector<double> ktrue_bin;
 vector<int> n_grid;
 grid_field kapbin(x,y,kappa,nx,ny);
 k_bin=kapbin.bin_pbl();
 grid_field gam1bin(x,y,gamma1,nx,ny);
 g1_bin=gam1bin.bin_pbl();
 grid_field gam2bin(x,y,gamma2,nx,ny);
 g2_bin=gam2bin.bin_pbl();
 //vector<double> weight=gam2bin.get_w();
 n_grid=gam2bin.get_n_grid();

 grid_field ktruebin(x,y,ktrue,nx,ny);
 ktrue_bin=ktruebin.bin_pbl();

 ofstream outbindata, outptdata;

 outbindata.open("gridded_bullet.dat");
 outptdata.open(outpblfile);

 

 // Print out the kappa field, g1, and g2 fields

 for(int i=0;i<nx;i++){
   for(int j=0;j<ny;j++){
     outbindata <<i<<"  "<<j<<"  "<<k_bin[i*ny+j]<<" " << ktrue_bin[i*ny+j]<<"  "<<g1_bin[i*ny+j]<<"  "<<g2_bin[i*ny+j]
		<<"  "<<n_grid[i*ny+j]<< endl;
   }
 }
 outbindata.close();
 
  // Print out the individual data points
 for(int i=0;i<npts;i++){

   outptdata<<x[i]<<"  "<<y[i]<<"  "<<mymodel.get_data("PSI",i)<<"  "
	    <<kappa[i]<<"\n";
 }
 outptdata.close();
 
 return(0);
   
}