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_boundary_phreatic_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 
34  Parameters rParameters
36  {
38 
39  //only include validation with c++11 since raw_literals do not exist in c++03
40  Parameters default_parameters( R"(
41  {
42  "model_part_name":"PLEASE_CHOOSE_MODEL_PART_NAME",
43  "variable_name": "PLEASE_PRESCRIBE_VARIABLE_NAME",
44  "is_fixed": false,
45  "gravity_direction": 1,
46  "out_of_plane_direction": 2,
47  "first_reference_coordinate": [0.0,1.0,0.0],
48  "second_reference_coordinate": [1.0,0.5,0.0],
49  "specific_weight" : 10000.0,
50  "table" : 1
51  } )" );
52 
53  // Some values need to be mandatory prescribed since no meaningful default value exist. For this reason try accessing to them
54  // So that an error is thrown if they don't exist
55  rParameters["first_reference_coordinate"];
56  rParameters["second_reference_coordinate"];
57  rParameters["variable_name"];
58  rParameters["model_part_name"];
59 
60  mIsFixedProvided = rParameters.Has("is_fixed");
61 
62  // Now validate against defaults -- this also ensures no type mismatch
63  rParameters.ValidateAndAssignDefaults(default_parameters);
64 
65  mVariableName = rParameters["variable_name"].GetString();
66  mIsFixed = rParameters["is_fixed"].GetBool();
67  mGravityDirection = rParameters["gravity_direction"].GetInt();
68  mOutOfPlaneDirection = rParameters["out_of_plane_direction"].GetInt();
70  << "Gravity direction cannot be the same as Out-of-Plane directions "
71  << rParameters
72  << std::endl;
73 
74  for (unsigned int i=0; i<N_DIM_3D; ++i)
76 
77  mFirstReferenceCoordinate = rParameters["first_reference_coordinate"].GetVector();
78  mSecondReferenceCoordinate= rParameters["second_reference_coordinate"].GetVector();
79 
82 
84  << "First and second point on the phreatic line have the same horizontal coordinate"
85  << rParameters
86  << std::endl;
87 
90 
91  mSpecificWeight = rParameters["specific_weight"].GetDouble();
92 
93  KRATOS_CATCH("")
94  }
95 
99 
102  void ExecuteInitialize() override
103  {
104  KRATOS_TRY
105 
107 
108  block_for_each(mrModelPart.Nodes(), [&var, this](Node& rNode){
109  if (mIsFixed) rNode.Fix(var);
110  else if (mIsFixedProvided) rNode.Free(var);
111 
112  double horCoord = rNode.Coordinates()[mHorizontalDirection];
113  horCoord = std::max(horCoord, mMinHorizontalCoordinate);
114  horCoord = std::min(horCoord, mMaxHorizontalCoordinate);
115  const double height = mSlope * (horCoord - mFirstReferenceCoordinate[mHorizontalDirection]) + mFirstReferenceCoordinate[mGravityDirection];
116  const double distance = height - rNode.Coordinates()[mGravityDirection];
117  const double pressure = mSpecificWeight * distance ;
118  rNode.FastGetSolutionStepValue(var) = std::max(pressure,0.0);
119  });
120 
121  KRATOS_CATCH("")
122  }
123 
124 
126  std::string Info() const override
127  {
128  return "ApplyConstantBoundaryPhreaticLinePressureProcess";
129  }
130 
131 protected:
134  std::string mVariableName;
135  bool mIsFixed;
137  unsigned int mGravityDirection;
138  unsigned int mHorizontalDirection;
140  unsigned int mOutOfPlaneDirection;
143  double mSlope;
146 
147 };
148 
149 }
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:26
double mMaxHorizontalCoordinate
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:145
double mSpecificWeight
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:139
bool mIsFixed
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:135
unsigned int mOutOfPlaneDirection
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:140
unsigned int mGravityDirection
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:137
Vector3 mSecondReferenceCoordinate
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:142
void ExecuteInitialize() override
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:102
std::string mVariableName
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:134
ApplyConstantBoundaryPhreaticLinePressureProcess(const ApplyConstantBoundaryPhreaticLinePressureProcess &)=delete
bool mIsFixedProvided
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:136
KRATOS_CLASS_POINTER_DEFINITION(ApplyConstantBoundaryPhreaticLinePressureProcess)
ApplyConstantBoundaryPhreaticLinePressureProcess & operator=(const ApplyConstantBoundaryPhreaticLinePressureProcess &)=delete
ModelPart & mrModelPart
Member Variables.
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:133
unsigned int mHorizontalDirection
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:138
double mMinHorizontalCoordinate
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:144
double mSlope
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:143
ApplyConstantBoundaryPhreaticLinePressureProcess(ModelPart &model_part, Parameters rParameters)
Constructor.
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:33
Vector3 mFirstReferenceCoordinate
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:141
std::string Info() const override
Turn back information as a string.
Definition: apply_constant_boundary_phreatic_line_pressure_process.hpp:126
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
Vector GetVector() const
This method returns the vector contained in the current Parameter.
Definition: kratos_parameters.cpp:707
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
The base class for all processes in Kratos.
Definition: process.h:49
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_ERROR_IF_NOT(conditional)
Definition: exception.h:163
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
static double max(double a, double b)
Definition: GeometryFunctions.h:79
static double min(double a, double b)
Definition: GeometryFunctions.h:71
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
model_part
Definition: face_heat.py:14
integer i
Definition: TensorModule.f:17