LCOV - code coverage report
Current view: top level - src/neml2 - NEML2SmallStrain.C (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: #33187 (5aa0b2) with base d7c4bd Lines: 0 21 0.0 %
Date: 2026-06-30 12:24:09 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       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             : #ifdef NEML2_ENABLED
      11             : 
      12             : // NEML2 includes
      13             : #include "neml2/tensors/functions/stack.h"
      14             : 
      15             : // MOOSE includes
      16             : #include "NEML2SmallStrain.h"
      17             : 
      18             : registerMooseObject("SolidMechanicsApp", NEML2SmallStrain);
      19             : 
      20             : InputParameters
      21           0 : NEML2SmallStrain::validParams()
      22             : {
      23           0 :   InputParameters params = NEML2PreKernel::validParams();
      24           0 :   params.addClassDescription(
      25             :       "This user object calculates the small strain from displacement gradients. "
      26             :       "It requires 1 to 3 displacement variables, which are used to compute the strain tensor.");
      27           0 :   params.addRequiredParam<std::vector<NonlinearVariableName>>(
      28             :       "displacements", "The displacements to use to calculate the strain.");
      29           0 :   return params;
      30           0 : }
      31             : 
      32           0 : NEML2SmallStrain::NEML2SmallStrain(const InputParameters & parameters) : NEML2PreKernel(parameters)
      33             : {
      34           0 :   auto disp_vars = getParam<std::vector<NonlinearVariableName>>("displacements");
      35           0 :   if (disp_vars.size() < 1 || disp_vars.size() > 3)
      36           0 :     mooseError("NEML2SmallStrain requires 1 to 3 displacement variables, got ", disp_vars.size());
      37             : 
      38           0 :   _grad_disp_x = &_fe.getGradient(disp_vars[0]);
      39           0 :   _grad_disp_y = disp_vars.size() >= 2 ? &_fe.getGradient(disp_vars[1]) : nullptr;
      40           0 :   _grad_disp_z = disp_vars.size() >= 3 ? &_fe.getGradient(disp_vars[2]) : nullptr;
      41           0 : }
      42             : 
      43             : void
      44           0 : NEML2SmallStrain::forward()
      45             : {
      46             :   // gradient of displacements
      47           0 :   const auto & dux = *_grad_disp_x;
      48           0 :   auto duy = _grad_disp_y ? *_grad_disp_y : neml2::Tensor::zeros_like(dux);
      49           0 :   auto duz = _grad_disp_z ? *_grad_disp_z : neml2::Tensor::zeros_like(dux);
      50           0 :   auto du = neml2::R2(neml2::base_stack({dux, duy, duz}, -2));
      51             : 
      52             :   // strain = 0.5 * (grad_u + grad_u^T), neml2::SR2 handles the symmetrization
      53           0 :   _output = neml2::SR2(du);
      54           0 : }
      55             : 
      56             : #endif

Generated by: LCOV version 1.14