https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosVariable.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 "KokkosTypes.h"
13
14#include "MooseTypes.h"
16#include "MooseVariableScalar.h"
17#include "MoosePassKey.h"
18
19class Coupleable;
21
22namespace Moose::Kokkos
23{
24
29{
30public:
33
37 Variable() = default;
44 Variable(const MooseVariableBase & variable, const TagID tag) { init(variable, tag); }
52 {
53 init(variable, tag_name);
54 }
62 Variable(const std::vector<const MooseVariableBase *> & variables, const TagID tag)
63 {
64 init(variables, tag);
65 }
66 Variable(const std::vector<MooseVariableBase *> & variables, const TagID tag)
67 {
68 init(variables, tag);
69 }
70 Variable(const std::vector<const MooseVariableFieldBase *> & variables, const TagID tag)
71 {
72 init(variables, tag);
73 }
74 Variable(const std::vector<MooseVariableFieldBase *> & variables, const TagID tag)
75 {
76 init(variables, tag);
77 }
78 Variable(const std::vector<const MooseVariableScalar *> & variables, const TagID tag)
79 {
80 init(variables, tag);
81 }
82 Variable(const std::vector<MooseVariableScalar *> & variables, const TagID tag)
83 {
84 init(variables, tag);
85 }
87
94 Variable(const std::vector<const MooseVariableBase *> & variables,
96 {
97 init(variables, tag_name);
98 }
99 Variable(const std::vector<MooseVariableBase *> & variables,
101 {
102 init(variables, tag_name);
103 }
104 Variable(const std::vector<const MooseVariableFieldBase *> & variables,
106 {
107 init(variables, tag_name);
108 }
109 Variable(const std::vector<MooseVariableFieldBase *> & variables,
111 {
112 init(variables, tag_name);
113 }
114 Variable(const std::vector<const MooseVariableScalar *> & variables,
116 {
117 init(variables, tag_name);
118 }
119 Variable(const std::vector<MooseVariableScalar *> & variables,
121 {
122 init(variables, tag_name);
123 }
125
130 void init(const MooseVariableBase & variable, const TagID tag);
136 void init(const MooseVariableBase & variable, const TagName & tag_name = Moose::SOLUTION_TAG);
143 void init(const std::vector<const MooseVariableBase *> & variables, const TagID tag);
144 void init(const std::vector<MooseVariableBase *> & variables, const TagID tag)
145 {
146 init(std::vector<const MooseVariableBase *>(variables.begin(), variables.end()), tag);
147 }
148 void init(const std::vector<const MooseVariableFieldBase *> & variables, const TagID tag)
149 {
150 init(std::vector<const MooseVariableBase *>(variables.begin(), variables.end()), tag);
151 }
152 void init(const std::vector<MooseVariableFieldBase *> & variables, const TagID tag)
153 {
154 init(std::vector<const MooseVariableBase *>(variables.begin(), variables.end()), tag);
155 }
156 void init(const std::vector<const MooseVariableScalar *> & variables, const TagID tag)
157 {
158 init(std::vector<const MooseVariableBase *>(variables.begin(), variables.end()), tag);
159 }
160 void init(const std::vector<MooseVariableScalar *> & variables, const TagID tag)
161 {
162 init(std::vector<const MooseVariableBase *>(variables.begin(), variables.end()), tag);
163 }
165
171 void init(const std::vector<const MooseVariableBase *> & variables,
173 void init(const std::vector<MooseVariableBase *> & variables,
175 void init(const std::vector<const MooseVariableFieldBase *> & variables,
177 void init(const std::vector<MooseVariableFieldBase *> & variables,
179 void init(const std::vector<const MooseVariableScalar *> & variables,
181 void init(const std::vector<MooseVariableScalar *> & variables,
184
189 void init(const std::vector<Real> & values, CoupleableKey);
190 void init(const std::vector<Real> & values, ScalarCoupleableKey);
192
196 void init(const std::vector<Real3> & values, CoupleableKey);
197
204 const MooseVariableBase * mooseVar(unsigned int comp = 0)
205 {
206 return _moose_var.size() ? _moose_var[comp] : nullptr;
207 }
208 const MooseVariableFieldBase * mooseFieldVar(unsigned int comp = 0)
209 {
210 return _moose_var.size() ? dynamic_cast<const MooseVariableFieldBase *>(_moose_var[comp])
211 : nullptr;
212 }
213 const MooseVariableScalar * mooseScalarVar(unsigned int comp = 0)
214 {
215 return _moose_var.size() ? dynamic_cast<const MooseVariableScalar *>(_moose_var[comp])
216 : nullptr;
217 }
219
224 KOKKOS_FUNCTION bool initialized() const { return _initialized; }
229 KOKKOS_FUNCTION bool coupled() const { return _coupled; }
234 KOKKOS_FUNCTION bool nodal() const { return _nodal; }
239 KOKKOS_FUNCTION bool scalar() const { return _scalar; }
244 KOKKOS_FUNCTION bool dot() const { return _dot; }
249 KOKKOS_FUNCTION bool old() const { return _old; }
254 KOKKOS_FUNCTION bool vector() const { return _vector; }
259 KOKKOS_FUNCTION unsigned int components() const { return _components; }
264 KOKKOS_FUNCTION TagID tag() const { return _tag; }
270 KOKKOS_FUNCTION unsigned int var(unsigned int comp = 0) const { return _var[comp]; }
276 KOKKOS_FUNCTION unsigned int sys(unsigned int comp = 0) const { return _sys[comp]; }
282 KOKKOS_FUNCTION Real value(unsigned int comp = 0) const
283 {
285
286 return _default_value[comp];
287 }
293 KOKKOS_FUNCTION Real3 vectorValue(unsigned int comp = 0) const
294 {
296
298 }
299
300private:
304 bool _initialized = false;
308 bool _coupled = false;
312 bool _nodal = false;
316 bool _scalar = false;
320 bool _dot = false;
324 bool _old = false;
328 bool _vector = false;
332 unsigned int _components = 1;
357};
358
359} // namespace Moose::Kokkos
unsigned int TagID
Definition MooseTypes.h:238
std::array< Real, 2 > values
Definition MortarUtils.C:52
Interface for objects that needs coupling capabilities.
Definition Coupleable.h:53
Base variable class.
This class provides an interface for common operations on field variables of both FE and FV types wit...
Class for scalar variables (they are different).
KOKKOS_FUNCTION index_type size() const
Get the total array size.
The Kokkos array class.
The Kokkos variable object that carries the coupled variable and tag information.
Variable(const std::vector< const MooseVariableBase * > &variables, const TagID tag)
Constructor Initialize the variable with multiple MOOSE variables and vector tag ID.
TagID _tag
Vector tag ID.
void init(const std::vector< Real > &values, ScalarCoupleableKey)
bool _vector
Whether the variable is vector variable.
KOKKOS_FUNCTION unsigned int components() const
Get the number of components.
Variable(const std::vector< const MooseVariableScalar * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Variable(const MooseVariableBase &variable, const TagName &tag_name=Moose::SOLUTION_TAG)
Constructor Initialize the variable with a MOOSE variable and vector tag name.
void init(const std::vector< MooseVariableScalar * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Array< const MooseVariableBase * > _moose_var
MOOSE variable of each component.
void init(const std::vector< const MooseVariableBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Initialize the variable with multiple MOOSE variables and vector tag name.
void init(const std::vector< Real3 > &values, CoupleableKey)
Initialize the variable with default coupled vector values.
Variable(const std::vector< MooseVariableScalar * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
const MooseVariableScalar * mooseScalarVar(unsigned int comp=0)
KOKKOS_FUNCTION bool vector() const
Get whether the variable is vector variable.
void init(const std::vector< const MooseVariableScalar * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Variable(const MooseVariableBase &variable, const TagID tag)
Constructor Initialize the variable with a MOOSE variable and vector tag ID.
KOKKOS_FUNCTION bool old() const
Get whether the tag is old/older value.
KOKKOS_FUNCTION Real value(unsigned int comp=0) const
Get the default value of a component.
Variable(const std::vector< const MooseVariableBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Constructor Initialize the variable with multiple MOOSE variables and vector tag name.
bool _initialized
Whether the variable is initialized.
KOKKOS_FUNCTION unsigned int var(unsigned int comp=0) const
Get the variable number of a component.
KOKKOS_FUNCTION bool coupled() const
Get whether the variable is coupled.
bool _dot
Whether the tag is time derivative.
void init(const std::vector< const MooseVariableFieldBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
const MooseVariableBase * mooseVar(unsigned int comp=0)
Get the MOOSE variable of a component.
void init(const std::vector< MooseVariableFieldBase * > &variables, const TagID tag)
bool _old
Whether the tag is old/older value.
KOKKOS_FUNCTION bool nodal() const
Get whether the variable is nodal.
void init(const MooseVariableBase &variable, const TagName &tag_name=Moose::SOLUTION_TAG)
Initialize the variable with a MOOSE variable and vector tag name.
void init(const std::vector< MooseVariableBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
const MooseVariableFieldBase * mooseFieldVar(unsigned int comp=0)
void init(const std::vector< const MooseVariableBase * > &variables, const TagID tag)
Initialize the variable with multiple MOOSE variables and vector tag ID.
KOKKOS_FUNCTION TagID tag() const
Get the vector tag ID.
Array< unsigned int > _sys
System number of each component.
KOKKOS_FUNCTION Real3 vectorValue(unsigned int comp=0) const
Get the default vector value of a component.
bool _nodal
Whether the variable is nodal.
Variable(const std::vector< MooseVariableScalar * > &variables, const TagID tag)
Array< unsigned int > _var
Variable number of each component.
bool _scalar
Whether the variable is scalar.
KOKKOS_FUNCTION bool dot() const
Get whether the tag is time derivative.
Array< Real3 > _default_vector_value
Default vector value of each component when the variable is not coupled.
unsigned int _components
Number of components.
Array< Real > _default_value
Default value of each component when the variable is not coupled.
Variable(const std::vector< const MooseVariableFieldBase * > &variables, const TagID tag)
void init(const std::vector< MooseVariableBase * > &variables, const TagID tag)
Variable()=default
Default constructor.
KOKKOS_FUNCTION bool scalar() const
Get whether the variable is scalar.
Variable(const std::vector< const MooseVariableScalar * > &variables, const TagID tag)
bool _coupled
Whether the variable is coupled.
Variable(const std::vector< MooseVariableBase * > &variables, const TagID tag)
KOKKOS_FUNCTION bool initialized() const
Get whether the variable is initialized.
void init(const std::vector< MooseVariableScalar * > &variables, const TagID tag)
Variable(const std::vector< MooseVariableBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
KOKKOS_FUNCTION unsigned int sys(unsigned int comp=0) const
Get the system number of a component.
void init(const std::vector< MooseVariableFieldBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
void init(const std::vector< Real > &values, CoupleableKey)
Initialize the variable with default coupled values.
void init(const std::vector< const MooseVariableFieldBase * > &variables, const TagID tag)
void init(const std::vector< const MooseVariableScalar * > &variables, const TagID tag)
void init(const MooseVariableBase &variable, const TagID tag)
Initialize the variable with a MOOSE variable and vector tag ID.
Variable(const std::vector< const MooseVariableFieldBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Variable(const std::vector< MooseVariableFieldBase * > &variables, const TagName &tag_name=Moose::SOLUTION_TAG)
Variable(const std::vector< MooseVariableFieldBase * > &variables, const TagID tag)
Interface for objects that needs scalar coupling capabilities.
const TagID INVALID_TAG_ID
Definition MooseTypes.C:23
const TagName SOLUTION_TAG
Definition MooseTypes.C:25