Example #1
0
double *iter2(double *y0, double x0, double h, double *y, int cnt)
{
	int i;
	double k1,k2,k3,k4;
	double *tmp = malloc (cnt * sizeof(double));
	for (i = 0; i < cnt; i++)
	{
		k1 = func[i](x0, y0);
		k2 = func[i](x0 + h/2, hn(y0, cnt, h, k1, tmp));
		k3 = func[i](x0 + h/2, hn(y0, cnt, h, k2, tmp));
		k4 = func[i](x0 + h, hm(y0, cnt, h, k3, tmp));
		y[i] = y0[i] + (k1 + 2 * k2 + 2 * k3 + k4) * h / 6;
	}
	free(tmp);
	return y;
}
Example #2
0
extern "C" void equ_makeTable(SuperEqState *state, REAL *lbc,void *_param,REAL fs)
{
  paramlist *param = (paramlist *)_param;
  int i,cires = state->cur_ires;
  REAL *nires;

  if (fs <= 0) return;

  paramlist param2;

  for (int ch = 0; ch < state->channels; ch++) {
      process_param(lbc,param,param2,fs,ch);

      for(i=0;i<state->winlen;i++)
          state->irest[i] = hn(i-state->winlen/2,param2,fs)*win(i-state->winlen/2,state->winlen);

      for(;i<state->tabsize;i++)
          state->irest[i] = 0;

      rfft(state->fft_bits,1,state->irest);

      nires = cires == 1 ? state->lires2 : state->lires1;
      nires += ch * state->tabsize;

      for(i=0;i<state->tabsize;i++)
          nires[i] = state->irest[i];
  }
  state->chg_ires = cires == 1 ? 2 : 1;
}
Example #3
0
void equ_makeTable(REAL *lbc,REAL *rbc,paramlist *param,REAL fs)
{
  int i,cires = cur_ires;
  REAL *nires;

  if (fs <= 0) return;

  paramlist param2;

  // L

  process_param(lbc,param,param2,fs,0);
  
  for(i=0;i<winlen;i++)
    irest[i] = hn(i-winlen/2,param2,fs)*win(i-winlen/2,winlen);

  for(;i<tabsize;i++)
    irest[i] = 0;

  rfft(tabsize,1,irest);

  nires = cires == 1 ? lires2 : lires1;

  for(i=0;i<tabsize;i++)
    nires[i] = irest[i];

  process_param(rbc,param,param2,fs,1);

  // R
  
  for(i=0;i<winlen;i++)
    irest[i] = hn(i-winlen/2,param2,fs)*win(i-winlen/2,winlen);

  for(;i<tabsize;i++)
    irest[i] = 0;

  rfft(tabsize,1,irest);

  nires = cires == 1 ? rires2 : rires1;

  for(i=0;i<tabsize;i++)
    nires[i] = irest[i];
   
  //
  
  chg_ires = cires == 1 ? 2 : 1;
}
Example #4
0
void ReadStrOut(std::string fname, Latgas_Hamiltonian& hamilton, Latgas_Hamiltonian::Config& sigma)
{
   const bool verbose = false;
   typedef Vec<float,3> Vec3;
   Vec3 a[3];   // unit cell vector
   Vec3 rL[3];  // extent
   std::ifstream fin;
   try
   {
      fin.open(fname.c_str());
   }
   catch(...)
   {
      std::cout << "ReadStrOut could not open \"" << fname << "\"" << std::endl;
      return;
   }
   if( !fin || fin.eof() )
   {
      std::cout << "ReadStrOut could not open \"" << fname << "\"" << std::endl;
      return;
   }
   // read system box information
   fin >>  a[0][0] >>  a[0][1] >>  a[0][2];
   fin >>  a[1][0] >>  a[1][1] >>  a[1][2];
   fin >>  a[2][0] >>  a[2][1] >>  a[2][2];
   fin >> rL[0][0] >> rL[0][1] >> rL[0][2];
   fin >> rL[1][0] >> rL[1][1] >> rL[1][2];
   fin >> rL[2][0] >> rL[2][1] >> rL[2][2];
   // Test matches grid in all but extent?
   // assume cubic
   hamilton.grid.L[0] = static_cast<int>(rL[0][0]);
   hamilton.grid.L[1] = static_cast<int>(rL[1][1]);
   hamilton.grid.L[2] = static_cast<int>(rL[2][2]);
   int nsite = hamilton.grid.size();
   if(verbose) std::cout << "ReadStrOut nsite=" << nsite << std::endl;
   // Create a list of species
   std::map<std::string,int> ispecies;
   for(int i=0; i<hamilton.species.size(); i++) 
      ispecies.insert( std::make_pair(hamilton.species[i],i) );
   if(verbose) std::cout << "ReadStrOut MSpecies=" << ispecies.size() << std::endl;
   // Read the configuration proper
   sigma.resize(nsite);
   int isite = 0;
   while( isite<nsite && !fin.eof() )
   {
      float r0, r1, r2;
      std::string label;
      fin >> r0 >> r1 >> r2 >> label;
      int hn0 = static_cast<int>(2*r0);
      int hn1 = static_cast<int>(2*r1);
      int hn2 = static_cast<int>(2*r2);
      Grid::NrmVec hn(hn0,hn1,hn2);
      int index = hamilton.grid.index(hn);
      sigma[index] = ispecies[label]; 
      isite++;
  }
  // if(isite!=nsite) std::cout << "ReadStrOut only " << isite << " atoms listed out of " << nsite << std::endl; 
  if(verbose) std::cout << "ReadStrOut config read" << std::endl;
}
Example #5
0
static EString randomChallenge()
{
    EString hn( Configuration::hostname() );
    EString random( Entropy::asString( 12 ).e64() );

    if ( hn.isEmpty() || hn.find( '.' ) < 0 )
        hn = "aox.invalid";

    return "<" + random + "@" + hn + ">";
}
void WingedEdgeBuilder::transformNormals(const real *normals, unsigned nsize, const Matrix44r& transform, real *res)
{
	const real *n = normals;
	real *pn = res;

	for (unsigned int i = 0; i < nsize / 3; i++) {
		Vec3r hn(n[0], n[1], n[2]);
		hn = GeomUtils::rotateVector(transform, hn);
		for (unsigned int j = 0; j < 3; j++)
			pn[j] = hn[j];
		n += 3;
		pn += 3;
	}
}
Example #7
0
 auto moveto(const CFDAStar::NODE& node, T insert2, Y check_pass, U hn)  {
     CFDAStar::NODE tmp;
     // 计算节点位置
     tmp.x = node.x + xplus; tmp.y = node.y + yplus;
     // 可以通行 
     if (!check_pass(tmp.x, tmp.y)) return;
     // 记录父节点位置
     tmp.px = -xplus; tmp.py = -yplus;
     // 计算g(n)
     tmp.gn = node.gn + gplus;
     // f(n) = g(n) + h(n)
     tmp.fn = tmp.gn + hn(tmp.x, tmp.y);
     // 插入
     insert2(tmp);
 };
