LCOV - code coverage report
Current view: top level - src/kokkos/interfaces - KokkosCoupleable.K (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 6f668f Lines: 65 165 39.4 %
Date: 2025-09-22 20:01:15 Functions: 13 41 31.7 %
Legend: Lines: hit not hit

          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             : Moose::Kokkos::Variable
      17         478 : Coupleable::kokkosCoupledVectorTagVariable(const std::string & var_name,
      18             :                                            const std::string & tag_name,
      19             :                                            unsigned int comp)
      20             : {
      21         478 :   Moose::Kokkos::Variable variable;
      22             : 
      23         478 :   if (isCoupled(var_name))
      24             :   {
      25         447 :     const auto tag = _c_fe_problem.getVectorTagID(tag_name);
      26             : 
      27          98 :     auto var = const_cast<MooseVariableField<Real> *>(
      28         349 :         getVarHelper<MooseVariableField<Real>>(var_name, comp));
      29             : 
      30         447 :     if (tag_name == Moose::OLD_SOLUTION_TAG)
      31           0 :       var->sys().needSolutionState(1);
      32         447 :     else if (tag_name == Moose::OLDER_SOLUTION_TAG)
      33           0 :       var->sys().needSolutionState(2);
      34             : 
      35         894 :     variable.init({var}, tag, {});
      36             : 
      37         447 :     addFEVariableCoupleableVectorTag(tag);
      38             :   }
      39             :   else
      40          93 :     variable.init({_c_parameters.defaultCoupledValue(var_name, comp)}, {});
      41             : 
      42         478 :   return variable;
      43           0 : }
      44             : 
      45             : Moose::Kokkos::Variable
      46          12 : Coupleable::kokkosCoupledVectorTagVariables(const std::string & var_name,
      47             :                                             const std::string & tag_name)
      48             : {
      49          12 :   Moose::Kokkos::Variable variable;
      50             : 
      51          12 :   const auto components = coupledComponents(var_name);
      52             : 
      53          12 :   if (isCoupled(var_name))
      54             :   {
      55          12 :     const auto tag = _c_fe_problem.getVectorTagID(tag_name);
      56             : 
      57          12 :     std::vector<const MooseVariableBase *> vars;
      58             : 
      59          36 :     for (unsigned int comp = 0; comp < components; ++comp)
      60             :     {
      61           6 :       auto var = const_cast<MooseVariableField<Real> *>(
      62          18 :           getVarHelper<MooseVariableField<Real>>(var_name, comp));
      63             : 
      64          24 :       if (tag_name == Moose::OLD_SOLUTION_TAG)
      65           0 :         var->sys().needSolutionState(1);
      66          24 :       else if (tag_name == Moose::OLDER_SOLUTION_TAG)
      67           0 :         var->sys().needSolutionState(2);
      68             : 
      69          24 :       vars.push_back(var);
      70             :     }
      71             : 
      72          12 :     variable.init({vars}, tag, {});
      73             : 
      74          12 :     addFEVariableCoupleableVectorTag(tag);
      75          12 :   }
      76             :   else
      77             :   {
      78           0 :     std::vector<Real> default_values(components);
      79             : 
      80           0 :     for (unsigned int comp = 0; comp < components; ++comp)
      81           0 :       default_values[comp] = _c_parameters.defaultCoupledValue(var_name, comp);
      82             : 
      83           0 :     variable.init(default_values, {});
      84           0 :   }
      85             : 
      86          12 :   return variable;
      87           0 : }
      88             : 
      89             : Moose::Kokkos::Variable
      90         195 : Coupleable::kokkosZeroVariable()
      91             : {
      92         195 :   Moose::Kokkos::Variable variable;
      93             : 
      94         390 :   variable.init({0}, {});
      95             : 
      96         195 :   return variable;
      97           0 : }
      98             : 
      99             : Moose::Kokkos::VariableValue
     100         294 : Coupleable::kokkosCoupledVectorTagValueByName(const std::string & var_name,
     101             :                                               const std::string & tag_name,
     102             :                                               unsigned int comp)
     103             : {
     104         294 :   auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
     105             : 
     106         588 :   return Moose::Kokkos::VariableValue(variable);
     107         294 : }
     108             : 
     109             : Moose::Kokkos::VariableValue
     110          12 : Coupleable::kokkosCoupledVectorTagValuesByName(const std::string & var_name,
     111             :                                                const std::string & tag_name)
     112             : {
     113          12 :   auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
     114             : 
     115          24 :   return Moose::Kokkos::VariableValue(variable);
     116          12 : }
     117             : 
     118             : Moose::Kokkos::VariableGradient
     119           0 : Coupleable::kokkosCoupledVectorTagGradientByName(const std::string & var_name,
     120             :                                                  const std::string & tag_name,
     121             :                                                  unsigned int comp)
     122             : {
     123           0 :   auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
     124             : 
     125           0 :   return Moose::Kokkos::VariableGradient(variable);
     126           0 : }
     127             : 
     128             : Moose::Kokkos::VariableGradient
     129           0 : Coupleable::kokkosCoupledVectorTagGradientsByName(const std::string & var_name,
     130             :                                                   const std::string & tag_name)
     131             : {
     132           0 :   auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
     133             : 
     134           0 :   return Moose::Kokkos::VariableGradient(variable);
     135           0 : }
     136             : 
     137             : Moose::Kokkos::VariableNodalValue
     138         184 : Coupleable::kokkosCoupledVectorTagNodalValueByName(const std::string & var_name,
     139             :                                                    const std::string & tag_name,
     140             :                                                    unsigned int comp)
     141             : {
     142         184 :   auto variable = kokkosCoupledVectorTagVariable(var_name, tag_name, comp);
     143             : 
     144         368 :   return Moose::Kokkos::VariableNodalValue(_c_fe_problem.getKokkosSystems(), variable);
     145         184 : }
     146             : 
     147             : Moose::Kokkos::VariableNodalValue
     148           0 : Coupleable::kokkosCoupledVectorTagNodalValuesByName(const std::string & var_name,
     149             :                                                     const std::string & tag_name)
     150             : {
     151           0 :   auto variable = kokkosCoupledVectorTagVariables(var_name, tag_name);
     152             : 
     153           0 :   return Moose::Kokkos::VariableNodalValue(_c_fe_problem.getKokkosSystems(), variable);
     154           0 : }
     155             : 
     156             : Moose::Kokkos::VariableValue
     157         156 : Coupleable::kokkosCoupledVectorTagValue(const std::string & var_name,
     158             :                                         const std::string & tag_param_name,
     159             :                                         unsigned int comp)
     160             : {
     161         156 :   if (!_c_parameters.isParamValid(tag_param_name))
     162           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     163             : 
     164         156 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     165             : 
     166         312 :   return kokkosCoupledVectorTagValueByName(var_name, tag_name, comp);
     167         156 : }
     168             : 
     169             : Moose::Kokkos::VariableValue
     170           0 : Coupleable::kokkosCoupledVectorTagValues(const std::string & var_name,
     171             :                                          const std::string & tag_param_name)
     172             : {
     173           0 :   if (!_c_parameters.isParamValid(tag_param_name))
     174           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     175             : 
     176           0 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     177             : 
     178           0 :   return kokkosCoupledVectorTagValuesByName(var_name, tag_name);
     179           0 : }
     180             : 
     181             : Moose::Kokkos::VariableGradient
     182           0 : Coupleable::kokkosCoupledVectorTagGradient(const std::string & var_name,
     183             :                                            const std::string & tag_param_name,
     184             :                                            unsigned int comp)
     185             : {
     186           0 :   if (!_c_parameters.isParamValid(tag_param_name))
     187           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     188             : 
     189           0 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     190             : 
     191           0 :   return kokkosCoupledVectorTagGradientByName(var_name, tag_name, comp);
     192           0 : }
     193             : 
     194             : Moose::Kokkos::VariableGradient
     195           0 : Coupleable::kokkosCoupledVectorTagGradients(const std::string & var_name,
     196             :                                             const std::string & tag_param_name)
     197             : {
     198           0 :   if (!_c_parameters.isParamValid(tag_param_name))
     199           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     200             : 
     201           0 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     202             : 
     203           0 :   return kokkosCoupledVectorTagGradientsByName(var_name, tag_name);
     204           0 : }
     205             : 
     206             : Moose::Kokkos::VariableNodalValue
     207           0 : Coupleable::kokkosCoupledVectorTagNodalValue(const std::string & var_name,
     208             :                                              const std::string & tag_param_name,
     209             :                                              unsigned int comp)
     210             : {
     211           0 :   if (!_c_parameters.isParamValid(tag_param_name))
     212           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     213             : 
     214           0 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     215             : 
     216           0 :   return kokkosCoupledVectorTagNodalValueByName(var_name, tag_name, comp);
     217           0 : }
     218             : 
     219             : Moose::Kokkos::VariableNodalValue
     220           0 : Coupleable::kokkosCoupledVectorTagNodalValues(const std::string & var_name,
     221             :                                               const std::string & tag_param_name)
     222             : {
     223           0 :   if (!_c_parameters.isParamValid(tag_param_name))
     224           0 :     mooseError("Tag name parameter '", tag_param_name, "' is invalid");
     225             : 
     226           0 :   TagName tag_name = _c_parameters.get<TagName>(tag_param_name);
     227             : 
     228           0 :   return kokkosCoupledVectorTagNodalValuesByName(var_name, tag_name);
     229           0 : }
     230             : 
     231             : Moose::Kokkos::VariableValue
     232         119 : Coupleable::kokkosCoupledValue(const std::string & var_name, unsigned int comp)
     233             : {
     234         119 :   return kokkosCoupledVectorTagValueByName(var_name, Moose::SOLUTION_TAG, comp);
     235             : }
     236             : 
     237             : Moose::Kokkos::VariableValue
     238          12 : Coupleable::kokkosCoupledValues(const std::string & var_name)
     239             : {
     240          12 :   return kokkosCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_TAG);
     241             : }
     242             : 
     243             : Moose::Kokkos::VariableGradient
     244           0 : Coupleable::kokkosCoupledGradient(const std::string & var_name, unsigned int comp)
     245             : {
     246           0 :   return kokkosCoupledVectorTagGradientByName(var_name, Moose::SOLUTION_TAG, comp);
     247             : }
     248             : 
     249             : Moose::Kokkos::VariableGradient
     250           0 : Coupleable::kokkosCoupledGradients(const std::string & var_name)
     251             : {
     252           0 :   return kokkosCoupledVectorTagGradientsByName(var_name, Moose::SOLUTION_TAG);
     253             : }
     254             : 
     255             : Moose::Kokkos::VariableNodalValue
     256         184 : Coupleable::kokkosCoupledNodalValue(const std::string & var_name, unsigned int comp)
     257             : {
     258         184 :   return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_TAG, comp);
     259             : }
     260             : 
     261             : Moose::Kokkos::VariableNodalValue
     262           0 : Coupleable::kokkosCoupledNodalValues(const std::string & var_name)
     263             : {
     264           0 :   return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_TAG);
     265             : }
     266             : 
     267             : Moose::Kokkos::VariableValue
     268           0 : Coupleable::kokkosCoupledValueOld(const std::string & var_name, unsigned int comp)
     269             : {
     270           0 :   return kokkosCoupledVectorTagValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
     271             : }
     272             : 
     273             : Moose::Kokkos::VariableValue
     274           0 : Coupleable::kokkosCoupledValuesOld(const std::string & var_name)
     275             : {
     276           0 :   return kokkosCoupledVectorTagValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
     277             : }
     278             : 
     279             : Moose::Kokkos::VariableGradient
     280           0 : Coupleable::kokkosCoupledGradientOld(const std::string & var_name, unsigned int comp)
     281             : {
     282           0 :   return kokkosCoupledVectorTagGradientByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
     283             : }
     284             : 
     285             : Moose::Kokkos::VariableGradient
     286           0 : Coupleable::kokkosCoupledGradientsOld(const std::string & var_name)
     287             : {
     288           0 :   return kokkosCoupledVectorTagGradientsByName(var_name, Moose::OLD_SOLUTION_TAG);
     289             : }
     290             : 
     291             : Moose::Kokkos::VariableNodalValue
     292           0 : Coupleable::kokkosCoupledNodalValueOld(const std::string & var_name, unsigned int comp)
     293             : {
     294           0 :   return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLD_SOLUTION_TAG, comp);
     295             : }
     296             : 
     297             : Moose::Kokkos::VariableNodalValue
     298           0 : Coupleable::kokkosCoupledNodalValuesOld(const std::string & var_name)
     299             : {
     300           0 :   return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLD_SOLUTION_TAG);
     301             : }
     302             : 
     303             : Moose::Kokkos::VariableValue
     304           0 : Coupleable::kokkosCoupledValueOlder(const std::string & var_name, unsigned int comp)
     305             : {
     306           0 :   return kokkosCoupledVectorTagValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
     307             : }
     308             : 
     309             : Moose::Kokkos::VariableValue
     310           0 : Coupleable::kokkosCoupledValuesOlder(const std::string & var_name)
     311             : {
     312           0 :   return kokkosCoupledVectorTagValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
     313             : }
     314             : 
     315             : Moose::Kokkos::VariableGradient
     316           0 : Coupleable::kokkosCoupledGradientOlder(const std::string & var_name, unsigned int comp)
     317             : {
     318           0 :   return kokkosCoupledVectorTagGradientByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
     319             : }
     320             : 
     321             : Moose::Kokkos::VariableGradient
     322           0 : Coupleable::kokkosCoupledGradientsOlder(const std::string & var_name)
     323             : {
     324           0 :   return kokkosCoupledVectorTagGradientsByName(var_name, Moose::OLDER_SOLUTION_TAG);
     325             : }
     326             : 
     327             : Moose::Kokkos::VariableNodalValue
     328           0 : Coupleable::kokkosCoupledNodalValueOlder(const std::string & var_name, unsigned int comp)
     329             : {
     330           0 :   return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::OLDER_SOLUTION_TAG, comp);
     331             : }
     332             : 
     333             : Moose::Kokkos::VariableNodalValue
     334           0 : Coupleable::kokkosCoupledNodalValuesOlder(const std::string & var_name)
     335             : {
     336           0 :   return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::OLDER_SOLUTION_TAG);
     337             : }
     338             : 
     339             : Moose::Kokkos::VariableValue
     340          19 : Coupleable::kokkosCoupledDot(const std::string & var_name, unsigned int comp)
     341             : {
     342          19 :   return kokkosCoupledVectorTagValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
     343             : }
     344             : 
     345             : Moose::Kokkos::VariableValue
     346           0 : Coupleable::kokkosCoupledDots(const std::string & var_name)
     347             : {
     348           0 :   return kokkosCoupledVectorTagValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
     349             : }
     350             : 
     351             : Moose::Kokkos::VariableNodalValue
     352           0 : Coupleable::kokkosCoupledNodalDot(const std::string & var_name, unsigned int comp)
     353             : {
     354           0 :   return kokkosCoupledVectorTagNodalValueByName(var_name, Moose::SOLUTION_DOT_TAG, comp);
     355             : }
     356             : 
     357             : Moose::Kokkos::VariableNodalValue
     358           0 : Coupleable::kokkosCoupledNodalDots(const std::string & var_name)
     359             : {
     360           0 :   return kokkosCoupledVectorTagNodalValuesByName(var_name, Moose::SOLUTION_DOT_TAG);
     361             : }
     362             : 
     363             : Moose::Kokkos::Scalar<const Real>
     364          19 : Coupleable::kokkosCoupledDotDu(const std::string & var_name, unsigned int comp)
     365             : {
     366          19 :   const auto var = getVar(var_name, comp);
     367             : 
     368          19 :   if (!var)
     369           0 :     return Moose::Kokkos::Scalar<const Real>(_kokkos_default_value_zero);
     370             :   else
     371          19 :     return Moose::Kokkos::Scalar<const Real>(var->sys().duDotDu(var->number() + comp));
     372             : }
     373             : 
     374             : Moose::Kokkos::VariableValue
     375         195 : Coupleable::kokkosZeroValue()
     376             : {
     377         195 :   auto variable = kokkosZeroVariable();
     378             : 
     379         390 :   return Moose::Kokkos::VariableValue(variable);
     380         195 : }
     381             : 
     382             : Moose::Kokkos::VariableGradient
     383           0 : Coupleable::kokkosZeroGradient()
     384             : {
     385           0 :   auto variable = kokkosZeroVariable();
     386             : 
     387           0 :   return Moose::Kokkos::VariableGradient(variable);
     388           0 : }
     389             : 
     390             : Moose::Kokkos::VariableNodalValue
     391           0 : Coupleable::kokkosZeroNodalValue()
     392             : {
     393           0 :   auto variable = kokkosZeroVariable();
     394             : 
     395           0 :   return Moose::Kokkos::VariableNodalValue(_c_fe_problem.getKokkosSystems(), variable);
     396           0 : }

Generated by: LCOV version 1.14