LCOV - code coverage report
Current view: top level - src/actions - MastodonOutputsAction.C (source / functions) Hit Total Coverage
Test: idaholab/mastodon: 55510a Lines: 48 49 98.0 %
Date: 2025-08-26 23:09:31 Functions: 5 5 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*************************************************/
       2             : /*           DO NOT MODIFY THIS HEADER           */
       3             : /*                                               */
       4             : /*                     MASTODON                  */
       5             : /*                                               */
       6             : /*    (c) 2015 Battelle Energy Alliance, LLC     */
       7             : /*            ALL RIGHTS RESERVED                */
       8             : /*                                               */
       9             : /*   Prepared by Battelle Energy Alliance, LLC   */
      10             : /*     With the U. S. Department of Energy       */
      11             : /*                                               */
      12             : /*     See COPYRIGHT for full restrictions       */
      13             : /*************************************************/
      14             : 
      15             : #include "MastodonOutputsAction.h"
      16             : 
      17             : // MOOSE includes
      18             : #include "Conversion.h"
      19             : #include "Factory.h"
      20             : #include "FEProblem.h"
      21             : #include "MooseMesh.h"
      22             : #include "Action.h"
      23             : #include "MooseObjectAction.h"
      24             : 
      25             : registerMooseAction("MastodonApp", MastodonOutputsAction, "add_aux_variable");
      26             : 
      27             : registerMooseAction("MastodonApp", MastodonOutputsAction, "add_aux_kernel");
      28             : 
      29             : InputParameters
      30           9 : MastodonOutputsAction::validParams()
      31             : {
      32           9 :   InputParameters params = Action::validParams();
      33           9 :   params.addClassDescription("Create required objects for requested output.");
      34          18 :   params.addParam<bool>(
      35          18 :       "stress_strain_output", false, "true, if stress and strain output is required.");
      36           9 :   return params;
      37           0 : }
      38             : 
      39           9 : MastodonOutputsAction::MastodonOutputsAction(const InputParameters & params)
      40             :   : Action(params),
      41          72 :     _stress_auxvariables(
      42             :         {"stress_xx", "stress_yy", "stress_xy", "stress_zz", "stress_zx", "stress_yz"}),
      43          81 :     _strain_auxvariables(
      44             :         {"strain_xx", "strain_yy", "strain_xy", "strain_zz", "strain_zx", "strain_yz"}),
      45          18 :     _matrix_size({1, 3, 6}) // =1 for 1D, =3 for 2D, and =6 for 3D problems
      46             : {
      47           9 : }
      48             : 
      49             : void
      50          18 : MastodonOutputsAction::act()
      51             : {
      52             :   // Creating stress and strain AuxVariables and AuxKernels when stress and strain output is
      53             :   // requested
      54          36 :   const bool stress_strain_output = getParam<bool>("stress_strain_output");
      55          18 :   if (stress_strain_output)
      56             :   {
      57          18 :     if (_current_task == "add_aux_variable")
      58           9 :       addStressStrainAuxVariables();
      59             : 
      60          18 :     if (_current_task == "add_aux_kernel")
      61           9 :       addStressStrainAuxKernels();
      62             :   }
      63          18 : }
      64             : 
      65             : void
      66           9 : MastodonOutputsAction::addStressStrainAuxVariables()
      67             : {
      68           9 :   auto var_params = _factory.getValidParams("MooseVariable");
      69          18 :   var_params.set<MooseEnum>("family") = "MONOMIAL";
      70          18 :   var_params.set<MooseEnum>("order") = "CONSTANT";
      71             : 
      72          54 :   for (std::size_t k = 0; k < _matrix_size[_problem->mesh().dimension() - 1]; k++)
      73             :   {
      74          45 :     if (!_problem->hasVariable(_stress_auxvariables[k]))
      75             :     {
      76          45 :       _problem->addAuxVariable("MooseVariable", _stress_auxvariables[k], var_params);
      77          90 :       _problem->addAuxVariable("MooseVariable", _strain_auxvariables[k], var_params);
      78             :     }
      79             :   }
      80           9 : }
      81             : 
      82             : void
      83           9 : MastodonOutputsAction::addStressStrainAuxKernels()
      84             : {
      85           9 :   const std::vector<unsigned int> index_i = {0, 1, 1, 2, 2, 1};
      86           9 :   const std::vector<unsigned int> index_j = {0, 1, 0, 2, 0, 2};
      87          54 :   for (std::size_t k = 0; k < _matrix_size[_problem->mesh().dimension() - 1]; k++)
      88             :   {
      89          90 :     InputParameters stress_kernel_params = _factory.getValidParams("RankTwoAux");
      90          90 :     stress_kernel_params.set<MaterialPropertyName>("rank_two_tensor") = "stress";
      91          90 :     stress_kernel_params.set<AuxVariableName>("variable") = _stress_auxvariables[k];
      92          45 :     stress_kernel_params.set<unsigned int>("index_i") = index_i[k];
      93          45 :     stress_kernel_params.set<unsigned int>("index_j") = index_j[k];
      94          45 :     stress_kernel_params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
      95          45 :     _problem->addAuxKernel("RankTwoAux", _stress_auxvariables[k], stress_kernel_params);
      96             : 
      97          90 :     InputParameters strain_kernel_params = _factory.getValidParams("RankTwoAux");
      98          90 :     strain_kernel_params.set<MaterialPropertyName>("rank_two_tensor") = "total_strain";
      99          90 :     strain_kernel_params.set<AuxVariableName>("variable") = _strain_auxvariables[k];
     100          45 :     strain_kernel_params.set<unsigned int>("index_i") = index_i[k];
     101          45 :     strain_kernel_params.set<unsigned int>("index_j") = index_j[k];
     102          45 :     strain_kernel_params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
     103          45 :     _problem->addAuxKernel("RankTwoAux", _strain_auxvariables[k], strain_kernel_params);
     104          45 :   }
     105           9 : }

Generated by: LCOV version 1.14