Line data Source code
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 : #include "KokkosVariableValue.h"
11 :
12 : #include "Coupleable.h"
13 : #include "SystemBase.h"
14 : #include "FEProblemBase.h"
15 :
16 : using CoupleableKey = Moose::Kokkos::Variable::CoupleableKey;
17 :
18 : Moose::Kokkos::Variable
19 3092 : Coupleable::kokkosCoupledVectorTagVariable(const std::string & var_name,
20 : const std::string & tag_name,
21 : unsigned int comp) const
22 : {
23 3092 : Moose::Kokkos::Variable variable;
24 :
25 3092 : if (isCoupled(var_name))
26 : {
27 1382 : auto var = const_cast<MooseVariableField<Real> *>(
28 1618 : getVarHelper<MooseVariableField<Real>>(var_name, comp));
29 :
30 3000 : if (tag_name == Moose::OLD_SOLUTION_TAG)
31 51 : var->sys().needSolutionState(1);
32 2949 : else if (tag_name == Moose::OLDER_SOLUTION_TAG)
33 34 : var->sys().needSolutionState(2);
34 :
35 3000 : const auto tag = _c_fe_problem.getVectorTagID(tag_name);
36 :
37 3000 : const_cast<Coupleable *>(this)->addFEVariableCoupleableVectorTag(tag);
38 :
39 3000 : variable.init(*var, tag);
40 : }
41 : else
42 276 : variable.init({_c_parameters.defaultCoupledValue(var_name, comp)}, CoupleableKey{});
43 :
44 3092 : return variable;
45 0 : }
46 :
47 : Moose::Kokkos::Variable
48 135 : Coupleable::kokkosCoupledVectorTagVariables(const std::string & var_name,
49 : const std::string & tag_name) const
50 : {
51 135 : Moose::Kokkos::Variable variable;
52 :
53 135 : const auto components = coupledComponents(var_name);
54 :
55 135 : if (isCoupled(var_name))
56 : {
57 135 : std::vector<const MooseVariableFieldBase *> vars;
58 :
59 353 : for (unsigned int comp = 0; comp < components; ++comp)
60 : {
61 88 : auto var = const_cast<MooseVariableField<Real> *>(
62 130 : getVarHelper<MooseVariableField<Real>>(var_name, comp));
63 :
64 218 : if (tag_name == Moose::OLD_SOLUTION_TAG)
65 0 : var->sys().needSolutionState(1);
66 218 : else if (tag_name == Moose::OLDER_SOLUTION_TAG)
67 0 : var->sys().needSolutionState(2);
68 :
69 218 : vars.push_back(var);
70 : }
71 :
72 135 : const auto tag = _c_fe_problem.getVectorTagID(tag_name);
73 :
74 135 : const_cast<Coupleable *>(this)->addFEVariableCoupleableVectorTag(tag);
75 :
76 135 : variable.init(vars, tag);
77 135 : }
78 : else
79 : {
80 0 : std::vector<Real> default_values(components);
81 :
82 0 : for (unsigned int comp = 0; comp < components; ++comp)
83 0 : default_values[comp] = _c_parameters.defaultCoupledValue(var_name, comp);
84 :
85 0 : variable.init(default_values, CoupleableKey{});
86 0 : }
87 :
88 135 : return variable;
89 0 : }
90 :
91 : Moose::Kokkos::Variable
92 306 : Coupleable::kokkosZeroVariable() const
93 : {
94 306 : Moose::Kokkos::Variable variable;
95 :
96 612 : variable.init({0}, CoupleableKey{});
97 :
98 306 : return variable;
99 0 : }
100 :
101 : Moose::Kokkos::VariableValue
102 1371 : Coupleable::kokkosCoupledVectorTagValueByName(const std::string & var_name,
103 : const std::string & tag_name,
104 : unsigned int comp) const
105 : {
106 1371 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
107 :
108 2742 : return Moose::Kokkos::VariableValue(variable);
109 1371 : }
110 :
111 : Moose::Kokkos::VariableValue
112 135 : Coupleable::kokkosCoupledVectorTagValuesByName(const std::string & var_name,
113 : const std::string & tag_name) const
114 : {
115 135 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
116 :
117 270 : return Moose::Kokkos::VariableValue(variable);
118 135 : }
119 :
120 : Moose::Kokkos::VariableGradient
121 665 : Coupleable::kokkosCoupledVectorTagGradientByName(const std::string & var_name,
122 : const std::string & tag_name,
123 : unsigned int comp) const
124 : {
125 665 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
126 :
127 1330 : return Moose::Kokkos::VariableGradient(variable);
128 665 : }
129 :
130 : Moose::Kokkos::VariableGradient
131 0 : Coupleable::kokkosCoupledVectorTagGradientsByName(const std::string & var_name,
132 : const std::string & tag_name) const
133 : {
134 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
135 :
136 0 : return Moose::Kokkos::VariableGradient(variable);
137 0 : }
138 :
139 : Moose::Kokkos::VariableValue
140 850 : Coupleable::kokkosCoupledVectorTagNodalValueByName(const std::string & var_name,
141 : const std::string & tag_name,
142 : unsigned int comp) const
143 : {
144 850 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
145 :
146 850 : if (!variable.nodal())
147 0 : mooseError("Cannot get nodal values from the coupled variable '",
148 : var_name,
149 : "', because the associated variable is not nodal.");
150 :
151 1700 : return Moose::Kokkos::VariableValue(variable, true);
152 850 : }
153 :
154 : Moose::Kokkos::VariableValue
155 0 : Coupleable::kokkosCoupledVectorTagNodalValuesByName(const std::string & var_name,
156 : const std::string & tag_name) const
157 : {
158 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
159 :
160 0 : if (!variable.nodal())
161 0 : mooseError("Cannot get nodal values from the coupled variable '",
162 : var_name,
163 : "', because the associated variable is not nodal.");
164 :
165 0 : return Moose::Kokkos::VariableValue(variable, true);
166 0 : }
167 :
168 : Moose::Kokkos::VariableValue
169 68 : Coupleable::kokkosCoupledVectorTagDofValueByName(const std::string & var_name,
170 : const std::string & tag_name,
171 : unsigned int comp) const
172 : {
173 68 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
174 :
175 136 : return Moose::Kokkos::VariableValue(variable, true);
176 68 : }
177 :
178 : Moose::Kokkos::VariableValue
179 0 : Coupleable::kokkosCoupledVectorTagDofValuesByName(const std::string & var_name,
180 : const std::string & tag_name) const
181 : {
182 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
183 :
184 0 : return Moose::Kokkos::VariableValue(variable, true);
185 0 : }
186 :
187 : Moose::Kokkos::VariableValue
188 204 : Coupleable::kokkosCoupledVectorTagValue(const std::string & var_name,
189 : const std::string & tag_param_name,
190 : unsigned int comp) const
191 : {
192 204 : if (!_c_parameters.isParamValid(tag_param_name))
193 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
194 :
195 204 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
196 :
197 408 : return kokkosCoupledVectorTagValueByName(var_name, tag_name, comp);
198 204 : }
199 :
200 : Moose::Kokkos::VariableValue
201 0 : Coupleable::kokkosCoupledVectorTagValues(const std::string & var_name,
202 : const std::string & tag_param_name) const
203 : {
204 0 : if (!_c_parameters.isParamValid(tag_param_name))
205 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
206 :
207 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
208 :
209 0 : return kokkosCoupledVectorTagValuesByName(var_name, tag_name);
210 0 : }
211 :
212 : Moose::Kokkos::VariableGradient
213 0 : Coupleable::kokkosCoupledVectorTagGradient(const std::string & var_name,
214 : const std::string & tag_param_name,
215 : unsigned int comp) const
216 : {
217 0 : if (!_c_parameters.isParamValid(tag_param_name))
218 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
219 :
220 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
221 :
222 0 : return kokkosCoupledVectorTagGradientByName(var_name, tag_name, comp);
223 0 : }
224 :
225 : Moose::Kokkos::VariableGradient
226 0 : Coupleable::kokkosCoupledVectorTagGradients(const std::string & var_name,
227 : const std::string & tag_param_name) const
228 : {
229 0 : if (!_c_parameters.isParamValid(tag_param_name))
230 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
231 :
232 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
233 :
234 0 : return kokkosCoupledVectorTagGradientsByName(var_name, tag_name);
235 0 : }
236 :
237 : Moose::Kokkos::VariableValue
238 100 : Coupleable::kokkosCoupledVectorTagNodalValue(const std::string & var_name,
239 : const std::string & tag_param_name,
240 : unsigned int comp) const
241 : {
242 100 : if (!_c_parameters.isParamValid(tag_param_name))
243 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
244 :
245 100 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
246 :
247 200 : return kokkosCoupledVectorTagNodalValueByName(var_name, tag_name, comp);
248 100 : }
249 :
250 : Moose::Kokkos::VariableValue
251 0 : Coupleable::kokkosCoupledVectorTagNodalValues(const std::string & var_name,
252 : const std::string & tag_param_name) const
253 : {
254 0 : if (!_c_parameters.isParamValid(tag_param_name))
255 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
256 :
257 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
258 :
259 0 : return kokkosCoupledVectorTagNodalValuesByName(var_name, tag_name);
260 0 : }
261 :
262 : Moose::Kokkos::VariableValue
263 0 : Coupleable::kokkosCoupledVectorTagDofValue(const std::string & var_name,
264 : const std::string & tag_param_name,
265 : unsigned int comp) const
266 : {
267 0 : if (!_c_parameters.isParamValid(tag_param_name))
268 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
269 :
270 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
271 :
272 0 : return kokkosCoupledVectorTagDofValueByName(var_name, tag_name, comp);
273 0 : }
274 :
275 : Moose::Kokkos::VariableValue
276 0 : Coupleable::kokkosCoupledVectorTagDofValues(const std::string & var_name,
277 : const std::string & tag_param_name) const
278 : {
279 0 : if (!_c_parameters.isParamValid(tag_param_name))
280 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
281 :
282 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
283 :
284 0 : return kokkosCoupledVectorTagDofValuesByName(var_name, tag_name);
285 0 : }
286 :
287 : Moose::Kokkos::VariableValue
288 1563 : Coupleable::kokkosCoupledValue(const std::string & var_name, unsigned int comp) const
289 : {
290 1563 : return _c_nodal ? kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_TAG, comp)
291 857 : : kokkosCoupledVectorTagValueByName(var_name, Moose::SOLUTION_TAG, comp);
292 : }
293 :
294 : Moose::Kokkos::VariableValue
295 135 : Coupleable::kokkosCoupledValues(const std::string & var_name) const
296 : {
297 135 : return _c_nodal ? kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_TAG)
298 79 : : kokkosCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_TAG);
299 : }
300 :
301 : Moose::Kokkos::VariableGradient
302 665 : Coupleable::kokkosCoupledGradient(const std::string & var_name, unsigned int comp) const
303 : {
304 665 : return kokkosCoupledVectorTagGradientByName(var_name, Moose::SOLUTION_TAG, comp);
305 : }
306 :
307 : Moose::Kokkos::VariableGradient
308 0 : Coupleable::kokkosCoupledGradients(const std::string & var_name) const
309 : {
310 0 : return kokkosCoupledVectorTagGradientsByName(var_name, Moose::SOLUTION_TAG);
311 : }
312 :
313 : Moose::Kokkos::VariableValue
314 274 : Coupleable::kokkosCoupledNodalValue(const std::string & var_name, unsigned int comp) const
315 : {
316 274 : return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_TAG, comp);
317 : }
318 :
319 : Moose::Kokkos::VariableValue
320 0 : Coupleable::kokkosCoupledNodalValues(const std::string & var_name) const
321 : {
322 0 : return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_TAG);
323 : }
324 :
325 : Moose::Kokkos::VariableValue
326 34 : Coupleable::kokkosCoupledDofValue(const std::string & var_name, unsigned int comp) const
327 : {
328 34 : return kokkosCoupledVectorTagDofValueByName(var_name, Moose::SOLUTION_TAG, comp);
329 : }
330 :
331 : Moose::Kokkos::VariableValue
332 0 : Coupleable::kokkosCoupledDofValues(const std::string & var_name) const
333 : {
334 0 : return kokkosCoupledVectorTagDofValuesByName(var_name, Moose::SOLUTION_TAG);
335 : }
336 :
337 : Moose::Kokkos::VariableValue
338 34 : Coupleable::kokkosCoupledValueOld(const std::string & var_name, unsigned int comp) const
339 : {
340 34 : return _c_nodal ? kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp)
341 18 : : kokkosCoupledVectorTagValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
342 : }
343 :
344 : Moose::Kokkos::VariableValue
345 0 : Coupleable::kokkosCoupledValuesOld(const std::string & var_name) const
346 : {
347 0 : return _c_nodal ? kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLD_SOLUTION_TAG)
348 0 : : kokkosCoupledVectorTagValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
349 : }
350 :
351 : Moose::Kokkos::VariableGradient
352 0 : Coupleable::kokkosCoupledGradientOld(const std::string & var_name, unsigned int comp) const
353 : {
354 0 : return kokkosCoupledVectorTagGradientByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
355 : }
356 :
357 : Moose::Kokkos::VariableGradient
358 0 : Coupleable::kokkosCoupledGradientsOld(const std::string & var_name) const
359 : {
360 0 : return kokkosCoupledVectorTagGradientsByName(var_name, Moose::OLD_SOLUTION_TAG);
361 : }
362 :
363 : Moose::Kokkos::VariableValue
364 0 : Coupleable::kokkosCoupledNodalValueOld(const std::string & var_name, unsigned int comp) const
365 : {
366 0 : return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
367 : }
368 :
369 : Moose::Kokkos::VariableValue
370 0 : Coupleable::kokkosCoupledNodalValuesOld(const std::string & var_name) const
371 : {
372 0 : return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
373 : }
374 :
375 : Moose::Kokkos::VariableValue
376 17 : Coupleable::kokkosCoupledDofValueOld(const std::string & var_name, unsigned int comp) const
377 : {
378 17 : return kokkosCoupledVectorTagDofValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
379 : }
380 :
381 : Moose::Kokkos::VariableValue
382 0 : Coupleable::kokkosCoupledDofValuesOld(const std::string & var_name) const
383 : {
384 0 : return kokkosCoupledVectorTagDofValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
385 : }
386 :
387 : Moose::Kokkos::VariableValue
388 17 : Coupleable::kokkosCoupledValueOlder(const std::string & var_name, unsigned int comp) const
389 : {
390 17 : return _c_nodal
391 9 : ? kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp)
392 9 : : kokkosCoupledVectorTagValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
393 : }
394 :
395 : Moose::Kokkos::VariableValue
396 0 : Coupleable::kokkosCoupledValuesOlder(const std::string & var_name) const
397 : {
398 0 : return _c_nodal ? kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLDER_SOLUTION_TAG)
399 0 : : kokkosCoupledVectorTagValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
400 : }
401 :
402 : Moose::Kokkos::VariableGradient
403 0 : Coupleable::kokkosCoupledGradientOlder(const std::string & var_name, unsigned int comp) const
404 : {
405 0 : return kokkosCoupledVectorTagGradientByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
406 : }
407 :
408 : Moose::Kokkos::VariableGradient
409 0 : Coupleable::kokkosCoupledGradientsOlder(const std::string & var_name) const
410 : {
411 0 : return kokkosCoupledVectorTagGradientsByName(var_name, Moose::OLDER_SOLUTION_TAG);
412 : }
413 :
414 : Moose::Kokkos::VariableValue
415 0 : Coupleable::kokkosCoupledNodalValueOlder(const std::string & var_name, unsigned int comp) const
416 : {
417 0 : return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
418 : }
419 :
420 : Moose::Kokkos::VariableValue
421 0 : Coupleable::kokkosCoupledNodalValuesOlder(const std::string & var_name) const
422 : {
423 0 : return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
424 : }
425 :
426 : Moose::Kokkos::VariableValue
427 17 : Coupleable::kokkosCoupledDofValueOlder(const std::string & var_name, unsigned int comp) const
428 : {
429 17 : return kokkosCoupledVectorTagDofValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
430 : }
431 :
432 : Moose::Kokkos::VariableValue
433 0 : Coupleable::kokkosCoupledDofValuesOlder(const std::string & var_name) const
434 : {
435 0 : return kokkosCoupledVectorTagDofValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
436 : }
437 :
438 : Moose::Kokkos::VariableValue
439 29 : Coupleable::kokkosCoupledDot(const std::string & var_name, unsigned int comp) const
440 : {
441 29 : return _c_nodal ? kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp)
442 15 : : kokkosCoupledVectorTagValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
443 : }
444 :
445 : Moose::Kokkos::VariableValue
446 0 : Coupleable::kokkosCoupledDots(const std::string & var_name) const
447 : {
448 0 : return _c_nodal ? kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_DOT_TAG)
449 0 : : kokkosCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
450 : }
451 :
452 : Moose::Kokkos::VariableValue
453 0 : Coupleable::kokkosCoupledNodalDot(const std::string & var_name, unsigned int comp) const
454 : {
455 0 : return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
456 : }
457 :
458 : Moose::Kokkos::VariableValue
459 0 : Coupleable::kokkosCoupledNodalDots(const std::string & var_name) const
460 : {
461 0 : return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
462 : }
463 :
464 : Moose::Kokkos::ADVariableValue
465 138 : Coupleable::kokkosADCoupledVectorTagValueByName(const std::string & var_name,
466 : const std::string & tag_name,
467 : unsigned int comp) const
468 : {
469 138 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
470 :
471 276 : return Moose::Kokkos::ADVariableValue(variable);
472 138 : }
473 :
474 : Moose::Kokkos::ADVariableValue
475 0 : Coupleable::kokkosADCoupledVectorTagValuesByName(const std::string & var_name,
476 : const std::string & tag_name) const
477 : {
478 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
479 :
480 0 : return Moose::Kokkos::ADVariableValue(variable);
481 0 : }
482 :
483 : Moose::Kokkos::ADVariableGradient
484 0 : Coupleable::kokkosADCoupledVectorTagGradientByName(const std::string & var_name,
485 : const std::string & tag_name,
486 : unsigned int comp) const
487 : {
488 0 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
489 :
490 0 : return Moose::Kokkos::ADVariableGradient(variable);
491 0 : }
492 :
493 : Moose::Kokkos::ADVariableGradient
494 0 : Coupleable::kokkosADCoupledVectorTagGradientsByName(const std::string & var_name,
495 : const std::string & tag_name) const
496 : {
497 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
498 :
499 0 : return Moose::Kokkos::ADVariableGradient(variable);
500 0 : }
501 :
502 : Moose::Kokkos::ADVariableValue
503 0 : Coupleable::kokkosADCoupledVectorTagNodalValueByName(const std::string & var_name,
504 : const std::string & tag_name,
505 : unsigned int comp) const
506 : {
507 0 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
508 :
509 0 : if (!variable.nodal())
510 0 : mooseError("Cannot get nodal values from the coupled variable '",
511 : var_name,
512 : "', because the associated variable is not nodal.");
513 :
514 0 : return Moose::Kokkos::ADVariableValue(variable, true);
515 0 : }
516 :
517 : Moose::Kokkos::ADVariableValue
518 0 : Coupleable::kokkosADCoupledVectorTagNodalValuesByName(const std::string & var_name,
519 : const std::string & tag_name) const
520 : {
521 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
522 :
523 0 : if (!variable.nodal())
524 0 : mooseError("Cannot get nodal values from the coupled variable '",
525 : var_name,
526 : "', because the associated variable is not nodal.");
527 :
528 0 : return Moose::Kokkos::ADVariableValue(variable, true);
529 0 : }
530 :
531 : Moose::Kokkos::ADVariableValue
532 0 : Coupleable::kokkosADCoupledVectorTagDofValueByName(const std::string & var_name,
533 : const std::string & tag_name,
534 : unsigned int comp) const
535 : {
536 0 : auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
537 :
538 0 : return Moose::Kokkos::ADVariableValue(variable, true);
539 0 : }
540 :
541 : Moose::Kokkos::ADVariableValue
542 0 : Coupleable::kokkosADCoupledVectorTagDofValuesByName(const std::string & var_name,
543 : const std::string & tag_name) const
544 : {
545 0 : auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
546 :
547 0 : return Moose::Kokkos::ADVariableValue(variable, true);
548 0 : }
549 :
550 : Moose::Kokkos::ADVariableValue
551 0 : Coupleable::kokkosADCoupledVectorTagValue(const std::string & var_name,
552 : const std::string & tag_param_name,
553 : unsigned int comp) const
554 : {
555 0 : if (!_c_parameters.isParamValid(tag_param_name))
556 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
557 :
558 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
559 :
560 0 : return kokkosADCoupledVectorTagValueByName(var_name, tag_name, comp);
561 0 : }
562 :
563 : Moose::Kokkos::ADVariableValue
564 0 : Coupleable::kokkosADCoupledVectorTagValues(const std::string & var_name,
565 : const std::string & tag_param_name) const
566 : {
567 0 : if (!_c_parameters.isParamValid(tag_param_name))
568 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
569 :
570 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
571 :
572 0 : return kokkosADCoupledVectorTagValuesByName(var_name, tag_name);
573 0 : }
574 :
575 : Moose::Kokkos::ADVariableGradient
576 0 : Coupleable::kokkosADCoupledVectorTagGradient(const std::string & var_name,
577 : const std::string & tag_param_name,
578 : unsigned int comp) const
579 : {
580 0 : if (!_c_parameters.isParamValid(tag_param_name))
581 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
582 :
583 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
584 :
585 0 : return kokkosADCoupledVectorTagGradientByName(var_name, tag_name, comp);
586 0 : }
587 :
588 : Moose::Kokkos::ADVariableGradient
589 0 : Coupleable::kokkosADCoupledVectorTagGradients(const std::string & var_name,
590 : const std::string & tag_param_name) const
591 : {
592 0 : if (!_c_parameters.isParamValid(tag_param_name))
593 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
594 :
595 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
596 :
597 0 : return kokkosADCoupledVectorTagGradientsByName(var_name, tag_name);
598 0 : }
599 :
600 : Moose::Kokkos::ADVariableValue
601 0 : Coupleable::kokkosADCoupledVectorTagNodalValue(const std::string & var_name,
602 : const std::string & tag_param_name,
603 : unsigned int comp) const
604 : {
605 0 : if (!_c_parameters.isParamValid(tag_param_name))
606 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
607 :
608 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
609 :
610 0 : return kokkosADCoupledVectorTagNodalValueByName(var_name, tag_name, comp);
611 0 : }
612 :
613 : Moose::Kokkos::ADVariableValue
614 0 : Coupleable::kokkosADCoupledVectorTagNodalValues(const std::string & var_name,
615 : const std::string & tag_param_name) const
616 : {
617 0 : if (!_c_parameters.isParamValid(tag_param_name))
618 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
619 :
620 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
621 :
622 0 : return kokkosADCoupledVectorTagNodalValuesByName(var_name, tag_name);
623 0 : }
624 :
625 : Moose::Kokkos::ADVariableValue
626 0 : Coupleable::kokkosADCoupledVectorTagDofValue(const std::string & var_name,
627 : const std::string & tag_param_name,
628 : unsigned int comp) const
629 : {
630 0 : if (!_c_parameters.isParamValid(tag_param_name))
631 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
632 :
633 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
634 :
635 0 : return kokkosADCoupledVectorTagDofValueByName(var_name, tag_name, comp);
636 0 : }
637 :
638 : Moose::Kokkos::ADVariableValue
639 0 : Coupleable::kokkosADCoupledVectorTagDofValues(const std::string & var_name,
640 : const std::string & tag_param_name) const
641 : {
642 0 : if (!_c_parameters.isParamValid(tag_param_name))
643 0 : mooseError("Tag name parameter '", tag_param_name, "' is invalid");
644 :
645 0 : TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
646 :
647 0 : return kokkosADCoupledVectorTagDofValuesByName(var_name, tag_name);
648 0 : }
649 :
650 : Moose::Kokkos::ADVariableValue
651 92 : Coupleable::kokkosADCoupledValue(const std::string & var_name, unsigned int comp) const
652 : {
653 92 : return _c_nodal ? kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_TAG, comp)
654 48 : : kokkosADCoupledVectorTagValueByName(var_name, Moose::SOLUTION_TAG, comp);
655 : }
656 :
657 : Moose::Kokkos::ADVariableValue
658 0 : Coupleable::kokkosADCoupledValues(const std::string & var_name) const
659 : {
660 0 : return _c_nodal ? kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_TAG)
661 0 : : kokkosADCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_TAG);
662 : }
663 :
664 : Moose::Kokkos::ADVariableGradient
665 0 : Coupleable::kokkosADCoupledGradient(const std::string & var_name, unsigned int comp) const
666 : {
667 0 : return kokkosADCoupledVectorTagGradientByName(var_name, Moose::SOLUTION_TAG, comp);
668 : }
669 :
670 : Moose::Kokkos::ADVariableGradient
671 0 : Coupleable::kokkosADCoupledGradients(const std::string & var_name) const
672 : {
673 0 : return kokkosADCoupledVectorTagGradientsByName(var_name, Moose::SOLUTION_TAG);
674 : }
675 :
676 : Moose::Kokkos::ADVariableValue
677 0 : Coupleable::kokkosADCoupledNodalValue(const std::string & var_name, unsigned int comp) const
678 : {
679 0 : return kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_TAG, comp);
680 : }
681 :
682 : Moose::Kokkos::ADVariableValue
683 0 : Coupleable::kokkosADCoupledNodalValues(const std::string & var_name) const
684 : {
685 0 : return kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_TAG);
686 : }
687 :
688 : Moose::Kokkos::ADVariableValue
689 0 : Coupleable::kokkosADCoupledDofValue(const std::string & var_name, unsigned int comp) const
690 : {
691 0 : return kokkosADCoupledVectorTagDofValueByName(var_name, Moose::SOLUTION_TAG, comp);
692 : }
693 :
694 : Moose::Kokkos::ADVariableValue
695 0 : Coupleable::kokkosADCoupledDofValues(const std::string & var_name) const
696 : {
697 0 : return kokkosADCoupledVectorTagDofValuesByName(var_name, Moose::SOLUTION_TAG);
698 : }
699 :
700 : Moose::Kokkos::ADVariableValue
701 0 : Coupleable::kokkosADCoupledValueOld(const std::string & var_name, unsigned int comp) const
702 : {
703 0 : return _c_nodal
704 0 : ? kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp)
705 0 : : kokkosADCoupledVectorTagValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
706 : }
707 :
708 : Moose::Kokkos::ADVariableValue
709 0 : Coupleable::kokkosADCoupledValuesOld(const std::string & var_name) const
710 : {
711 0 : return _c_nodal ? kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::OLD_SOLUTION_TAG)
712 0 : : kokkosADCoupledVectorTagValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
713 : }
714 :
715 : Moose::Kokkos::ADVariableGradient
716 0 : Coupleable::kokkosADCoupledGradientOld(const std::string & var_name, unsigned int comp) const
717 : {
718 0 : return kokkosADCoupledVectorTagGradientByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
719 : }
720 :
721 : Moose::Kokkos::ADVariableGradient
722 0 : Coupleable::kokkosADCoupledGradientsOld(const std::string & var_name) const
723 : {
724 0 : return kokkosADCoupledVectorTagGradientsByName(var_name, Moose::OLD_SOLUTION_TAG);
725 : }
726 :
727 : Moose::Kokkos::ADVariableValue
728 0 : Coupleable::kokkosADCoupledNodalValueOld(const std::string & var_name, unsigned int comp) const
729 : {
730 0 : return kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
731 : }
732 :
733 : Moose::Kokkos::ADVariableValue
734 0 : Coupleable::kokkosADCoupledNodalValuesOld(const std::string & var_name) const
735 : {
736 0 : return kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
737 : }
738 :
739 : Moose::Kokkos::ADVariableValue
740 0 : Coupleable::kokkosADCoupledDofValueOld(const std::string & var_name, unsigned int comp) const
741 : {
742 0 : return kokkosADCoupledVectorTagDofValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
743 : }
744 :
745 : Moose::Kokkos::ADVariableValue
746 0 : Coupleable::kokkosADCoupledDofValuesOld(const std::string & var_name) const
747 : {
748 0 : return kokkosADCoupledVectorTagDofValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
749 : }
750 :
751 : Moose::Kokkos::ADVariableValue
752 0 : Coupleable::kokkosADCoupledValueOlder(const std::string & var_name, unsigned int comp) const
753 : {
754 0 : return _c_nodal
755 0 : ? kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp)
756 0 : : kokkosADCoupledVectorTagValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
757 : }
758 :
759 : Moose::Kokkos::ADVariableValue
760 0 : Coupleable::kokkosADCoupledValuesOlder(const std::string & var_name) const
761 : {
762 0 : return _c_nodal ? kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::OLDER_SOLUTION_TAG)
763 0 : : kokkosADCoupledVectorTagValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
764 : }
765 :
766 : Moose::Kokkos::ADVariableGradient
767 0 : Coupleable::kokkosADCoupledGradientOlder(const std::string & var_name, unsigned int comp) const
768 : {
769 0 : return kokkosADCoupledVectorTagGradientByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
770 : }
771 :
772 : Moose::Kokkos::ADVariableGradient
773 0 : Coupleable::kokkosADCoupledGradientsOlder(const std::string & var_name) const
774 : {
775 0 : return kokkosADCoupledVectorTagGradientsByName(var_name, Moose::OLDER_SOLUTION_TAG);
776 : }
777 :
778 : Moose::Kokkos::ADVariableValue
779 0 : Coupleable::kokkosADCoupledNodalValueOlder(const std::string & var_name, unsigned int comp) const
780 : {
781 0 : return kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
782 : }
783 :
784 : Moose::Kokkos::ADVariableValue
785 0 : Coupleable::kokkosADCoupledNodalValuesOlder(const std::string & var_name) const
786 : {
787 0 : return kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
788 : }
789 :
790 : Moose::Kokkos::ADVariableValue
791 0 : Coupleable::kokkosADCoupledDofValueOlder(const std::string & var_name, unsigned int comp) const
792 : {
793 0 : return kokkosADCoupledVectorTagDofValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
794 : }
795 :
796 : Moose::Kokkos::ADVariableValue
797 0 : Coupleable::kokkosADCoupledDofValuesOlder(const std::string & var_name) const
798 : {
799 0 : return kokkosADCoupledVectorTagDofValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
800 : }
801 :
802 : Moose::Kokkos::ADVariableValue
803 46 : Coupleable::kokkosADCoupledDot(const std::string & var_name, unsigned int comp) const
804 : {
805 46 : return _c_nodal
806 24 : ? kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp)
807 24 : : kokkosADCoupledVectorTagValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
808 : }
809 :
810 : Moose::Kokkos::ADVariableValue
811 0 : Coupleable::kokkosADCoupledDots(const std::string & var_name) const
812 : {
813 0 : return _c_nodal ? kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_DOT_TAG)
814 0 : : kokkosADCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
815 : }
816 :
817 : Moose::Kokkos::ADVariableValue
818 0 : Coupleable::kokkosADCoupledNodalDot(const std::string & var_name, unsigned int comp) const
819 : {
820 0 : return kokkosADCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
821 : }
822 :
823 : Moose::Kokkos::ADVariableValue
824 0 : Coupleable::kokkosADCoupledNodalDots(const std::string & var_name) const
825 : {
826 0 : return kokkosADCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
827 : }
828 :
829 : Moose::Kokkos::Scalar<const Real>
830 29 : Coupleable::kokkosCoupledDotDu(const std::string & var_name, unsigned int comp) const
831 : {
832 29 : const auto var = getVar(var_name, comp);
833 :
834 29 : if (!var)
835 0 : return Moose::Kokkos::Scalar<const Real>(_kokkos_default_value_zero);
836 : else
837 29 : return Moose::Kokkos::Scalar<const Real>(var->sys().duDotDu(var->number() + comp));
838 : }
839 :
840 : Moose::Kokkos::VariableValue
841 306 : Coupleable::kokkosZeroValue() const
842 : {
843 306 : auto variable = kokkosZeroVariable();
844 :
845 612 : return Moose::Kokkos::VariableValue(variable);
846 306 : }
847 :
848 : Moose::Kokkos::VariableGradient
849 0 : Coupleable::kokkosZeroGradient() const
850 : {
851 0 : auto variable = kokkosZeroVariable();
852 :
853 0 : return Moose::Kokkos::VariableGradient(variable);
854 0 : }
855 :
856 : Moose::Kokkos::VariableValue
857 0 : Coupleable::kokkosZeroNodalValue() const
858 : {
859 0 : auto variable = kokkosZeroVariable();
860 :
861 0 : return Moose::Kokkos::VariableValue(variable, true);
862 0 : }
|