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.
apply_constant_interpolate_line_pressure_process.hpp
Go to the documentation of this file.
1 // KRATOS___
2 // // ) )
3 // // ___ ___
4 // // ____ //___) ) // ) )
5 // // / / // // / /
6 // ((____/ / ((____ ((___/ / MECHANICS
7 //
8 // License: geo_mechanics_application/license.txt
9 //
10 // Main authors: Vahid Galavi
11 //
12 
13 #pragma once
14 
15 #include <algorithm>
16 #include "includes/kratos_flags.h"
18 #include "processes/process.h"
19 
21 
22 namespace Kratos
23 {
24 
26 {
27 
28 public:
29 
31 
33  Parameters rParameters
34  ) : Process(Flags()) , mrModelPart(model_part)
35  {
37 
38  //only include validation with c++11 since raw_literals do not exist in c++03
39  Parameters default_parameters( R"(
40  {
41  "model_part_name":"PLEASE_CHOOSE_MODEL_PART_NAME",
42  "variable_name": "PLEASE_PRESCRIBE_VARIABLE_NAME",
43  "is_fixed": false,
44  "is_seepage": false,
45  "gravity_direction": 1,
46  "out_of_plane_direction": 2,
47  "pressure_tension_cut_off" : 0.0,
48  "table" : 1
49  } )" );
50 
51  // Some values need to be mandatory prescribed since no meaningful default value exist. For this reason try accessing to them
52  // So that an error is thrown if they don't exist
53  rParameters["variable_name"];
54  rParameters["model_part_name"];
55 
56  mIsFixedProvided = rParameters.Has("is_fixed");
57 
58  // Now validate against defaults -- this also ensures no type mismatch
59  rParameters.ValidateAndAssignDefaults(default_parameters);
60 
61  mVariableName = rParameters["variable_name"].GetString();
62 
63  FindBoundaryNodes();
64 
65  mIsFixed = rParameters["is_fixed"].GetBool();
66  mIsSeepage = rParameters["is_seepage"].GetBool();
67  mGravityDirection = rParameters["gravity_direction"].GetInt();
68  mOutOfPlaneDirection = rParameters["out_of_plane_direction"].GetInt();
69  if (mGravityDirection == mOutOfPlaneDirection)
70  KRATOS_ERROR << "Gravity direction cannot be the same as Out-of-Plane directions"
71  << rParameters
72  << std::endl;
73 
74  mHorizontalDirection = 0;
75  for (unsigned int i=0; i<N_DIM_3D; ++i)
76  if (i!=mGravityDirection && i!=mOutOfPlaneDirection) mHorizontalDirection = i;
77 
78  mPressureTensionCutOff = rParameters["pressure_tension_cut_off"].GetDouble();
79 
80  KRATOS_CATCH("")
81  }
82 
88 
90  void Execute() override
91  {
92  }
93 
96  void ExecuteInitialize() override
97  {
99 
100  const Variable<double> &var = KratosComponents< Variable<double> >::Get(mVariableName);
101 
102  block_for_each(mrModelPart.Nodes(), [&var, this](Node& rNode) {
103  const double pressure = CalculatePressure(rNode);
104  if (mIsSeepage) {
105  if (pressure < PORE_PRESSURE_SIGN_FACTOR * mPressureTensionCutOff) {
106  rNode.FastGetSolutionStepValue(var) = pressure;
107  if (mIsFixed) rNode.Fix(var);
108  } else {
109  rNode.Free(var);
110  }
111  } else {
112  rNode.FastGetSolutionStepValue(var) = std::min(pressure,PORE_PRESSURE_SIGN_FACTOR * mPressureTensionCutOff);
113  if (mIsFixed) rNode.Fix(var);
114  else if (mIsFixedProvided) rNode.Free(var);
115  }
116  });
117 
118  KRATOS_CATCH("")
119  }
120 
122  std::string Info() const override
123  {
124  return "ApplyConstantInterpolateLinePressureProcess";
125  }
126 
127 private:
129  ModelPart& mrModelPart;
130  std::string mVariableName;
131  bool mIsFixed;
132  bool mIsFixedProvided;
133  bool mIsSeepage;
134  unsigned int mGravityDirection;
135  unsigned int mOutOfPlaneDirection;
136  unsigned int mHorizontalDirection;
137  std::vector< Node * > mBoundaryNodes;
138  double mPressureTensionCutOff;
139 
140  double CalculatePressure(const Node &rNode)
141  {
142  // find top boundary
143  std::vector< Node* > TopBoundaryNodes;
144  FindTopBoundaryNodes(rNode, TopBoundaryNodes);
145  double PressureTop;
146  double CoordinateTop;
147  CalculateBoundaryPressure(rNode, TopBoundaryNodes, PressureTop, CoordinateTop);
148 
149  // find bottom boundary
150  std::vector< Node* > BottomBoundaryNodes;
151  FindBottomBoundaryNodes(rNode, BottomBoundaryNodes);
152  double PressureBottom;
153  double CoordinateBottom;
154  CalculateBoundaryPressure(rNode, BottomBoundaryNodes, PressureBottom, CoordinateBottom, true);
155 
156  // calculate pressure
157  if (std::abs(CoordinateTop - CoordinateBottom) > TINY) {
158  const double slopeP = (PressureTop - PressureBottom) / (CoordinateTop - CoordinateBottom);
159  return slopeP * (rNode.Coordinates()[mGravityDirection] - CoordinateBottom ) + PressureBottom;
160  } else {
161  return PressureBottom;
162  }
163  }
164 
165  void CalculateBoundaryPressure( const Node &rNode,
166  const std::vector< Node*> &BoundaryNodes,
167  double &pressure,
168  double &coordinate,
169  bool isBottom=false )
170  {
171  // find top boundary
172  std::vector< Node*> LeftBoundaryNodes;
173  FindLeftBoundaryNodes(rNode, BoundaryNodes, LeftBoundaryNodes);
174 
175  std::vector< Node*> RightBoundaryNodes;
176  FindRightBoundaryNodes(rNode, BoundaryNodes, RightBoundaryNodes);
177 
178  if (!LeftBoundaryNodes.empty() && !RightBoundaryNodes.empty()) {
179  const Node *LeftNode = FindClosestNodeOnBoundaryNodes(rNode, LeftBoundaryNodes, isBottom);
180  const Node *RightNode = FindClosestNodeOnBoundaryNodes(rNode, RightBoundaryNodes, isBottom);
181 
182  InterpolateBoundaryPressure(rNode, LeftNode, RightNode, pressure, coordinate);
183  return;
184 
185  } else if (!LeftBoundaryNodes.empty()) {
186  InterpolateBoundaryPressureWithOneContainer(rNode, LeftBoundaryNodes, pressure, coordinate);
187  return;
188 
189  } else if (!RightBoundaryNodes.empty()) {
190  InterpolateBoundaryPressureWithOneContainer(rNode, RightBoundaryNodes, pressure, coordinate);
191  return;
192 
193  } else {
194  KRATOS_ERROR << "There is not enough points around interpolation, node Id" << rNode.Id() << std::endl;
195  }
196 
197  }
198 
199  void InterpolateBoundaryPressureWithOneContainer(const Node &rNode,
200  const std::vector< Node*> &BoundaryNodes,
201  double &pressure,
202  double &coordinate )
203  {
204  std::vector< Node*> FoundNodes;
205  FindTwoClosestNodeOnBoundaryNodes(rNode, BoundaryNodes, FoundNodes);
206 
207  const Variable<double> &var = KratosComponents< Variable<double> >::Get(mVariableName);
208 
209  const double &pressureLeft = FoundNodes[0]->FastGetSolutionStepValue(var);
210  Vector3 CoordinatesLeft;
211  noalias(CoordinatesLeft) = FoundNodes[0]->Coordinates();
212 
213  const double &pressureRight = FoundNodes[1]->FastGetSolutionStepValue(var);
214  Vector3 CoordinatesRight;
215  noalias(CoordinatesRight) = FoundNodes[1]->Coordinates();
216 
217  // calculate pressure
218  if (std::abs(CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) > TINY) {
219  const double slopeP = (pressureRight - pressureLeft) / (CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]);
220  pressure = slopeP * (rNode.Coordinates()[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) + pressureLeft;
221 
222  const double slopeY = (CoordinatesRight[mGravityDirection] - CoordinatesLeft[mGravityDirection]) / (CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]);
223  coordinate = slopeY * (rNode.Coordinates()[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) + CoordinatesLeft[mGravityDirection];
224  } else {
225  pressure = pressureLeft;
226  coordinate = CoordinatesLeft[mGravityDirection];
227  }
228  }
229 
230  void InterpolateBoundaryPressure(const Node &rNode,
231  const Node *LeftNode,
232  const Node *RightNode,
233  double &pressure,
234  double &coordinate )
235  {
236  const Variable<double> &var = KratosComponents< Variable<double> >::Get(mVariableName);
237 
238  const double &pressureLeft = LeftNode->FastGetSolutionStepValue(var);
239  Vector3 CoordinatesLeft;
240  noalias(CoordinatesLeft) = LeftNode->Coordinates();
241 
242  const double &pressureRight = RightNode->FastGetSolutionStepValue(var);
243  Vector3 CoordinatesRight;
244  noalias(CoordinatesRight) = RightNode->Coordinates();
245 
246  // calculate pressure
247  if (std::abs(CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) > TINY) {
248  const double slopeP = (pressureRight - pressureLeft) / (CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]);
249  pressure = slopeP * (rNode.Coordinates()[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) + pressureLeft;
250 
251  const double slopeY = (CoordinatesRight[mGravityDirection] - CoordinatesLeft[mGravityDirection]) / (CoordinatesRight[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]);
252  coordinate = slopeY * (rNode.Coordinates()[mHorizontalDirection] - CoordinatesLeft[mHorizontalDirection]) + CoordinatesLeft[mGravityDirection];
253  } else {
254  pressure = pressureLeft;
255  coordinate = CoordinatesLeft[mGravityDirection];
256  }
257  }
258 
259  void FindTwoClosestNodeOnBoundaryNodes(const Node &rNode,
260  const std::vector< Node*> &BoundaryNodes,
261  std::vector< Node*> &FoundNodes)
262  {
263  const double HorizontalCoordinate = rNode.Coordinates()[mHorizontalDirection];
264  FoundNodes.resize(2);
265 
266  unsigned int nFound = 0;
267  double horizontalDistanceClosest_1 = LARGE;
268  for (unsigned int i = 0; i < BoundaryNodes.size(); ++i) {
269  Vector3 CoordinatesBoundary;
270  noalias(CoordinatesBoundary) = BoundaryNodes[i]->Coordinates();
271 
272  if (std::abs(CoordinatesBoundary[mHorizontalDirection] - HorizontalCoordinate) <= horizontalDistanceClosest_1) {
273  horizontalDistanceClosest_1 = std::abs(CoordinatesBoundary[mHorizontalDirection] - HorizontalCoordinate);
274  FoundNodes[0] = BoundaryNodes[i];
275  nFound++;
276  }
277  }
278 
279  double horizontalDistanceClosest_2 = LARGE;
280  for (unsigned int i = 0; i < BoundaryNodes.size(); ++i) {
281  Vector3 CoordinatesBoundary;
282  noalias(CoordinatesBoundary) = BoundaryNodes[i]->Coordinates();
283 
284  if (std::abs(CoordinatesBoundary[mHorizontalDirection] - HorizontalCoordinate) <= horizontalDistanceClosest_2 &&
285  std::abs(CoordinatesBoundary[mHorizontalDirection] - HorizontalCoordinate) > horizontalDistanceClosest_1) {
286  horizontalDistanceClosest_2 = std::abs(CoordinatesBoundary[mHorizontalDirection] - HorizontalCoordinate);
287  FoundNodes[1] = BoundaryNodes[i];
288  nFound++;
289  }
290  }
291 
292  KRATOS_ERROR_IF(nFound < 2) << "Not enough points for interpolation: Coordinates"<< rNode.Coordinates() << std::endl;
293  }
294 
295 
296  Node* FindClosestNodeOnBoundaryNodes(const Node &rNode,
297  const std::vector< Node* > &BoundaryNodes,
298  const bool isBottom)
299  {
300  const double HorizontalCoordinate = rNode.Coordinates()[mHorizontalDirection];
301  Node *pNode;
302  std::vector< Node*> FoundNodes;
303 
304  double horizontalDistance = LARGE;
305  for (unsigned int i = 0; i < BoundaryNodes.size(); ++i) {
306  if (std::abs(BoundaryNodes[i]->Coordinates()[mHorizontalDirection] - HorizontalCoordinate) <= horizontalDistance) {
307  horizontalDistance = std::abs(BoundaryNodes[i]->Coordinates()[mHorizontalDirection] - HorizontalCoordinate);
308  FoundNodes.push_back(BoundaryNodes[i]);
309  }
310  }
311 
312  if (isBottom) {
313  double height = LARGE;
314  for (unsigned int i = 0; i < FoundNodes.size(); ++i) {
315  if (FoundNodes[i]->Coordinates()[mGravityDirection] < height) {
316  pNode = FoundNodes[i];
317  height = FoundNodes[i]->Coordinates()[mGravityDirection];
318  }
319  }
320  } else {
321  double height = -LARGE;
322  for (unsigned int i = 0; i < FoundNodes.size(); ++i) {
323  if (FoundNodes[i]->Coordinates()[mGravityDirection] > height) {
324  pNode = FoundNodes[i];
325  height = FoundNodes[i]->Coordinates()[mGravityDirection];
326  }
327  }
328  }
329 
330  return pNode;
331  }
332 
333  void FindTopBoundaryNodes(const Node &rNode,
334  std::vector< Node* > &TopBoundaryNodes)
335  {
336  for (unsigned int i = 0; i < mBoundaryNodes.size(); ++i) {
337  if (mBoundaryNodes[i]->Coordinates()[mGravityDirection] >= rNode.Coordinates()[mGravityDirection]) {
338  // node is on top boundary
339  TopBoundaryNodes.push_back(mBoundaryNodes[i]);
340  }
341  }
342  }
343 
344  void FindBottomBoundaryNodes(const Node &rNode,
345  std::vector< Node*> &BottomBoundaryNodes)
346  {
347  for (unsigned int i = 0; i < mBoundaryNodes.size(); ++i) {
348  if (mBoundaryNodes[i]->Coordinates()[mGravityDirection] <= rNode.Coordinates()[mGravityDirection]) {
349  // node is on top boundary
350  BottomBoundaryNodes.push_back(mBoundaryNodes[i]);
351  }
352  }
353  }
354 
355  void FindLeftBoundaryNodes(const Node &rNode,
356  const std::vector< Node*> &BoundaryNodes,
357  std::vector< Node*> &LeftBoundaryNodes)
358  {
359  for (unsigned int i = 0; i < BoundaryNodes.size(); ++i) {
360  if (BoundaryNodes[i]->Coordinates()[mHorizontalDirection] <= rNode.Coordinates()[mHorizontalDirection]) {
361  // node is on top boundary
362  LeftBoundaryNodes.push_back(BoundaryNodes[i]);
363  }
364  }
365  }
366 
367  void FindRightBoundaryNodes(const Node &rNode,
368  const std::vector< Node*> &BoundaryNodes,
369  std::vector< Node*> &RightBoundaryNodes)
370  {
371  for (unsigned int i = 0; i < BoundaryNodes.size(); ++i) {
372  if (BoundaryNodes[i]->Coordinates()[mHorizontalDirection] >= rNode.Coordinates()[mHorizontalDirection]) {
373  // node is on top boundary
374  RightBoundaryNodes.push_back(BoundaryNodes[i]);
375  }
376  }
377  }
378 
379  int GetMaxNodeID()
380  {
381  KRATOS_TRY
382 
383  int MaxNodeID = -1;
384  block_for_each(mrModelPart.Nodes(), [&MaxNodeID](Node& rNode) {
385  #pragma omp critical
386  MaxNodeID = std::max<int>(MaxNodeID, rNode.Id());
387  });
388 
389  return MaxNodeID;
390 
391  KRATOS_CATCH("")
392  }
393 
394  void FindBoundaryNodes()
395  {
396  KRATOS_TRY
397 
398  std::vector<int> BoundaryNodes;
399 
400  FillListOfBoundaryNodesFast(BoundaryNodes);
401  mBoundaryNodes.resize(BoundaryNodes.size());
402 
403  unsigned int iPosition = 0;
404  block_for_each(mrModelPart.Nodes(), [&iPosition, &BoundaryNodes, this](Node& rNode) {
405  const int Id = rNode.Id();
406  for (unsigned int j = 0; j < BoundaryNodes.size(); ++j) {
407  if (Id == BoundaryNodes[j]) {
408  mBoundaryNodes[iPosition++] = &rNode;
409  }
410  }
411  });
412 
413  KRATOS_CATCH("")
414  }
415 
416  void FillListOfBoundaryNodesFast(std::vector<int> &BoundaryNodes)
417  {
418  const int ID_UNDEFINED = -1;
419  const int N_ELEMENT = 10;
420 
421  std::vector<std::vector<int>> ELementsOfNodes;
422  std::vector<int> ELementsOfNodesSize;
423 
424  int MaxNodeID = GetMaxNodeID();
425 
426  ELementsOfNodes.resize(MaxNodeID);
427  ELementsOfNodesSize.resize(MaxNodeID);
428 
429  for (unsigned int i=0; i < ELementsOfNodes.size(); ++i) {
430  ELementsOfNodes[i].resize(N_ELEMENT);
431  ELementsOfNodesSize[i] = 0;
432  std::fill(ELementsOfNodes[i].begin(), ELementsOfNodes[i].end(), ID_UNDEFINED);
433  }
434 
435  const unsigned int nElements = mrModelPart.NumberOfElements();
436  ModelPart::ElementsContainerType::iterator it_begin_elements = mrModelPart.ElementsBegin();
437 
438  for (unsigned int i=0; i < nElements; ++i) {
439  ModelPart::ElementsContainerType::iterator pElemIt = it_begin_elements + i;
440  for (unsigned int iPoint=0; iPoint < pElemIt->GetGeometry().PointsNumber(); ++iPoint) {
441  int NodeID = pElemIt->GetGeometry()[iPoint].Id();
442  int ElementId = pElemIt->Id();
443 
444  int index = NodeID-1;
445  ELementsOfNodesSize[index]++;
446  if (ELementsOfNodesSize[index] > N_ELEMENT-1) {
447  ELementsOfNodes[index].push_back(ElementId);
448  } else {
449  ELementsOfNodes[index][ELementsOfNodesSize[index]-1] = ElementId;
450  }
451  }
452  }
453 
454  for (unsigned int i=0; i < nElements; ++i) {
455  ModelPart::ElementsContainerType::iterator pElemIt = it_begin_elements + i;
456 
457  int nEdges = pElemIt->GetGeometry().EdgesNumber();
458  for (int iEdge = 0; iEdge < nEdges; ++iEdge) {
459  const unsigned int nPoints = pElemIt->GetGeometry().GenerateEdges()[iEdge].PointsNumber();
460  std::vector<int> FaceID(nPoints);
461  for (unsigned int iPoint = 0; iPoint < nPoints; ++iPoint) {
462  FaceID[iPoint] = pElemIt->GetGeometry().GenerateEdges()[iEdge].GetPoint(iPoint).Id();
463  }
464 
465  if (!IsMoreThanOneElementWithThisEdgeFast(FaceID, ELementsOfNodes, ELementsOfNodesSize)) {
466  // boundary nodes:
467  for (unsigned int iPoint = 0; iPoint < nPoints; ++iPoint) {
468  auto it = std::find(BoundaryNodes.begin(), BoundaryNodes.end(), FaceID[iPoint]);
469  if (it == BoundaryNodes.end()) {
470  BoundaryNodes.push_back(FaceID[iPoint]);
471  }
472  }
473  }
474  }
475  }
476 
477  KRATOS_ERROR_IF(BoundaryNodes.empty())
478  << "No boundary node is found for interpolate line pressure process" << std::endl;
479 
480  }
481 
482  bool IsMoreThanOneElementWithThisEdgeFast(const std::vector<int> &FaceID,
483  const std::vector<std::vector<int>> &ELementsOfNodes,
484  const std::vector<int> &ELementsOfNodesSize)
485 
486  {
487  const int ID_UNDEFINED = -1;
488  int nMaxElements = 0;
489  for (unsigned int iPoint = 0; iPoint < FaceID.size(); ++iPoint) {
490  int NodeID = FaceID[iPoint];
491  int index = NodeID-1;
492  nMaxElements += ELementsOfNodesSize[index];
493  }
494 
495  if (nMaxElements > 0) {
496  std::vector<vector<int>> ElementIDs;
497  ElementIDs.resize(FaceID.size());
498  for (unsigned int i=0; i<ElementIDs.size(); ++i) {
499  ElementIDs[i].resize(nMaxElements);
500  std::fill(ElementIDs[i].begin(), ElementIDs[i].end(), ID_UNDEFINED);
501  }
502 
503  for (unsigned int iPoint = 0; iPoint < FaceID.size(); ++iPoint) {
504  int NodeID = FaceID[iPoint];
505  int index = NodeID-1;
506  for (int i=0; i < ELementsOfNodesSize[index]; ++i) {
507  int iElementID = ELementsOfNodes[index][i];
508  ElementIDs[iPoint][i] = iElementID;
509  }
510  }
511 
512  std::vector<int> SharedElementIDs;
513  for (unsigned int iPoint = 0; iPoint < FaceID.size(); ++iPoint) {
514  for (unsigned int i=0; i < ElementIDs[iPoint].size(); ++i) {
515  int iElementID = ElementIDs[iPoint][i];
516  bool found = false;
517  if (iElementID !=ID_UNDEFINED) {
518  for (unsigned int iPointInner = 0; iPointInner < FaceID.size(); ++iPointInner) {
519  if (iPointInner != iPoint) {
520  //std::any_of followed by breaking out of 2 for loops
521  for (unsigned int j = 0; j < ElementIDs[iPointInner].size(); ++j) {
522  if (ElementIDs[iPointInner][j]==iElementID) found = true;
523  }
524  }
525  }
526  }
527 
528  if (found) {
529  std::vector<int>::iterator it = std::find(SharedElementIDs.begin(), SharedElementIDs.end(), iElementID);
530  if (it == SharedElementIDs.end()) {
531  SharedElementIDs.push_back(iElementID);
532  }
533  }
534  }
535  }
536 
537  return SharedElementIDs.size() > 1;
538  }
539 
540  return false;
541  }
542 
543 }; // Class ApplyConstantInterpolateLinePressureProcess
544 
546 inline std::istream& operator >> (std::istream& rIStream,
548 
550 inline std::ostream& operator << (std::ostream& rOStream,
552 {
553  rThis.PrintInfo(rOStream);
554  rOStream << std::endl;
555  rThis.PrintData(rOStream);
556 
557  return rOStream;
558 }
559 
560 }
Definition: apply_constant_interpolate_line_pressure_process.hpp:26
ApplyConstantInterpolateLinePressureProcess & operator=(const ApplyConstantInterpolateLinePressureProcess &)=delete
std::string Info() const override
Turn back information as a string.
Definition: apply_constant_interpolate_line_pressure_process.hpp:122
void ExecuteInitialize() override
Definition: apply_constant_interpolate_line_pressure_process.hpp:96
ApplyConstantInterpolateLinePressureProcess & operator=(ApplyConstantInterpolateLinePressureProcess &&)=delete
void Execute() override
Execute method is used to execute the ApplyConstantInterpolateLinePressureProcess algorithms.
Definition: apply_constant_interpolate_line_pressure_process.hpp:90
KRATOS_CLASS_POINTER_DEFINITION(ApplyConstantInterpolateLinePressureProcess)
ApplyConstantInterpolateLinePressureProcess(ModelPart &model_part, Parameters rParameters)
Definition: apply_constant_interpolate_line_pressure_process.hpp:32
ApplyConstantInterpolateLinePressureProcess(const ApplyConstantInterpolateLinePressureProcess &)=delete
ApplyConstantInterpolateLinePressureProcess(ApplyConstantInterpolateLinePressureProcess &&)=delete
Definition: flags.h:58
KratosComponents class encapsulates a lookup table for a family of classes in a generic way.
Definition: kratos_components.h:49
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
This class defines the node.
Definition: node.h:65
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 Has(const std::string &rEntry) const
This method checks if the Parameter contains a certain entry.
Definition: kratos_parameters.cpp:520
bool GetBool() const
This method returns the boolean contained in the current Parameter.
Definition: kratos_parameters.cpp:675
CoordinatesArrayType const & Coordinates() const
Definition: point.h:215
The base class for all processes in Kratos.
Definition: process.h:49
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: process.h:204
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: process.h:210
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_ERROR
Definition: exception.h:161
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
end
Definition: DEM_benchmarks.py:180
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
constexpr SizeType N_DIM_3D
Definition: geo_mechanics_application_constants.h:25
void block_for_each(TIterator itBegin, TIterator itEnd, TFunction &&rFunction)
Execute a functor on all items of a range in parallel.
Definition: parallel_utilities.h:299
constexpr double LARGE
Definition: geo_mechanics_application_constants.h:31
array_1d< double, 3 > Vector3
Definition: variables.cpp:26
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
std::ostream & operator<<(std::ostream &rOStream, const ApplyConstantInterpolateLinePressureProcess &rThis)
output stream function
Definition: apply_constant_interpolate_line_pressure_process.hpp:550
std::istream & operator>>(std::istream &rIStream, ApplyConstantInterpolateLinePressureProcess &rThis)
input stream function
constexpr double TINY
Definition: geo_mechanics_application_constants.h:30
model_part
Definition: face_heat.py:14
int j
Definition: quadrature.py:648
integer i
Definition: TensorModule.f:17
float pressure
Definition: test_pureconvectionsolver_benchmarking.py:101