https://mooseframework.inl.gov
Loading...
Searching...
No Matches
LevelSetMeshRefinementTransfer.C
Go to the documentation of this file.
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
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
20
23{
25 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 params.suppressParameter<MultiMooseEnum>("direction");
29
30 ExecFlagEnum & exec = params.set<ExecFlagEnum>("execute_on");
33 params.set<bool>("check_multiapp_execute_on") = false;
34 params.suppressParameter<ExecFlagEnum>("execute_on");
35 // Sibling transfers not supported
36 params.suppressParameter<bool>("execute_after_from_multiapp");
37
38 return params;
39}
40
42 : MultiAppCopyTransfer(parameters)
43{
44 if (hasFromMultiApp())
45 paramError("from_multi_app", "from_multiapp or between_multiapp transfers are not supported");
46}
47
48void
50{
51 FEProblemBase & from_problem = getToMultiApp()->problemBase();
52 for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++)
53 if (getToMultiApp()->hasLocalApp(i))
54 {
55 FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i);
56 MooseVariable & to_var = to_problem.getStandardVariable(0, _to_var_name);
57 Adaptivity & adapt = to_problem.adaptivity();
58 adapt.setMarkerVariableName(to_var.name());
59 adapt.setCyclesPerStep(from_problem.adaptivity().getCyclesPerStep());
60 MooseEnum adaptivity_type("h p hp", "h");
61 adapt.init(1, 0, adaptivity_type.getEnum<AdaptivityType>());
62 adapt.setUseNewSystem();
63 adapt.setMaxHLevel(from_problem.adaptivity().getMaxHLevel());
64 adapt.setAdaptivityOn(false);
65 }
66}
67
68void
70{
73
75 {
76 for (unsigned int i = 0; i < getToMultiApp()->numGlobalApps(); i++)
77 if (getToMultiApp()->hasLocalApp(i))
78 {
79 FEProblemBase & to_problem = getToMultiApp()->appProblemBase(i);
80 Adaptivity & adapt = to_problem.adaptivity();
81 adapt.setAdaptivityOn(true);
82 to_problem.adaptMesh();
83 adapt.setAdaptivityOn(false);
84 }
85 }
86}
AdaptivityType
registerMooseObject("LevelSetApp", LevelSetMeshRefinementTransfer)
void init(const unsigned int steps, const unsigned int initial_steps, const AdaptivityType adaptivity_type)
void setUseNewSystem()
unsigned int getMaxHLevel()
unsigned int getCyclesPerStep() const
void setMarkerVariableName(std::string marker_field)
void setCyclesPerStep(const unsigned int &num)
void setAdaptivityOn(bool state)
void setMaxHLevel(unsigned int level)
void addAvailableFlags(const ExecFlagType &flag, Args... flags)
virtual MooseVariable & getStandardVariable(const THREAD_ID tid, const std::string &var_name) override
virtual bool adaptMesh()
Adaptivity & adaptivity()
void suppressParameter(const std::string &name)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
Copies the refinement marker from the master to the sub-application.
LevelSetMeshRefinementTransfer(const InputParameters &parameters)
const std::string & name() const
void paramError(const std::string &param, Args... args) const
T getEnum() const
static InputParameters validParams()
virtual void execute() override
AuxVariableName _to_var_name
const std::shared_ptr< MultiApp > getToMultiApp() const
bool hasFromMultiApp() const
const ExecFlagType & _current_execute_flag
const ExecFlagType EXEC_COMPUTE_MARKERS
const ExecFlagType EXEC_ADAPT_MESH