https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
InterWrapperSolutionTransferBase Class Referenceabstract

Base class for transfering solutions from computational mesh onto visualization mesh. More...

#include <InterWrapperSolutionTransferBase.h>

Inheritance diagram for InterWrapperSolutionTransferBase:
[legend]

Public Types

enum  DIRECTION
 
typedef DataFileName DataFileParameterType
 

Public Member Functions

 InterWrapperSolutionTransferBase (const InputParameters &parameters)
 
virtual void execute () override
 
void initialSetup () override
 
void variableIntegrityCheck (const AuxVariableName &var_name, bool is_from_multiapp) const
 
const std::shared_ptr< MultiAppgetMultiApp () const
 
const std::shared_ptr< MultiAppgetFromMultiApp () const
 
const std::shared_ptr< MultiAppgetToMultiApp () const
 
std::string getFromName () const
 
std::string getToName () const
 
bool hasFromMultiApp () const
 
bool hasToMultiApp () const
 
virtual void getAppInfo ()
 
const MultiMooseEnumdirections ()
 
void setCurrentDirection (const int direction)
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnumgetExecuteOnEnum () const
 
PerfGraphperfGraph ()
 
MooseEnum direction ()
 
MooseEnum direction ()
 
MooseEnum currentDirection ()
 
MooseEnum currentDirection ()
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static void addSkipCoordCollapsingParam (InputParameters &params)
 
static libMesh::Systemfind_sys (libMesh::EquationSystems &es, const std::string &var_name)
 
static std::string possibleDirections ()
 

Public Attributes

 TO_MULTIAPP
 
 FROM_MULTIAPP
 
 BETWEEN_MULTIAPP
 
const ConsoleStream _console
 

Static Public Attributes

static const libMesh::Number OutOfMeshValue
 

Protected Member Functions

void transferToMultiApps ()
 Do the transfer into the sub-app. More...
 
void transferVarsToApp (unsigned int app_idx)
 Transfer variables into the sub-app. More...
 
void transferNodalVars (unsigned int app_idx)
 
virtual Node * getFromNode (const InterWrapperMesh &from_mesh, const Point &src_node)=0
 Find node on computational mesh given the visualization point. More...
 
std::vector< unsigned intgetFromsPerProc ()
 
libMesh::NumericVector< Real > & getTransferVector (unsigned int i_local, std::string var_name)
 
unsigned int getGlobalSourceAppIndex (unsigned int i_from) const
 
unsigned int getGlobalTargetAppIndex (unsigned int i_to) const
 
unsigned int getLocalSourceAppIndex (unsigned int i_from) const
 
virtual void checkSiblingsTransferSupported () const
 
void errorIfObjectExecutesOnTransferInSourceApp (const std::string &object_name) const
 
Point getPointInTargetAppFrame (const Point &p, unsigned int local_i_to, const std::string &phase) const
 
void checkMultiAppExecuteOn ()
 
void checkVariable (const FEProblemBase &fe_problem, const VariableName &var_name, const std::string &param_name="") const
 
void extendBoundingBoxes (const Real factor, std::vector< libMesh::BoundingBox > &bboxes) const
 
T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
std::vector< libMesh::BoundingBoxgetFromBoundingBoxes ()
 
std::vector< libMesh::BoundingBoxgetFromBoundingBoxes (BoundaryID boundary_id)
 
std::vector< libMesh::BoundingBoxgetFromBoundingBoxes ()
 
std::vector< libMesh::BoundingBoxgetFromBoundingBoxes (BoundaryID boundary_id)
 

Static Protected Member Functions

static void addBBoxFactorParam (InputParameters &params)
 
static void transformBoundingBox (libMesh::BoundingBox &box, const MultiAppCoordTransform &transform)
 

Protected Attributes

const std::vector< AuxVariableName > & _var_names
 Variable names to transfer. More...
 
std::shared_ptr< MultiApp_multi_app
 
std::vector< FEProblemBase *> _to_problems
 
std::vector< FEProblemBase *> _from_problems
 
std::vector< libMesh::EquationSystems *> _to_es
 
std::vector< libMesh::EquationSystems *> _from_es
 