Example #8
0
TH1F* newDumHistForLegend(const Plot_t* hist) {
   // caller is responsible for deleting the hist
   TH1F* h = 0;
   if (hist!=0) {
      TString hn(Form("%s_leg%s",hist->GetName(),
                      (gPad!=0) ? gPad->GetName() : ""));
      h = new TH1F(hn.Data(), "", 1, 0, 1);
      h->SetFillColor(hist->GetLineColor());
      h->SetLineColor(kWhite);
      h->SetMarkerColor(kWhite);
      h->SetMarkerStyle(hist->GetMarkerStyle());
      h->SetMarkerSize(1);
      h->SetBit(TObject::kCanDelete);
   }
   return h;
}
Example #9
0
/* "104444001" ==
 * "102000301"
 *
 * "4441" basically means "hold for three rows then hold for another tap";
 * since taps don't really have a length, it's equivalent to "4440".
 * So, make sure the character after a 4 is always a 0. */
void NoteData::Convert4sToHoldNotes()
{
	int rows = GetLastRow();
	for( int col=0; col<m_iNumTracks; col++ )	// foreach column
	{
		for( int i=0; i<=rows; i++ )	// foreach TapNote element
		{
			if( GetTapNote(col, i).type == TapNote::hold )	// this is a HoldNote body
			{
				HoldNote hn( col, i, 0 );
				// search for end of HoldNote
				do {
					SetTapNote(col, i, TAP_EMPTY);
					i++;
				} while( GetTapNote(col, i).type == TapNote::hold );
				SetTapNote(col, i, TAP_EMPTY);

				hn.iEndRow = i;
				AddHoldNote( hn );
			}
		}
	}
}
void nmf(viennacl::matrix_base<NumericT> const & V,
         viennacl::matrix_base<NumericT>       & W,
         viennacl::matrix_base<NumericT>       & H,
         viennacl::linalg::nmf_config const & conf)
{
  viennacl::hsa::context & ctx = const_cast<viennacl::hsa::context &>(viennacl::traits::hsa_context(V));

  const std::string NMF_MUL_DIV_KERNEL = "el_wise_mul_div";

  viennacl::linalg::opencl::kernels::nmf<NumericT, viennacl::hsa::context>::init(ctx);

  vcl_size_t k = W.size2();
  conf.iters_ = 0;

  if (viennacl::linalg::norm_frobenius(W) <= 0)
    W = viennacl::scalar_matrix<NumericT>(W.size1(), W.size2(), NumericT(1), ctx);

  if (viennacl::linalg::norm_frobenius(H) <= 0)
    H = viennacl::scalar_matrix<NumericT>(H.size1(), H.size2(), NumericT(1), ctx);

  viennacl::matrix_base<NumericT> wn(V.size1(), k, W.row_major(), ctx);
  viennacl::matrix_base<NumericT> wd(V.size1(), k, W.row_major(), ctx);
  viennacl::matrix_base<NumericT> wtmp(V.size1(), V.size2(), W.row_major(), ctx);

  viennacl::matrix_base<NumericT> hn(k, V.size2(), H.row_major(), ctx);
  viennacl::matrix_base<NumericT> hd(k, V.size2(), H.row_major(), ctx);
  viennacl::matrix_base<NumericT> htmp(k, k, H.row_major(), ctx);

  viennacl::matrix_base<NumericT> appr(V.size1(), V.size2(), V.row_major(), ctx);

  NumericT last_diff = 0;
  NumericT diff_init = 0;
  bool stagnation_flag = false;

  for (vcl_size_t i = 0; i < conf.max_iterations(); i++)
  {
    conf.iters_ = i + 1;
    {
      hn = viennacl::linalg::prod(trans(W), V);
      htmp = viennacl::linalg::prod(trans(W), W);
      hd = viennacl::linalg::prod(htmp, H);

      viennacl::hsa::kernel & mul_div_kernel = ctx.get_kernel(viennacl::linalg::opencl::kernels::nmf<NumericT>::program_name(), NMF_MUL_DIV_KERNEL);
      viennacl::hsa::enqueue(mul_div_kernel(H, hn, hd, cl_uint(H.internal_size1() * H.internal_size2())));
    }
    {
      wn = viennacl::linalg::prod(V, trans(H));
      wtmp = viennacl::linalg::prod(W, H);
      wd = viennacl::linalg::prod(wtmp, trans(H));

      viennacl::hsa::kernel & mul_div_kernel = ctx.get_kernel(viennacl::linalg::opencl::kernels::nmf<NumericT>::program_name(), NMF_MUL_DIV_KERNEL);

      viennacl::hsa::enqueue(mul_div_kernel(W, wn, wd, cl_uint(W.internal_size1() * W.internal_size2())));
    }

    if (i % conf.check_after_steps() == 0)  //check for convergence
    {
      appr = viennacl::linalg::prod(W, H);

      appr -= V;
      NumericT diff_val = viennacl::linalg::norm_frobenius(appr);

      if (i == 0)
        diff_init = diff_val;

      if (conf.print_relative_error())
        std::cout << diff_val / diff_init << std::endl;

      // Approximation check
      if (diff_val / diff_init < conf.tolerance())
        break;

      // Stagnation check
      if (std::fabs(diff_val - last_diff) / (diff_val * NumericT(conf.check_after_steps())) < conf.stagnation_tolerance()) //avoid situations where convergence stagnates
      {
        if (stagnation_flag)    // iteration stagnates (two iterates with no notable progress)
          break;
        else
          // record stagnation in this iteration
          stagnation_flag = true;
      } else
        // good progress in this iteration, so unset stagnation flag
        stagnation_flag = false;

      // prepare for next iterate:
      last_diff = diff_val;
    }
  }
}
Example #11
0
    void nmf(viennacl::matrix<ScalarType> const & v,
             viennacl::matrix<ScalarType> & w,
             viennacl::matrix<ScalarType> & h,
             std::size_t k,
             ScalarType eps = 0.000001,
             std::size_t max_iter = 10000,
             std::size_t check_diff_every_step = 100)
    {
      viennacl::linalg::kernels::nmf<ScalarType, 1>::init();
      
      w.resize(v.size1(), k);
      h.resize(k, v.size2());

      std::vector<ScalarType> stl_w(w.internal_size1() * w.internal_size2());
      std::vector<ScalarType> stl_h(h.internal_size1() * h.internal_size2());

      for (std::size_t j = 0; j < stl_w.size(); j++)
          stl_w[j] = static_cast<ScalarType>(rand()) / RAND_MAX;

      for (std::size_t j = 0; j < stl_h.size(); j++)
          stl_h[j] = static_cast<ScalarType>(rand()) / RAND_MAX;

      viennacl::matrix<ScalarType> wn(v.size1(), k);
      viennacl::matrix<ScalarType> wd(v.size1(), k);
      viennacl::matrix<ScalarType> wtmp(v.size1(), v.size2());

      viennacl::matrix<ScalarType> hn(k, v.size2());
      viennacl::matrix<ScalarType> hd(k, v.size2());
      viennacl::matrix<ScalarType> htmp(k, k);

      viennacl::matrix<ScalarType> appr(v.size1(), v.size2());
      viennacl::vector<ScalarType> diff(v.size1() * v.size2());

      viennacl::fast_copy(&stl_w[0], &stl_w[0] + stl_w.size(), w);
      viennacl::fast_copy(&stl_h[0], &stl_h[0] + stl_h.size(), h);

      ScalarType last_diff = 0.0f;


      
      for (std::size_t i = 0; i < max_iter; i++)
      {
        {
          hn = viennacl::linalg::prod(trans(w), v);
          htmp = viennacl::linalg::prod(trans(w), w);
          hd = viennacl::linalg::prod(htmp, h);

          viennacl::ocl::kernel & mul_div_kernel = viennacl::ocl::get_kernel(viennacl::linalg::kernels::nmf<ScalarType, 1>::program_name(), 
                                                                             NMF_MUL_DIV_KERNEL);
          viennacl::ocl::enqueue(mul_div_kernel(h, hn, hd, cl_uint(stl_h.size())));
        }
        {
          wn = viennacl::linalg::prod(v, trans(h));
          wtmp = viennacl::linalg::prod(w, h);
          wd = viennacl::linalg::prod(wtmp, trans(h));

          viennacl::ocl::kernel & mul_div_kernel = viennacl::ocl::get_kernel(viennacl::linalg::kernels::nmf<ScalarType, 1>::program_name(), 
                                                                             NMF_MUL_DIV_KERNEL);
          
          viennacl::ocl::enqueue(mul_div_kernel(w, wn, wd, cl_uint(stl_w.size())));
        }

        if (i % check_diff_every_step == 0)
        {
          appr = viennacl::linalg::prod(w, h);

         viennacl::ocl::kernel & sub_kernel = viennacl::ocl::get_kernel(viennacl::linalg::kernels::nmf<ScalarType, 1>::program_name(), 
                                                                        NMF_SUB_KERNEL);
          //this is a cheat. i.e save difference of two matrix into vector to get norm_2
          viennacl::ocl::enqueue(sub_kernel(appr, v, diff, cl_uint(v.size1() * v.size2())));
          ScalarType diff_val = viennacl::linalg::norm_2(diff);

          if((diff_val < eps) || (fabs(diff_val - last_diff) < eps))
          {
              //std::cout << "Breaked at diff - " << diff_val << "\n";
              break;
          }

          last_diff = diff_val;

          //printf("Iteration #%lu - %.5f \n", i, diff_val);
        }
      }
      
      
    }
