KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
dam_reservoir_constant_temperature_process.hpp
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main authors: Lorenzo Gracia
11 //
12 //
13 
14 #if !defined(KRATOS_DAM_RESERVOIR_CONSTANT_TEMPERATURE_PROCESS)
15 #define KRATOS_DAM_RESERVOIR_CONSTANT_TEMPERATURE_PROCESS
16 
17 #include <cmath>
18 
19 // Project includes
20 #include "includes/kratos_flags.h"
22 #include "processes/process.h"
23 
24 // Application include
26 
27 namespace Kratos
28 {
29 
31 {
32 
33  public:
35 
37 
38  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
39 
42  Parameters &rParameters) : Process(Flags()), mrModelPart(rModelPart)
43  {
45 
46  //only include validation with c++11 since raw_literals do not exist in c++03
47  Parameters default_parameters(R"(
48  {
49  "model_part_name":"PLEASE_CHOOSE_MODEL_PART_NAME",
50  "variable_name": "PLEASE_PRESCRIBE_VARIABLE_NAME",
51  "is_fixed" : false,
52  "Gravity_Direction" : "Y",
53  "Reservoir_Bottom_Coordinate_in_Gravity_Direction" : 0.0,
54  "Water_temp" : 0.0,
55  "Water_temp_Table" : 0,
56  "Water_level" : 0.0,
57  "Water_level_Table" : 0,
58  "interval":[
59  0.0,
60  0.0
61  ]
62  } )");
63 
64  // Some values need to be mandatorily prescribed since no meaningful default value exist. For this reason try accessing to them
65  // So that an error is thrown if they don't exist
66  rParameters["Reservoir_Bottom_Coordinate_in_Gravity_Direction"];
67  rParameters["variable_name"];
68  rParameters["model_part_name"];
69 
70  // Now validate agains defaults -- this also ensures no type mismatch
71  rParameters.ValidateAndAssignDefaults(default_parameters);
72 
73  mVariableName = rParameters["variable_name"].GetString();
74  mIsFixed = rParameters["is_fixed"].GetBool();
75  mGravityDirection = rParameters["Gravity_Direction"].GetString();
76  mReferenceCoordinate = rParameters["Reservoir_Bottom_Coordinate_in_Gravity_Direction"].GetDouble();
77  mWaterTemp = rParameters["Water_temp"].GetDouble();
78  mWaterLevel = rParameters["Water_level"].GetDouble();
79 
80  mTimeUnitConverter = mrModelPart.GetProcessInfo()[TIME_UNIT_CONVERTER];
81  mTableIdWaterTemp = rParameters["Water_temp_Table"].GetInt();
82  mTableIdWater = rParameters["Water_level_Table"].GetInt();
83 
84  if (mTableIdWaterTemp != 0)
86 
87  if (mTableIdWater != 0)
89 
90  KRATOS_CATCH("");
91  }
92 
94 
97 
98  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
99 
100  void Execute() override
101  {
102  }
103 
104  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
105 
106  void ExecuteInitialize() override
107  {
108 
109  KRATOS_TRY;
110 
112  const int nnodes = mrModelPart.GetMesh(0).Nodes().size();
113  int direction;
114 
115  if (mGravityDirection == "X")
116  direction = 0;
117  else if (mGravityDirection == "Y")
118  direction = 1;
119  else
120  direction = 2;
121 
122  if (nnodes != 0)
123  {
124  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.GetMesh(0).NodesBegin();
125 
126  #pragma omp parallel for
127  for (int i = 0; i < nnodes; i++)
128  {
129  ModelPart::NodesContainerType::iterator it = it_begin + i;
130 
131  double aux = mWaterLevel - it->Coordinates()[direction];
132  if (aux >= 0.0)
133  {
134  if (mIsFixed)
135  {
136  it->Fix(var);
137  }
138  it->FastGetSolutionStepValue(var) = mWaterTemp;
139  }
140  }
141  }
142 
143  KRATOS_CATCH("");
144  }
145 
146  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
147 
149  {
150 
151  KRATOS_TRY;
152 
154 
155  // Getting the values of table in case that it exist
156 
157  if (mTableIdWaterTemp != 0)
158  {
159  double time = mrModelPart.GetProcessInfo()[TIME];
161  mWaterTemp = mpTableWaterTemp->GetValue(time);
162  }
163 
164  if (mTableIdWater != 0)
165  {
166  double time = mrModelPart.GetProcessInfo()[TIME];
168  mWaterLevel = mpTableWater->GetValue(time);
169  }
170 
171  const int nnodes = mrModelPart.GetMesh(0).Nodes().size();
172  int direction;
173 
174  if (mGravityDirection == "X")
175  direction = 0;
176  else if (mGravityDirection == "Y")
177  direction = 1;
178  else
179  direction = 2;
180 
181  if (nnodes != 0)
182  {
183  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.GetMesh(0).NodesBegin();
184 
185  #pragma omp parallel for
186  for (int i = 0; i < nnodes; i++)
187  {
188  ModelPart::NodesContainerType::iterator it = it_begin + i;
189 
190  double aux = mWaterLevel - it->Coordinates()[direction];
191  if (aux >= 0.0)
192  {
193  if (mIsFixed)
194  {
195  it->Fix(var);
196  }
197  it->FastGetSolutionStepValue(var) = mWaterTemp;
198  }
199  }
200  }
201 
202  KRATOS_CATCH("");
203  }
204 
205  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
206 
208  {
209 
210  KRATOS_TRY;
211 
213 
214  const int nnodes = mrModelPart.GetMesh(0).Nodes().size();
215 
216  if (nnodes != 0)
217  {
218 
219  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.GetMesh(0).NodesBegin();
220 
221  #pragma omp parallel for
222  for (int i = 0; i < nnodes; i++)
223  {
224  ModelPart::NodesContainerType::iterator it = it_begin + i;
225  it->Free(var);
226  }
227  }
228 
229  KRATOS_CATCH("");
230  }
231 
233  std::string Info() const override
234  {
235  return "DamReservoirConstantTemperatureProcess";
236  }
237 
239  void PrintInfo(std::ostream &rOStream) const override
240  {
241  rOStream << "DamReservoirConstantTemperatureProcess";
242  }
243 
245  void PrintData(std::ostream &rOStream) const override
246  {
247  }
248 
250 
251  protected:
253 
255  std::string mVariableName;
256  std::string mGravityDirection;
257  bool mIsFixed;
259  double mWaterTemp;
260  double mWaterLevel;
262  TableType::Pointer mpTableWaterTemp;
263  TableType::Pointer mpTableWater;
266 
267  //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
268 
269  private:
272 
273 }; //Class
274 
276 inline std::istream &operator>>(std::istream &rIStream,
278 
280 inline std::ostream &operator<<(std::ostream &rOStream,
282 {
283  rThis.PrintInfo(rOStream);
284  rOStream << std::endl;
285  rThis.PrintData(rOStream);
286 
287  return rOStream;
288 }
289 
290 } /* namespace Kratos.*/
291 
292 #endif /* KRATOS_DAM_RESERVOIR_CONSTANT_TEMPERATURE_PROCESS defined */
Definition: dam_reservoir_constant_temperature_process.hpp:31
double mTimeUnitConverter
Definition: dam_reservoir_constant_temperature_process.hpp:261
std::string mVariableName
Definition: dam_reservoir_constant_temperature_process.hpp:255
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: dam_reservoir_constant_temperature_process.hpp:239
KRATOS_CLASS_POINTER_DEFINITION(DamReservoirConstantTemperatureProcess)
TableType::Pointer mpTableWaterTemp
Definition: dam_reservoir_constant_temperature_process.hpp:262
void Execute() override
Execute method is used to execute the Process algorithms.
Definition: dam_reservoir_constant_temperature_process.hpp:100
TableType::Pointer mpTableWater
Definition: dam_reservoir_constant_temperature_process.hpp:263
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: dam_reservoir_constant_temperature_process.hpp:245
ModelPart & mrModelPart
Member Variables.
Definition: dam_reservoir_constant_temperature_process.hpp:254
void ExecuteFinalizeSolutionStep() override
This function will be executed at every time step AFTER performing the solve phase.
Definition: dam_reservoir_constant_temperature_process.hpp:207
int mTableIdWater
Definition: dam_reservoir_constant_temperature_process.hpp:265
std::string mGravityDirection
Definition: dam_reservoir_constant_temperature_process.hpp:256
std::string Info() const override
Turn back information as a string.
Definition: dam_reservoir_constant_temperature_process.hpp:233
int mTableIdWaterTemp
Definition: dam_reservoir_constant_temperature_process.hpp:264
DamReservoirConstantTemperatureProcess(ModelPart &rModelPart, Parameters &rParameters)
Constructor.
Definition: dam_reservoir_constant_temperature_process.hpp:41
double mWaterTemp
Definition: dam_reservoir_constant_temperature_process.hpp:259
void ExecuteInitializeSolutionStep() override
This function will be executed at every time step BEFORE performing the solve phase.
Definition: dam_reservoir_constant_temperature_process.hpp:148
virtual ~DamReservoirConstantTemperatureProcess()
Destructor.
Definition: dam_reservoir_constant_temperature_process.hpp:96
bool mIsFixed
Definition: dam_reservoir_constant_temperature_process.hpp:257
void ExecuteInitialize() override
This function is designed for being called at the beginning of the computations right after reading t...
Definition: dam_reservoir_constant_temperature_process.hpp:106
double mWaterLevel
Definition: dam_reservoir_constant_temperature_process.hpp:260
double mReferenceCoordinate
Definition: dam_reservoir_constant_temperature_process.hpp:258
Table< double, double > TableType
Definition: dam_reservoir_constant_temperature_process.hpp:36
Definition: flags.h:58
KratosComponents class encapsulates a lookup table for a family of classes in a generic way.
Definition: kratos_components.h:49
NodesContainerType & Nodes()
Definition: mesh.h:346
NodeIterator NodesBegin()
Definition: mesh.h:326
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
TableType::Pointer pGetTable(IndexType TableId)
Definition: model_part.h:595
MeshType & GetMesh(IndexType ThisIndex=0)
Definition: model_part.h:1791
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
double GetDouble() const
This method returns the double contained in the current Parameter.
Definition: kratos_parameters.cpp:657
int GetInt() const
This method returns the integer contained in the current Parameter.
Definition: kratos_parameters.cpp:666
void ValidateAndAssignDefaults(const Parameters &rDefaultParameters)
This function is designed to verify that the parameters under testing match the form prescribed by th...
Definition: kratos_parameters.cpp:1306
std::string GetString() const
This method returns the string contained in the current Parameter.
Definition: kratos_parameters.cpp:684
bool GetBool() const
This method returns the boolean contained in the current Parameter.
Definition: kratos_parameters.cpp:675
size_type size() const
Returns the number of elements in the container.
Definition: pointer_vector_set.h:502
The base class for all processes in Kratos.
Definition: process.h:49
Definition: table.h:435
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
time
Definition: face_heat.py:85
int nnodes
Definition: sensitivityMatrix.py:24
integer i
Definition: TensorModule.f:17