UavController::UavController(){
		uav1_cmd_topic_="/uav1/cmd_vel";
		uav2_cmd_topic_="/uav2/cmd_vel";
		uav3_cmd_topic_="/uav3/cmd_vel";

		nh_st_="UavController";

		subAll();

	}
예제 #2
0
Int_t main(Int_t argc, Char_t *argv[])
{
   ROOT::Mpi::TEnvironment env(argc, argv);
   ROOT::Mpi::TIntraCommunicator world;
//    MpiInitTest(world, 2, ROOT::Mpi::GreaterIqual);
   TMatrixT<Double_t> mResult;
   TMatrixT<Double_t> m1(rowm1, colm1);
   TMatrixT<Double_t> m2(rowm2, colm2);

   TMatrixT<Double_t> m1square(side, side);
   TMatrixT<Double_t> m2square(side, side);

   for (Int_t i = 0; i < rowm1; i++)
      for (Int_t j = 0; j < colm1; j++)
         m1[i][j] = i + j;

   for (Int_t i = 0; i < rowm2; i++)
      for (Int_t j = 0; j < colm2; j++)
         m2[i][j] = j;

   for (Int_t i = 0; i < side; i++)
      for (Int_t j = 0; j < side; j++) {
         m1square[i][j] = j;
         m2square[i][j] = i;
      }

///////////////////////////////////////////////
//Testing methdos with results in single Rank//
///////////////////////////////////////////////
   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mul(m1);
   mul.Mult(m2, root);

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> add(m1square);
   add.Addition(m2square, root);

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> sub(m1square);
   sub.Subtraction(m2square, root);

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> trans(m2);
   trans.Transpose(root);

   if (world.Rank() == root) {
      mul.GetResult(mResult);
      MpiCompareTMatrixTest(mResult, m1 * m2, world.Rank(), "Matrix Multiplication Single");
      add.GetResult(mResult);
      MpiCompareTMatrixTest(mResult, m1square + m2square, world.Rank(), "Matrix Addition Single");
      sub.GetResult(mResult);
      MpiCompareTMatrixTest(mResult, m1square - m2square, world.Rank(), "Matrix Subtraction Single");
      trans.GetResult(mResult);
      MpiCompareTMatrixTest(mResult, TMatrixT<Double_t>(m2.GetNcols(), m2.GetNrows()).Transpose(m2), world.Rank(), "Matrix Transpose Single");
   }

///////////////////////////////////////////////
//Testing methdos with results in all ranks  //
///////////////////////////////////////////////

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulAll(m1);//return the results in all ranks
   mulAll.Mult(m2);
   mulAll.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, m1 * m2, world.Rank(), "Matrix Multiplication All");

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> addAll(m1square);
   addAll.Addition(m2square);

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> subAll(m1square);
   subAll.Subtraction(m2square);

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> transAll(m2);
   transAll.Transpose();
   addAll.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, m1square + m2square, world.Rank(), "Matrix Addition All");
   subAll.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, m1square - m2square, world.Rank(), "Matrix Subtraction All");
   transAll.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, TMatrixT<Double_t>(m2.GetNcols(), m2.GetNrows()).Transpose(m2), world.Rank(), "Matrix Transpose All");

//////////////////////////////////////////////////
//Testing methdos with multiple matrices types  //
//////////////////////////////////////////////////

   THilbertMatrixT<Double_t> him(side, side);
   TMatrixTSparse<Double_t>  sm1(rowm1, colm1);
   TMatrixTSparse<Double_t>  sm2(rowm2, colm2);
   TMatrixTFlat<Double_t>    fm1(m1);
   TMatrixTFlat<Double_t>    fm2(m2);
   TMatrixTSparse<Double_t>  smResult;

   for (Int_t i = 0; i < rowm1; i++)
      for (Int_t j = 0; j < colm1; j++) {
         sm1[i][j] = i * j;
      }
   for (Int_t i = 0; i < rowm2; i++)
      for (Int_t j = 0; j < colm2; j++) {
         sm2[i][j] = i * j;
      }



   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulHim(m1square);//return the results in all ranks
   mulHim.Mult(him);
   mulHim.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, m1square * TMatrixT<Double_t>(him), world.Rank(), "Matrix Multiplication HilbertMatrix");

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulHim2(him);//return the results in all ranks
   mulHim2.Mult(m1square);
   mulHim2.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, TMatrixT<Double_t>(him)*m1square, world.Rank(), "Matrix Multiplication HilbertMatrix In Constructor");

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulSm(m1);//return the results in all ranks
   mulSm.Mult(sm2);
   mulSm.GetResult(smResult);
   MpiCompareTMatrixTest(smResult, m1 * sm2, world.Rank(), "Matrix Multiplication SparseMatrix");

   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulSm2(sm1);//return the results in all ranks
   mulSm2.Mult(m2);
   mulSm2.GetResult(smResult);
   MpiCompareTMatrixTest(smResult, sm1 * m2, world.Rank(), "Matrix Multiplication SparseMatrix In Constructor");

   //
   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulFm(m1);//return the results in all ranks
   mulFm.Mult(fm2);
   mulFm.GetResult(mResult);
   MpiCompareTMatrixTest(mResult, m1 * TMatrixT<Double_t>(fm2.GetMatrix()->GetNrows(), fm2.GetMatrix()->GetNcols(), fm2.GetMatrix()->GetMatrixArray()), world.Rank(), "Matrix Multiplication FlatMatrix");


   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulFm2(fm1);//return the results in all ranks
   mulFm2.Mult(m2);
   mulFm2.GetResult(mResult);
   //NOTE fm matrix have data from m2, is the same tell m1*m2, just change the representation in memory
   MpiCompareTMatrixTest(mResult, m1 * m2, world.Rank(), "Matrix Multiplication FlatMatrix In Constructor");


   TVectorT<Double_t>        vec(rowv);
   for (Int_t i = 0; i < rowv; i++) vec[i] = i;
   ROOT::Mpi::Math::TMatrixTWrapper<Double_t> mulVec(m1);//return the results in all ranks
   mulVec.Mult(vec);
   mulVec.GetResult(mResult);
   TMatrixT<Double_t> mr((m1 * vec).GetNrows(), 1, (m1 * vec).GetMatrixArray());
