message: Pa in ParAdvectorCGOper::Mult
diff: @@ -260,59 +260,36 @@ void ParAdvectorCGOper::Mult(const Vector &ind, Vector &di_dt) const
  K.Mult(ind, rhs);
  M.BilinearForm::operator=(0.0);
  M.Assemble();
  - dbg("M: %dx%d", M.Width(), M.Height());
  HypreParVector *RHS = rhs.ParallelAssemble();
  HypreParVector X(K.ParFESpace());
  X = 0.0;
  - HypreParMatrix *Mh = M.ParallelAssemble();
  - CGSolver lin_solver(M.ParFESpace()->GetParMesh()->GetComm());
  + OperatorHandle Mop;
  Solver *prec = nullptr;
  Array<int> ess_tdof_list;
  if (al == AssemblyLevel::PARTIAL)
  {
  - //prec = new OperatorJacobiSmoother(M, ess_tdof_list);
  - lin_solver.iterative_mode = true;
  - //lin_solver.SetPreconditioner(*prec);
  - lin_solver.SetOperator(M);
  - lin_solver.SetRelTol(1e-8);
  - lin_solver.SetAbsTol(0.0);
  - lin_solver.SetMaxIter(100);
  - lin_solver.SetPrintLevel(0);
  - //HypreParVector *U = rhs;//rhs.GetTrueDofs();
  - ParGridFunction U(K.ParFESpace());
  - U = rhs;
  - //U.SetTrueVector();
  - //U.SetFromTrueVector();
  - ParGridFunction X_gf(K.ParFESpace());
  - X_gf = 0.0;
  - dbg("U->Size():%d, X_gf.Size():%d", U.Size(), X_gf.Size());
  - /*dbg("U->TVSize():%d, X_gf.TVSize():%d",
  - U.GetTrueVector().Size(), X_gf.GetTrueVector().Size());*/
  - //MFEM_VERIFY(U->Size() == X_gf.Size(), "");
  - //MFEM_VERIFY(U.GetTrueVector().Size() == X_gf.GetTrueVector().Size(), "");
  - //lin_solver.Mult(U.GetTrueVector(), X_gf.GetTrueVector());
  - lin_solver.Mult(U, X_gf);
  - X_gf.SetTrueVector();
  - X_gf.SetFromTrueVector();
  - K.ParFESpace()->GetProlongationMatrix()->Mult(X_gf.GetTrueVector(), di_dt);
  + M.FormSystemMatrix(ess_tdof_list, Mop);
  + prec = new OperatorJacobiSmoother(M, ess_tdof_list);
  }
  else
  {
  + Mop.Reset(M.ParallelAssemble());
  prec = new HypreSmoother;
  - dynamic_cast<HypreSmoother*>(prec)->SetType(HypreSmoother::Jacobi, 1);
  + static_cast<HypreSmoother*>(prec)->SetType(HypreSmoother::Jacobi, 1);
  + }
  +
  + CGSolver lin_solver(M.ParFESpace()->GetParMesh()->GetComm());
  lin_solver.SetPreconditioner(*prec);
  - lin_solver.SetOperator(*Mh);
  + lin_solver.SetOperator(*Mop);
  lin_solver.SetRelTol(1e-8);
  lin_solver.SetAbsTol(0.0);
  lin_solver.SetMaxIter(100);
  lin_solver.SetPrintLevel(0);
  lin_solver.Mult(*RHS, X);
  K.ParFESpace()->GetProlongationMatrix()->Mult(X, di_dt);
  - }
  - delete Mh;
  delete RHS;
  delete prec;
  }
  