https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosDirichletBCBase.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://www.mooseframework.org
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
12#include "KokkosNodalBC.h"
13#include "KokkosADNodalBC.h"
14
15namespace Moose::Kokkos
16{
17
21template <bool is_ad>
22class DirichletBCBaseTempl : public std::conditional_t<is_ad, ADNodalBC, NodalBC>
23{
24 using real_type = std::conditional_t<is_ad, ADReal, Real>;
25
26public:
28
33
38 virtual bool preset() const override { return _preset; }
39
44 virtual void presetSolution(TagID tag) override;
45
50 {
51 };
52
56 template <typename Derived>
57 KOKKOS_FUNCTION void operator()(PresetLoop, const ThreadID tid, const Derived & bc) const;
58
59 template <typename Derived>
60 KOKKOS_FUNCTION auto computeQpResidual(const unsigned int qp, AssemblyDatum & datum) const;
61
62 using Base = std::conditional_t<is_ad, ADNodalBC, NodalBC>;
63 using Base::operator();
64
65protected:
66 using Base::_kokkos_var;
67 using Base::_u;
68 using Base::kokkosAssembly;
69 using Base::kokkosBoundaryNodeID;
70 using Base::kokkosSystem;
71 using Base::kokkosSystems;
72 using Base::numKokkosBoundaryNodes;
73
74private:
78 const bool _preset;
83};
84
85template <bool is_ad>
86template <typename Derived>
87KOKKOS_FUNCTION void
88DirichletBCBaseTempl<is_ad>::operator()(PresetLoop, const ThreadID tid, const Derived & bc) const
89{
90 auto node = kokkosBoundaryNodeID(tid);
91 auto & sys = kokkosSystem(_kokkos_var.sys());
92 auto dof = sys.getNodeLocalDofIndex(node, 0, _kokkos_var.var());
93
95 return;
96
97 AssemblyDatum datum(node, kokkosAssembly(), kokkosSystems(), _kokkos_var, _kokkos_var.var());
98
99 sys.getVectorDofValue(dof, _solution_tag) = bc.computeValue(0, datum);
100}
101
102template <bool is_ad>
103template <typename Derived>
104KOKKOS_FUNCTION auto
106{
107 auto bc = static_cast<const Derived *>(this);
108
109 return _u(datum, qp) - real_type(bc->computeValue(qp, datum));
110}
111
114
115} // namespace Moose::Kokkos
116
117#define registerKokkosDirichletBC(app, classname) \
118 registerKokkosResidualObject(app, classname); \
119 registerKokkosAdditionalOperation(classname, PresetLoop)
120
121#define registerKokkosADDirichletBC(app, classname) \
122 registerKokkosADResidualObject(app, classname); \
123 registerKokkosAdditionalOperation(classname, PresetLoop)
unsigned int TagID
Definition MooseTypes.h:238
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
The Kokkos object that holds thread-private data in the parallel operations of Kokkos kernels.
The base Kokkos boundary condition of a Dirichlet type.
KOKKOS_FUNCTION auto computeQpResidual(const unsigned int qp, AssemblyDatum &datum) const
virtual void presetSolution(TagID tag) override
Dispatch solution vector preset.
const bool _preset
Flag whether the value is to be preset.
KOKKOS_FUNCTION void operator()(PresetLoop, const ThreadID tid, const Derived &bc) const
The preset function called by Kokkos.
std::conditional_t< is_ad, ADNodalBC, NodalBC > Base
TagID _solution_tag
Tag associated with the solution vector to be preset.
DirichletBCBaseTempl(const InputParameters &parameters)
Constructor.
virtual bool preset() const override
Get whether the value is to be preset.
static InputParameters validParams()
std::conditional_t< is_ad, ADReal, Real > real_type
static constexpr dof_id_type invalid_id
DirichletBCBaseTempl< true > ADDirichletBCBase
DirichletBCBaseTempl< false > DirichletBCBase
MOOSE_KOKKOS_INDEX_TYPE ThreadID