Beispiel #1
0
string FlowAnalysis::vtkExportVectorOps(const string& out, const vector<size_t>& fracA, const vector<size_t>& fracB){
	if(timeSpan==0.) throw std::runtime_error("FlowAnalysis.timeSpan==0, no data was ever collected.");
#if 0
	if(fracA.empty()!=fracB.empty()) throw std::runtime_error("Either both fracA and fracB must be given, or both must be empty (and will be filled automatically).");
	if(fracA.empty() && fracB.empty()){
		fracA.resize(nFractions/2);
		fracB.resize(nFractions-fracA.size());
		std::iota(fracA.begin(),fracA.end(),0);
		std::iota(fracB.begin(),fracB.end(),fracA.size());
	}
#endif
	auto grid=vtkMakeGrid();
	auto cross=vtkMakeArray(grid,"cross",3,/*fillZero*/false);
	auto crossNorm=vtkMakeArray(grid,"|cross|",1,/*fillZero*/false);
	auto diff=vtkMakeArray(grid,"diff",3,/*fillZero*/false);
	auto diffNorm=vtkMakeArray(grid,"|diff|",1,/*fillZero*/false);
	auto diffA=vtkMakeArray(grid,"diffA",3,/*fillZero*/false);
	auto diffANorm=vtkMakeArray(grid,"|diffA|",1,/*fillZero*/false);
	auto diffB=vtkMakeArray(grid,"diffB",3,/*fillZero*/false);
	auto diffBNorm=vtkMakeArray(grid,"|diffB|",1,/*fillZero*/false);
	for(size_t i=0; i<fracA.size(); i++) if((int)fracA[i]>=nFractions) throw std::runtime_error("FlowAnalysis.vtkExportVectorOps: fracA["+to_string(i)+"]="+to_string(fracA[i])+" out of range 0.."+to_string(nFractions-1));
	for(size_t i=0; i<fracB.size(); i++) if((int)fracB[i]>=nFractions) throw std::runtime_error("FlowAnalysis.vtkExportVectorOps: fracB["+to_string(i)+"]="+to_string(fracB[i])+" out of range 0.."+to_string(nFractions-1));

	Real weightB=avgFlowNorm(fracA)/avgFlowNorm(fracB);
	if(isnan(weightB)){
		LOG_WARN("Weighting coefficient is NaN (no flow in fraction B), using 1 instead; the result will be still mathematically correct but useless.")
		weightB=1.;
	}
	Vector3r _cross, _diff, _diffA, _diffB;
	// other conditions: resize sRes
	for(int i=0; i<boxCells[0]; i++){ for(int j=0; j<boxCells[1]; j++){ for(int k=0; k<boxCells[2]; k++){
		int ijk[]={i,j,k};
		Vector3r A(Vector3r::Zero()), B(Vector3r::Zero());
		for(size_t frac: fracA) A+=Vector3r(data[frac][i][j][k][PT_FLOW_X],data[frac][i][j][k][PT_FLOW_Y],data[frac][i][j][k][PT_FLOW_Z]);
		for(size_t frac: fracB) B+=Vector3r(data[frac][i][j][k][PT_FLOW_X],data[frac][i][j][k][PT_FLOW_Y],data[frac][i][j][k][PT_FLOW_Z]);
		// compute the result
		_cross=A.cross(B);
		_diff=A-B*weightB;
		if(_diff.dot(A+B)>=0.){ _diffA=_diff; _diffB=Vector3r::Zero(); }
		else{ _diffA=Vector3r::Zero(); _diffB=-_diff; }

		vtkIdType dataId=grid->ComputePointId(ijk);

		cross->SetTuple(dataId,_cross.data());
		diff->SetTuple(dataId,_diff.data());
		diffA->SetTuple(dataId,_diffA.data());
		diffB->SetTuple(dataId,_diffB.data());

		crossNorm->SetValue(dataId,_cross.norm());
		diffNorm->SetValue(dataId,_diff.norm());
		diffANorm->SetValue(dataId,_diffA.norm());
		diffBNorm->SetValue(dataId,_diffB.norm());
	}}}
	return vtkWriteGrid(out+".ops",grid);
}
Beispiel #2
0
size_t Column::LoadTextFile(std::string filepath) {
	std::ifstream infile;
	infile.open(filepath, std::ifstream::in);
	if (!infile.good()) {
		std::cerr << "Can't open file: " << filepath << std::endl;
		return -1;
	}
	WordUnit val;
	size_t id = 0;
	for (id = 0; (id < GetNumTuples()) && (infile >> val); id++) {
		SetTuple(id, val);
	}
	infile.close();
	return id;
}
Beispiel #3
0
TEST_F(LoggingTests, BasicUpdateTest) {
  auto recovery_table = ExecutorTestsUtil::CreateTable(1024);
  auto &manager = catalog::Manager::GetInstance();
  storage::Database db(DEFAULT_DB_ID);
  manager.AddDatabase(&db);
  db.AddTable(recovery_table);

  auto tuples = BuildLoggingTuples(recovery_table, 1, false, false);
  EXPECT_EQ(recovery_table->GetNumberOfTuples(), 0);
  EXPECT_EQ(recovery_table->GetTileGroupCount(), 1);
  EXPECT_EQ(tuples.size(), 1);
  logging::WriteAheadFrontendLogger fel(true);
  //  auto bel = logging::WriteAheadBackendLogger::GetInstance();
  cid_t test_commit_id = 10;

  Value val0 = tuples[0]->GetValue(0);
  Value val1 = tuples[0]->GetValue(1);
  Value val2 = tuples[0]->GetValue(2);
  Value val3 = tuples[0]->GetValue(3);

  auto curr_rec = new logging::TupleRecord(
      LOGRECORD_TYPE_TUPLE_UPDATE, test_commit_id, recovery_table->GetOid(),
      ItemPointer(100, 5), ItemPointer(100, 4), tuples[0], DEFAULT_DB_ID);
  curr_rec->SetTuple(tuples[0]);
  fel.UpdateTuple(curr_rec);
  delete curr_rec;

  auto tg_header = recovery_table->GetTileGroupById(100)->GetHeader();
  EXPECT_TRUE(tg_header->GetBeginCommitId(5) <= test_commit_id);
  EXPECT_EQ(tg_header->GetEndCommitId(5), MAX_CID);
  EXPECT_EQ(tg_header->GetEndCommitId(4), test_commit_id);

  EXPECT_TRUE(
      val0.Compare(recovery_table->GetTileGroupById(100)->GetValue(5, 0)) == 0);
  EXPECT_TRUE(
      val1.Compare(recovery_table->GetTileGroupById(100)->GetValue(5, 1)) == 0);
  EXPECT_TRUE(
      val2.Compare(recovery_table->GetTileGroupById(100)->GetValue(5, 2)) == 0);
  EXPECT_TRUE(
      val3.Compare(recovery_table->GetTileGroupById(100)->GetValue(5, 3)) == 0);

  EXPECT_EQ(recovery_table->GetNumberOfTuples(), 0);
  EXPECT_EQ(recovery_table->GetTileGroupCount(), 2);
}
Beispiel #4
0
TEST_F(LoggingTests, OutOfOrderCommitTest) {
  auto recovery_table = ExecutorTestsUtil::CreateTable(1024);
  auto &manager = catalog::Manager::GetInstance();
  storage::Database db(DEFAULT_DB_ID);
  manager.AddDatabase(&db);
  db.AddTable(recovery_table);

  auto tuples = BuildLoggingTuples(recovery_table, 1, false, false);
  EXPECT_EQ(recovery_table->GetNumberOfTuples(), 0);
  EXPECT_EQ(recovery_table->GetTileGroupCount(), 1);
  EXPECT_EQ(tuples.size(), 1);
  logging::WriteAheadFrontendLogger fel(true);
  //  auto bel = logging::WriteAheadBackendLogger::GetInstance();
  cid_t test_commit_id = 10;

  auto curr_rec = new logging::TupleRecord(
      LOGRECORD_TYPE_TUPLE_UPDATE, test_commit_id + 1, recovery_table->GetOid(),
      INVALID_ITEMPOINTER, ItemPointer(100, 5), nullptr, DEFAULT_DB_ID);
  fel.DeleteTuple(curr_rec);
  delete curr_rec;

  EXPECT_EQ(recovery_table->GetTileGroupCount(), 2);

  curr_rec = new logging::TupleRecord(
      LOGRECORD_TYPE_TUPLE_INSERT, test_commit_id, recovery_table->GetOid(),
      ItemPointer(100, 5), INVALID_ITEMPOINTER, tuples[0], DEFAULT_DB_ID);

  curr_rec->SetTuple(tuples[0]);
  fel.InsertTuple(curr_rec);

  delete curr_rec;

  auto tg_header = recovery_table->GetTileGroupById(100)->GetHeader();
  EXPECT_EQ(tg_header->GetEndCommitId(5), test_commit_id + 1);

  EXPECT_EQ(recovery_table->GetNumberOfTuples(), 0);
  EXPECT_EQ(recovery_table->GetTileGroupCount(), 2);
}