예제 #1
0
void check(double ****f)   //calculate energy of pulsations of all components and know if there's crash
{
int i,j,k,l;
PulsEnergy=0;
TotalEnergy=0;
for(l=0;l<=2;l++)
   for(i=0;i<m1;i++)
      for(k=0;k<m3;k++)
        averf[l][i][k] = 0;
for(i=ghost;i<mm1;i++)
     for(j=ghost;j<mm2;j++)
        for(k=ghost;k<mm3;k++)
          if(isType(node[i][k],NodeFluid) && !isType(node[i][k],NodeClued))
           {
           PulsEnergy+=deviation(f,i,j,k);
           for(l=0;l<=2;l++) averf[l][i][k] += pow(f[l+1][i][j][k],2.);
           }
for(l=1;l<=3;l++)
  for(i=0;i<m1;i++)
    for(k=0;k<m3;k++)
       if(isType(node[i][k],NodeFluid) && !isType(node[i][k],NodeClued))
           TotalEnergy += fabs(1+coordin(i,0)*rc)*averf[l][i][k];
TotalEnergy += 1.;   //if zero average field
razlet = (PulsEnergy/TotalEnergy>UpLimit);
}
예제 #2
0
파일: ioutil.c 프로젝트: Infovarius/findif
void check(double ***f)   //calculate energy of pulsations of all components and know if there's crash
{
int i,k,l;
//double meanp = 0;
//long kol=0;
PulsEnergy=0;
TotalEnergy=0;
for(i=0;i<m1;i++)
        for(k=0;k<m3;k++)
		  if(isType(node[i][k],NodeFluid) && !isType(node[i][k],NodeClued))
           {
//           meanp += f[0][i][k];
//		   kol++;
		   PulsEnergy+=deviation(f,i,k);
           for(l=1;l<=3;l++) TotalEnergy += fabs(1+coordin(i,0)*rc)*pow(f[l][i][k],2.);
           }
/*meanp /= kol;
for(i=0;i<m1;i++)
        for(k=0;k<m3;k++)
			f[0][i][k] -= meanp;*/
TotalEnergy += 1.;   //if zero average field
razlet = (PulsEnergy/TotalEnergy>UpLimit);
}
예제 #3
0
파일: ioutil.c 프로젝트: Infovarius/findif
void printing(double ****f1,double dtdid,double t_cur,long count,double en)
{
double temp, divv, divB, totdivv, totdivB;
int i,j,k,l;
double mf[3], totmf[3], toten;     //mf[0]=max(f), mf[1]=max(df), mf[2]=max(df/f)
FILE *fv,*fnu,*fen,*fkv;

//clrscr();
time_now = MPI_Wtime();
Master printf("program is working %0.2f seconds\n",time_now-time_begin);
calculate_curl(&f1[4],B,NodeMagn);

divv = divB = 0;
for(i=0;i<m1;i++)
   for(j=ghost;j<mm2;j++)
      for(k=0;k<m3;k++)
        {
        if(isType(node[i][k],NodeFluid) && !isType(node[i][k],NodeClued))
           {
           temp=dr(f1[1],i,j,k,1,0,dx[0],ghost, approx)
               +dr(f1[2],i,j,k,2,0,dx[1],ghost, approx)*r_1[i]
               +dr(f1[3],i,j,k,3,0,dx[2],ghost, approx)+f1[1][i][j][k]*r_1[i];
           if (fabs(temp)>divv) divv=fabs(temp);
           }
        if(isType(node[i][k],NodeMagn) && !isType(node[i][k],NodeClued))
           {
           temp=dr(B[0],i,j,k,1,0,dx[0],ghost, approx)
               +dr(B[1],i,j,k,2,0,dx[1],ghost, approx)*r_1[i]
               +dr(B[2],i,j,k,3,0,dx[2],ghost, approx)+B[0][i][j][k]*r_1[i];
           if (fabs(temp)>divB) divB=fabs(temp);
           }
        }
MPI_Allreduce(&divv, &totdivv, 1, MPI_DOUBLE , MPI_MAX, MPI_COMM_WORLD);
MPI_Allreduce(&divB, &totdivB, 1, MPI_DOUBLE , MPI_MAX, MPI_COMM_WORLD);
Master printf("t=%g dtdid=%g NIter=%d maxdivv=%g(local=%g) maxdivB=%g(local=%g)\n",
               t_cur, dtdid, count,   totdivv,   divv,     totdivB,   divB);

   MPI_Allreduce(&en, &toten, 1, MPI_DOUBLE , MPI_SUM, MPI_COMM_WORLD);
   Master printf("Energy of pulsations=%g (local=%g)\n",toten,en);
   Master fen = fileopen(NameEnergyFile,count);
   Master fprintf(fen,"%8.8g  \t%e",t_cur,toten);

  // -------------------Maxima of array components and their changes---------------------------
   for(l=0;l<nvar;l++) {
       mf[0]=mf[1]=mf[2]=0;
       for(i=0;i<m1;i++)
        for(j=ghost;j<m2;j++)
         for(k=0;k<mm3;k++)
         if((l<=3 && isType(node[i][k],NodeFluid) || l>=4&& isType(node[i][k],NodeMagn))
            && !isType(node[i][k],NodeClued))
          {
            if (fabs(f1[l][i][j][k])>mf[0]) mf[0]=fabs(f1[l][i][j][k]);
            temp=fabs(f[l][i][j][k]-f1[l][i][j][k]);
            if (temp>mf[1]) mf[1]=temp;
            if(f1[l][i][j][k]!=0) temp/=f1[l][i][j][k];
            if (temp>mf[2]) mf[2]=temp;
          }
       MPI_Allreduce(&mf, &totmf, 3, MPI_DOUBLE , MPI_MAX, MPI_COMM_WORLD);
       Master printf("%d  maxf=%e(loc=%e) \tmaxdf=%e(loc=%e) \tmax(df/f)=%e(loc=%e)\n",
                       l,      totmf[0],mf[0],    totmf[1],mf[1],       totmf[2],mf[2]);
       Master fprintf(fen,"\t %e \t %e",totmf[0],totmf[1]);
       }
   for(l=0;l<3;l++) {
       mf[0]=mf[1]=mf[2]=0;
       for(i=0;i<m1;i++)
        for(j=ghost;j<m2;j++)
         for(k=0;k<mm3;k++)
         if(isType(node[i][k],NodeMagn) && !isType(node[i][k],NodeClued))
          {
            if (fabs(B[l][i][j][k])>mf[0]) mf[0]=fabs(B[l][i][j][k]);
          }
       MPI_Allreduce(&mf, &totmf, 1, MPI_DOUBLE , MPI_MAX, MPI_COMM_WORLD);
       Master printf("%d  maxB=%e(loc=%e)\n",
                       l,      totmf[0],mf[0]);
       Master fprintf(fen,"\t %e",totmf[0]);
       }
  // --------------- quadratic norma of arrays --------------------------------------
   for(l=0;l<nvar;l++) {
       mf[0]=0;
       for(i=0;i<m1;i++)
        for(j=ghost;j<m2;j++)
         for(k=0;k<mm3;k++)
         if((l<=3 && isType(node[i][k],NodeFluid) || l>=4&& isType(node[i][k],NodeMagn))
            && !isType(node[i][k],NodeClued))
            mf[0] += coordin(i,0)*pow(f1[l][i][j][k],2);
       MPI_Allreduce(&mf, &totmf, 1, MPI_DOUBLE , MPI_SUM, MPI_COMM_WORLD);
       Master fprintf(fen,"\t %e",totmf[0]/N1/N2/N3);
       }
   for(l=0;l<3;l++) {
       mf[0]=0;
       for(i=0;i<m1;i++)
        for(j=ghost;j<m2;j++)
         for(k=0;k<mm3;k++)
         if(isType(node[i][k],NodeMagn))
            mf[0] += coordin(i,0)*pow(B[l][i][j][k],2);
       MPI_Allreduce(&mf, &totmf, 1, MPI_DOUBLE , MPI_SUM, MPI_COMM_WORLD);
       Master fprintf(fen,"\t %e",totmf[0]/N1/N2/N3);
       }

   Master fprintf(fen,"\n");
   Master fclose(fen);
//   Master printf("number of runge-kutt calculations=%d\n",enter);

 // -------------------- average profile of velocity ---------------------
         for(i=0;i<N3;i++)    vfi[i]=0;
         for(i=0;i<N3;i++) totvfi[i]=0;
         for(i=0;i<m1;i++)
            for(j=ghost;j<mm2;j++)
               for(k=0;k<m3;k++)
                if(isType(node[i][k],NodeFluid) && !isType(node[i][k],NodeClued))
                   vfi[k-ghost+n[2]] += f[2][i][j][k];
         MPI_Allreduce(vfi, totvfi, N2, MPI_DOUBLE , MPI_SUM, MPI_COMM_WORLD);
         Master {for(i=0;i<N3;i++) totvfi[i] /= N1*N3;
                 fv = fileopen(NameVFile,count);
                 fprintf(fv,"{%8.8f}\t",t_cur);
                 print_array1d(fv,totvfi,0,N3);
                 fclose(fv);
                }
}
예제 #4
0
파일: pde0.c 프로젝트: Infovarius/findif
void  init_conditions()
{
   int i,j,k,l;
   double r, rho, r1, z1;
//   double k1,k2,k3;

// -------- filling of nodes' types +reflections rel circle + nut ---------------
   for(i=0;i<m1;i++)
   for(k=0;k<m3;k++)
       {
       node[i][k] = NodeUnknown;
       for(j=0;j<m2;j++) nut[i][j][k]=(
//        (0.39+14.8*exp(-2.13*pow(2*coordin(k,2)-l3,2)))*0.1*0
                    +1.)/Re;
      if(pr_neighbour[0]!=-1 && i<ghost ||
           pr_neighbour[1]!=-1 && i>=mm1  ||
           pr_neighbour[4]!=-1 && k<ghost ||
           pr_neighbour[5]!=-1 && k>=mm3) setType(&node[i][k],NodeClued);
       }
   for(i=0;i<m1;i++)
   for(k=0;k<m3;k++)
       {
        r1 = coordin(i,0);   z1 = coordin(k,2);
        rho=sqrt(pow(r1-rc,2) + z1*z1);
     //regions
        if(rho>Rsh) setType(&node[i][k],NodeVacuum);
          else if(rho>Rfl) setType(&node[i][k],NodeShell);
          else             setType(&node[i][k],NodeFluid);
     //for hydrodynamics
        if(isType(node[i][k],NodeFluid))
            { if(isType(node[i][k],NodeGhostFluid)) node[i][k] -= NodeGhostFluid;
              for(l=-ghost;l<=ghost;l++)
                     { if(i+l>=0&&i+l<m1) if(!isType(node[i+l][k],NodeFluid))
                                              setType(&node[i+l][k],NodeGhostFluid);
                       if(k+l>=0&&k+l<m3) if(!isType(node[i][k+l],NodeFluid))
                                              setType(&node[i][k+l],NodeGhostFluid);
                     }
            }
        refr_f[i][k] = rc + (r1-rc)*(2*Rfl/rho-1);      //physical coordinates
        refz_f[i][k] =        z1*(2*Rfl/rho-1);
        refr_f[i][k] = (refr_f[i][k]-rc+R)/dx[0]-0.5-n[0]+ghost;   // simulation indices
        refz_f[i][k] = (refz_f[i][k]+R   )/dx[2]-0.5-n[2]+ghost;
        if(fabs(refr_f[i][k]-i)<1 && fabs(refz_f[i][k]-k)<1 && !isType(node[i][k],NodeFluid))
                 { setType(&node[i][k],NodeFluid);
                   if(isType(node[i][k],NodeGhostFluid)) node[i][k] -= NodeGhostFluid;
                   for(l=-ghost;l<=ghost;l++)
                     { if(i+l>=0&&i+l<m1) if(!isType(node[i+l][k],NodeFluid))
                                              setType(&node[i+l][k],NodeGhostFluid);
                       if(k+l>=0&&k+l<m3) if(!isType(node[i][k+l],NodeFluid))
                                              setType(&node[i][k+l],NodeGhostFluid);
                     }
                  }
     //for magnetism
        refr_m[i][k] = i;
        refz_m[i][k] = k;
        if(i+n[0]<ghost)  {setType(&node[i][k],NodeGhostMagn);
                           refr_m[i][k] = 2*ghost-i-1;}
         else if(i+n[0]>=N1+ghost)
                          {setType(&node[i][k],NodeGhostMagn);
                           refr_m[i][k] = 2*mm1-i-1;}
        if(k+n[2]<ghost)  {setType(&node[i][k],NodeGhostMagn);
                           refz_m[i][k] = 2*ghost-k-1;}
         else if(k+n[2]>=N3+ghost)
                          {setType(&node[i][k],NodeGhostMagn);
                           refz_m[i][k] = 2*mm3-k-1;}
        if(!isType(node[i][k],NodeGhostMagn)) setType(&node[i][k],NodeMagn);
     //for divertor's blade
        sinth[i][k]=(r1-rc)/rho;
        costh[i][k]=   z1  /rho;
        chi[i][k]  = chimax*M_PI/180.*rho/R;
       }

   for(i=0;i<m1;i++) { r_1[i]=1./coordin(i,0); r_2[i]=r_1[i]*r_1[i]; }

   for(i=0;i<m1;i++)
   for(j=0;j<m2;j++)
   for(k=0;k<m3;k++)
       {
       if(isType(node[i][k],NodeFluid)) eta[i][j][k]=1./Rm/etavac;
       if(isType(node[i][k],NodeShell)) eta[i][j][k]=etash/Rm/etavac;
       if(isType(node[i][k],NodeVacuum)) eta[i][j][k]=1./Rm;
       for(l=0;l<3;l++) B[l][i][j][k] = 0;
       }

// --------------- initial conditions -----------------------------------------
//   k1=2*M_PI/lfi;  k3=M_PI/l3;

if(!goon) {
   for(i=0;i<m1;i++)
   for(j=0;j<m2;j++)
   for(k=0;k<m3;k++)
     {
      if(isType(node[i][k],NodeFluid)) {
        f[0][i][j][k]=0;
/*        f[1][i][j][k]=Noise*((double)rand()-RAND_MAX/2)/RAND_MAX*
                       (Rfl*Rfl-pow(coordin(i,0)-rc,2) - pow(coordin(k,2),2))*4/Rfl/Rfl;
        f[2][i][j][k]=NoiseNorm*cos(2*M_PI*coordin(j,1)/R)*sin(2*M_PI*coordin(k,2)/Rfl)
                      + (parabole+Noise*((double)rand()-RAND_MAX/2)/RAND_MAX)*
                       (Rfl*Rfl-pow(coordin(i,0)-rc,2) - pow(coordin(k,2),2))*4/Rfl/Rfl;
        f[3][i][j][k]=NoiseNorm*sin(2*M_PI*coordin(j,1)/R)*sin(2*M_PI*coordin(k,2)/Rfl)
                      + Noise*((double)rand()-RAND_MAX/2)/RAND_MAX*
                       (Rfl*Rfl-pow(coordin(i,0)-rc,2) - pow(coordin(k,2),2))*4/Rfl/Rfl;*/
        f[1][i][j][k]=f[2][i][j][k]=f[3][i][j][k]=0;
                                        }
      if(isType(node[i][k],NodeMagn))
                 {
                 f[4][i][j][k]=coordin(i,0)*cos(coordin(j,1))*sin(coordin(j,1));
                 f[5][i][j][k]=coordin(i,0)*cos(coordin(j,1))*cos(coordin(j,1));
                 f[6][i][j][k]=0;
/*          f[4][i][j][k]=0;
          f[5][i][j][k]=0;
          f[6][i][j][k]=coordin(i,0);*/
                 }
      }
//   struct_func(f,2,2,3);
   nmessage("Arrays were filled with initial values - calculation from beginning",0,0);
   } else nmessage("Arrays were filled with initial values - calculation is continuing",t_cur,count);
}
예제 #5
0
int main (int argc, char ** argv)
{
  pca::pcafitter fitter; 

  bool fast = false;
  bool verbose = false;
  bool selectsubsector = true;
  bool selectsubladder = false;
  bool useallsubsectors = false;
  bool useallsubladders = false;
  bool useonlyeven = false;
  bool usesegid = false;
  bool printallcoords = false;

  while (1)
  {
    int c, option_index;
    static struct option long_options[] = {
      {"help", 0, NULL, 'h'},
      {"verbose", 0, NULL, 'V'},
      {"bigger-sub-tower", 0, NULL, 's'},
      {"bigger-sub-sub-tower", 0, NULL, 'l'},
      {"fast", 0, NULL, 'f'},
      {"version", 0, NULL, 'v'},
      {"all-sub-tower", 0, NULL, 'a'},
      {"all-sub-sub-tower", 0, NULL, 'r'},
      {"seg-id", 0, NULL, 'i'},
      {"jump-tracks", 0, NULL, 'j'},
      {"dump-allcoords", 0, NULL, 'p'},
      {0, 0, 0, 0}
    };

    c = getopt_long (argc, argv, "iravhVslfjp", long_options, &option_index);

    if (c == -1)
      break;

    switch (c)
    {
      case 'p':
        printallcoords = true;
        break;
      case 'j':
        useonlyeven = true;
        break;
      case 'i':
        usesegid = true;
        break;
      case 'h':
        usage (argv[0]);
        break;
      case 'v':
        std::cout << "Version: " << pca::pcafitter::get_version_string() << std::endl;
        exit(1);
        break;
      case 'a':
        useallsubsectors = true;
        break;
      case 'r':
        useallsubladders = true;
        break;
      case 'f':
        fast = true;
        break;
      case 'V':
        verbose = true;
        break;
      case's':
        selectsubsector = true;
        selectsubladder = false;
        break;
      case 'l':
        selectsubladder = true;
        selectsubsector = false;
        break;
      default:
        usage (argv[0]);
        break;
    } 
  }

  if (usesegid)
    fitter.set_coordim (6);

  fitter.set_paramdim(5);
  if (!fitter.set_paramidx(ONEOVERPTIDX, "oneoverpt"))
  {
    std::cerr << fitter.get_errmsg() << std::endl;
    return EXIT_FAILURE;
  }
  if (!fitter.set_paramidx(PHIIDX, "phi"))
  {
    std::cerr << fitter.get_errmsg() << std::endl;
    return EXIT_FAILURE;
  }
  if (!fitter.set_paramidx(COTTETHAIDX, "cot(tetha)"))
  {
    std::cerr << fitter.get_errmsg() << std::endl;
    return EXIT_FAILURE;
  }
  if (!fitter.set_paramidx(Z0IDX, "z0"))
  {
    std::cerr << fitter.get_errmsg() << std::endl;
    return EXIT_FAILURE;
  }
  if (!fitter.set_paramidx(D0IDX, "d0"))
  {
    std::cerr << fitter.get_errmsg() << std::endl;
    return EXIT_FAILURE;
  }

  if (optind >= argc) 
    usage (argv[0]);

  if (selectsubladder && selectsubsector)
    usage (argv[0]);

  if (useallsubsectors || useallsubladders)
  {
    selectsubladder = false;
    selectsubsector = false;
  }

  if (useallsubladders && useallsubsectors)
    usage (argv[0]);

  char * filename = (char *) alloca (strlen(argv[optind]) + 1);
  strcpy (filename, argv[optind]);

  // leggere file coordinate tracce simulate plus parametri
  if (!pca::file_exists(filename))
  {
    std::cerr << "Inout file does not exist" << std::endl;
    return EXIT_FAILURE;
  }
                  
  int num_of_line = pca::numofline(filename);
  std::cout << "file has " << num_of_line << " line " << std::endl;
  int num_of_ent_read = (num_of_line-1)/ENTDIM;

  int num_of_ent = num_of_ent_read;

  if (useonlyeven)
  {
    if (num_of_ent_read % 2)
      num_of_ent = (num_of_ent_read-1)/2;
    else
      num_of_ent = num_of_ent_read/2;
  }

  std::cout << "file has " << num_of_ent << " entries " << std::endl;

  // non perfomante ma easy to go
  arma::mat layer, ladder, module, coordin, paramin;
  layer.set_size(num_of_ent,fitter.get_coordim());
  ladder.set_size(num_of_ent,fitter.get_coordim());
  module.set_size(num_of_ent,fitter.get_coordim());
  coordin.set_size(num_of_ent,fitter.get_coordim());
  paramin.set_size(num_of_ent,fitter.get_paramdim());

  std::map<std::string, int> subsectors, subladders;
  std::vector<std::string> subladderslist, subsectorslist;

  // leggere file coordinate tracce simulate plus parametri
  std::cout << "Reading data from " << filename << " file " << std::endl;
  pca::reading_from_file (filename, paramin, coordin, 
      layer, ladder, module, subsectors, subladders, 
      subsectorslist, subladderslist, num_of_ent_read, usesegid,
      useonlyeven, false);
  // write date to file 
 
  if (printallcoords)
  {
    std::cout << "Printout coordinates " << std::endl;
    std::ofstream myfilect("allcoords.txt");
    for (int i=0; i<(int)coordin.n_rows; ++i)
      for (int j=0; j<fitter.get_coordim(); j=j+3)
        myfilect << coordin(i, j) << " " << 
                    coordin(i, j+1) << " " <<
                    coordin(i, j+2) << std::endl;
    myfilect.close();
  }

  std::cout << "Writing parameters to files" << std::endl;
  pca::write_to_file("oneoverpt.txt", paramin, ONEOVERPTIDX);
  pca::write_to_file("phi.txt", paramin, PHIIDX);
  pca::write_to_file("d0.txt", paramin, D0IDX);
  pca::write_to_file("cotetha.txt", paramin, COTTETHAIDX);
  pca::write_to_file("z0.txt", paramin, Z0IDX);

  if (!useallsubsectors && !useallsubladders)
  {
    // values selection
    std::string slctsubsec = "";
    int maxnumber = 0;
  
    arma::mat coord, param;

    assert(selectsubsector != selectsubladder);
    
    if (selectsubladder || selectsubsector)
    {
      if (selectsubsector)
      {
        std::cout << "Looking for bigger subsector" << std::endl; 
        std::cout << "We  found " << subsectors.size() << 
          " subsectors " << std::endl;
      
        fitter.select_bigger_sub (subsectors, verbose, 
            maxnumber, slctsubsec);
        
        std::cout << "Selected subsector " << slctsubsec << 
          " numevt: " << maxnumber << std::endl;
    
        fitter.extract_sub (subsectorslist, 
            slctsubsec, paramin, coordin, param, 
            coord);
      }
      
      if (selectsubladder)
      {
        std::cout << "Looking for bigger subladder" << std::endl; 
        std::cout << "We  found " << subladders.size() << 
          " subladders " << std::endl;
      
        fitter.select_bigger_sub (subladders, verbose, 
            maxnumber, slctsubsec);
        
        std::cout << "Selected subladder " << slctsubsec << " numevt: " << maxnumber << std::endl;
    
        fitter.extract_sub (subladderslist, 
            slctsubsec, paramin, coordin, param, 
            coord);
      }
   
    }
    else
    {
      param = paramin;
      coord = coordin;
    }

    std::cout << "Printout selected coordinates " << std::endl;
    std::ofstream myfileslct("selectedcoords.txt");
    for (int i=0; i<(int)coord.n_rows; ++i)
      for (int j=0; j<fitter.get_coordim(); j=j+3)
        myfileslct << coord(i, j) << " " << 
                      coord(i, j+1) << " " <<
                      coord(i, j+2) << std::endl;
    myfileslct.close();
    
    // write date to file 
    std::cout << "Writing extracted parameters to files" << std::endl;
    pca::write_to_file("oneoverpt_selected.txt", param, ONEOVERPTIDX);
    pca::write_to_file("phi_selected.txt", param, PHIIDX);
    pca::write_to_file("d0_selected.txt", param, D0IDX);
    pca::write_to_file("cotetha_selected.txt", param, COTTETHAIDX);
    pca::write_to_file("z0_selected.txt", param, Z0IDX);

    std::ostringstream cfname, qfname; 
    cfname << "c." << slctsubsec << ".bin";
    qfname << "q." << slctsubsec << ".bin";
 
    perform_main_computation (fast, verbose, coord, param,
        cfname.str(), qfname.str(), fitter);
  }
  else 
  {
    assert(useallsubladders != useallsubsectors);

    arma::mat coord, param;
    unsigned int totalamnt = 0, usedamnt = 0;
    std::vector<std::string> * listtouse = NULL;

    std::set<std::string> sectrorset;

    if (useallsubsectors)
    {
      std::vector<std::string>::const_iterator selecteds = 
        subsectorslist.begin(); 
      for (; selecteds != subsectorslist.end(); ++selecteds)
        sectrorset.insert(*selecteds);

      listtouse = &subsectorslist;
    }
    else if (useallsubladders)
    {
      std::vector<std::string>::const_iterator selecteds = 
        subladderslist.begin(); 
      for (; selecteds != subladderslist.end(); ++selecteds)
        sectrorset.insert(*selecteds);

      listtouse = &subladderslist;
    }
    else 
      usage(argv[0]);

    std::set<std::string>::const_iterator selected = 
      sectrorset.begin(); 
    for (; selected != sectrorset.end(); ++selected)
    {
      fitter.extract_sub (*listtouse, 
          *selected, paramin, coordin, param, 
          coord);

      std::cout << "Selected " << *selected << " size " << 
        coord.n_rows << std::endl;

      totalamnt += coord.n_rows;

      if (coord.n_rows > MINDIMLINIT)
      {
        std::ostringstream cfname, qfname; 
        cfname << "c." << *selected << ".bin";
        qfname << "q." << *selected << ".bin";
        perform_main_computation (fast, verbose, coord, param,
            cfname.str(), qfname.str(), fitter);

        usedamnt += coord.n_rows;
      }
    }

    std::cout << "Total tracks: " << totalamnt << std::endl;
    std::cout << "Used tracks: " << usedamnt << std::endl;
  }

  return EXIT_SUCCESS;
}
예제 #6
0
파일: pde.cpp 프로젝트: Infovarius/findif
void  init_conditions(double ****f,double Re)
{
   int i,j,k,l;
   double Noise=0.3, Noise1=0;
//   double k1,k2,k3;

//   k1=2*M_PI/l1;  k3=M_PI/l3;

   for(i=0;i<m1;i++)
   for(j=0;j<m2;j++)
   for(k=0;k<m3;k++) {
        f[0][i][j][k]=(1+Noise*((double)rand()-RAND_MAX/2)/RAND_MAX)*
                       coordin(k,2)*(l3-coordin(k,2))*4/l3/l3;
        f[1][i][j][k]=Noise1*cos(2*M_PI*coordin(j,1)/l2)*cos(2*M_PI*coordin(k,2)/l3)
                      + Noise*((double)rand()-RAND_MAX/2)/RAND_MAX*
                       coordin(k,2)*(l3-coordin(k,2))*4/l3/l3;
        f[2][i][j][k]=Noise1*sin(2*M_PI*coordin(j,1)/l2)*sin(2*M_PI*coordin(k,2)/l3)
                      + Noise*((double)rand()-RAND_MAX/2)/RAND_MAX*
                       coordin(k,2)*(l3-coordin(k,2))*4/l3/l3;
        f[3][i][j][k]=p1+(i-0.5)*(p2-p1)/n1;
        nut[i][j][k]=(
        (0.39+14.8*exp(-2.13*pow(2*coordin(k,2)-l3,2)))*0.1
                +1)/Re;
   }
//   struct_func(f,2,2,3);
}
예제 #7
0
int Engine::initialize()
{
    // For Tracing
    std::vector < std::string > keys;
    keys.push_back("currentEnergy");
    keys.push_back("minEnergy");
    keys.push_back("nSteps");
    keys.push_back("temperature");
    tracer_.clear();
    tracer_.setKeyList(keys);

    if (isVerbose())
    {
        Rprintf("Initialization...\n");
    }
    // Init x related vectors
    try {
        xRange_.resize(x_.size());
        xBackup_.resize(x_.size());
        xMini_.resize(x_.size());
        xBuffer_.resize(x_.size());
        g_.resize(x_.size());
    }
    catch (std::length_error& le) {
        Rprintf("Engine: Length error: %s\n",le.what());
    }

    itSoftMax_ = x_.size() * 6;
    factr_ = 1000;
    pgTol_ = 1.e-6;
    reps_ = 1.e-6;

    nbFctCall_ = 0;
    idum_ = -100377;
    indTrace_ = 0;

    // Check markov chain length
    if (0 != markovLength_ % x_.size())
    {
        Rprintf(
                "LMarkov should be size of 'x' (recommended) or 2*n or 3*n ... since component.change is 1\n");
        return -1;
    }
    //	if (lsEnd_)
    //	{
    //		markovLength_ = 200 * x_.size();
    //		if (markovLength_ < 1000)
    //		{
    //			markovLength_ = 1000;
    //		}
    //		else if (markovLength_ > 10000)
    //		{
    //			markovLength_ = 10000;
    //		}
    //	}

    if (isVerbose())
    {
        Rprintf("LMarkov= %i\n", markovLength_);
    }

    for (unsigned int i = 0; i < x_.size(); ++i)
    {
        xRange_[i] = upper_[i] - lower_[i];
    }

    if (isVerbose())
    {
        Rprintf("xrange: ");
        printVect(xRange_);
    }

    // Check if starting point is in constraint
    bool inConstraint = true;
    bool initError = true;
    unsigned int reinitCount = 0;
    while (initError)
    {
        if (inConstraint)
        {
            if (hasConstraint_)
            {
                inConstraint = judgeConstraint();
                while (!inConstraint)
                {
                    coordin(idum_, x_);
                    inConstraint = judgeConstraint();
                }
            }
        }
        if (isVerbose())
        {
            Rprintf("The random intial x coordinates:\n");
            printVect(x_);
        }
        energy(x_);
        if (isVerbose())
        {
            Rprintf("The energy of initial x = %.10g\n", etot_);
        }

        if (etot_ >= BIG_VALUE)
        {
            if (isVerbose())
            {
                Rprintf("x: ");
                printVect(x_);
                Rprintf(
                        " give NaN, NA, or inf, generating new starting point\n");
            }
            if (reinitCount >= MAX_REINIT_COUNT)
            {
                Rprintf("Stopping algorithm because function to optimize create NaN or (+/-) infinity values even with trying new random parameters");
                return -1;
            }
            double rd = 0;
            for (unsigned int i=0; i < x_.size(); ++i)
            {
                // lower + runif(length(lower))*(upper-lower)
                rd = Utils::ran2(&idum_);
                x_[i] = lower_[i] + rd * (upper_[i] - lower_[i]);
            }
            reinitCount++;
        }
        else
        {
            initError = false;
        }
    }

    return 0;
}