https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosVectorTimeDerivative.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
13
15{
16public:
18
20
21 template <typename Derived>
22 KOKKOS_FUNCTION void computeJacobianInternal(const Derived & kernel, AssemblyDatum & datum) const;
23
24 template <typename Derived>
25 KOKKOS_FUNCTION Moose::Kokkos::Real3 precomputeQpResidual(const unsigned int qp,
26 AssemblyDatum & datum) const;
27 template <typename Derived>
28 KOKKOS_FUNCTION Moose::Kokkos::Real3
29 precomputeQpJacobian(const unsigned int j, const unsigned int qp, AssemblyDatum & datum) const;
30
31protected:
32 const bool _lumping;
33};
34
35template <typename Derived>
36KOKKOS_FUNCTION void
38 AssemblyDatum & datum) const
39{
41
42 Real local_ke[MAX_CACHED_DOF];
43
44 const auto scaling_factor =
45 kokkosSystem(_kokkos_var.sys()).getVariableScalingFactor(_kokkos_var.var());
46
47 for (unsigned int j = datum.local_thread_id(); j < datum.n_jdofs();
48 j += datum.num_local_threads())
49 {
50 unsigned int num_batches = datum.n_idofs() / MAX_CACHED_DOF;
51
52 if (datum.n_idofs() % MAX_CACHED_DOF)
53 ++num_batches;
54
55 for (unsigned int batch = 0; batch < num_batches; ++batch)
56 {
57 unsigned int ib = batch * MAX_CACHED_DOF;
58 unsigned int ie = ::Kokkos::min(ib + MAX_CACHED_DOF, datum.n_idofs());
59
60 for (unsigned int i = ib; i < ie; ++i)
61 local_ke[i - ib] = 0;
62
63 for (unsigned int qp = 0; qp < datum.n_qps(); ++qp)
64 {
66 datum.JxW(qp) * kernel.template precomputeQpJacobian<Derived>(j, qp, datum);
67
68 for (unsigned int i = ib; i < ie; ++i)
69 local_ke[i - ib] += value * _test(datum, i, qp);
70 }
71
72 for (unsigned int i = ib; i < ie; ++i)
73 accumulateTaggedElementalMatrix(local_ke[i - ib] * scaling_factor,
74 datum.elem().id,
75 i,
76 _lumping ? i : j,
77 datum.jvar(),
78 datum.comp());
79 }
80 }
81}
82
83template <typename Derived>
84KOKKOS_FUNCTION Moose::Kokkos::Real3
86{
87 return _u_dot(datum, qp);
88}
89
90template <typename Derived>
91KOKKOS_FUNCTION Moose::Kokkos::Real3
93 const unsigned int qp,
94 AssemblyDatum & datum) const
95{
96 return _phi(datum, j, qp) * _du_dot_du;
97}
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
KOKKOS_FUNCTION void computeJacobianInternal(const Derived &kernel, AssemblyDatum &datum) const
static InputParameters validParams()
KOKKOS_FUNCTION Moose::Kokkos::Real3 precomputeQpResidual(const unsigned int qp, AssemblyDatum &datum) const
KokkosVectorTimeDerivative(const InputParameters &parameters)
KOKKOS_FUNCTION Moose::Kokkos::Real3 precomputeQpJacobian(const unsigned int j, const unsigned int qp, AssemblyDatum &datum) const
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
The Kokkos object that holds thread-private data in the parallel operations of Kokkos kernels.
KOKKOS_FUNCTION unsigned int jvar() const
Get the coupled variable number.
KOKKOS_FUNCTION unsigned int n_idofs() const
Get the number of local DOFs.
KOKKOS_FUNCTION unsigned int n_jdofs() const
Get the number of local DOFs for the coupled variable.
KOKKOS_FUNCTION unsigned int comp() const
Get the variable component.
KOKKOS_FUNCTION unsigned int num_local_threads() const
Get the number of local threads.
KOKKOS_FUNCTION Real JxW(const unsigned int qp)
Get the transformed Jacobian weight.
KOKKOS_FUNCTION unsigned int local_thread_id() const
Get the current local thread ID.
KOKKOS_FUNCTION unsigned int n_qps() const
Get the number of local quadrature points.
KOKKOS_FUNCTION const ElementInfo & elem() const
Get the element information object.
Definition KokkosDatum.h:46
Variable _kokkos_var
Kokkos variable.
KOKKOS_FUNCTION void accumulateTaggedElementalMatrix(const Real local_ke, const ContiguousElementID elem, const unsigned int i, const unsigned int j, const unsigned int jvar, const unsigned int comp) const
Accumulate local elemental Jacobian contribution to tagged matrices.
KOKKOS_FUNCTION unsigned int var(unsigned int comp=0) const
Get the variable number of a component.
KOKKOS_FUNCTION unsigned int sys(unsigned int comp=0) const
Get the system number of a component.
const VectorVariableTestValue _test
Current vector test function.
const VectorVariablePhiValue _phi
Current vector shape function.
The base class for Kokkos vector time kernels whose test function can be factored out.
const Scalar< const Real > _du_dot_du
Derivative of u_dot with respect to u.
const VectorVariableValue _u_dot
Time derivative of the current solution at quadrature points.
constexpr unsigned int MAX_CACHED_DOF
Maximum number of DOFs to cache during residual and Jacobian computation.
ContiguousElementID id
Contiguous element ID.
Definition KokkosMesh.h:42