message: First draft of ParSesquilinearForm::FormLinearSystem method
diff: @@ -527,8 +527,55 @@ ParSesquilinearForm::FormLinearSystem(const Array<int> &ess_tdof_list,
  Vector &x, Vector &b,
  OperatorHandle &A,
  Vector &X, Vector &B,
  - int copy_interior)
  -{}
  + int ci)
  +{
  + ParFiniteElementSpace * pfes = pblfr_->ParFESpace();
  +
  + int vsize = pfes->GetVSize();
  + int tvsize = pfes->GetTrueVSize();
  +
  + Vector b_0(vsize); b_0 = 0.0;
  + Vector B_0(tvsize); B_0 = 0.0;
  +
  + Vector x_r(x.GetData(), vsize);
  + Vector x_i(&(x.GetData())[vsize], vsize);
  +
  + Vector b_r(b.GetData(), vsize);
  + Vector b_i(&(b.GetData())[vsize], vsize);
  +
  + X.SetSize(2 * tvsize);
  + Vector X_r(X.GetData(), tvsize);
  + Vector X_i(&(X.GetData())[tvsize], tvsize);
  +
  + B.SetSize(2 * tvsize);
  + Vector B_r(B.GetData(), tvsize);
  + Vector B_i(&(B.GetData())[tvsize], tvsize);
  +
  + OperatorHandle A_r, A_i;
  +
  + pblfr_->FormLinearSystem(ess_tdof_list, x_r, b_r, A_r, X_r, B_r, ci);
  + pblfi_->FormLinearSystem(ess_tdof_list, x_i, b_0, A_i, X_r, B_0, ci);
  + B_r -= B_0;
  +
  + pblfr_->FormLinearSystem(ess_tdof_list, x_i, b_i, A_r, X_i, B_i, ci);
  + pblfi_->FormLinearSystem(ess_tdof_list, x_r, b_0, A_i, X_i, B_0, ci);
  + B_i += B_0;
  +
  + // A = A_r + i A_i
  + A.Clear();
  + if ( A_r.Type() == Operator::Hypre_ParCSR &&
  + A_i.Type() == Operator::Hypre_ParCSR )
  + {
  + ComplexHypreParMatrix * A_hyp =
  + new ComplexHypreParMatrix(A_r.As<HypreParMatrix>(),
  + A_i.As<HypreParMatrix>(),
  + A_r.OwnsOperator(),
  + A_i.OwnsOperator(),
  + conv_);
  + A.ConvertFrom(A_hyp);
  + A.SetOperatorOwner();
  + }
  +}
  void
  ParSesquilinearForm::RecoverFEMSolution(const Vector &X, const Vector &b,
  