void MultiAppCopyTransfer::transfer(FEProblemBase & to_problem, FEProblemBase & from_problem) { // Populate the to/from variables needed to perform the transfer MooseVariableFE & to_var = to_problem.getVariable(0, _to_var_name); MeshBase & to_mesh = to_problem.mesh().getMesh(); MooseVariableFE & from_var = from_problem.getVariable(0, _from_var_name); MeshBase & from_mesh = from_problem.mesh().getMesh(); // Check integrity if (to_var.feType() != from_var.feType()) paramError("variable", "'variable' and 'source_variable' must be the same type (order and family): ", libMesh::Utility::enum_to_string<FEFamily>(to_var.feType().family), moose::internal::incompatVarMsg(to_var, from_var)); if ((to_mesh.n_nodes() != from_mesh.n_nodes()) || (to_mesh.n_elem() != from_mesh.n_elem())) mooseError("The meshes must be identical to utilize MultiAppCopyTransfer."); // Transfer node dofs MeshBase::const_node_iterator node_it = to_mesh.local_nodes_begin(); MeshBase::const_node_iterator node_end = to_mesh.local_nodes_end(); for (; node_it != node_end; ++node_it) transferDofObject(*node_it, from_mesh.node_ptr((*node_it)->id()), to_var, from_var); // Transfer elem dofs MeshBase::const_element_iterator elem_it = to_mesh.local_elements_begin(); MeshBase::const_element_iterator elem_end = to_mesh.local_elements_end(); Elem * to_elem; Elem * from_elem; for (; elem_it != elem_end; ++elem_it) { to_elem = *elem_it; from_elem = from_mesh.elem_ptr(to_elem->id()); mooseAssert(to_elem->type() == from_elem->type(), "The elements must be the same type."); transferDofObject(to_elem, from_elem, to_var, from_var); } to_var.sys().solution().close(); to_var.sys().update(); }