11 #if !defined(KRATOS_INSERT_FLUID_NODES_MESHER_PROCESS_H_INCLUDED )
12 #define KRATOS_INSERT_FLUID_NODES_MESHER_PROCESS_H_INCLUDED
63 : mrModelPart(rModelPart),
64 mrRemesh(rRemeshingParameters)
95 std::cout<<
" [ INSERT NEW NODES for homomgeneous mesh: "<<std::endl;
98 std::cout<<
" ModelPart Supplied do not corresponds to the Meshing Domain: ("<<mrModelPart.
Name()<<
" != "<<mrRemesh.
SubModelPartName<<
")"<<std::endl;
100 unsigned int ElementsToRefine = mrRemesh.
Info->RemovedNodes;
102 if( ElementsToRefine > 0 )
104 std::vector<array_1d<double,3> > NewPositions(ElementsToRefine);
105 std::vector<array_1d< unsigned int,4 > > NodeIdsToInterpolate(ElementsToRefine);
106 std::vector<Node::DofsContainerType > NewDofs(ElementsToRefine);
107 std::vector<double > LargestVolumes(ElementsToRefine);
108 std::fill(LargestVolumes.begin(), LargestVolumes.end(), -1 );
110 unsigned int NodesToRefine=0;
112 for(ModelPart::ElementsContainerType::const_iterator i_elem = mrModelPart.
ElementsBegin(); i_elem != mrModelPart.
ElementsEnd(); ++i_elem)
115 const unsigned int dimension = i_elem->GetGeometry().WorkingSpaceDimension();
118 if( i_elem->GetGeometry().size() > 2 )
119 SelectEdgeToRefine2D(i_elem->GetGeometry(),NewPositions,LargestVolumes,NodeIdsToInterpolate,NewDofs,NodesToRefine,ElementsToRefine);
121 if( i_elem->GetGeometry().size() > 3 )
122 SelectEdgeToRefine3D(i_elem->GetGeometry(),NewPositions,LargestVolumes,NodeIdsToInterpolate,NewDofs,NodesToRefine,ElementsToRefine);
127 mrRemesh.
Info->InsertedNodes = NodesToRefine;
130 this->CreateAndAddNewNodes(NewPositions,NodeIdsToInterpolate,NewDofs,ElementsToRefine);
135 std::cout<<
" INSERT NEW NODES ]; ("<<mrRemesh.
Info->InsertedNodes<<
")"<<std::endl;
157 std::string
Info()
const override
159 return "InsertFluidNodesMesherProcess";
165 rOStream <<
"InsertFluidNodesMesherProcess";
209 void FlagsCounter(
GeometryType& rGeometry,
unsigned int& rigid_nodes,
unsigned int& freesurface_nodes,
unsigned int& inlet_nodes,
unsigned int& nodes_to_split,
unsigned int& nodes_to_erase)
211 const unsigned int NumberOfNodes = rGeometry.
size();
212 for(
unsigned int i=0;
i<NumberOfNodes; ++
i)
214 if(rGeometry[
i].
Is(RIGID)){
217 if(rGeometry[
i].
Is(FREE_SURFACE)){
220 if(rGeometry[
i].
Is(INLET)){
223 if(rGeometry[
i].
Is(TO_SPLIT)){
226 if(rGeometry[
i].
Is(TO_ERASE)){
235 for(
auto& p_dof : From){
244 std::vector<array_1d<double,3> >& rNewPositions,
245 std::vector<double >& rLargestVolumes,
246 std::vector<array_1d< unsigned int,4 > >& rNodeIdsToInterpolate,
247 std::vector<Node::DofsContainerType >& rNewDofs,
248 unsigned int& rNodesToRefine,
249 const unsigned int& rElementsToRefine)
253 const unsigned int NumberOfNodes = rGeometry.size();
255 unsigned int rigid_nodes=0;
256 unsigned int freesurface_nodes=0;
257 unsigned int inlet_nodes=0;
258 unsigned int nodes_to_split=0;
259 unsigned int nodes_to_erase=0;
261 this->FlagsCounter(rGeometry, rigid_nodes, freesurface_nodes, inlet_nodes, nodes_to_split, nodes_to_erase);
263 bool any_node_to_erase=
false;
264 if( nodes_to_erase > 0 )
265 any_node_to_erase =
true;
267 double critical_edge_length=5.0*mrRemesh.
Refine->CriticalRadius;
269 double length_tolerance=1.5;
270 double penalization=1.0;
280 double ElementalVolume = rGeometry.Area();
282 array_1d<double,3> Edges(3,0.0);
283 array_1d<unsigned int,3> FirstEdgeNode(3,0);
284 array_1d<unsigned int,3> SecondEdgeNode(3,0);
286 double WallCharacteristicDistance=0;
287 array_1d<double,3> CoorDifference;
288 noalias(CoorDifference) = rGeometry[1].Coordinates() - rGeometry[0].Coordinates();
290 double SquaredLength = CoorDifference[0]*CoorDifference[0] + CoorDifference[1]*CoorDifference[1];
291 Edges[0]=sqrt(SquaredLength);
294 if(rGeometry[0].
Is(RIGID) && rGeometry[1].
Is(RIGID)){
295 WallCharacteristicDistance=Edges[0];
297 unsigned int Counter=0;
298 for (
unsigned int i = 2;
i < NumberOfNodes; ++
i)
300 for(
unsigned int j = 0;
j <
i; ++
j)
302 noalias(CoorDifference) = rGeometry[
i].Coordinates() - rGeometry[
j].Coordinates();
303 SquaredLength = CoorDifference[0]*CoorDifference[0] + CoorDifference[1]*CoorDifference[1];
305 Edges[Counter]=sqrt(SquaredLength);
306 FirstEdgeNode[Counter]=
j;
307 SecondEdgeNode[Counter]=
i;
308 if(rGeometry[
i].
Is(RIGID) && rGeometry[
j].
Is(RIGID) && Edges[Counter]>WallCharacteristicDistance ){
309 WallCharacteristicDistance=Edges[Counter];
315 bool dangerousElement=
false;
319 for (
unsigned int i = 0;
i < 3; ++
i)
321 if((Edges[
i]<WallCharacteristicDistance*length_tolerance && (rGeometry[FirstEdgeNode[
i]].
Is(RIGID) || rGeometry[SecondEdgeNode[
i]].
Is(RIGID))) ||
322 (rGeometry[FirstEdgeNode[
i]].
Is(RIGID) && rGeometry[SecondEdgeNode[
i]].
Is(RIGID) )){
326 if((rGeometry[FirstEdgeNode[
i]].
Is(FREE_SURFACE) || rGeometry[FirstEdgeNode[
i]].
Is(RIGID)) &&
327 (rGeometry[SecondEdgeNode[
i]].
Is(FREE_SURFACE)|| rGeometry[SecondEdgeNode[
i]].
Is(RIGID))){
334 if((Edges[0]==0 && Edges[1]==0 && Edges[2]==0) || rigid_nodes==3){
335 dangerousElement=
true;
338 if(dangerousElement==
false && any_node_to_erase==
false && nodes_to_split<2){
340 unsigned int maxCount=2;
341 double LargestEdge=0;
343 for(
unsigned int i=0;
i<3; ++
i)
345 if(Edges[
i]>LargestEdge){
347 LargestEdge=Edges[
i];
351 if(rNodesToRefine<rElementsToRefine && LargestEdge>critical_edge_length){
353 array_1d<double,3> NewPosition;
354 noalias(NewPosition)= 0.5*(rGeometry[FirstEdgeNode[maxCount]].Coordinates()+rGeometry[SecondEdgeNode[maxCount]].Coordinates());
356 rNodeIdsToInterpolate[rNodesToRefine][0]=rGeometry[FirstEdgeNode[maxCount]].GetId();
357 rNodeIdsToInterpolate[rNodesToRefine][1]=rGeometry[SecondEdgeNode[maxCount]].GetId();
359 rGeometry[FirstEdgeNode[maxCount]].Set(TO_SPLIT);
360 rGeometry[SecondEdgeNode[maxCount]].Set(TO_SPLIT);
362 if(rGeometry[SecondEdgeNode[maxCount]].
IsNot(RIGID)){
363 CopyDofs(rGeometry[SecondEdgeNode[maxCount]].GetDofs(), rNewDofs[rNodesToRefine]);
364 }
else if(rGeometry[FirstEdgeNode[maxCount]].
IsNot(RIGID)){
365 CopyDofs(rGeometry[FirstEdgeNode[maxCount]].GetDofs(), rNewDofs[rNodesToRefine]);
367 std::cout<<
"CAUTION! THIS IS A WALL EDGE"<<std::endl;
370 std::cout<<
" NewPosition" <<NewPosition<<
" maxCount "<<maxCount<<
" LargestEdge "<<LargestEdge<<std::endl;
372 rLargestVolumes[rNodesToRefine]=ElementalVolume;
373 rNewPositions[rNodesToRefine]=NewPosition;
377 else if( freesurface_nodes<3 && rigid_nodes<3 ){
379 ElementalVolume*=penalization;
380 for(
unsigned int nn= 0; nn< rElementsToRefine; ++nn)
382 if(ElementalVolume>rLargestVolumes[nn]){
384 bool suitableElement=
true;
385 if(maxCount<3 && LargestEdge>critical_edge_length){
386 array_1d<double,3> NewPosition;
387 noalias(NewPosition) = 0.5*(rGeometry[FirstEdgeNode[maxCount]].Coordinates()+rGeometry[SecondEdgeNode[maxCount]].Coordinates());
389 for(
unsigned int j= 0;
j< rElementsToRefine; ++
j)
391 if(rNewPositions[
j][0]==NewPosition[0] && rNewPositions[
j][1]==NewPosition[1]){
392 suitableElement=
false;
396 if(suitableElement==
true){
397 rNodeIdsToInterpolate[nn][0]=rGeometry[FirstEdgeNode[maxCount]].GetId();
398 rNodeIdsToInterpolate[nn][1]=rGeometry[SecondEdgeNode[maxCount]].GetId();
400 rGeometry[FirstEdgeNode[maxCount]].Set(TO_SPLIT);
401 rGeometry[SecondEdgeNode[maxCount]].Set(TO_SPLIT);
403 if(rGeometry[SecondEdgeNode[maxCount]].
IsNot(RIGID)){
404 CopyDofs(rGeometry[SecondEdgeNode[maxCount]].GetDofs(), rNewDofs[nn]);
405 }
else if(rGeometry[FirstEdgeNode[maxCount]].
IsNot(RIGID)){
406 CopyDofs(rGeometry[FirstEdgeNode[maxCount]].GetDofs(), rNewDofs[nn]);
408 std::cout<<
"CAUTION! THIS IS A WALL EDGE"<<std::endl;
410 rLargestVolumes[nn]=ElementalVolume;
411 rNewPositions[nn]=NewPosition;
424 for(ModelPart::NodesContainerType::const_iterator in = mrModelPart.NodesBegin(); in != mrModelPart.NodesEnd(); ++in)
427 in->Set(TO_SPLIT,
false);
438 std::vector<array_1d<double,3> >& rNewPositions,
439 std::vector<double >& rLargestVolumes,
440 std::vector<array_1d< unsigned int,4 > >& rNodeIdsToInterpolate,
441 std::vector<Node::DofsContainerType >& rNewDofs,
442 unsigned int& rNodesToRefine,
443 const unsigned int& rElementsToRefine)
447 const unsigned int NumberOfNodes = rGeometry.size();
449 unsigned int rigid_nodes=0;
450 unsigned int freesurface_nodes=0;
451 unsigned int inlet_nodes=0;
452 unsigned int nodes_to_split=0;
453 unsigned int nodes_to_erase=0;
455 this->FlagsCounter(rGeometry, rigid_nodes, freesurface_nodes, inlet_nodes, nodes_to_split, nodes_to_erase);
457 bool any_node_to_erase=
false;
458 if( nodes_to_erase > 0 )
459 any_node_to_erase =
true;
461 double critical_edge_length=5.0*mrRemesh.
Refine->CriticalRadius;
462 double length_tolerance=1.6;
463 double penalization=1.0;
473 double ElementalVolume = rGeometry.Volume();
475 array_1d<double,6> Edges(6,0.0);
476 array_1d<unsigned int,6> FirstEdgeNode(6,0);
477 array_1d<unsigned int,6> SecondEdgeNode(6,0);
478 double WallCharacteristicDistance=0;
479 array_1d<double,3> CoorDifference;
480 noalias(CoorDifference) = rGeometry[1].Coordinates() - rGeometry[0].Coordinates();
482 double SquaredLength = CoorDifference[0]*CoorDifference[0] + CoorDifference[1]*CoorDifference[1] + CoorDifference[2]*CoorDifference[2];
483 Edges[0]=sqrt(SquaredLength);
487 if(rGeometry[0].
Is(RIGID) && rGeometry[1].
Is(RIGID)){
488 WallCharacteristicDistance=Edges[0];
491 unsigned int Counter=0;
492 for (
unsigned int i = 2;
i < NumberOfNodes; ++
i)
494 for(
unsigned int j = 0;
j <
i; ++
j)
496 noalias(CoorDifference) = rGeometry[
i].Coordinates() - rGeometry[
j].Coordinates();
497 SquaredLength = CoorDifference[0]*CoorDifference[0] + CoorDifference[1]*CoorDifference[1] + CoorDifference[2]*CoorDifference[2];
499 Edges[Counter]=sqrt(SquaredLength);
500 FirstEdgeNode[Counter]=
j;
501 SecondEdgeNode[Counter]=
i;
502 if(rGeometry[
i].
Is(RIGID) && rGeometry[
j].
Is(RIGID) && Edges[Counter]>WallCharacteristicDistance ){
503 WallCharacteristicDistance=Edges[Counter];
509 bool dangerousElement=
false;
513 for (
unsigned int i = 0;
i < 6; ++
i)
515 if((Edges[
i]<WallCharacteristicDistance*length_tolerance && (rGeometry[FirstEdgeNode[
i]].
Is(RIGID) || rGeometry[SecondEdgeNode[
i]].
Is(RIGID))) ||
516 (rGeometry[FirstEdgeNode[
i]].
Is(RIGID) && rGeometry[SecondEdgeNode[
i]].
Is(RIGID) )){
520 if((rGeometry[FirstEdgeNode[
i]].
Is(FREE_SURFACE) || rGeometry[FirstEdgeNode[
i]].
Is(RIGID)) &&
521 (rGeometry[SecondEdgeNode[
i]].
Is(FREE_SURFACE)|| rGeometry[SecondEdgeNode[
i]].
Is(RIGID))){
527 else if(rigid_nodes==1){
529 if(rGeometry[0].
Is(RIGID)){
534 if(rGeometry[1].
Is(RIGID)){
539 if(rGeometry[2].
Is(RIGID)){
544 if(rGeometry[3].
Is(RIGID)){
551 if((Edges[0]==0 && Edges[1]==0 && Edges[2]==0 && Edges[3]==0 && Edges[4]==0 && Edges[5]==0) || rigid_nodes>2){
552 dangerousElement=
true;
556 if(dangerousElement==
false && any_node_to_erase==
false && nodes_to_split<2){
558 unsigned int maxCount=6;
559 double LargestEdge=0;
561 for(
unsigned int i=0;
i<6; ++
i)
563 if(Edges[
i]>LargestEdge){
565 LargestEdge=Edges[
i];
569 if(rNodesToRefine<rElementsToRefine && LargestEdge>critical_edge_length){
570 array_1d<double,3> NewPosition;
571 noalias(NewPosition) = 0.5*(rGeometry[FirstEdgeNode[maxCount]].Coordinates()+rGeometry[SecondEdgeNode[maxCount]].Coordinates());
573 rNodeIdsToInterpolate[rNodesToRefine][0]=rGeometry[FirstEdgeNode[maxCount]].GetId();
574 rNodeIdsToInterpolate[rNodesToRefine][1]=rGeometry[SecondEdgeNode[maxCount]].GetId();
576 rGeometry[FirstEdgeNode[maxCount]].Set(TO_SPLIT);
577 rGeometry[SecondEdgeNode[maxCount]].Set(TO_SPLIT);
579 if(rGeometry[SecondEdgeNode[maxCount]].
IsNot(RIGID)){
580 CopyDofs(rGeometry[SecondEdgeNode[maxCount]].GetDofs(), rNewDofs[rNodesToRefine]);
581 }
else if(rGeometry[FirstEdgeNode[maxCount]].
IsNot(RIGID)){
582 CopyDofs(rGeometry[FirstEdgeNode[maxCount]].GetDofs(), rNewDofs[rNodesToRefine]);
584 std::cout<<
"CAUTION! THIS IS A WALL EDGE"<<std::endl;
586 rLargestVolumes[rNodesToRefine]=ElementalVolume;
587 rNewPositions[rNodesToRefine]=NewPosition;
591 else if(freesurface_nodes<4 && rigid_nodes<4){
593 ElementalVolume*=penalization;
594 for(
unsigned int nn= 0; nn< rElementsToRefine; ++nn)
596 if(ElementalVolume>rLargestVolumes[nn]){
599 bool suitableElement=
true;
601 if(maxCount<6 && LargestEdge>critical_edge_length){
602 array_1d<double,3> NewPosition;
603 noalias(NewPosition) = 0.5 * (rGeometry[FirstEdgeNode[maxCount]].Coordinates()+rGeometry[SecondEdgeNode[maxCount]].Coordinates());
605 for(
unsigned int j= 0;
j< rElementsToRefine; ++
j)
607 if(rNewPositions[
j][0]==NewPosition[0] && rNewPositions[
j][1]==NewPosition[1] && rNewPositions[
j][2]==NewPosition[2]){
608 suitableElement=
false;
612 if(suitableElement==
true){
614 rNodeIdsToInterpolate[nn][0]=rGeometry[FirstEdgeNode[maxCount]].GetId();
615 rNodeIdsToInterpolate[nn][1]=rGeometry[SecondEdgeNode[maxCount]].GetId();
617 rGeometry[FirstEdgeNode[maxCount]].Set(TO_SPLIT);
618 rGeometry[SecondEdgeNode[maxCount]].Set(TO_SPLIT);
620 if(rGeometry[SecondEdgeNode[maxCount]].
IsNot(RIGID)){
621 CopyDofs(rGeometry[SecondEdgeNode[maxCount]].GetDofs(), rNewDofs[nn]);
622 }
else if(rGeometry[FirstEdgeNode[maxCount]].
IsNot(RIGID)){
623 CopyDofs(rGeometry[FirstEdgeNode[maxCount]].GetDofs(), rNewDofs[nn]);
625 std::cout<<
"CAUTION! THIS IS A WALL EDGE"<<std::endl;
627 rLargestVolumes[nn]=ElementalVolume;
628 rNewPositions[nn]=NewPosition;
640 for(ModelPart::NodesContainerType::const_iterator in = mrModelPart.NodesBegin(); in != mrModelPart.NodesEnd(); ++in)
643 in->Set(TO_SPLIT,
false);
650 void CreateAndAddNewNodes(std::vector<array_1d<double,3> >& rNewPositions,
651 std::vector<array_1d< unsigned int,4 > >& rNodeIdsToInterpolate,
652 std::vector<Node::DofsContainerType >& rNewDofs,
653 const unsigned int& rElementsToRefine)
657 const unsigned int dimension = mrModelPart.ElementsBegin()->GetGeometry().WorkingSpaceDimension();
659 std::vector<Node::Pointer > list_of_new_nodes;
663 unsigned int Id = NodeIdParent + 1;
665 if(NodeId>NodeIdParent){
667 std::cout<<
"initial_node_size "<<Id<<std::endl;
671 VariablesList& rVariablesList = mrModelPart.GetNodalSolutionStepVariablesList();
673 for(
unsigned int nn= 0; nn< rNewPositions.size(); ++nn)
676 double x = rNewPositions[nn][0];
677 double y = rNewPositions[nn][1];
680 z=rNewPositions[nn][2];
683 Node::Pointer pnode = mrModelPart.CreateNewNode(Id,
x,
y,
z);
688 std::cout<<
" Insert new node "<<pnode->Id()<<
"["<<
x<<
","<<
y<<
","<<
z<<
"]"<<std::endl;
691 pnode->Set(NEW_ENTITY,
true);
692 list_of_new_nodes.push_back( pnode );
701 pnode->SetSolutionStepVariablesList(&rVariablesList);
704 pnode->SetBufferSize(mrModelPart.GetBufferSize());
718 PointsArray.
push_back( mrModelPart.pGetNode(rNodeIdsToInterpolate[nn][0]) );
719 PointsArray.push_back( mrModelPart.pGetNode(rNodeIdsToInterpolate[nn][1]) );
721 Geometry<Node > LineGeometry( PointsArray );
723 std::vector<double> ShapeFunctionsN(2);
724 std::fill( ShapeFunctionsN.begin(), ShapeFunctionsN.end(), 0.0 );
725 ShapeFunctionsN[0] = 0.5;
726 ShapeFunctionsN[1] = 0.5;
728 MeshDataTransferUtilities DataTransferUtilities;
729 DataTransferUtilities.Interpolate(LineGeometry, ShapeFunctionsN, rVariablesList, pnode);
731 if( PointsArray[0].
Is(FREE_SURFACE) && PointsArray[1].
Is(FREE_SURFACE) )
732 pnode->Set(FREE_SURFACE);
734 if( PointsArray[0].
Is(BOUNDARY) && PointsArray[1].
Is(BOUNDARY) )
735 pnode->Set(BOUNDARY);
741 const array_1d<double,3> ZeroNormal(3,0.0);
742 for(std::vector<Node::Pointer>::iterator it = list_of_new_nodes.begin(); it!=list_of_new_nodes.end(); ++it)
744 const array_1d<double,3>& displacement = (*it)->FastGetSolutionStepValue(DISPLACEMENT);
745 (*it)->X0() = (*it)->X() - displacement[0];
746 (*it)->Y0() = (*it)->Y() - displacement[1];
747 (*it)->Z0() = (*it)->Z() - displacement[2];
755 if( (*it)->SolutionStepsDataHas(CONTACT_FORCE) )
756 noalias((*it)->GetSolutionStepValue(CONTACT_FORCE)) = ZeroNormal;
816 rOStream << std::endl;
Base class for all Conditions.
Definition: condition.h:59
Geometry< NodeType > GeometryType
definition of the geometry type with given NodeType
Definition: element.h:83
bool Is(Flags const &rOther) const
Definition: flags.h:274
bool IsNot(Flags const &rOther) const
Definition: flags.h:291
Geometry base class.
Definition: geometry.h:71
SizeType size() const
Definition: geometry.h:518
PointerVector< TPointType > PointsArrayType
Definition: geometry.h:118
Refine Mesh Elements Process 2D and 3D.
Definition: insert_fluid_nodes_mesher_process.hpp:42
ModelPart::ConditionType ConditionType
Definition: insert_fluid_nodes_mesher_process.hpp:51
ConditionType::GeometryType GeometryType
Definition: insert_fluid_nodes_mesher_process.hpp:53
void Execute() override
Execute method is used to execute the Process algorithms.
Definition: insert_fluid_nodes_mesher_process.hpp:90
void PrintData(std::ostream &rOStream) const override
Print object's data.s.
Definition: insert_fluid_nodes_mesher_process.hpp:169
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: insert_fluid_nodes_mesher_process.hpp:163
ModelPart::PropertiesType PropertiesType
Definition: insert_fluid_nodes_mesher_process.hpp:52
InsertFluidNodesMesherProcess(ModelPart &rModelPart, MesherUtilities::MeshingParameters &rRemeshingParameters, int EchoLevel)
Default constructor.
Definition: insert_fluid_nodes_mesher_process.hpp:60
virtual ~InsertFluidNodesMesherProcess()
Destructor.
Definition: insert_fluid_nodes_mesher_process.hpp:71
std::string Info() const override
Turn back information as a string.
Definition: insert_fluid_nodes_mesher_process.hpp:157
void operator()()
This operator is provided to call the process as a function and simply calls the Execute method.
Definition: insert_fluid_nodes_mesher_process.hpp:79
KRATOS_CLASS_POINTER_DEFINITION(InsertFluidNodesMesherProcess)
Pointer definition of Process.
ModelPart::NodeType NodeType
Definition: insert_fluid_nodes_mesher_process.hpp:50
The base class for processes passed to the solution scheme.
Definition: mesher_process.hpp:37
Short class definition.
Definition: mesher_utilities.hpp:49
static unsigned int GetMaxNodeId(ModelPart &rModelPart)
Definition: mesher_utilities.hpp:1408
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ElementIterator ElementsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1169
std::string & Name()
Definition: model_part.h:1811
ElementIterator ElementsEnd(IndexType ThisIndex=0)
Definition: model_part.h:1179
This class defines the node.
Definition: node.h:65
std::vector< std::unique_ptr< Dof< double > >> DofsContainerType
The DoF container type definition.
Definition: node.h:92
void push_back(const TPointerType &x)
Definition: pointer_vector.h:270
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
z
Definition: GenerateWind.py:163
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::unique_ptr< T > unique_ptr
Definition: smart_pointers.h:33
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
y
Other simbols definition.
Definition: generate_axisymmetric_navier_stokes_element.py:54
int dimension
Definition: isotropic_damage_automatic_differentiation.py:123
int j
Definition: quadrature.py:648
x
Definition: sensitivityMatrix.py:49
integer i
Definition: TensorModule.f:17
Definition: mesher_utilities.hpp:631
MeshingInfoParameters::Pointer Info
Definition: mesher_utilities.hpp:681
RefiningParameters::Pointer Refine
Definition: mesher_utilities.hpp:684
std::string SubModelPartName
Definition: mesher_utilities.hpp:642