Skip to content

Commit dce706a

Browse files
Fix full parallel assembly for AMS solver
1 parent f9f8872 commit dce706a

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

palace/linalg/ams.cpp

+18-18
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ void HypreAmsSolver::ConstructAuxiliaryMatrices(mfem::ParFiniteElementSpace &nd_
5151
// HypreAMS:Init. Start with the discrete gradient matrix.
5252
{
5353
// 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);
6061
G = RAP_G.StealParallelAssemble();
6162
}
6263

@@ -112,18 +113,17 @@ void HypreAmsSolver::ConstructAuxiliaryMatrices(mfem::ParFiniteElementSpace &nd_
112113
}
113114
else
114115
{
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();
127127
if (cycle_type >= 10)
128128
{
129129
// Get blocks of Pi corresponding to each component, and free Pi.

0 commit comments

Comments
 (0)