9 #ifndef KRATOS_THREE_STEP_V_P_STRATEGY_H
10 #define KRATOS_THREE_STEP_V_P_STRATEGY_H
28 #include "custom_utilities/solver_settings.h"
65 template <
class TSparseSpace,
98 typename TLinearSolver::Pointer pVelocityLinearSolver,
99 typename TLinearSolver::Pointer pPressureLinearSolver,
100 bool ReformDofSet =
true,
101 double VelTol = 0.0001,
102 double PresTol = 0.0001,
103 int MaxPressureIterations = 1,
104 unsigned int TimeOrder = 2,
105 unsigned int DomainSize = 2) :
BaseType(rModelPart, pVelocityLinearSolver, pPressureLinearSolver, ReformDofSet, DomainSize),
120 bool CalculateNormDxFlag =
true;
130 typename SchemeType::Pointer pScheme;
143 vel_build->SetCalculateReactionsFlag(
false);
152 pressure_build->SetCalculateReactionsFlag(
false);
169 if (DELTA_TIME.Key() == 0)
170 KRATOS_THROW_ERROR(std::runtime_error,
"DELTA_TIME Key is 0. Check that the application was correctly registered.",
"");
175 for (
const auto &r_element : rModelPart.
Elements())
177 ierr = r_element.Check(r_current_process_info);
196 double Dt = rCurrentProcessInfo[DELTA_TIME];
199 double Rho = OldDt /
Dt;
200 double TimeCoeff = 1.0 / (
Dt * Rho * Rho +
Dt * Rho);
202 Vector &BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
203 BDFcoeffs.
resize(3,
false);
205 BDFcoeffs[0] = TimeCoeff * (Rho * Rho + 2.0 * Rho);
206 BDFcoeffs[1] = -TimeCoeff * (Rho * Rho + 2.0 * Rho + 1.0);
207 BDFcoeffs[2] = TimeCoeff;
211 double Dt = rCurrentProcessInfo[DELTA_TIME];
212 double TimeCoeff = 1.0 /
Dt;
214 Vector &BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
215 BDFcoeffs.
resize(2,
false);
217 BDFcoeffs[0] = TimeCoeff;
218 BDFcoeffs[1] = -TimeCoeff;
228 double currentTime = rCurrentProcessInfo[TIME];
229 bool converged =
false;
234 KRATOS_INFO(
"\nSolution with three_step_vp_strategy at t=") << currentTime <<
"s" << std::endl;
236 bool momentumConverged =
true;
237 bool continuityConverged =
false;
243 for (
unsigned int it = 0; it < maxNonLinearIterations; ++it)
245 KRATOS_INFO(
"\n ------------------- ITERATION ") << it <<
" ------------------- " << std::endl;
276 if (continuityConverged && momentumConverged)
278 rCurrentProcessInfo.
SetValue(BAD_VELOCITY_CONVERGENCE,
false);
279 rCurrentProcessInfo.
SetValue(BAD_PRESSURE_CONVERGENCE,
false);
284 KRATOS_INFO(
"ThreeStepVPStrategy") <<
"V-P strategy converged in " << it + 1 <<
" iterations." << std::endl;
287 else if (it == (maxNonLinearIterations - 1) && it != 0)
296 std::cout <<
"Convergence tolerance not reached." << std::endl;
324 itElem->InitializeNonLinearIteration(rCurrentProcessInfo);
347 if ((
i)->IsNot(ISOLATED) && ((
i)->IsNot(RIGID) || (
i)->Is(SOLID)))
349 UpdateAccelerations(CurrentAcceleration, CurrentVelocity, PreviousAcceleration, PreviousVelocity);
351 else if ((
i)->Is(RIGID))
354 (
i)->FastGetSolutionStepValue(ACCELERATION, 0) = Zeros;
355 (
i)->FastGetSolutionStepValue(ACCELERATION, 1) = Zeros;
359 (
i)->FastGetSolutionStepValue(PRESSURE, 0) = 0.0;
360 (
i)->FastGetSolutionStepValue(PRESSURE, 1) = 0.0;
361 (
i)->FastGetSolutionStepValue(PRESSURE_VELOCITY, 0) = 0.0;
362 (
i)->FastGetSolutionStepValue(PRESSURE_VELOCITY, 1) = 0.0;
363 (
i)->FastGetSolutionStepValue(PRESSURE_ACCELERATION, 0) = 0.0;
364 (
i)->FastGetSolutionStepValue(PRESSURE_ACCELERATION, 1) = 0.0;
365 if ((
i)->SolutionStepsDataHas(VOLUME_ACCELERATION))
368 (
i)->FastGetSolutionStepValue(ACCELERATION, 0) = VolumeAcceleration;
369 (
i)->FastGetSolutionStepValue(VELOCITY, 0) += VolumeAcceleration * rCurrentProcessInfo[DELTA_TIME];
373 const double timeInterval = rCurrentProcessInfo[DELTA_TIME];
374 unsigned int timeStep = rCurrentProcessInfo[STEP];
377 (
i)->FastGetSolutionStepValue(PRESSURE_VELOCITY, 0) = 0;
378 (
i)->FastGetSolutionStepValue(PRESSURE_VELOCITY, 1) = 0;
379 (
i)->FastGetSolutionStepValue(PRESSURE_ACCELERATION, 0) = 0;
380 (
i)->FastGetSolutionStepValue(PRESSURE_ACCELERATION, 1) = 0;
384 double &CurrentPressure = (
i)->FastGetSolutionStepValue(PRESSURE, 0);
385 double &PreviousPressure = (
i)->FastGetSolutionStepValue(PRESSURE, 1);
386 double &CurrentPressureVelocity = (
i)->FastGetSolutionStepValue(PRESSURE_VELOCITY, 0);
387 double &CurrentPressureAcceleration = (
i)->FastGetSolutionStepValue(PRESSURE_ACCELERATION, 0);
389 CurrentPressureAcceleration = CurrentPressureVelocity / timeInterval;
391 CurrentPressureVelocity = (CurrentPressure - PreviousPressure) / timeInterval;
393 CurrentPressureAcceleration += -CurrentPressureVelocity / timeInterval;
405 double Dt = rCurrentProcessInfo[DELTA_TIME];
407 noalias(CurrentAcceleration) = (CurrentVelocity - PreviousVelocity) /
Dt;
423 int StrategyLevel = Level > 0 ? Level - 1 : 0;
437 std::string
Info()
const override
439 std::stringstream buffer;
440 buffer <<
"ThreeStepVPStrategy";
447 rOStream <<
"ThreeStepVPStrategy";
488 std::cout <<
"1. SolveFirstVelocitySystem " << std::endl;
490 bool momentumConvergence =
false;
500 std::cout <<
"Momentum equations did not reach the convergence tolerance." << std::endl;
502 return momentumConvergence;
507 std::cout <<
"2. SolveContinuityIteration " << std::endl;
508 bool continuityConvergence =
false;
517 std::cout <<
"Continuity equation did not reach the convergence tolerance." << std::endl;
519 return continuityConvergence;
525 std::cout <<
"3. CalculateEndOfStepVelocity()" << std::endl;
534 #pragma omp parallel for
535 for (
int i_elem = 0; i_elem < n_elems; ++i_elem)
540 double elementalVolume = 0;
544 elementalVolume = geometry.
Area() / 3.0;
548 elementalVolume = geometry.
Volume() * 0.25;
551 unsigned int numNodes = geometry.
size();
552 for (
unsigned int i = 0;
i < numNodes;
i++)
554 double &nodalVolume = geometry(
i)->FastGetSolutionStepValue(NODAL_VOLUME);
555 nodalVolume += elementalVolume;
563 #pragma omp parallel for
564 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
566 auto it_node = rModelPart.
NodesBegin() + i_node;
567 const double NodalVolume = it_node->FastGetSolutionStepValue(NODAL_VOLUME);
568 double fractionalVelocity = 0;
569 if (it_node->IsNot(ISOLATED))
571 if (!it_node->IsFixed(VELOCITY_X))
573 fractionalVelocity = it_node->FastGetSolutionStepValue(VELOCITY_X);
574 it_node->FastGetSolutionStepValue(VELOCITY_X) += it_node->FastGetSolutionStepValue(FRACT_VEL_X) / NodalVolume;
575 it_node->FastGetSolutionStepValue(FRACT_VEL_X) = fractionalVelocity;
577 if (!it_node->IsFixed(VELOCITY_Y))
579 fractionalVelocity = it_node->FastGetSolutionStepValue(VELOCITY_Y);
580 it_node->FastGetSolutionStepValue(VELOCITY_Y) += it_node->FastGetSolutionStepValue(FRACT_VEL_Y) / NodalVolume;
581 it_node->FastGetSolutionStepValue(FRACT_VEL_Y) = fractionalVelocity;
583 if (!it_node->IsFixed(VELOCITY_Z))
585 fractionalVelocity = it_node->FastGetSolutionStepValue(VELOCITY_Z);
586 it_node->FastGetSolutionStepValue(VELOCITY_Z) += it_node->FastGetSolutionStepValue(FRACT_VEL_Z) / NodalVolume;
587 it_node->FastGetSolutionStepValue(FRACT_VEL_Z) = fractionalVelocity;
594 #pragma omp parallel for
595 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
597 auto it_node = rModelPart.
NodesBegin() + i_node;
598 const double NodalArea = it_node->FastGetSolutionStepValue(NODAL_VOLUME);
599 double fractionalVelocity = 0;
600 if (it_node->IsNot(ISOLATED))
602 if (!it_node->IsFixed(VELOCITY_X))
604 fractionalVelocity = it_node->FastGetSolutionStepValue(VELOCITY_X);
605 it_node->FastGetSolutionStepValue(VELOCITY_X) += it_node->FastGetSolutionStepValue(FRACT_VEL_X) / NodalArea;
606 it_node->FastGetSolutionStepValue(FRACT_VEL_X) = fractionalVelocity;
608 if (!it_node->IsFixed(VELOCITY_Y))
610 fractionalVelocity = it_node->FastGetSolutionStepValue(VELOCITY_Y);
611 it_node->FastGetSolutionStepValue(VELOCITY_Y) += it_node->FastGetSolutionStepValue(FRACT_VEL_Y) / NodalArea;
612 it_node->FastGetSolutionStepValue(FRACT_VEL_Y) = fractionalVelocity;
630 #pragma omp parallel for
631 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
633 auto it_node = rModelPart.
NodesBegin() + i_node;
634 if (it_node->IsNot(ISOLATED))
636 if (!it_node->IsFixed(VELOCITY_X))
638 it_node->FastGetSolutionStepValue(VELOCITY_X) = it_node->FastGetSolutionStepValue(FRACT_VEL_X);
640 if (!it_node->IsFixed(VELOCITY_Y))
642 it_node->FastGetSolutionStepValue(VELOCITY_Y) = it_node->FastGetSolutionStepValue(FRACT_VEL_Y);
644 if (!it_node->IsFixed(VELOCITY_Z))
646 it_node->FastGetSolutionStepValue(VELOCITY_Z) = it_node->FastGetSolutionStepValue(FRACT_VEL_Z);
653 #pragma omp parallel for
654 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
656 auto it_node = rModelPart.
NodesBegin() + i_node;
657 if (it_node->IsNot(ISOLATED))
659 if (!it_node->IsFixed(VELOCITY_X))
661 it_node->FastGetSolutionStepValue(VELOCITY_X) = it_node->FastGetSolutionStepValue(FRACT_VEL_X);
663 if (!it_node->IsFixed(VELOCITY_Y))
665 it_node->FastGetSolutionStepValue(VELOCITY_Y) = it_node->FastGetSolutionStepValue(FRACT_VEL_Y);
678 double errorNormDv = 0;
679 double temp_norm = NormV;
681 #pragma omp parallel for reduction(+ : temp_norm)
682 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
684 const auto it_node = rModelPart.
NodesBegin() + i_node;
685 const auto &r_vel = it_node->FastGetSolutionStepValue(VELOCITY);
686 for (
unsigned int d = 0;
d < 3; ++
d)
688 temp_norm += r_vel[
d] * r_vel[
d];
695 const double zero_tol = 1.0e-12;
696 errorNormDv = (NormV < zero_tol) ? NormDv : NormDv / NormV;
700 std::cout <<
"The norm of velocity increment is: " << NormDv << std::endl;
701 std::cout <<
"The norm of velocity is: " << NormV << std::endl;
702 std::cout <<
"Velocity error: " << errorNormDv <<
"mVelocityTolerance: " <<
mVelocityTolerance << std::endl;
707 std::cout <<
"The norm of velocity is: " << NormV <<
" The norm of velocity increment is: " << NormDv <<
" Velocity error: " << errorNormDv <<
" Converged!" << std::endl;
712 std::cout <<
"The norm of velocity is: " << NormV <<
" The norm of velocity increment is: " << NormDv <<
" Velocity error: " << errorNormDv <<
" Not converged!" << std::endl;
723 #pragma omp parallel for reduction(+ \
725 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
727 const auto it_node = rModelPart.
NodesBegin() + i_node;
728 const auto &r_vel = it_node->FastGetSolutionStepValue(VELOCITY);
729 for (
unsigned int d = 0;
d < 3; ++
d)
731 NormV += r_vel[
d] * r_vel[
d];
737 std::cout <<
"The norm of velocity is: " << NormV <<
" Old velocity norm was: " << NormOldV << std::endl;
746 double errorNormDp = 0;
748 #pragma omp parallel for reduction(+ \
750 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
752 const auto it_node = rModelPart.
NodesBegin() + i_node;
753 const double Pr = it_node->FastGetSolutionStepValue(PRESSURE);
759 const double zero_tol = 1.0e-12;
760 errorNormDp = (NormP < zero_tol) ? NormDp : NormDp / NormP;
764 std::cout <<
" The norm of pressure increment is: " << NormDp << std::endl;
765 std::cout <<
" The norm of pressure is: " << NormP << std::endl;
766 std::cout <<
" The norm of pressure increment is: " << NormDp <<
" Pressure error: " << errorNormDp << std::endl;
771 std::cout <<
" The norm of pressure is: " << NormP <<
" The norm of pressure increment is: " << NormDp <<
" Pressure error: " << errorNormDp <<
" Converged!" << std::endl;
776 std::cout <<
" The norm of pressure is: " << NormP <<
" The norm of pressure increment is: " << NormDp <<
" Pressure error: " << errorNormDp <<
" Not converged!" << std::endl;
785 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
787 const auto it_node = rModelPart.
NodesBegin() + i_node;
789 if (it_node->Is(FREE_SURFACE))
791 it_node->FastGetSolutionStepValue(PRESSURE) = 0;
792 it_node->Fix(PRESSURE);
801 for (
int i_node = 0; i_node <
n_nodes; ++i_node)
803 const auto it_node = rModelPart.
NodesBegin() + i_node;
804 it_node->Free(PRESSURE);
Current class provides an implementation for the base builder and solving operations.
Definition: builder_and_solver.h:64
virtual const DataCommunicator & GetDataCommunicator() const
Definition: communicator.cpp:340
virtual bool AssembleCurrentData(Variable< int > const &ThisVariable)
Definition: communicator.cpp:502
virtual int MyPID() const
Definition: communicator.cpp:91
void SetValue(const Variable< TDataType > &rThisVariable, TDataType const &rValue)
Sets the value for a given variable.
Definition: data_value_container.h:320
Short class definition.
Definition: gauss_seidel_linear_strategy.h:83
Geometry base class.
Definition: geometry.h:71
SizeType size() const
Definition: geometry.h:518
virtual double Volume() const
This method calculate and return volume of this geometry.
Definition: geometry.h:1358
virtual double Area() const
This method calculate and return area or surface area of this geometry depending to it's dimension.
Definition: geometry.h:1345
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
ElementIterator ElementsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1169
Communicator & GetCommunicator()
Definition: model_part.h:1821
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
SizeType NumberOfElements(IndexType ThisIndex=0) const
Definition: model_part.h:1027
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
MeshType::ElementIterator ElementIterator
Definition: model_part.h:174
SizeType NumberOfNodes(IndexType ThisIndex=0) const
Definition: model_part.h:341
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
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
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
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
ProcessInfo & GetPreviousTimeStepInfo(IndexType StepsBefore=1)
Definition: process_info.h:187
Current class provides an implementation for standard builder and solving operations.
Definition: residualbased_block_builder_and_solver.h:82
This class provides the implementation of a static scheme.
Definition: residualbased_incrementalupdate_static_scheme.h:57
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
Solving strategy base class This is the base class from which we will derive all the strategies (impl...
Definition: solving_strategy.h:64
TDenseSpace::MatrixType LocalSystemMatrixType
Definition: solving_strategy.h:79
TSparseSpace::DataType TDataType
Definition: solving_strategy.h:69
ModelPart & GetModelPart()
Operations to get the pointer to the model.
Definition: solving_strategy.h:350
int GetEchoLevel()
This returns the level of echo for the solving strategy.
Definition: solving_strategy.h:271
TSparseSpace::MatrixType TSystemMatrixType
Definition: solving_strategy.h:71
TSparseSpace::VectorType TSystemVectorType
Definition: solving_strategy.h:73
TDenseSpace::VectorType LocalSystemVectorType
Definition: solving_strategy.h:81
Definition: three_step_v_p_strategy.h:69
bool mReformDofSet
Definition: three_step_v_p_strategy.h:839
unsigned int mTimeOrder
Definition: three_step_v_p_strategy.h:837
void CheckVelocityConvergence(const double NormOldV)
Definition: three_step_v_p_strategy.h:717
SolvingStrategy< TSparseSpace, TDenseSpace >::Pointer StrategyPointerType
Definition: three_step_v_p_strategy.h:89
void SetTimeCoefficients(ProcessInfo &rCurrentProcessInfo)
Definition: three_step_v_p_strategy.h:189
BaseType::TDataType TDataType
Definition: three_step_v_p_strategy.h:77
double mVelocityTolerance
Definition: three_step_v_p_strategy.h:829
void RecoverFractionalVelocity()
Definition: three_step_v_p_strategy.h:620
StrategyPointerType mpMomentumStrategy
Scheme for the solution of the momentum equation.
Definition: three_step_v_p_strategy.h:851
virtual ~ThreeStepVPStrategy()
Destructor.
Definition: three_step_v_p_strategy.h:158
void InitializeSolutionStep() override
Performs all the required operations that should be done (for each step) before solving the solution ...
Definition: three_step_v_p_strategy.h:308
bool CheckPressureIncrementConvergence(const double NormDp)
Definition: three_step_v_p_strategy.h:740
std::string Info() const override
Turn back information as a string.
Definition: three_step_v_p_strategy.h:437
double mPressureTolerance
Definition: three_step_v_p_strategy.h:831
int Check() override
Function to perform expensive checks.
Definition: three_step_v_p_strategy.h:160
void UpdateStressStrain() override
Definition: three_step_v_p_strategy.h:312
TwoStepVPSolverSettings< TSparseSpace, TDenseSpace, TLinearSolver > SolverSettingsType
Definition: three_step_v_p_strategy.h:91
void FixPressure()
Definition: three_step_v_p_strategy.h:781
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: three_step_v_p_strategy.h:445
void UpdateAccelerations(array_1d< double, 3 > &CurrentAcceleration, const array_1d< double, 3 > &CurrentVelocity, array_1d< double, 3 > &PreviousAcceleration, const array_1d< double, 3 > &PreviousVelocity)
Definition: three_step_v_p_strategy.h:398
void CalculateTemporalVariables() override
Definition: three_step_v_p_strategy.h:331
unsigned int mMaxPressureIter
Definition: three_step_v_p_strategy.h:833
ThreeStepVPStrategy(ThreeStepVPStrategy const &rOther)
Copy constructor.
Definition: three_step_v_p_strategy.h:880
BaseType::TSystemMatrixType TSystemMatrixType
Definition: three_step_v_p_strategy.h:81
ThreeStepVPStrategy(ModelPart &rModelPart, typename TLinearSolver::Pointer pVelocityLinearSolver, typename TLinearSolver::Pointer pPressureLinearSolver, bool ReformDofSet=true, double VelTol=0.0001, double PresTol=0.0001, int MaxPressureIterations=1, unsigned int TimeOrder=2, unsigned int DomainSize=2)
Definition: three_step_v_p_strategy.h:97
void FreePressure()
Definition: three_step_v_p_strategy.h:797
ThreeStepVPStrategy & operator=(ThreeStepVPStrategy const &rOther)
Assignment operator.
Definition: three_step_v_p_strategy.h:877
bool SolveSolutionStep() override
Solves the current step. This function returns true if a solution has been found, false otherwise.
Definition: three_step_v_p_strategy.h:224
bool CheckVelocityIncrementConvergence(const double NormDv, double &NormV)
Definition: three_step_v_p_strategy.h:672
bool SolveContinuityIteration()
Definition: three_step_v_p_strategy.h:505
StrategyPointerType mpPressureStrategy
Scheme for the solution of the mass equation.
Definition: three_step_v_p_strategy.h:854
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: three_step_v_p_strategy.h:451
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: three_step_v_p_strategy.h:87
BaseType::DofsArrayType DofsArrayType
Definition: three_step_v_p_strategy.h:79
bool SolveFirstVelocitySystem(double &NormV)
Calculate the coefficients for time iteration.
Definition: three_step_v_p_strategy.h:486
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: three_step_v_p_strategy.h:85
VPStrategy< TSparseSpace, TDenseSpace, TLinearSolver > BaseType
Definition: three_step_v_p_strategy.h:75
unsigned int mDomainSize
Definition: three_step_v_p_strategy.h:835
void SetEchoLevel(int Level) override
This sets the level of echo for the solving strategy.
Definition: three_step_v_p_strategy.h:420
void Clear() override
Clears the internal storage.
Definition: three_step_v_p_strategy.h:410
void FinalizeSolutionStep() override
Performs all the required operations that should be done (for each step) after solving the solution s...
Definition: three_step_v_p_strategy.h:304
KRATOS_CLASS_POINTER_DEFINITION(ThreeStepVPStrategy)
BaseType::TSystemVectorType TSystemVectorType
Definition: three_step_v_p_strategy.h:83
void CalculateEndOfStepVelocity(const double NormV)
Definition: three_step_v_p_strategy.h:522
Helper class to define solution strategies for TwoStepVPStrategy.
Definition: solver_settings.h:57
Definition: v_p_strategy.h:59
virtual void SetEchoLevel(int Level) override
This sets the level of echo for the solving strategy.
Definition: v_p_strategy.h:436
void UpdateTopology(ModelPart &rModelPart, unsigned int echoLevel)
Definition: v_p_strategy.h:107
void SetBlockedAndIsolatedFlags()
Definition: v_p_strategy.h:116
virtual int Check() override
Function to perform expensive checks.
Definition: v_p_strategy.h:93
This class implements a set of auxiliar, already parallelized, methods to perform some common tasks r...
Definition: variable_utils.h:63
void SetHistoricalVariableToZero(const Variable< TType > &rVariable, NodesContainerType &rNodes)
Sets the nodal value of any variable to zero.
Definition: variable_utils.h:757
#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
#define KRATOS_INFO(label)
Definition: logger.h:250
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
Temp
Definition: PecletTest.py:105
Dt
Definition: face_heat.py:78
int n_nodes
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:15
int d
Definition: ode_solve.py:397
integer i
Definition: TensorModule.f:17
ReformDofAtEachIteration
Definition: test_pureconvectionsolver_benchmarking.py:131