diff --git a/framework/src/mesh/MooseMesh.C b/framework/src/mesh/MooseMesh.C index e1a34c0323a5..e13c0a22d110 100644 --- a/framework/src/mesh/MooseMesh.C +++ b/framework/src/mesh/MooseMesh.C @@ -1237,6 +1237,7 @@ MooseMesh::cacheInfo() _neighbor_subdomain_boundary_ids.clear(); _block_node_list.clear(); _higher_d_elem_side_to_lower_d_elem.clear(); + _lower_d_elem_to_higher_d_elem_side.clear(); // TODO: Thread this! for (const auto & elem : getMesh().element_ptr_range()) @@ -1255,6 +1256,8 @@ MooseMesh::cacheInfo() auto pair = std::make_pair(ip_elem, ip_side); _higher_d_elem_side_to_lower_d_elem.insert( std::pair, const Elem *>(pair, elem)); + _lower_d_elem_to_higher_d_elem_side.insert( + std::pair(elem, ip_side)); } } diff --git a/test/src/userobjects/LowerDIntegralSideUserObject.C b/test/src/userobjects/LowerDIntegralSideUserObject.C index 251f0722f489..a3a75383bf51 100644 --- a/test/src/userobjects/LowerDIntegralSideUserObject.C +++ b/test/src/userobjects/LowerDIntegralSideUserObject.C @@ -44,6 +44,10 @@ LowerDIntegralSideUserObject::execute() upwind_elem ? _fe_problem.mesh().getLowerDElem(_current_elem, _current_side) : _fe_problem.mesh().getLowerDElem(neighbor, neighbor->which_neighbor_am_i(_current_elem)); + if (!current_lower_d_elem) + mooseError("Cannot find lower-d element"); + if (_mesh.getHigherDSide(current_lower_d_elem) == libMesh::invalid_uint) + mooseError("Error in getting side id of a lower-d element with respect to higher-d element"); _fe_problem.reinitLowerDElem(current_lower_d_elem, _tid); for (unsigned int qp = 0; qp < _qrule->n_points(); ++qp) { @@ -62,4 +66,5 @@ LowerDIntegralSideUserObject::threadJoin(const UserObject & y) void LowerDIntegralSideUserObject::finalize() { + gatherSum(_integral_value); } diff --git a/test/tests/userobjects/side_uo_with_lowerd_use/side-uo-with-lower-d-use.i b/test/tests/userobjects/side_uo_with_lowerd_use/side-uo-with-lower-d-use.i index be907eef57b2..02a2d7fd2c37 100644 --- a/test/tests/userobjects/side_uo_with_lowerd_use/side-uo-with-lower-d-use.i +++ b/test/tests/userobjects/side_uo_with_lowerd_use/side-uo-with-lower-d-use.i @@ -74,6 +74,12 @@ value = '1' block = '1 2 3 4' [] + [time] + type = CoefTimeDerivative + variable = u + block = '1 2 3 4' + Coefficient = 1 + [] [] [DGKernels] @@ -119,8 +125,18 @@ [] [] +[Postprocessors] + [unorm] + type = ElementL2Norm + variable = u + block = '1 2 3 4' + [] +[] + [Executioner] - type = Steady + type = Transient + nl_abs_tol = 1e-12 + num_steps = 8 solve_type = 'NEWTON' petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_mat_solver_type' petsc_options_value = 'lu basic mumps'