https://mooseframework.inl.gov
Loading...
Searching...
No Matches
CoupledInjectionProductionPhysics.C
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
11
13registerMooseAction("PorousFlowApp", CoupledInjectionProductionPhysics, "add_dirac_kernel");
14registerMooseAction("PorousFlowApp", CoupledInjectionProductionPhysics, "add_postprocessor");
16
19{
21
22 params.addRequiredParam<std::vector<Point>>("injection_points", "List of injection points [m]");
23 params.addRequiredParam<std::vector<Point>>("production_points", "List of production points [m]");
24 params.addParam<MultiAppName>("multi_app", "MultiApp to transfer to and from");
25
27 "Adds objects to perform hydrodynamic coupling at injection and production points.");
28
29 return params;
30}
31
33 const InputParameters & parameters)
34 : PhysicsBase(parameters),
35 _injection_points(getParam<std::vector<Point>>("injection_points")),
36 _production_points(getParam<std::vector<Point>>("production_points"))
37{
39 _points.insert(_points.end(), _production_points.begin(), _production_points.end());
40
41 for (const auto i : index_range(_injection_points))
42 _labels.push_back("inj" + std::to_string(i + 1));
43 for (const auto i : index_range(_production_points))
44 _labels.push_back("pro" + std::to_string(i + 1));
45}
46
47void
49{
50 for (const auto i : index_range(_points))
51 {
52 addPPSourceDiracKernel(_points[i], "porepressure", "mass_rate_" + _labels[i]);
53 addPPSourceDiracKernel(_points[i], "temperature", "energy_rate_" + _labels[i]);
54 }
55}
56
57void
59{
60 for (const auto i : index_range(_points))
61 {
62 addPointValuePostprocessor("porepressure", _points[i], "p_" + _labels[i]);
63 addPointValuePostprocessor("temperature", _points[i], "T_" + _labels[i]);
64 addReceiverPostprocessor("mass_rate_" + _labels[i]);
65 addReceiverPostprocessor("energy_rate_" + _labels[i]);
66 }
67}
68
69void
71{
72 if (isParamValid("multi_app"))
73 for (const auto i : index_range(_points))
74 {
75 addPostprocessorTransfer("p_" + _labels[i], false);
76 addPostprocessorTransfer("T_" + _labels[i], false);
77 addPostprocessorTransfer("mass_rate_" + _labels[i], true);
78 addPostprocessorTransfer("energy_rate_" + _labels[i], true);
79 }
80}
81
82void
84 const NonlinearVariableName & var,
85 const PostprocessorName & pp_name)
86{
87 const std::string class_name = "PorousFlowPointSourceFromPostprocessor";
88 auto params = _factory.getValidParams(class_name);
89 params.set<NonlinearVariableName>("variable") = var;
90 params.set<Point>("point") = point;
91 params.set<PostprocessorName>("mass_flux") = pp_name;
92 getProblem().addDiracKernel(class_name, "dirac_" + pp_name, params);
93}
94
95void
97{
98 const std::string class_name = "Receiver";
99 auto params = _factory.getValidParams(class_name);
100 getProblem().addPostprocessor(class_name, pp_name, params);
101}
102
103void
105 const Point & point,
106 const PostprocessorName & pp_name)
107{
108 const std::string class_name = "PointValue";
109 auto params = _factory.getValidParams(class_name);
110 params.set<VariableName>("variable") = var;
111 params.set<Point>("point") = point;
112 params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
113 getProblem().addPostprocessor(class_name, pp_name, params);
114}
115
116void
118 bool from_multi_app)
119{
120 const std::string class_name = "MultiAppPostprocessorTransfer";
121 auto params = _factory.getValidParams(class_name);
122 if (from_multi_app)
123 params.set<MultiAppName>("from_multi_app") = getParam<MultiAppName>("multi_app");
124 else
125 params.set<MultiAppName>("to_multi_app") = getParam<MultiAppName>("multi_app");
126 params.set<PostprocessorName>("from_postprocessor") = pp_name;
127 params.set<PostprocessorName>("to_postprocessor") = pp_name;
128 if (from_multi_app)
129 params.set<MooseEnum>("reduction_type") = "average";
130 params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
131 getProblem().addTransfer(class_name, pp_name + "_transfer", params);
132}
registerMooseAction("PorousFlowApp", CoupledInjectionProductionPhysics, "add_dirac_kernel")
registerPhysicsBaseTasks("PorousFlowApp", CoupledInjectionProductionPhysics)
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_INITIAL
Adds objects to perform hydrodynamic coupling at injection and production points.
CoupledInjectionProductionPhysics(const InputParameters &parameters)
void addPostprocessorTransfer(const PostprocessorName &pp_name, bool from_multi_app)
Adds a MultiAppPostprocessorTransfer.
std::vector< Point > _points
Injection and production points.
const std::vector< Point > & _production_points
Production points.
void addPPSourceDiracKernel(const Point &point, const NonlinearVariableName &var, const PostprocessorName &pp_name)
Adds a PorousFlowPointSourceFromPostprocessor.
const std::vector< Point > & _injection_points
Injection points.
void addReceiverPostprocessor(const PostprocessorName &pp_name)
Adds a Receiver.
std::vector< std::string > _labels
Label for each point.
void addPointValuePostprocessor(const VariableName &var, const Point &point, const PostprocessorName &pp_name)
Adds a PointValue.
virtual void addTransfer(const std::string &transfer_name, const std::string &name, InputParameters &parameters)
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
virtual void addDiracKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
InputParameters getValidParams(const std::string &name) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
bool isParamValid(const std::string &name) const
Factory & _factory
static InputParameters validParams()
virtual FEProblemBase & getProblem()