Skip to content

Commit

Permalink
Fix broken transient problems in parallel by switching to use of ParG…
Browse files Browse the repository at this point in the history
…ridFunction::MakeTRef in ProblemOperators
  • Loading branch information
alexanderianblair committed Dec 19, 2024
1 parent 1e5ca50 commit 0babdbd
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 15 deletions.
2 changes: 1 addition & 1 deletion include/problem_operators/problem_operator_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class ProblemOperatorInterface
virtual void SetGridFunctions();
virtual void Init(mfem::BlockVector & X);

mfem::Array<int> _true_offsets, _block_true_offsets;
mfem::Array<int> _block_true_offsets;

mfem::BlockVector _true_x, _true_rhs;
mfem::OperatorHandle _equation_system_operator;
Expand Down
2 changes: 1 addition & 1 deletion src/problem_operators/problem_operator.C
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ void
ProblemOperator::SetGridFunctions()
{
ProblemOperatorInterface::SetGridFunctions();
width = height = _true_offsets[_trial_variables.size()];
width = height = _block_true_offsets[_trial_variables.size()];
};

} // namespace platypus
12 changes: 2 additions & 10 deletions src/problem_operators/problem_operator_interface.C
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,17 @@ ProblemOperatorInterface::SetGridFunctions()
}
_block_true_offsets.PartialSum();

_true_offsets.SetSize(_trial_variables.size() + 1);
_true_offsets[0] = 0;
for (unsigned int ind = 0; ind < _trial_variables.size(); ++ind)
{
_true_offsets[ind + 1] = _trial_variables.at(ind)->ParFESpace()->GetVSize();
}
_true_offsets.PartialSum();

_true_x.Update(_block_true_offsets);
_true_rhs.Update(_block_true_offsets);
}

void
ProblemOperatorInterface::Init(mfem::BlockVector & X)
{
X.Update(_true_offsets);
X.Update(_block_true_offsets);
for (size_t i = 0; i < _test_variables.size(); ++i)
{
_test_variables.at(i)->MakeRef(_test_variables.at(i)->ParFESpace(), X, _true_offsets[i]);
_test_variables.at(i)->MakeTRef(_test_variables.at(i)->ParFESpace(), X, _block_true_offsets[i]);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ TimeDomainEquationSystemProblemOperator::ImplicitSolve(const double dt,
dX_dt = 0.0;
for (unsigned int ind = 0; ind < _trial_variables.size(); ++ind)
{
_trial_variables.at(ind)->MakeRef(
_trial_variables.at(ind)->ParFESpace(), dX_dt, _true_offsets[ind]);
_trial_variables.at(ind)->MakeTRef(
_trial_variables.at(ind)->ParFESpace(), dX_dt, _block_true_offsets[ind]);
}
const double time = GetTime();
for (auto & coef : _problem._scalar_manager)
Expand Down
2 changes: 1 addition & 1 deletion src/problem_operators/time_domain_problem_operator.C
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ void
TimeDomainProblemOperator::SetGridFunctions()
{
ProblemOperatorInterface::SetGridFunctions();
width = height = _true_offsets[_trial_variables.size()];
width = height = _block_true_offsets[_trial_variables.size()];
}

} // namespace platypus

0 comments on commit 0babdbd

Please sign in to comment.