std::vector< MooseMesh *> _to_meshes
 
std::vector< MooseMesh *> _from_meshes
 
std::vector< Point > _to_positions
 
std::vector< Point > _from_positions
 
std::vector< std::unique_ptr< MultiAppCoordTransform > > _to_transforms
 
std::vector< std::unique_ptr< MultiAppCoordTransform > > _from_transforms
 
const bool _skip_coordinate_collapsing
 
bool _displaced_source_mesh
 
bool _displaced_target_mesh
 
Real _bbox_factor
 
std::vector< unsigned int_to_local2global_map
 
std::vector< unsigned int_from_local2global_map
 
SubProblem_subproblem
 
FEProblemBase_fe_problem
 
SystemBase_sys
 
THREAD_ID _tid
 
MultiMooseEnum _directions
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const ExecFlagEnum_execute_enum
 
const ExecFlagType_current_execute_flag
 
MooseApp_restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
MooseEnum _direction
 
MooseEnum _current_direction
 
const Parallel::Communicator & _communicator
 

Detailed Description

Base class for transfering solutions from computational mesh onto visualization mesh.

Definition at line 19 of file InterWrapperSolutionTransferBase.h.

Constructor & Destructor Documentation

◆ InterWrapperSolutionTransferBase()

InterWrapperSolutionTransferBase::InterWrapperSolutionTransferBase ( const InputParameters parameters)

Definition at line 25 of file InterWrapperSolutionTransferBase.C.

27  : MultiAppTransfer(parameters), _var_names(getParam<std::vector<AuxVariableName>>("variable"))
28 {
30  paramError("from_multiapp", "This transfer works only into multi-app.");
31 }
MultiAppTransfer(const InputParameters &parameters)
bool contains(const std::string &value) const
const std::vector< AuxVariableName > & _var_names
Variable names to transfer.
const T & getParam(const std::string &name) const
void paramError(const std::string &param, Args... args) const
MultiMooseEnum _directions
const InputParameters & parameters() const

Member Function Documentation

◆ execute()

void InterWrapperSolutionTransferBase::execute ( )
overridevirtual

Implements MultiAppTransfer.

Definition at line 63 of file InterWrapperSolutionTransferBase.C.

64 {
65  getAppInfo();
66 
67  switch (_current_direction)
68  {
69  case TO_MULTIAPP:
71  break;
72 
73  default:
74  break;
75  }
76 }
MooseEnum _current_direction
void transferToMultiApps()
Do the transfer into the sub-app.
virtual void getAppInfo()

◆ getFromNode()

virtual Node* InterWrapperSolutionTransferBase::getFromNode ( const InterWrapperMesh from_mesh,
const Point &  src_node 
)
protectedpure virtual

Find node on computational mesh given the visualization point.

Returns
Node from the computational mesh
Parameters
from_meshComputational mesh
src_nodeNode from the visualization

Implemented in InterWrapperSolutionTransfer.

Referenced by transferNodalVars().

◆ initialSetup()

void InterWrapperSolutionTransferBase::initialSetup ( )
overridevirtual

Reimplemented from MultiAppTransfer.

Definition at line 34 of file InterWrapperSolutionTransferBase.C.

