Ejemplo n.º 1
0
int checkIrregFabCopy(const Box& a_domain)
{
  int eekflag = 0;
  int nvar = 1;
  Interval interv(0,0);
  int nghost= 0;
  IntVect ivgh= IntVect::Zero;
  Real tolerance = PolyGeom::getTolerance();
  const EBIndexSpace* const ebisPtr = Chombo_EBIS::instance();
  int numlevels = ebisPtr->numLevels();

  Box levelDomain = a_domain;
  for (int ilev = 0; ilev < numlevels-1; ilev++)
    {
      DisjointBoxLayout dblOne, dblTwo;
      int maxsizeOne = 4;
      int maxsizeTwo = 2;
      makeLayout(dblOne, levelDomain, maxsizeOne);
      makeLayout(dblTwo, levelDomain, maxsizeTwo);

      EBISLayout ebislOne, ebislTwo;
      makeEBISL(ebislOne, dblOne, levelDomain, nghost);
      makeEBISL(ebislTwo, dblTwo, levelDomain, nghost);

      LayoutData<IntVectSet> ldIVSOne(dblOne);
      LayoutData<IntVectSet> ldIVSTwo(dblTwo);
      for (DataIterator dit = dblOne.dataIterator(); dit.ok(); ++dit)
        ldIVSOne[dit()] = IntVectSet(dblOne.get(dit()));
      for (DataIterator dit = dblTwo.dataIterator(); dit.ok(); ++dit)
        ldIVSTwo[dit()] = IntVectSet(dblTwo.get(dit()));

      BaseIVFactory<Real> factOne(ebislOne, ldIVSOne);
      BaseIVFactory<Real> factTwo(ebislTwo, ldIVSTwo);

      LevelData<BaseIVFAB<Real> > dataOne(dblOne, nvar, ivgh, factOne);
      LevelData<BaseIVFAB<Real> > dataTwo(dblTwo, nvar, ivgh, factTwo);

      for (DataIterator dit = dblOne.dataIterator(); dit.ok(); ++dit)
        dataOne[dit()].setVal(1);
      for (DataIterator dit = dblTwo.dataIterator(); dit.ok(); ++dit)
        dataTwo[dit()].setVal(2);

      //copy dataone into datatwo.  then all datatwo should hold are ones
      dataOne.copyTo(interv, dataTwo, interv);
      Real rightVal = 1.0;
      for (DataIterator dit = dblTwo.dataIterator(); dit.ok(); ++dit)
        {
          const EBISBox& ebisBox = ebislTwo[dit()];
          const IntVectSet&  ivs = ldIVSTwo[dit()];
          const BaseIVFAB<Real>& fab = dataTwo[dit()];
          for (VoFIterator vofit(ivs, ebisBox.getEBGraph()); vofit.ok(); ++vofit)
            {
              Real thisVal = fab(vofit(), 0);
              if (Abs(thisVal - rightVal) > tolerance)
                {
                  eekflag = 3;
                  return eekflag;
                }
            }
        }
      levelDomain.coarsen(2);
    }
  return eekflag;
}
Ejemplo n.º 2
0
vector<vector<vector<float> > > Storage::LoadDataFloatBinSparse(char* filename, int nrItems, bool keepOpen)
{
	// slow version
	unsigned long long position = -1;
	ifstream* in = new ifstream;

	int extraPosition = 0;

	in->open(filename,ifstream::binary);

	if (!in)
	{
		cout<<"Error: Could not open data location file (LoadDataFloatBin): "<<filename<<".\n";
		//Logger::print(ss.str().c_str());
		cout.flush();
		return vector<vector<vector<float> > >(0);// out;
    }

	/*int minRow = rowsToLoad[0];
	int maxRow = rowsToLoad[0];

	for(int i=0;i<rowsToLoad.size();i++)
	{
		if(rowsToLoad[i]<minRow)
			minRow = rowsToLoad[i];
		if(rowsToLoad[i]>maxRow)
			maxRow = rowsToLoad[i];
	}*/

	// 1. first number specify nr of items/patterns in file
	float nrPatterns;
	//in->seekg( 4 );
	in->read( (char *) &nrPatterns, sizeof( float) ); // ? needs to be flipped in case of different file system architecture ?

	// 2. second number specify nr hypercolumns N
	float nrHypercolumns;
	in->read( (char *) &nrHypercolumns, sizeof( float ) ); // = 1 for semantic

	vector<int> nrMinicolumns(nrHypercolumns);
	// 3. N next numbers specify minicolumns in each hypercolumn

	int totalMinicolumns = 0;
	float nrMc = 1;
	for(int i=0;i<nrHypercolumns;i++)
	{
		in->read( (char *) &nrMc, sizeof(float));
		/*if(m_specialLimitNrValues>0)
			nrMinicolumns[i] = (int)nrMc*m_specialLimitNrValues;
		else*/
		nrMinicolumns[i] = (int)nrMc;

		totalMinicolumns += (int)nrMc;
	}

	if(nrItems>-1 && nrItems<=nrPatterns)
		nrPatterns = nrItems;

	vector<vector<vector<float> > >out(nrPatterns);//,vector<float>(0));

	//out = ublas::compressed_matrix<float>(nrPatterns,totalMinicolumns);//totalMinicolumns,nrPatterns);//rowsToLoad.size(),nrHypercolumns);

	bool finished = false;


	int index = 0;
	while(finished == false)
	{
		vector<float> vals(3000);

		if(!in->read((char*) &vals[0], sizeof(float)*3000))
		{
			finished = true;
		}
		else
		{
			vector<float> val(3);
			vector<float> dataTwo(2);

			for(int i=0;i<vals.size();i+=3)
			{
				val[0] = vals[i]-1;
				dataTwo[0] = vals[i+1]-1;
				dataTwo[1] = vals[i+2];

				if(val[0]+1>nrPatterns)
				{
					finished = true;
					i = vals.size();
				}
				else
				{
					/*if(vals[1]>maxRow+1)  // assuming 1-based indexes, starting at (1,1), otherwise change = to minRow place for zero-based
					{//	finished = true;
					}
					else
					{
					if(vals[1]>=minRow) // assuming linear (non-excluding) distribution of indexes
					{
					out.push_back(vals[0]-minRow-1,vals[1]-1,vals[2]);//out(vals[1]-1,vals[0]-minRow-1) = vals[2];
					index++;

					if(index%10000 == 0)
					{
					cout<<index<<" ";
					}
					}
					}
					*/

					out[val[0]].push_back(dataTwo);//[vals[1]-1] = vals[2];
				}
			}
		}
	}

//	ublas::compressed_matrix<float> a = ublas::compressed_matrix<float>(nrPatterns,totalMinicolumns);
//	a = ublas::trans(out);
	//out = ublas::trans(out);

	return out;
}