1 #ifndef KRATOS_PFEM2_MONOLITHIC_SLIP_STRATEGY_H
2 #define KRATOS_PFEM2_MONOLITHIC_SLIP_STRATEGY_H
18 #include "custom_utilities/solver_settings.h"
50 template<
class TSparseSpace,
61 typedef boost::shared_ptr< FSStrategy<TSparseSpace, TDenseSpace, TLinearSolver> >
Pointer;
89 bool PredictorCorrector):
98 bool PredictorCorrector,
109 self.monolithic_linear_solver,
111 CalculateReactionFlag,
112 ReformDofSetAtEachStep,
114 self.monolithic_solver.SetMaximumIterations(
self.maximum_nonlin_iterations)
124 mVelocityTolerance(VelTol),
143 bool CalculateReactions =
false;
144 bool CalculateNormDxFlag =
true;
149 typedef typename Kratos::VariableComponent<Kratos::VectorComponentAdaptor<Kratos::array_1d<double, 3 > > > VarComponent;
155 typename SchemeType::Pointer pScheme;
192 const double FlagValue = itCond->GetValue(IS_STRUCTURE);
194 if (FlagValue != 0.0)
201 rGeom[
i].
SetValue(IS_STRUCTURE,FlagValue);
203 rGeom[
i].UnSetLock();
234 if (ierr != 0)
return ierr;
236 if(DELTA_TIME.Key() == 0)
237 KRATOS_THROW_ERROR(std::runtime_error,
"DELTA_TIME Key is 0. Check that the application was correctly registered.",
"");
238 if(BDF_COEFFICIENTS.Key() == 0)
239 KRATOS_THROW_ERROR(std::runtime_error,
"BDF_COEFFICIENTS Key is 0. Check that the application was correctly registered.",
"");
243 if (
mTimeOrder == 2 && rModelPart.GetBufferSize() < 3 )
244 KRATOS_THROW_ERROR(std::invalid_argument,
"Buffer size too small for fractional step strategy (BDF2), needed 3, got ",rModelPart.GetBufferSize());
245 if (
mTimeOrder == 1 && rModelPart.GetBufferSize() < 2 )
246 KRATOS_THROW_ERROR(std::invalid_argument,
"Buffer size too small for fractional step strategy (Backward Euler), needed 2, got ",rModelPart.GetBufferSize());
248 const ProcessInfo& rCurrentProcessInfo = rModelPart.GetProcessInfo();
252 ierr = itEl->Check(rCurrentProcessInfo);
253 if (ierr != 0)
break;
258 ierr = itCond->Check(rCurrentProcessInfo);
259 if (ierr != 0)
break;
267 virtual double Solve()
271 this->SetTimeCoefficients(rModelPart.GetProcessInfo());
277 bool Converged =
false;
283 std::cout <<
"Pressure iteration " << it << std::endl;
285 NormDp = this->SolveStep();
287 Converged = this->CheckPressureConvergence(NormDp);
292 std::cout <<
"Predictor-corrector converged in " << it+1 <<
" iterations." << std::endl;
297 std::cout <<
"Predictor-correctior iterations did not converge." << std::endl;
303 NormDp = this->SolveStep();
313 virtual void CalculateReactions()
316 ProcessInfo& rCurrentProcessInfo = rModelPart.GetProcessInfo();
319 int OriginalStep = rCurrentProcessInfo[FRACTIONAL_STEP];
320 rCurrentProcessInfo.SetValue(FRACTIONAL_STEP,1);
328 const array_1d<double,3> Zero(3,0.0);
332 itNode->FastGetSolutionStepValue(REACTION) = Zero;
350 itElem->CalculateLocalSystem(LHS_Contribution, RHS_Contribution, rCurrentProcessInfo);
353 unsigned int NumNodes = rGeom.PointsNumber();
354 unsigned int index = 0;
356 for (
unsigned int i = 0;
i < NumNodes;
i++)
359 array_1d<double,3>& rReaction = rGeom[
i].FastGetSolutionStepValue(REACTION);
361 rReaction[
d] -= RHS_Contribution[index++];
362 rGeom[
i].UnSetLock();
367 rModelPart.GetCommunicator().AssembleCurrentData(REACTION);
370 rCurrentProcessInfo.SetValue(FRACTIONAL_STEP,OriginalStep);
373 virtual void AddIterationStep(Process::Pointer pNewStep)
378 virtual void ClearExtraIterationSteps()
397 int StrategyLevel = Level > 0 ? Level - 1 : 0;
413 virtual std::string
Info()
const
415 std::stringstream buffer;
416 buffer <<
"FSStrategy" ;
421 virtual void PrintInfo(std::ostream& rOStream)
const {rOStream <<
"FSStrategy";}
424 virtual void PrintData(std::ostream& rOStream)
const {}
464 void SetTimeCoefficients(ProcessInfo& rCurrentProcessInfo)
471 double Dt = rCurrentProcessInfo[DELTA_TIME];
472 double OldDt = rCurrentProcessInfo.GetPreviousTimeStepInfo(1)[DELTA_TIME];
474 double Rho = OldDt /
Dt;
475 double TimeCoeff = 1.0 / (
Dt * Rho * Rho +
Dt * Rho);
477 Vector& BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
478 BDFcoeffs.
resize(3,
false);
480 BDFcoeffs[0] = TimeCoeff * (Rho * Rho + 2.0 * Rho);
481 BDFcoeffs[1] = -TimeCoeff * (Rho * Rho + 2.0 * Rho + 1.0);
482 BDFcoeffs[2] = TimeCoeff;
486 double Dt = rCurrentProcessInfo[DELTA_TIME];
487 double TimeCoeff = 1.0 /
Dt;
489 Vector& BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
490 BDFcoeffs.
resize(2,
false);
492 BDFcoeffs[0] = TimeCoeff;
493 BDFcoeffs[1] = -TimeCoeff;
504 rModelPart.GetProcessInfo().SetValue(FRACTIONAL_STEP,1);
506 bool Converged =
false;
507 int Rank = rModelPart.GetCommunicator().MyPID();
512 std::cout <<
"Momentum iteration " << it << std::endl;
515 rModelPart.GetProcessInfo().SetValue(FRACTIONAL_STEP,1);
528 Converged = this->CheckFractionalStepConvergence(NormDv);
533 std::cout <<
"Fractional velocity converged in " << it+1 <<
" iterations." << std::endl;
539 std::cout <<
"Fractional velocity iterations did not converge." << std::endl;
542 rModelPart.GetProcessInfo().SetValue(FRACTIONAL_STEP,4);
543 this->ComputeSplitOssProjections(rModelPart);
546 rModelPart.GetProcessInfo().SetValue(FRACTIONAL_STEP,5);
556 const double OldPress = itNode->FastGetSolutionStepValue(PRESSURE);
557 itNode->FastGetSolutionStepValue(PRESSURE_OLD_IT) = -OldPress;
562 std::cout <<
"Calculating Pressure." << std::endl;
572 itNode->FastGetSolutionStepValue(PRESSURE_OLD_IT) += itNode->FastGetSolutionStepValue(PRESSURE);
577 std::cout <<
"Updating Velocity." << std::endl;
578 rModelPart.GetProcessInfo().SetValue(FRACTIONAL_STEP,6);
580 this->CalculateEndOfStepVelocity();
585 (*iExtraSteps)->Execute();
591 bool CheckFractionalStepConvergence(
const double NormDv)
597 #pragma omp parallel reduction(+:NormV)
605 const array_1d<double,3> &Vel = itNode->FastGetSolutionStepValue(VELOCITY);
607 for (
unsigned int d = 0;
d < 3; ++
d)
608 NormV += Vel[
d] * Vel[
d];
616 if (NormV == 0.0) NormV = 1.00;
618 double Ratio = NormDv / NormV;
621 std::cout <<
"Fractional velocity relative error: " << Ratio << std::endl;
623 if (Ratio < mVelocityTolerance)
631 bool CheckPressureConvergence(
const double NormDp)
637 #pragma omp parallel reduction(+:NormP)
645 const double Pr = itNode->FastGetSolutionStepValue(PRESSURE);
654 if (NormP == 0.0) NormP = 1.00;
656 double Ratio = NormDp / NormP;
659 std::cout <<
"Pressure relative error: " << Ratio << std::endl;
670 void ComputeSplitOssProjections(ModelPart& rModelPart)
672 const array_1d<double,3> Zero(3,0.0);
674 array_1d<double,3> Out(3,0.0);
684 itNode->FastGetSolutionStepValue(CONV_PROJ) = Zero;
685 itNode->FastGetSolutionStepValue(PRESS_PROJ) = Zero;
686 itNode->FastGetSolutionStepValue(DIVPROJ) = 0.0;
687 itNode->FastGetSolutionStepValue(NODAL_AREA) = 0.0;
699 itElem->Calculate(CONV_PROJ,Out,rModelPart.GetProcessInfo());
703 rModelPart.GetCommunicator().AssembleCurrentData(CONV_PROJ);
704 rModelPart.GetCommunicator().AssembleCurrentData(PRESS_PROJ);
705 rModelPart.GetCommunicator().AssembleCurrentData(DIVPROJ);
706 rModelPart.GetCommunicator().AssembleCurrentData(NODAL_AREA);
709 this->PeriodicConditionProjectionCorrection(rModelPart);
719 const double NodalArea = itNode->FastGetSolutionStepValue(NODAL_AREA);
720 itNode->FastGetSolutionStepValue(CONV_PROJ) /= NodalArea;
721 itNode->FastGetSolutionStepValue(PRESS_PROJ) /= NodalArea;
722 itNode->FastGetSolutionStepValue(DIVPROJ) /= NodalArea;
727 void CalculateEndOfStepVelocity()
731 const array_1d<double,3> Zero(3,0.0);
732 array_1d<double,3> Out(3,0.0);
742 itNode->FastGetSolutionStepValue(FRACT_VEL) = Zero;
754 itElem->Calculate(VELOCITY,Out,rModelPart.GetProcessInfo());
758 rModelPart.GetCommunicator().AssembleCurrentData(FRACT_VEL);
759 this->PeriodicConditionVelocityCorrection(rModelPart);
763 this->EnforceSlipCondition(SLIP);
775 const double NodalArea = itNode->FastGetSolutionStepValue(NODAL_AREA);
776 if ( ! itNode->IsFixed(VELOCITY_X) )
777 itNode->FastGetSolutionStepValue(VELOCITY_X) += itNode->FastGetSolutionStepValue(FRACT_VEL_X) / NodalArea;
778 if ( ! itNode->IsFixed(VELOCITY_Y) )
779 itNode->FastGetSolutionStepValue(VELOCITY_Y) += itNode->FastGetSolutionStepValue(FRACT_VEL_Y) / NodalArea;
780 if ( ! itNode->IsFixed(VELOCITY_Z) )
781 itNode->FastGetSolutionStepValue(VELOCITY_Z) += itNode->FastGetSolutionStepValue(FRACT_VEL_Z) / NodalArea;
795 const double NodalArea = itNode->FastGetSolutionStepValue(NODAL_AREA);
796 if ( ! itNode->IsFixed(VELOCITY_X) )
797 itNode->FastGetSolutionStepValue(VELOCITY_X) += itNode->FastGetSolutionStepValue(FRACT_VEL_X) / NodalArea;
798 if ( ! itNode->IsFixed(VELOCITY_Y) )
799 itNode->FastGetSolutionStepValue(VELOCITY_Y) += itNode->FastGetSolutionStepValue(FRACT_VEL_Y) / NodalArea;
809 void EnforceSlipCondition(
const Kratos::Flags& rSlipWallFlag)
821 if ( itNode->Is(rSlipWallFlag) )
823 const array_1d<double,3>& rNormal = itNode->FastGetSolutionStepValue(NORMAL);
824 array_1d<double,3>& rDeltaVelocity = itNode->FastGetSolutionStepValue(FRACT_VEL);
826 double Proj = rNormal[0] * rDeltaVelocity[0];
827 double Norm = rNormal[0] * rNormal[0];
831 Proj += rNormal[
d] * rDeltaVelocity[
d];
832 Norm += rNormal[
d] * rNormal[
d];
836 rDeltaVelocity -= Proj * rNormal;
848 void PeriodicConditionProjectionCorrection(ModelPart& rModelPart)
852 int GlobalNodesNum = rModelPart.GetCommunicator().LocalMesh().Nodes().size();
853 rModelPart.GetCommunicator().SumAll(GlobalNodesNum);
858 if (rGeom.PointsNumber() == 2)
860 Node& rNode0 = rGeom[0];
863 Node& rNode1 = rGeom[1];
867 if ( (
static_cast<int>(rNode0.Id()) == Node1Pair ) && (
static_cast<int>(rNode1.Id()) == Node0Pair ) )
869 double NodalArea = rNode0.FastGetSolutionStepValue(NODAL_AREA) + rNode1.FastGetSolutionStepValue(NODAL_AREA);
870 array_1d<double,3> ConvProj = rNode0.FastGetSolutionStepValue(CONV_PROJ) + rNode1.FastGetSolutionStepValue(CONV_PROJ);
871 array_1d<double,3> PressProj = rNode0.FastGetSolutionStepValue(PRESS_PROJ) + rNode1.FastGetSolutionStepValue(PRESS_PROJ);
872 double DivProj = rNode0.FastGetSolutionStepValue(DIVPROJ) + rNode1.FastGetSolutionStepValue(DIVPROJ);
874 rNode0.GetValue(NODAL_AREA) = NodalArea;
875 rNode0.GetValue(CONV_PROJ) = ConvProj;
876 rNode0.GetValue(PRESS_PROJ) = PressProj;
877 rNode0.GetValue(DIVPROJ) = DivProj;
878 rNode1.GetValue(NODAL_AREA) = NodalArea;
879 rNode1.GetValue(CONV_PROJ) = ConvProj;
880 rNode1.GetValue(PRESS_PROJ) = PressProj;
881 rNode1.GetValue(DIVPROJ) = DivProj;
884 else if (rGeom.PointsNumber() == 4 && rGeom[0].FastGetSolutionStepValue(
mrPeriodicIdVar) > GlobalNodesNum)
886 double NodalArea = rGeom[0].FastGetSolutionStepValue(NODAL_AREA);
887 array_1d<double,3> ConvProj = rGeom[0].FastGetSolutionStepValue(CONV_PROJ);
888 array_1d<double,3> PressProj = rGeom[0].FastGetSolutionStepValue(PRESS_PROJ);
889 double DivProj = rGeom[0].FastGetSolutionStepValue(DIVPROJ);
891 for (
unsigned int i = 1;
i < 4;
i++)
893 NodalArea += rGeom[
i].FastGetSolutionStepValue(NODAL_AREA);
894 ConvProj += rGeom[
i].FastGetSolutionStepValue(CONV_PROJ);
895 PressProj += rGeom[
i].FastGetSolutionStepValue(PRESS_PROJ);
896 DivProj += rGeom[
i].FastGetSolutionStepValue(DIVPROJ);
899 for (
unsigned int i = 0;
i < 4;
i++)
901 rGeom[
i].GetValue(NODAL_AREA) = NodalArea;
902 rGeom[
i].GetValue(CONV_PROJ) = ConvProj;
903 rGeom[
i].GetValue(PRESS_PROJ) = PressProj;
904 rGeom[
i].GetValue(DIVPROJ) = DivProj;
909 rModelPart.GetCommunicator().AssembleNonHistoricalData(NODAL_AREA);
910 rModelPart.GetCommunicator().AssembleNonHistoricalData(CONV_PROJ);
911 rModelPart.GetCommunicator().AssembleNonHistoricalData(PRESS_PROJ);
912 rModelPart.GetCommunicator().AssembleNonHistoricalData(DIVPROJ);
914 for (
typename ModelPart::NodeIterator itNode = rModelPart.NodesBegin(); itNode != rModelPart.NodesEnd(); itNode++)
916 if (itNode->GetValue(NODAL_AREA) != 0.0)
918 itNode->FastGetSolutionStepValue(NODAL_AREA) = itNode->GetValue(NODAL_AREA);
919 itNode->FastGetSolutionStepValue(CONV_PROJ) = itNode->GetValue(CONV_PROJ);
920 itNode->FastGetSolutionStepValue(PRESS_PROJ) = itNode->GetValue(PRESS_PROJ);
921 itNode->FastGetSolutionStepValue(DIVPROJ) = itNode->GetValue(DIVPROJ);
924 itNode->GetValue(NODAL_AREA) = 0.0;
925 itNode->GetValue(CONV_PROJ) = array_1d<double,3>(3,0.0);
926 itNode->GetValue(PRESS_PROJ) = array_1d<double,3>(3,0.0);
927 itNode->GetValue(DIVPROJ) = 0.0;
933 void PeriodicConditionVelocityCorrection(ModelPart& rModelPart)
937 int GlobalNodesNum = rModelPart.GetCommunicator().LocalMesh().Nodes().size();
938 rModelPart.GetCommunicator().SumAll(GlobalNodesNum);
943 if (rGeom.PointsNumber() == 2)
945 Node& rNode0 = rGeom[0];
948 Node& rNode1 = rGeom[1];
952 if ( (
static_cast<int>(rNode0.Id()) == Node1Pair ) && (
static_cast<int>(rNode1.Id()) == Node0Pair ) )
954 array_1d<double,3> DeltaVel = rNode0.FastGetSolutionStepValue(FRACT_VEL) + rNode1.FastGetSolutionStepValue(FRACT_VEL);
956 rNode0.GetValue(FRACT_VEL) = DeltaVel;
957 rNode1.GetValue(FRACT_VEL) = DeltaVel;
960 else if (rGeom.PointsNumber() == 4 && rGeom[0].FastGetSolutionStepValue(
mrPeriodicIdVar) > GlobalNodesNum)
962 array_1d<double,3> DeltaVel = rGeom[0].FastGetSolutionStepValue(FRACT_VEL);
963 for (
unsigned int i = 1;
i < 4;
i++)
965 DeltaVel += rGeom[
i].FastGetSolutionStepValue(FRACT_VEL);
968 for (
unsigned int i = 0;
i < 4;
i++)
970 rGeom[
i].GetValue(FRACT_VEL) = DeltaVel;
975 rModelPart.GetCommunicator().AssembleNonHistoricalData(FRACT_VEL);
977 for (
typename ModelPart::NodeIterator itNode = rModelPart.NodesBegin(); itNode != rModelPart.NodesEnd(); itNode++)
979 array_1d<double,3>& rDeltaVel = itNode->GetValue(FRACT_VEL);
980 if ( rDeltaVel[0]*rDeltaVel[0] + rDeltaVel[1]*rDeltaVel[1] + rDeltaVel[2]*rDeltaVel[2] != 0.0)
982 itNode->FastGetSolutionStepValue(FRACT_VEL) = itNode->GetValue(FRACT_VEL);
983 rDeltaVel = array_1d<double,3>(3,0.0);
1016 double mVelocityTolerance;
1064 bool PredictorCorrector)
1088 if (HaveVelStrategy)
1095 KRATOS_THROW_ERROR(std::runtime_error,
"FS_Strategy error: No Velocity strategy defined in FractionalStepSettings",
"");
1100 if (HavePressStrategy)
1107 KRATOS_THROW_ERROR(std::runtime_error,
"FS_Strategy error: No Pressure strategy defined in FractionalStepSettings",
"");
1110 Process::Pointer pTurbulenceProcess;
1119 #pragma omp parallel
1127 const bool is_slip = itCond->Is(SLIP);
1136 rGeom[
i].UnSetLock();
Current class provides an implementation for the base builder and solving operations.
Definition: builder_and_solver.h:64
virtual bool SynchronizeOrNodalFlags(const Flags &TheFlags)
Definition: communicator.cpp:623
virtual bool AssembleNonHistoricalData(Variable< int > const &ThisVariable)
Definition: communicator.cpp:527
Geometry< NodeType > GeometryType
definition of the geometry type with given NodeType
Definition: condition.h:83
Geometry< NodeType > GeometryType
definition of the geometry type with given NodeType
Definition: element.h:83
Geometry base class.
Definition: geometry.h:71
SizeType PointsNumber() const
Definition: geometry.h:528
void SetValue(const TVariableType &rThisVariable, typename TVariableType::Type const &rValue)
Definition: geometry.h:617
Implicit solving strategy base class This is the base class from which we will derive all the implici...
Definition: implicit_solving_strategy.h:61
std::string Info() const override
Turn back information as a string.
Definition: implicit_solving_strategy.h:251
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
Communicator & GetCommunicator()
Definition: model_part.h:1821
ConditionsContainerType & Conditions(IndexType ThisIndex=0)
Definition: model_part.h:1381
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
MeshType::ElementIterator ElementIterator
Definition: model_part.h:174
MeshType::ConditionIterator ConditionIterator
Definition: model_part.h:189
static void PartitionedIterators(TVector &rVector, typename TVector::iterator &rBegin, typename TVector::iterator &rEnd)
Generate a partition for an std::vector-like array, providing iterators to the begin and end position...
Definition: openmp_utils.h:179
Definition: pfem_2_monolithic_slip_strategy.h:55
bool mPredictorCorrector
Definition: pfem_2_monolithic_slip_strategy.h:1028
unsigned int mTimeOrder
Definition: pfem_2_monolithic_slip_strategy.h:1026
FSStrategy & operator=(FSStrategy const &rOther)
Assignment operator.
Definition: pfem_2_monolithic_slip_strategy.h:1166
TLinearSolver::Pointer bool double Tol
Definition: pfem_2_monolithic_slip_strategy.h:120
void InitializeStrategy(SolverSettingsType &rSolverConfig, bool PredictorCorrector)
Definition: pfem_2_monolithic_slip_strategy.h:1063
double mPressureTolerance
Definition: pfem_2_monolithic_slip_strategy.h:1018
bool mReformDofSet
Definition: pfem_2_monolithic_slip_strategy.h:1032
TLinearSolver::Pointer pLinearSolver
Definition: pfem_2_monolithic_slip_strategy.h:118
TLinearSolver::Pointer bool ReformDofSet
Definition: pfem_2_monolithic_slip_strategy.h:119
ImplicitSolvingStrategy< TSparseSpace, TDenseSpace, TLinearSolver >::Pointer StrategyPointerType
Definition: pfem_2_monolithic_slip_strategy.h:79
PFEM2MonolithicSlipStrategy(ModelPart &rModelPart, SolverSettingsType &rSolverConfig, bool PredictorCorrector)
Definition: pfem_2_monolithic_slip_strategy.h:87
FSStrategy(FSStrategy const &rOther)
Copy constructor.
Definition: pfem_2_monolithic_slip_strategy.h:1169
StrategyPointerType mpMomentumStrategy
Scheme for the solution of the momentum equation.
Definition: pfem_2_monolithic_slip_strategy.h:1044
BaseType::TSystemMatrixType TSystemMatrixType
Definition: pfem_2_monolithic_slip_strategy.h:71
boost::shared_ptr< FSStrategy< TSparseSpace, TDenseSpace, TLinearSolver > > Pointer
Counted pointer of FSStrategy.
Definition: pfem_2_monolithic_slip_strategy.h:61
SolverSettings< TSparseSpace, TDenseSpace, TLinearSolver > SolverSettingsType
Definition: pfem_2_monolithic_slip_strategy.h:81
BaseType::TSystemVectorType TSystemVectorType
Definition: pfem_2_monolithic_slip_strategy.h:73
BaseType::DofsArrayType DofsArrayType
Definition: pfem_2_monolithic_slip_strategy.h:69
std::vector< Process::Pointer > mExtraIterationSteps
Definition: pfem_2_monolithic_slip_strategy.h:1049
TLinearSolver::Pointer bool double int MaxIterations
Definition: pfem_2_monolithic_slip_strategy.h:121
StrategyPointerType mpPressureStrategy
Scheme for the solution of the mass equation.
Definition: pfem_2_monolithic_slip_strategy.h:1047
SolvingStrategyPython(self.model_part, self.time_scheme, self.monolithic_linear_solver, self.conv_criteria, CalculateReactionFlag, ReformDofSetAtEachStep, MoveMeshFlag) self.monolithic_solver.SetMaximumIterations(self.maximum_nonlin_iterations) PFEM2MonolithicSlipStrategy(ModelPart &rModelPart
const Kratos::Variable< int > & mrPeriodicIdVar
Definition: pfem_2_monolithic_slip_strategy.h:1051
TLinearSolver::Pointer bool double int unsigned int DomainSize
Definition: pfem_2_monolithic_slip_strategy.h:122
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: pfem_2_monolithic_slip_strategy.h:77
unsigned int mMaxPressureIter
Definition: pfem_2_monolithic_slip_strategy.h:1022
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: pfem_2_monolithic_slip_strategy.h:75
PFEM2MonolithicSlipStrategy(ModelPart &rModelPart, SolverSettingsType &rSolverConfig, bool PredictorCorrector, const Kratos::Variable< int > &PeriodicVar)
Definition: pfem_2_monolithic_slip_strategy.h:96
bool mUseSlipConditions
Definition: pfem_2_monolithic_slip_strategy.h:1030
BaseType::TDataType TDataType
Definition: pfem_2_monolithic_slip_strategy.h:65
ImplicitSolvingStrategy< TSparseSpace, TDenseSpace, TLinearSolver > BaseType
Definition: pfem_2_monolithic_slip_strategy.h:63
unsigned int mMaxVelocityIter
Definition: pfem_2_monolithic_slip_strategy.h:1020
unsigned int mDomainSize
Definition: pfem_2_monolithic_slip_strategy.h:1024
A sorted associative container similar to an STL set, but uses a vector to store pointers to its data...
Definition: pointer_vector_set.h:72
This class provides the implementation of a static scheme.
Definition: residualbased_incrementalupdate_static_scheme.h:57
Scheme for the solution of problems involving a slip condition.
Definition: residualbased_incrementalupdate_static_scheme_slip.h:70
This is a very simple strategy to solve linearly the problem.
Definition: residualbased_linear_strategy.h:64
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
Helper class to define solution strategies for FS_Strategy.
Definition: solver_settings.h:53
@ Velocity
Definition: solver_settings.h:66
@ Pressure
Definition: solver_settings.h:66
virtual bool FindMaxIter(StrategyLabel const &rStrategyLabel, unsigned int &rMaxIter)
Definition: solver_settings.h:201
virtual unsigned int GetDomainSize() const
Definition: solver_settings.h:146
bool GetReformDofSet()
Definition: solver_settings.h:226
virtual bool UseSlipConditions() const
Definition: solver_settings.h:156
virtual bool GetTurbulenceModel(ProcessPointerType &pTurbulenceModel)
Definition: solver_settings.h:135
virtual bool FindStrategy(StrategyLabel const &rStrategyLabel, StrategyPointerType &pThisStrategy)
Definition: solver_settings.h:166
virtual unsigned int GetEchoLevel()
Definition: solver_settings.h:221
virtual bool FindTolerance(StrategyLabel const &rStrategyLabel, double &rTolerance)
Definition: solver_settings.h:188
virtual unsigned int GetTimeOrder() const
Definition: solver_settings.h:151
Solving strategy base class This is the base class from which we will derive all the strategies (impl...
Definition: solving_strategy.h:64
virtual void PrintInfo(std::ostream &rOStream) const
Print information about this object.
Definition: solving_strategy.h:467
TDenseSpace::MatrixType LocalSystemMatrixType
Definition: solving_strategy.h:79
TSparseSpace::DataType TDataType
Definition: solving_strategy.h:69
virtual void SetEchoLevel(const int Level)
This sets the level of echo for the solving strategy.
Definition: solving_strategy.h:255
ModelPart & GetModelPart()
Operations to get the pointer to the model.
Definition: solving_strategy.h:350
virtual void Clear()
Clears the internal storage.
Definition: solving_strategy.h:198
int GetEchoLevel()
This returns the level of echo for the solving strategy.
Definition: solving_strategy.h:271
virtual void PrintData(std::ostream &rOStream) const
Print object's data.
Definition: solving_strategy.h:473
TSparseSpace::MatrixType TSystemMatrixType
Definition: solving_strategy.h:71
virtual int Check()
Function to perform expensive checks.
Definition: solving_strategy.h:377
bool MoveMeshFlag()
This function returns the flag that says if the mesh is moved.
Definition: solving_strategy.h:290
virtual double Solve()
The problem of interest is solved.
Definition: solving_strategy.h:183
TSparseSpace::VectorType TSystemVectorType
Definition: solving_strategy.h:73
TDenseSpace::VectorType LocalSystemVectorType
Definition: solving_strategy.h:81
KeyType Key() const
Definition: variable_data.h:187
Variable class contains all information needed to store and retrive data from a data container.
Definition: variable.h:63
#define KRATOS_THROW_ERROR(ExceptionType, ErrorMessage, MoreInfo)
Definition: define.h:77
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
Kratos::ModelPart ModelPart
Definition: kratos_wrapper.h:31
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
REACTION_CHECK_STIFFNESS_FACTOR int
Definition: contact_structural_mechanics_application_variables.h:75
Temp
Definition: PecletTest.py:105
ProcessInfo
Definition: edgebased_PureConvection.py:116
model_part
Definition: face_heat.py:14
Dt
Definition: face_heat.py:78
int d
Definition: ode_solve.py:397
def Norm(vector)
Definition: sand_production_post_process_tool.py:10
integer i
Definition: TensorModule.f:17
ReformDofAtEachIteration
Definition: test_pureconvectionsolver_benchmarking.py:131