https://mooseframework.inl.gov
ReporterTransferInterface.h
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 
10 #pragma once
11 
12 #include "ReporterData.h"
13 #include "FEProblemBase.h"
14 
15 // Forward declarations
16 class Transfer;
17 
18 /*
19  * This transfer serves as a base class for transferring reporter values between
20  * multiapps. This includes reporters, vector postprocessors, and postprocessors.
21  *
22  * The underlying purpose fo this class is to avoid using non-const access to ReporterData
23  * through FEProblemBase to set reporter data. Instead, we simply have this class
24  * as a friend to ReporterData::WriteKey and provide these protected functions for derived
25  * classes. This avoids any old object modifying reporter data.
26  */
28 {
29 public:
31  ReporterTransferInterface(const Transfer * transfer);
32 
33 protected:
35  {
36  return MultiMooseEnum("bool=0 integer=1 real=2 string=3");
37  }
38 
39  /*
40  * This function allows derived objects to decide how the "from" reporters should be transferred.
41  * I.e. whether we are transferring the entire data or part of it. Without calling this
42  * early (constructor is preferred) there could be unintended behaiviour for
43  * non-broadcasted data like VPPs.
44  *
45  * @param ReporterType data type of the reporter
46  * @param name reporter name
47  * @param problem The FEProblem that references the reporter data
48  */
49  void addReporterTransferMode(const ReporterName & name,
50  const ReporterMode & mode,
51  FEProblemBase & problem);
52 
53  /*
54  * Transferring reporter value between FEProblems, mainly used for multiapps
55  *
56  * @param from_reporter reporter name on main app
57  * @param to_reporter reporter name on sub app
58  * @param from_problem The FEProblem that references the reporter data with the value
59  * @param to_problem The FEProblem that references the reporter data to transfer to
60  * @param time_index time index of transfer (default is lastest data)
61  */
62  void transferReporter(const ReporterName & from_reporter,
63  const ReporterName & to_reporter,
64  const FEProblemBase & from_problem,
65  FEProblemBase & to_problem,
66  unsigned int time_index = 0);
67 
68  /*
69  * Transferring reporter value from one FEProblems to a vector reporter value from another,
70  * mainly used for multiapps.
71  *
72  * @param from_reporter reporter name on main app
73  * @param to_reporter reporter name on sub app
74  * @param from_problem The FEProblem that references the reporter data with the value
75  * @param to_problem The FEProblem that references the reporter data to transfer to
76  * @param index the element index of the vector reporter
77  * @param time_index time index of transfer (default is lastest data)
78  */
79  void transferToVectorReporter(const ReporterName & from_reporter,
80  const ReporterName & to_reporter,
81  const FEProblemBase & from_problem,
82  FEProblemBase & to_problem,
83  dof_id_type index,
84  unsigned int time_index = 0);
85 
86  /*
87  * Transferring reporter value from one vector reporter value to a single
88  * reporter value.
89  *
90  * @param from_reporter reporter name on main app
91  * @param to_reporter reporter name on sub app
92  * @param from_problem The FEProblem that references the reporter data with the value
93  * @param to_problem The FEProblem that references the reporter data to transfer to
94  * @param index the element index of the vector reporter
95  * @param time_index time index of transfer (default is lastest data)
96  */
97  void transferFromVectorReporter(const ReporterName & from_reporter,
98  const ReporterName & to_reporter,
99  const FEProblemBase & from_problem,
100  FEProblemBase & to_problem,
101  dof_id_type index,
102  unsigned int time_index = 0);
103 
104  /*
105  * Helper for declaring a new reporter value in a FEProblem that is the same type
106  * as the reporter value in another FEProblem.
107  *
108  * @param from_reporter reporter name to clone type
109  * @param to_reporter reporter name of the clone
110  * @param from_problem The FEProblem that references the reporter data with the value
111  * @param to_problem The FEProblem that references the reporter data to declare clone
112  * @param mode ReporterMode to declare value as
113  */
114  void declareClone(const ReporterName & from_reporter,
115  const ReporterName & to_reporter,
116  const FEProblemBase & from_problem,
117  FEProblemBase & to_problem,
118  const ReporterMode & mode);
119 
120  /*
121  * Helper for declaring a new reporter value in a FEProblem that has specified type.
122  *
123  * @param reporter_name reporter name of the clone
124  * @param fe_problem The FEProblem that references the reporter data to declare clone
125  * @param type The type of reporter to declare
126  * @param mode ReporterMode to declare value as
127  */
128  void declareClone(const ReporterName & rname,
129  FEProblemBase & problem,
130  const std::string & type,
131  const ReporterMode & mode);
132 
133  /*
134  * Helper for declaring a new vector reporter value in a FEProblem that contains
135  * the same type as the reporter value in another FEProblem.
136  *
137  * @param from_reporter reporter name to clone type
138  * @param to_reporter reporter name of the vector clone
139  * @param from_problem The FEProblem that references the reporter data with the value
140  * @param to_problem The FEProblem that references the reporter data to declare value
141  * @param mode ReporterMode to declare value as
142  */
143  void declareVectorClone(const ReporterName & from_reporter,
144  const ReporterName & to_reporter,
145  const FEProblemBase & from_problem,
146  FEProblemBase & to_problem,
147  const ReporterMode & mode);
148 
149  /*
150  * Helper for declaring a new reporter value in a FEProblem that has specified type.
151  *
152  * @param reporter_name reporter name of the vector clone
153  * @param fe_problem The FEProblem that references the reporter data to declare vector clone
154  * @param type The type of reporter to declare the vector
155  * @param mode ReporterMode to declare value as
156  */
157  void declareVectorClone(const ReporterName & rname,
158  FEProblemBase & problem,
159  const std::string & type,
160  const ReporterMode & mode);
161 
162  /*
163  * Resize vector reporter value
164  *
165  * @param name Name of reporter
166  * @param problem FEProblem that contains the reporter value
167  * @param n New size of vector
168  */
169  void resizeReporter(const ReporterName & name, FEProblemBase & problem, dof_id_type n);
170 
171  /*
172  * Clear vector reporter value
173  *
174  * @param name Name of reporter
175  * @param problem FEProblem that contains the reporter value
176  */
177  void clearVectorReporter(const ReporterName & name, FEProblemBase & problem);
178 
179  /*
180  * Sum vector reporter value
181  *
182  * @param name Name of reporter
183  * @param problem FEProblem that contains the reporter value
184  */
185  void sumVectorReporter(const ReporterName & name, FEProblemBase & problem);
186 
187  /*
188  * Helper for declaring reporter names when transfer is cloning values.
189  * The result names will be:
190  * names[i] = obj_name/prefix:rep_name[i].getObjectName():rep_name[i].getValueName()
191  *
192  * @param prefix A string to prefix the reporter value name with.
193  * Typically the transfer name or user supplied.
194  * @param obj_name The reporter object name that emulates holding the data
195  * @param rep_names The list of reporter names that are being cloned
196  *
197  * @return A list of declarable reporter names
198  */
199  std::vector<ReporterName> getReporterNamesHelper(std::string prefix,
200  const std::string & obj_name,
201  const std::vector<ReporterName> & rep_names);
202 
206  void checkHasReporterValue(const ReporterName & reporter, const FEProblemBase & problem) const;
207 
208 private:
213  void hideVariableHelper(const ReporterName & reporter, FEProblemBase & problem);
214 
217 };
void declareVectorClone(const ReporterName &from_reporter, const ReporterName &to_reporter, const FEProblemBase &from_problem, FEProblemBase &to_problem, const ReporterMode &mode)
void transferFromVectorReporter(const ReporterName &from_reporter, const ReporterName &to_reporter, const FEProblemBase &from_problem, FEProblemBase &to_problem, dof_id_type index, unsigned int time_index=0)
void clearVectorReporter(const ReporterName &name, FEProblemBase &problem)
void addReporterTransferMode(const ReporterName &name, const ReporterMode &mode, FEProblemBase &problem)
void checkHasReporterValue(const ReporterName &reporter, const FEProblemBase &problem) const
Checks if the problem problem has a Reporter value with the name reporter.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
static MultiMooseEnum standardTransferTypes()
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
void resizeReporter(const ReporterName &name, FEProblemBase &problem, dof_id_type n)
void declareClone(const ReporterName &from_reporter, const ReporterName &to_reporter, const FEProblemBase &from_problem, FEProblemBase &to_problem, const ReporterMode &mode)
void transferReporter(const ReporterName &from_reporter, const ReporterName &to_reporter, const FEProblemBase &from_problem, FEProblemBase &to_problem, unsigned int time_index=0)
void hideVariableHelper(const ReporterName &reporter, FEProblemBase &problem)
Helper for hiding the variables in the problem problem if the Reporter with name reporter is associat...
void sumVectorReporter(const ReporterName &name, FEProblemBase &problem)
ReporterTransferInterface(const Transfer *transfer)
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
void transferToVectorReporter(const ReporterName &from_reporter, const ReporterName &to_reporter, const FEProblemBase &from_problem, FEProblemBase &to_problem, dof_id_type index, unsigned int time_index=0)
static InputParameters validParams()
MooseEnumItem that automatically creates the ID and doesn&#39;t allow the ID to be assigned.
Definition: ReporterMode.h:44
std::vector< ReporterName > getReporterNamesHelper(std::string prefix, const std::string &obj_name, const std::vector< ReporterName > &rep_names)
The Reporter system is comprised of objects that can contain any number of data values.
Definition: ReporterName.h:30
const Transfer & _rti_transfer
The Transfer that this interface is associated with.
uint8_t dof_id_type
Base class for all Transfer objects.
Definition: Transfer.h:36