LCOV - code coverage report
Current view: top level - src/meshgenerators - TransformGenerator.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 419b9d Lines: 37 39 94.9 %
Date: 2025-08-08 20:01:16 Functions: 3 3 100.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             : #include "TransformGenerator.h"
      11             : #include "libmesh/mesh_modification.h"
      12             : #include "CastUniquePointer.h"
      13             : 
      14             : #include "libmesh/mesh_tools.h"
      15             : 
      16             : registerMooseObject("MooseApp", TransformGenerator);
      17             : 
      18             : InputParameters
      19       16171 : TransformGenerator::validParams()
      20             : {
      21             :   MooseEnum transforms(
      22       16171 :       "TRANSLATE=1 TRANSLATE_CENTER_ORIGIN=2 TRANSLATE_MIN_ORIGIN=3 ROTATE=4 SCALE=5");
      23             : 
      24       16171 :   InputParameters params = MeshGenerator::validParams();
      25             : 
      26       16171 :   params.addRequiredParam<MeshGeneratorName>("input", "The mesh we want to modify");
      27       16171 :   params.addClassDescription("Applies a linear transform to the entire mesh.");
      28       16171 :   params.addRequiredParam<MooseEnum>(
      29             :       "transform",
      30             :       transforms,
      31             :       "The type of transformation to perform (TRANSLATE, TRANSLATE_CENTER_ORIGIN, "
      32             :       "TRANSLATE_MIN_ORIGIN, ROTATE, SCALE)");
      33       16171 :   params.addParam<RealVectorValue>(
      34             :       "vector_value",
      35             :       "The value to use for the transformation. When using TRANSLATE or SCALE, the "
      36             :       "xyz coordinates are applied in each direction respectively. When using "
      37             :       "ROTATE, the values are interpreted as the Euler angles phi, theta and psi "
      38             :       "given in degrees.");
      39             : 
      40       32342 :   return params;
      41       16171 : }
      42             : 
      43         930 : TransformGenerator::TransformGenerator(const InputParameters & parameters)
      44             :   : MeshGenerator(parameters),
      45         930 :     _input(getMesh("input")),
      46        1860 :     _transform(getParam<MooseEnum>("transform"))
      47             : {
      48        1838 :   if ((_transform != "TRANSLATE_CENTER_ORIGIN" && _transform != "TRANSLATE_MIN_ORIGIN") &&
      49        1838 :       !isParamValid("vector_value"))
      50           0 :     paramError("transform",
      51             :                "The parameter 'vector_value' must be supplied with 'transform' = ",
      52           0 :                _transform);
      53         930 : }
      54             : 
      55             : std::unique_ptr<MeshBase>
      56         874 : TransformGenerator::generate()
      57             : {
      58         874 :   std::unique_ptr<MeshBase> mesh = std::move(_input);
      59             : 
      60         874 :   RealVectorValue vector_value;
      61         874 :   if (_transform == 2 || _transform == 3)
      62             :   {
      63          22 :     const auto bbox = MeshTools::create_bounding_box(*mesh);
      64          22 :     if (_transform == 2)
      65          11 :       vector_value = -0.5 * (bbox.max() + bbox.min());
      66             :     else
      67          11 :       vector_value = -bbox.min();
      68             :   }
      69             :   else
      70         852 :     vector_value = getParam<RealVectorValue>("vector_value");
      71             : 
      72         874 :   switch (_transform)
      73             :   {
      74         495 :     case 1:
      75             :     case 2:
      76             :     case 3:
      77         495 :       MeshTools::Modification::translate(*mesh, vector_value(0), vector_value(1), vector_value(2));
      78         495 :       break;
      79         368 :     case 4:
      80         368 :       MeshTools::Modification::rotate(*mesh, vector_value(0), vector_value(1), vector_value(2));
      81         368 :       break;
      82          11 :     case 5:
      83          11 :       MeshTools::Modification::scale(*mesh, vector_value(0), vector_value(1), vector_value(2));
      84          11 :       break;
      85             :   }
      86             : 
      87         874 :   mesh->set_isnt_prepared();
      88        1748 :   return dynamic_pointer_cast<MeshBase>(mesh);
      89         874 : }

Generated by: LCOV version 1.14