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 "ElementOrderConversionGenerator.h" 11 : 12 : #include "MooseMeshUtils.h" 13 : #include "CastUniquePointer.h" 14 : 15 : #include "libmesh/boundary_info.h" 16 : 17 : registerMooseObject("MooseApp", ElementOrderConversionGenerator); 18 : 19 : InputParameters 20 3141 : ElementOrderConversionGenerator::validParams() 21 : { 22 3141 : InputParameters params = MeshGenerator::validParams(); 23 6282 : params.addClassDescription("Mesh generator which converts orders of elements"); 24 12564 : params.addRequiredParam<MeshGeneratorName>("input", "The mesh we want to modify"); 25 6282 : params.addParam<MooseEnum>("conversion_type", 26 9423 : MooseEnum(getOrderConversionTypeOptions(), "FIRST_ORDER"), 27 : "The type of element order conversion to perform"); 28 3141 : return params; 29 0 : } 30 : 31 40 : ElementOrderConversionGenerator::ElementOrderConversionGenerator(const InputParameters & parameters) 32 : : MeshGenerator(parameters), 33 40 : _input(getMesh("input")), 34 120 : _conversion_type(getParam<MooseEnum>("conversion_type").template getEnum<OrderConversionType>()) 35 : { 36 40 : } 37 : 38 : std::unique_ptr<MeshBase> 39 40 : ElementOrderConversionGenerator::generate() 40 : { 41 40 : std::unique_ptr<MeshBase> mesh = std::move(_input); 42 : 43 40 : switch (_conversion_type) 44 : { 45 10 : case OrderConversionType::FIRST_ORDER: 46 10 : mesh->all_first_order(); 47 10 : break; 48 10 : case OrderConversionType::SECOND_ORDER_NONFULL: 49 10 : mesh->all_second_order(false); 50 10 : break; 51 10 : case OrderConversionType::SECOND_ORDER: 52 10 : mesh->all_second_order(); 53 10 : break; 54 10 : case OrderConversionType::COMPLETE_ORDER: 55 10 : mesh->all_complete_order(); 56 10 : break; 57 0 : default: 58 0 : mooseError("Invalid conversion type"); 59 : } 60 : 61 40 : mesh->unset_is_prepared(); 62 80 : return dynamic_pointer_cast<MeshBase>(mesh); 63 40 : }