11 #include "SystemBase.h"
20 InputParameters params = validParams<Kernel>();
21 params.addClassDescription(
"Conservative form of $\\nabla \\cdot \\vec{v} u$ (advection), using "
22 "the Flux Limited TVD scheme invented by Kuzmin and Turek");
23 params.addRequiredParam<UserObjectName>(
"advective_flux_calculator",
24 "AdvectiveFluxCalculator UserObject");
37 mooseError(
"FluxLimitedTVDAdvection::computeQpResidual() called\n");
44 prepareVectorTag(_assembly, _var.number());
45 precalculateResidual();
48 for (
unsigned i = 0; i < _current_elem->n_nodes(); ++i)
50 const dof_id_type node_id_i = _current_elem->node_id(i);
54 accumulateTaggedLocalResidual();
58 Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
59 for (
unsigned int i = 0; i < _save_in.size(); i++)
60 _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
67 prepareMatrixTag(_assembly, _var.number(), _var.number());
68 precalculateJacobian();
75 for (
unsigned i = 0; i < _current_elem->n_nodes(); ++i)
78 const dof_id_type node_id_i = _current_elem->node_id(i);
80 std::vector<dof_id_type> idof_indices(
81 1, _current_elem->node_ref(i).dof_number(_sys.number(), _var.number(), 0));
90 std::vector<dof_id_type> jdof_indices(derivs.size());
91 DenseMatrix<Number> deriv_matrix(1, derivs.size());
93 for (
const auto & node_j_deriv : derivs)
96 const dof_id_type node_id_j = node_j_deriv.first;
99 _mesh.getMesh().node_ref(node_id_j).dof_number(_sys.number(), _var.number(), 0);
101 deriv_matrix(0, j) = node_j_deriv.second / valence;
105 _assembly.cacheJacobianBlock(deriv_matrix, idof_indices, jdof_indices, _var.scalingFactor());