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 : }