21 "The auxiliary variables to transfer.");
26 :
MultiAppTransfer(parameters), _var_names(getParam<
std::vector<AuxVariableName>>(
"variable"))
29 paramError(
"from_multiapp",
"This transfer works only into multi-app.");
36 for (std::size_t var_index = 0; var_index <
_var_names.size(); ++var_index)
40 0,
_var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
41 System & from_sys = from_var.
sys().
system();
46 "This transfer requires a first order Lagrange variable for the source variable");
50 0,
_var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
55 if (fe_type_target.family !=
LAGRANGE || fe_type_target.order !=
FIRST)
57 "This transfer requires a first order Lagrange variable for the source variable");
65 "MultiAppDetailedSolutionBaseTransfer::execute()", 5,
"Transferring subchannel solutions");
82 mooseAssert(
_from_meshes.size() == 1,
"Only one source mesh can be active in this transfer.");
83 if (dynamic_cast<SubChannelMesh *>(
_from_meshes[0]) ==
nullptr)
84 mooseError(
"This transfer works only with SubChannelMesh classes.");
86 for (
unsigned int i = 0; i <
getToMultiApp()->numGlobalApps(); i++)
112 for (
auto & node :
mesh->getMesh().local_node_ptr_range())
118 System * to_sys =
find_sys(to_problem.
es(), var_name);
119 unsigned int to_sys_num = to_sys->
number();
120 unsigned int to_var_num = to_sys->variable_number(var_name);
122 if (node->n_dofs(to_sys_num, to_var_num) > 0)
124 System * from_sys =
find_sys(from_problem.
es(), var_name);
125 unsigned int from_sys_num = from_sys->
number();
126 unsigned int from_var_num = from_sys->variable_number(var_name);
129 NumericVector<Real> * from_solution = from_sys->solution.get();
130 dof_id_type from_dof = from_node->dof_number(from_sys_num, from_var_num, 0);
131 Real from_value = (*from_solution)(from_dof);
134 NumericVector<Real> & to_solution =
getToMultiApp()->appTransferVector(app_idx, var_name);
135 dof_id_type to_dof = node->dof_number(to_sys_num, to_var_num, 0);
136 to_solution.set(to_dof, from_value);
143 getToMultiApp()->appTransferVector(app_idx, var_name).close();
144 find_sys(to_problem.
es(), var_name)->update();
MooseEnum _current_direction
unsigned int number() const
virtual void execute() override
virtual libMesh::System & system()=0
const std::vector< AuxVariableName > & _var_names
Variable names to transfer.
std::vector< FEProblemBase *> _to_problems
SCMSolutionTransferBase(const InputParameters ¶meters)
const Parallel::Communicator & comm() const
const std::shared_ptr< MultiApp > getToMultiApp() const
void transferNodalVars(unsigned int app_idx)
bool _displaced_target_mesh
void initialSetup() override
bool contains(const std::string &value) const
unsigned int number() const
std::vector< MooseMesh *> _from_meshes
void initialSetup() override
virtual libMesh::EquationSystems & es() override
static libMesh::System * find_sys(libMesh::EquationSystems &es, const std::string &var_name)
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
static InputParameters validParams()
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
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
MultiMooseEnum _directions
virtual MooseMesh & mesh() override
void transferVarsToApp(unsigned int app_idx)
Transfer variables into the sub-app.
void mooseError(Args &&... args) const
Base class for subchannel meshes.
virtual void getAppInfo()
virtual Node * getFromNode(const SubChannelMesh &from_mesh, const Point &src_node)=0
Find node on computational mesh given the visualization point.
std::vector< FEProblemBase *> _from_problems