21 "The auxiliary variables to transfer.");
27 :
MultiAppTransfer(parameters), _var_names(getParam<
std::vector<AuxVariableName>>(
"variable"))
30 paramError(
"from_multiapp",
"This transfer works only into multi-app.");
37 for (std::size_t var_index = 0; var_index <
_var_names.size(); ++var_index)
41 0,
_var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
42 System & from_sys = from_var.
sys().
system();
47 "This transfer requires a first order Lagrange variable for the source variable");
51 0,
_var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
56 if (fe_type_target.family !=
LAGRANGE || fe_type_target.order !=
FIRST)
58 "This transfer requires a first order Lagrange variable for the source variable");
81 mooseAssert(
_from_meshes.size() == 1,
"Only one source mesh can be active in this transfer.");
82 if (dynamic_cast<InterWrapperMesh *>(
_from_meshes[0]) ==
nullptr)
83 mooseError(
"This transfer works only with InterWrapperMesh classes.");
85 for (
unsigned int i = 0; i <
_multi_app->numGlobalApps(); i++)
104 mesh = &to_problem.getDisplacedProblem()->mesh();
106 mesh = &to_problem.mesh();
111 for (
auto & node :
mesh->getMesh().local_node_ptr_range())
117 System * to_sys =
find_sys(to_problem.es(), var_name);
118 unsigned int to_sys_num = to_sys->
number();
119 unsigned int to_var_num = to_sys->variable_number(var_name);
121 if (node->n_dofs(to_sys_num, to_var_num) > 0)
123 System * from_sys =
find_sys(from_problem.
es(), var_name);
124 unsigned int from_sys_num = from_sys->
number();
125 unsigned int from_var_num = from_sys->variable_number(var_name);
128 NumericVector<Real> * from_solution = from_sys->solution.get();
129 dof_id_type from_dof = from_node->dof_number(from_sys_num, from_var_num, 0);
130 Real from_value = (*from_solution)(from_dof);
133 NumericVector<Real> & to_solution =
_multi_app->appTransferVector(app_idx, var_name);
134 dof_id_type to_dof = node->dof_number(to_sys_num, to_var_num, 0);
135 to_solution.set(to_dof, from_value);
142 _multi_app->appTransferVector(app_idx, var_name).close();
143 find_sys(to_problem.es(), var_name)->update();
void transferNodalVars(unsigned int app_idx)
MooseEnum _current_direction
Base class for inter-wrapper meshes.
unsigned int number() const
virtual Node * getFromNode(const InterWrapperMesh &from_mesh, const Point &src_node)=0
Find node on computational mesh given the visualization point.
virtual libMesh::System & system()=0
std::vector< FEProblemBase *> _to_problems
void transferVarsToApp(unsigned int app_idx)
Transfer variables into the sub-app.
std::shared_ptr< MultiApp > _multi_app
bool _displaced_target_mesh
bool contains(const std::string &value) const
unsigned int number() const
std::vector< MooseMesh *> _from_meshes
void initialSetup() override
const std::vector< AuxVariableName > & _var_names
Variable names to transfer.
virtual libMesh::EquationSystems & es() override
static libMesh::System * find_sys(libMesh::EquationSystems &es, const std::string &var_name)
InterWrapperSolutionTransferBase(const InputParameters ¶meters)
void paramError(const std::string ¶m, Args... args) const
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const=0
void transferToMultiApps()
Do the transfer into the sub-app.
static InputParameters validParams()
const FEType & variable_type(const unsigned int i) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MultiMooseEnum _directions
virtual void execute() override
void mooseError(Args &&... args) const
void initialSetup() override
static InputParameters validParams()
virtual void getAppInfo()
std::vector< FEProblemBase *> _from_problems