//    mResult.Print();
//    mr.Print();
   MpiCompareTMatrixTest(mResult, mr, world.Rank(), "Matrix Multiplication with Vector");

   return 0;
}
예제 #3
0
Int_t main(Int_t argc, Char_t *argv[])
{
   ROOT::Mpi::TEnvironment env(argc, argv);
   ROOT::Mpi::TIntraCommunicator world;
   TVectorT<Double_t> mResult;
   Double_t fScalarResult;
   TVectorT<Double_t> v1(elements);
   TVectorT<Double_t> v2(elements);

   for (Int_t i = 0; i < elements; i++) {
      v1[i] = i + (i + world.Size());
      v2[i] = i * (i + world.Size());

   }

///////////////////////////////////////////////
//Testing methdos with results in single Rank//
///////////////////////////////////////////////
   ROOT::Mpi::Math::TVectorTWrapper<Double_t> add(v1);
   add.Addition(v2, root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> sub(v1);
   sub.Subtraction(v2, root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> dot(v1);
   dot.Dot(v2, root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> norm2Sqr(v1);
   norm2Sqr.Norm2Sqr(root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> norm1(v1);
   norm1.Norm1(root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> min(v1);
   min.Min(root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> max(v1);
   max.Max(root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> normalize(v1);
   normalize.Normalize(root);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> sum(v1);
   sum.Sum(root);

   if (world.Rank() == root) {
      add.GetResult(mResult);
      MpiCompareTVectorTest(mResult, v1 + v2, world.Rank(), "Vector Addition Single");

      sub.GetResult(mResult);
      MpiCompareTVectorTest(mResult, v1 - v2, world.Rank(), "Vector Subtraction Single");

      dot.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, Dot(v1, v2) , world.Rank(), "Vector Dot Product Single");

      norm2Sqr.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, v1.Norm2Sqr() , world.Rank(), "Vector Norm2Sqr Single");

      norm1.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, v1.Norm1() , world.Rank(), "Vector Norm1 Single");

      min.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, v1.Min() , world.Rank(), "Vector Min Single");

      max.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, v1.Max() , world.Rank(), "Vector Max Single");

      normalize.GetResult(mResult);
      MpiCompareTest(mResult.Norm2Sqr(), ((1 / TMath::Sqrt(v1.Norm2Sqr()))*v1).Norm2Sqr() , world.Rank(), "Vector Normalize Single");

      sum.GetResult(fScalarResult);
      MpiCompareTest(fScalarResult, v1.Sum(), world.Rank(), "Vector Sum Single");
   }

///////////////////////////////////////////////
//Testing methdos with results in all ranks  //
///////////////////////////////////////////////

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> addAll(v1);
   add.Addition(v2);

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> subAll(v1);
   sub.Subtraction(v2);

   add.GetResult(mResult);
   MpiCompareTVectorTest(mResult, v1 + v2, world.Rank(), "Vector Addition All");

   sub.GetResult(mResult);
   MpiCompareTVectorTest(mResult, v1 - v2, world.Rank(), "Vector Subtraction All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> dotAll(v1);
   dotAll.Dot(v2);
   dotAll.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, Dot(v1, v2) , world.Rank(), "Vector Dot Product All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> norm2SqrAll(v2);
   norm2SqrAll.Norm2Sqr();
   norm2SqrAll.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, v2.Norm2Sqr() , world.Rank(), "Vector Norm2Sqr All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> norm1All(v2);
   norm1All.Norm1();
   norm1All.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, v2.Norm1() , world.Rank(), "Vector Norm1 All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> minAll(v2);
   minAll.Min();
   minAll.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, v2.Min() , world.Rank(), "Vector Min All");


   ROOT::Mpi::Math::TVectorTWrapper<Double_t> maxAll(v2);
   maxAll.Max();
   maxAll.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, v2.Max() , world.Rank(), "Vector Max All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> normalizeAll(v2);
   normalizeAll.Normalize();
   normalizeAll.GetResult(mResult);
   //show if the vector is normalize, then Norm2Sqr of result is near to 1
   MpiCompareTest(mResult.Norm2Sqr(), ((1 / TMath::Sqrt(v2.Norm2Sqr()))*v2).Norm2Sqr() , world.Rank(), "Vector Normalize All");

   ROOT::Mpi::Math::TVectorTWrapper<Double_t> sumAll(v2);
   sumAll.Sum();
   sumAll.GetResult(fScalarResult);
   MpiCompareTest(fScalarResult, v2.Sum() , world.Rank(), "Vector Sum All");


   return 0;
}