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 "LevelSetMeshRefinementTransfer.h" 11 : 12 : // MOOSE includes 13 : #include "Adaptivity.h" 14 : #include "FEProblem.h" 15 : #include "MooseVariable.h" 16 : #include "MultiApp.h" 17 : #include "LevelSetTypes.h" 18 : 19 : registerMooseObject("LevelSetApp", LevelSetMeshRefinementTransfer); 20 : 21 : InputParameters 22 30 : LevelSetMeshRefinementTransfer::validParams() 23 : { 24 30 : InputParameters params = MultiAppCopyTransfer::validParams(); 25 30 : params.addClassDescription("Transfers the mesh from the master application to the sub " 26 : "application for the purposes of level set reinitialization problems " 27 : "with mesh adaptivity."); 28 30 : params.suppressParameter<MultiMooseEnum>("direction"); 29 : 30 30 : ExecFlagEnum & exec = params.set<ExecFlagEnum>("execute_on"); 31 30 : exec.addAvailableFlags(LevelSet::EXEC_ADAPT_MESH, LevelSet::EXEC_COMPUTE_MARKERS); 32 120 : exec = {LevelSet::EXEC_COMPUTE_MARKERS, LevelSet::EXEC_ADAPT_MESH}; 33 30 : params.set<bool>("check_multiapp_execute_on") = false; 34 30 : params.suppressParameter<ExecFlagEnum>("execute_on"); 35 : 36 30 : return params; 37 30 : } 38 : 39 16 : LevelSetMeshRefinementTransfer::LevelSetMeshRefinementTransfer(const InputParameters & parameters) 40 16 : : MultiAppCopyTransfer(parameters) 41 : { 42 16 : if (hasFromMultiApp()) 43 2 : paramError("from_multi_app", "from_multiapp or between_multiapp transfers are not supported"); 44 14 : } 45 : 46 : void 47 14 : LevelSetMeshRefinementTransfer::initialSetup() 48 : { 49 14 : FEProblemBase & from_problem = getToMultiApp()->problemBase(); 50 56 : for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++) 51 28 : if (getToMultiApp()->hasLocalApp(i)) 52 : { 53 14 : FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i); 54 14 : MooseVariable & to_var = to_problem.getStandardVariable(0, _to_var_name); 55 : Adaptivity & adapt = to_problem.adaptivity(); 56 28 : adapt.setMarkerVariableName(to_var.name()); 57 : adapt.setCyclesPerStep(from_problem.adaptivity().getCyclesPerStep()); 58 28 : MooseEnum adaptivity_type("h p hp", "h"); 59 14 : adapt.init(1, 0, adaptivity_type.getEnum<AdaptivityType>()); 60 14 : adapt.setUseNewSystem(); 61 : adapt.setMaxHLevel(from_problem.adaptivity().getMaxHLevel()); 62 14 : adapt.setAdaptivityOn(false); 63 14 : } 64 14 : } 65 : 66 : void 67 70 : LevelSetMeshRefinementTransfer::execute() 68 : { 69 70 : if (_current_execute_flag == LevelSet::EXEC_COMPUTE_MARKERS) 70 42 : MultiAppCopyTransfer::execute(); 71 : 72 28 : else if (_current_execute_flag == LevelSet::EXEC_ADAPT_MESH) 73 : { 74 112 : for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++) 75 56 : if (getToMultiApp()->hasLocalApp(i)) 76 : { 77 56 : FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i); 78 : Adaptivity & adapt = to_problem.adaptivity(); 79 28 : adapt.setAdaptivityOn(true); 80 28 : to_problem.adaptMesh(); 81 28 : adapt.setAdaptivityOn(false); 82 : } 83 : } 84 70 : }