Example #12
0
void
h (void)
{
  auto int hn (int); /* { dg-error "nested function 'hn' declared but never defined" } */
  hn (1);
}
Example #13
0
void MainWindow::processDatagrams()
{

    const hdr_t  *request;

    do {
        qint64 sz = _udpSocket.pendingDatagramSize();
        Q_ASSERT(sz >= (qint64) sizeof(hdr_t));
        QByteArray      datagram(sz,0);
        QByteArray      rdatagram;
        QHostAddress    host;
        quint16         port;
        bool            res;

        Q_ASSERT(sz == _udpSocket.readDatagram(datagram.data(), datagram.size(), &host, &port));

        request = (hdr_t*) datagram.constData();
        Q_ASSERT(datagram.size() == request->pdusz);

        // _log << "Req:" << *request << endl;

        // skip respons messages
        if(request->cmdid >= RDSK_Response)
        {
           // _log << ", skip" << endl;
            continue;
        }

        QHostInfo hi = QHostInfo::fromName(host.toString());
        QString   hn(hi.hostName());
        QVariant var;
        CPMClient* client;
        QList<QTreeWidgetItem*> clientitem = ui->treeWidget->findItems(hn,Qt::MatchFixedString);


        if(clientitem.isEmpty())
        {
            client = new CPMClient(hn);
            connect(client,SIGNAL(adddrive(CPMClient*,CPMDrive*)),this,SLOT(adddrive(CPMClient*,CPMDrive*)));
            var.setValue(client);
            QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(hn));
            item->setData(0,Qt::UserRole, var);
            ui->treeWidget->addTopLevelItem(item);
        }
        else
        {
            var = clientitem.first()->data(0,Qt::UserRole);
        }

        client = qobject_cast<CPMClient*>(qvariant_cast<QObject*>(var));
        Q_ASSERT(client);

        res = client->req(*request, rdatagram);
        hdr_t  *response = (hdr_t*)rdatagram.data();


        if(!res)
            _log << "ERR:" << *response << endl;

        sz = _udpSocket.writeDatagram((const char*)response, (qint64)response->pdusz, host, port);
        if(_clientwidget)
            _clientwidget->update();
        Q_ASSERT( sz == response->pdusz);

    }while(_udpSocket.hasPendingDatagrams());