@@ -51,12 +51,13 @@ void HypreAmsSolver::ConstructAuxiliaryMatrices(mfem::ParFiniteElementSpace &nd_
51
51
// HypreAMS:Init. Start with the discrete gradient matrix.
52
52
{
53
53
// XX TODO: Partial assembly option?
54
- auto grad = std::make_unique<mfem::DiscreteLinearOperator>(&h1_fespace, &nd_fespace);
55
- grad->AddDomainInterpolator (new mfem::GradientInterpolator);
56
- grad->SetAssemblyLevel (mfem::AssemblyLevel::LEGACY);
57
- grad->Assemble ();
58
- grad->Finalize ();
59
- ParOperator RAP_G (std::move (grad), h1_fespace, nd_fespace, true );
54
+ mfem::DiscreteLinearOperator grad (&h1_fespace, &nd_fespace);
55
+ grad.AddDomainInterpolator (new mfem::GradientInterpolator);
56
+ grad.SetAssemblyLevel (mfem::AssemblyLevel::LEGACY);
57
+ grad.Assemble ();
58
+ grad.Finalize ();
59
+ ParOperator RAP_G (std::unique_ptr<mfem::SparseMatrix>(grad.LoseMat ()), h1_fespace,
60
+ nd_fespace, true );
60
61
G = RAP_G.StealParallelAssemble ();
61
62
}
62
63
@@ -112,18 +113,17 @@ void HypreAmsSolver::ConstructAuxiliaryMatrices(mfem::ParFiniteElementSpace &nd_
112
113
}
113
114
else
114
115
{
115
- {
116
- // XX TODO: Partial assembly option?
117
- mfem::ParFiniteElementSpace h1d_fespace (&mesh, h1_fespace.FEColl (), space_dim,
118
- mfem::Ordering::byVDIM);
119
- auto pi = std::make_unique<mfem::DiscreteLinearOperator>(&h1d_fespace, &nd_fespace);
120
- pi ->AddDomainInterpolator (new mfem::IdentityInterpolator);
121
- pi ->SetAssemblyLevel (mfem::AssemblyLevel::LEGACY);
122
- pi ->Assemble ();
123
- pi ->Finalize ();
124
- ParOperator RAP_Pi (std::move (pi ), h1d_fespace, nd_fespace, true );
125
- Pi = RAP_Pi.StealParallelAssemble ();
126
- }
116
+ // XX TODO: Partial assembly option?
117
+ mfem::ParFiniteElementSpace h1d_fespace (&mesh, h1_fespace.FEColl (), space_dim,
118
+ mfem::Ordering::byVDIM);
119
+ mfem::DiscreteLinearOperator pi (&h1d_fespace, &nd_fespace);
120
+ pi .AddDomainInterpolator (new mfem::IdentityInterpolator);
121
+ pi .SetAssemblyLevel (mfem::AssemblyLevel::LEGACY);
122
+ pi .Assemble ();
123
+ pi .Finalize ();
124
+ ParOperator RAP_Pi (std::unique_ptr<mfem::SparseMatrix>(pi .LoseMat ()), h1d_fespace,
125
+ nd_fespace, true );
126
+ Pi = RAP_Pi.StealParallelAssemble ();
127
127
if (cycle_type >= 10 )
128
128
{
129
129
// Get blocks of Pi corresponding to each component, and free Pi.
0 commit comments