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 38 : LevelSetMeshRefinementTransfer::validParams() 23 : { 24 38 : InputParameters params = MultiAppCopyTransfer::validParams(); 25 38 : 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 38 : params.suppressParameter<MultiMooseEnum>("direction"); 29 : 30 38 : ExecFlagEnum & exec = params.set<ExecFlagEnum>("execute_on"); 31 38 : exec.addAvailableFlags(LevelSet::EXEC_ADAPT_MESH, LevelSet::EXEC_COMPUTE_MARKERS); 32 152 : exec = {LevelSet::EXEC_COMPUTE_MARKERS, LevelSet::EXEC_ADAPT_MESH}; 33 38 : params.set<bool>("check_multiapp_execute_on") = false; 34 38 : params.suppressParameter<ExecFlagEnum>("execute_on"); 35 : 36 38 : return params; 37 38 : } 38 : 39 20 : LevelSetMeshRefinementTransfer::LevelSetMeshRefinementTransfer(const InputParameters & parameters) 40 20 : : MultiAppCopyTransfer(parameters) 41 : { 42 20 : if (hasFromMultiApp()) 43 2 : paramError("from_multi_app", "from_multiapp or between_multiapp transfers are not supported"); 44 18 : } 45 : 46 : void 47 18 : LevelSetMeshRefinementTransfer::initialSetup() 48 : { 49 18 : FEProblemBase & from_problem = getToMultiApp()->problemBase(); 50 72 : for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++) 51 36 : if (getToMultiApp()->hasLocalApp(i)) 52 : { 53 18 : FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i); 54 18 : MooseVariable & to_var = to_problem.getStandardVariable(0, _to_var_name); 55 : Adaptivity & adapt = to_problem.adaptivity(); 56 36 : adapt.setMarkerVariableName(to_var.name()); 57 : adapt.setCyclesPerStep(from_problem.adaptivity().getCyclesPerStep()); 58 18 : adapt.init(1, 0, false); 59 18 : adapt.setUseNewSystem(); 60 : adapt.setMaxHLevel(from_problem.adaptivity().getMaxHLevel()); 61 18 : adapt.setAdaptivityOn(false); 62 : } 63 18 : } 64 : 65 : void 66 90 : LevelSetMeshRefinementTransfer::execute() 67 : { 68 90 : if (_current_execute_flag == LevelSet::EXEC_COMPUTE_MARKERS) 69 54 : MultiAppCopyTransfer::execute(); 70 : 71 36 : else if (_current_execute_flag == LevelSet::EXEC_ADAPT_MESH) 72 : { 73 144 : for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++) 74 72 : if (getToMultiApp()->hasLocalApp(i)) 75 : { 76 72 : FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i); 77 : Adaptivity & adapt = to_problem.adaptivity(); 78 36 : adapt.setAdaptivityOn(true); 79 36 : to_problem.adaptMesh(); 80 36 : adapt.setAdaptivityOn(false); 81 : } 82 : } 83 90 : }