LCOV - code coverage report
Current view: top level - src/meshgenerators - TransformGenerator.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 37 39 94.9 %
Date: 2025-07-17 01:28:37 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       16049 : TransformGenerator::validParams()
      20             : {
      21             :   MooseEnum transforms(
      22       16049 :       "TRANSLATE=1 TRANSLATE_CENTER_ORIGIN=2 TRANSLATE_MIN_ORIGIN=3 ROTATE=4 SCALE=5");
      23             : 
      24       16049 :   InputParameters params = MeshGenerator::validParams();
      25             : 
      26       16049 :   params.addRequiredParam<MeshGeneratorName>("input", "The mesh we want to modify");
      27       16049 :   params.addClassDescription("Applies a linear transform to the entire mesh.");
      28       16049 :   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       16049 :   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       32098 :   return params;
      41       16049 : }
      42             : 
      43         870 : TransformGenerator::TransformGenerator(const InputParameters & parameters)
      44             :   : MeshGenerator(parameters),
      45         870 :     _input(getMesh("input")),
      46        1740 :     _transform(getParam<MooseEnum>("transform"))
      47             : {
      48        1720 :   if ((_transform != "TRANSLATE_CENTER_ORIGIN" && _transform != "TRANSLATE_MIN_ORIGIN") &&
      49        1720 :       !isParamValid("vector_value"))
      50           0 :     paramError("transform",
      51             :                "The parameter 'vector_value' must be supplied with 'transform' = ",
      52           0 :                _transform);
      53         870 : }
      54             : 
      55             : std::unique_ptr<MeshBase>
      56         815 : TransformGenerator::generate()
      57             : {
      58         815 :   std::unique_ptr<MeshBase> mesh = std::move(_input);
      59             : 
      60         815 :   RealVectorValue vector_value;
      61         815 :   if (_transform == 2 || _transform == 3)
      62             :   {
      63          20 :     const auto bbox = MeshTools::create_bounding_box(*mesh);
      64          20 :     if (_transform == 2)
      65          10 :       vector_value = -0.5 * (bbox.max() + bbox.min());
      66             :     else
      67          10 :       vector_value = -bbox.min();
      68             :   }
      69             :   else
      70         795 :     vector_value = getParam<RealVectorValue>("vector_value");
      71             : 
      72         815 :   switch (_transform)
      73             :   {
      74         467 :     case 1:
      75             :     case 2:
      76             :     case 3:
      77         467 :       MeshTools::Modification::translate(*mesh, vector_value(0), vector_value(1), vector_value(2));
      78         467 :       break;
      79         338 :     case 4:
      80         338 :       MeshTools::Modification::rotate(*mesh, vector_value(0), vector_value(1), vector_value(2));
      81         338 :       break;
      82          10 :     case 5:
      83          10 :       MeshTools::Modification::scale(*mesh, vector_value(0), vector_value(1), vector_value(2));
      84          10 :       break;
      85             :   }
      86             : 
      87         815 :   mesh->set_isnt_prepared();
      88        1630 :   return dynamic_pointer_cast<MeshBase>(mesh);
      89         815 : }

Generated by: LCOV version 1.14