35 {
37  for (std::size_t var_index = 0; var_index < _var_names.size(); ++var_index)
38  {
39  // Check source variable on regular subchannel problem
41  0, _var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
42  System & from_sys = from_var.sys().system();
43  const auto & fe_type = from_sys.variable_type(from_var.number());
44 
45  if (fe_type.family != LAGRANGE || fe_type.order != FIRST)
46  paramError("variable",
47  "This transfer requires a first order Lagrange variable for the source variable");
48 
49  // Check target variable in visualization mesh
50  MooseVariableFieldBase & to_var = _to_problems[0]->getVariable(
51  0, _var_names[var_index], Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_ANY);
52 
53  System & to_sys = to_var.sys().system();
54  const auto & fe_type_target = to_sys.variable_type(to_var.number());
55 
56  if (fe_type_target.family != LAGRANGE || fe_type_target.order != FIRST)
57  paramError("variable",
58  "This transfer requires a first order Lagrange variable for the source variable");
59  }
60 }
unsigned int number() const
virtual libMesh::System & system()=0
std::vector< FEProblemBase *> _to_problems
void initialSetup() override
const std::vector< AuxVariableName > & _var_names
Variable names to transfer.
void paramError(const std::string &param, 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
SubProblem & _subproblem
const FEType & variable_type(const unsigned int i) const
SystemBase & sys()

◆ transferNodalVars()

void InterWrapperSolutionTransferBase::transferNodalVars ( unsigned int  app_idx)
protected

Definition at line 97 of file InterWrapperSolutionTransferBase.C.

Referenced by transferVarsToApp().

98 {
99  Moose::ScopedCommSwapper swapper(_multi_app->comm());
100 
101  FEProblemBase & to_problem = _multi_app->appProblemBase(app_idx);
102  MooseMesh * mesh = NULL;
103  if (_displaced_target_mesh && to_problem.getDisplacedProblem())
104  mesh = &to_problem.getDisplacedProblem()->mesh();
105  else
106  mesh = &to_problem.mesh();
107 
108  const InterWrapperMesh & from_mesh = dynamic_cast<InterWrapperMesh &>(*_from_meshes[0]);
109  FEProblemBase & from_problem = *_from_problems[0];
110 
111  for (auto & node : mesh->getMesh().local_node_ptr_range())
112  {
113  Node * from_node = getFromNode(from_mesh, *node);
114 
115  for (auto & var_name : _var_names)
116  {
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);
120 
121  if (node->n_dofs(to_sys_num, to_var_num) > 0)
122  {
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);
126 
127  swapper.forceSwap();
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);
131  swapper.forceSwap();
132 
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);
136  }
137  }
138  }
139 
140  for (auto & var_name : _var_names)
141  {
142  _multi_app->appTransferVector(app_idx, var_name).close();
143  find_sys(to_problem.es(), var_name)->update();
144  }
145 }
Base class for inter-wrapper meshes.
virtual Node * getFromNode(const InterWrapperMesh &from_mesh, const Point &src_node)=0
Find node on computational mesh given the visualization point.
MeshBase & mesh
std::shared_ptr< MultiApp > _multi_app
bool _displaced_target_mesh
unsigned int number() const
std::vector< MooseMesh *> _from_meshes
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)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< FEProblemBase *> _from_problems
uint8_t dof_id_type

◆ transferToMultiApps()

void InterWrapperSolutionTransferBase::transferToMultiApps ( )
protected

Do the transfer into the sub-app.

Definition at line 79 of file InterWrapperSolutionTransferBase.C.

Referenced by execute().

80 {
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.");
84 
85  for (unsigned int i = 0; i < _multi_app->numGlobalApps(); i++)
86  if (_multi_app->hasLocalApp(i))
88 }
void transferVarsToApp(unsigned int app_idx)
Transfer variables into the sub-app.
std::shared_ptr< MultiApp > _multi_app
std::vector< MooseMesh *> _from_meshes
void mooseError(Args &&... args) const

◆ transferVarsToApp()

void InterWrapperSolutionTransferBase::transferVarsToApp ( unsigned int  app_idx)
protected

Transfer variables into the sub-app.

Parameters
app_idxMulti-app index

Definition at line 91 of file InterWrapperSolutionTransferBase.C.

Referenced by transferToMultiApps().

92 {
93  transferNodalVars(app_idx);
94 }

◆ validParams()

InputParameters InterWrapperSolutionTransferBase::validParams ( )
static

Definition at line 17 of file InterWrapperSolutionTransferBase.C.

Referenced by InterWrapperSolutionTransfer::validParams().

18 {
20  params.addRequiredParam<std::vector<AuxVariableName>>("variable",
21  "The auxiliary variables to transfer.");
22  return params;
23 }
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _var_names

const std::vector<AuxVariableName>& InterWrapperSolutionTransferBase::_var_names
protected

Variable names to transfer.

Definition at line 52 of file InterWrapperSolutionTransferBase.h.

Referenced by initialSetup(), and transferNodalVars().


The documentation for this class was generated from the following files: