Commit 53dbe9ba authored by Gautier Bureau's avatar Gautier Bureau Committed by GILLES Sebastien
Browse files

#860 CardiacMechnics now in ModelInstances and renamed...

#860 CardiacMechnics now in ModelInstances and renamed CardiacMechnicsPrestress. Some comments added in PK2 and files related.
parent 7bc038d9
......@@ -25,7 +25,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('CardiacParameters' here).
* \brief Return the name of the section in the input parameter ('ActiveStress' here).
*
*/
static const std::string& GetName();
......@@ -58,7 +58,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the diffusion tensor (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct Nature : public Crtp::InputParameter<Nature, self, Private::Nature::storage_type>,
public Private::Nature
......@@ -144,7 +144,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('nagumo' here).
* \brief Return the name of the section in the input parameter ('InitialCondition' here).
*
*/
static const std::string& GetName();
......@@ -158,7 +158,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct ActiveStress : public Crtp::InputParameter<ActiveStress, self, double>
{
......@@ -212,7 +212,7 @@ namespace HappyHeart
//! Content of the section.
section_content_type section_content;
}; // struct InitialConditions
}; // struct InitialCondition
//! Alias to the tuple of structs.
......@@ -227,7 +227,7 @@ namespace HappyHeart
//! Content of the section.
section_content_type section_content;
}; // struct CardiacParameters
}; // struct ActiveStress
} // InputParameter
......
......@@ -25,7 +25,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('nagumo' here).
* \brief Return the name of the section in the input parameter ('ElectricalActivation' here).
*
*/
static const std::string& GetName();
......@@ -82,7 +82,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct AmplitudeMax : public Crtp::InputParameter<AmplitudeMax, self, double>
{
......@@ -126,7 +126,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct AmplitudeMin : public Crtp::InputParameter<AmplitudeMin, self, double>
{
......@@ -170,7 +170,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct DepolarizationDuration : public Crtp::InputParameter<DepolarizationDuration, self, double>
{
......@@ -214,7 +214,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct PlateauDuration : public Crtp::InputParameter<PlateauDuration, self, double>
{
......@@ -258,7 +258,7 @@ namespace HappyHeart
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct RepolarizationDuration : public Crtp::InputParameter<RepolarizationDuration, self, double>
{
......
......@@ -25,7 +25,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('CardiacParameters' here).
* \brief Return the name of the section in the input parameter ('Heart' here).
*
*/
static const std::string& GetName();
......@@ -41,7 +41,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('nagumo' here).
* \brief Return the name of the section in the input parameter ('Time' here).
*
*/
static const std::string& GetName();
......@@ -54,7 +54,7 @@ namespace HappyHeart
friend parent;
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct HeartBeatDuration : public Crtp::InputParameter<HeartBeatDuration, self, double>
{
......@@ -115,7 +115,7 @@ namespace HappyHeart
{
/*!
* \brief Return the name of the section in the input parameter ('nagumo' here).
* \brief Return the name of the section in the input parameter ('Geometry' here).
*
*/
static const std::string& GetName();
......@@ -128,7 +128,7 @@ namespace HappyHeart
friend parent;
/*!
* \brief Choose how is described the (through a scalar, a function, etc...)
* \brief Choose how is described the parameter (through a scalar, a function, etc...)
*/
struct Velocity : public Crtp::InputParameter<Velocity, self, double>
{
......@@ -197,7 +197,7 @@ namespace HappyHeart
//! Content of the section.
section_content_type section_content;
}; // struct CardiacParameters
}; // struct Heart
} // InputParameter
......
......@@ -8,8 +8,8 @@
// Copyright © 2016 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_INPUT_PARAMETER_LIST_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_INPUT_PARAMETER_LIST_HPP_
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_INPUT_PARAMETER_LIST_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_INPUT_PARAMETER_LIST_HPP_
# include "Utilities/Containers/EnumClass.hpp"
......@@ -28,14 +28,12 @@
# include "Core/InputParameter/Parameter/ElectricalActivation/ElectricalActivation.hpp"
# include "Core/InputParameter/Parameter/Heart/Heart.hpp"
# include "FormulationSolver/Crtp/VolumicAndSurfacicSource.hpp"
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
......@@ -132,10 +130,10 @@ namespace HappyHeart
using InputParameterList = InputParameterList<InputParameterTuple>;
} // namespace CardiacMechanicsNS
} // namespace CardiacMechanicsPrestressNS
} // namespace HappyHeart
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_INPUT_PARAMETER_LIST_HPP_
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_INPUT_PARAMETER_LIST_HPP_
......@@ -8,14 +8,14 @@
// Copyright © 2016 Inria. All rights reserved.
//
#include "ModelInstances/UnderDevelopment/CardiacMechanics/Model.hpp"
#include "ModelInstances/CardiacMechanicsPrestress/Model.hpp"
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
......@@ -86,7 +86,7 @@ namespace HappyHeart
formulation.WriteSolution(GetTimeManager(), displacement_numbering_subset);
formulation.PrepareDynamicRuns();
formulation.ComputeEnergy();
formulation.ComputeEnergy();
}
......@@ -128,12 +128,11 @@ namespace HappyHeart
void Model::SupplFinalize()
{
auto& formulation = GetNonCstVariationalFormulation();
formulation.WasTangentQuadratique();
GetNonCstVariationalFormulation().WasTangentQuadratic();
}
} // namespace CardiacMechanicsNS
} // namespace CardiacMechanicsPrestressNS
} // namespace HappyHeart
......@@ -8,8 +8,8 @@
// Copyright © 2016 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HPP_
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HPP_
# include <memory>
# include <vector>
......@@ -18,15 +18,15 @@
# include "Model/Model.hpp"
# include "ModelInstances/UnderDevelopment/CardiacMechanics/InputParameterList.hpp"
# include "ModelInstances/UnderDevelopment/CardiacMechanics/VariationalFormulation.hpp"
# include "ModelInstances/CardiacMechanicsPrestress/InputParameterList.hpp"
# include "ModelInstances/CardiacMechanicsPrestress/VariationalFormulation.hpp"
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
......@@ -146,13 +146,13 @@ namespace HappyHeart
};
} // namespace CardiacMechanicsNS
} // namespace CardiacMechanicsPrestressNS
} // namespace HappyHeart
# include "ModelInstances/UnderDevelopment/CardiacMechanics/Model.hxx"
# include "ModelInstances/CardiacMechanicsPrestress/Model.hxx"
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HPP_
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HPP_
......@@ -8,21 +8,21 @@
// Copyright © 2016 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HXX_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HXX_
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HXX_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HXX_
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
inline const std::string& Model::ClassName()
{
static std::string name("CardiacMechanics");
static std::string name("CardiacMechanicsPrestress");
return name;
}
......@@ -46,10 +46,10 @@ namespace HappyHeart
}
} // namespace CardiacMechanicsNS
} // namespace CardiacMechanicsPrestressNS
} // namespace HappyHeart
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_MODEL_HXX_
#endif // HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_MODEL_HXX_
......@@ -8,24 +8,24 @@ custom = imp.load_source('custom_scons_functions', '{0}/custom_scons_functions.p
cardiac_mechanics_src = Split('''
cardiac_mechanics_prestress_src = Split('''
Model.cpp
VariationalFormulation.cpp
''')
cardiac_mechanics_lib = custom.HappyHeartLibrary(env, 'happy_heart_cardiac_mechanics', cardiac_mechanics_src)
cardiac_mechanics_prestress_lib = custom.HappyHeartLibrary(env, 'happy_heart_cardiac_mechanics_prestress', cardiac_mechanics_prestress_src)
main_cardiac_mechanics_src = Split('''
main_cardiac_mechanics_prestress_src = Split('''
main.cpp
''')
cardiac_mechanics = custom.HappyHeartProgram(env, 'CardiacMechanics', main_cardiac_mechanics_src, [cardiac_mechanics_lib])
cardiac_mechanics_prestress = custom.HappyHeartProgram(env, 'CardiacMechanicsPrestress', main_cardiac_mechanics_prestress_src, [cardiac_mechanics_prestress_lib])
list_exec = (cardiac_mechanics, )
list_lib = (cardiac_mechanics_lib, )
list_exec = (cardiac_mechanics_prestress, )
list_lib = (cardiac_mechanics_prestress_lib, )
Return('list_exec', 'list_lib')
......@@ -8,21 +8,20 @@
// Copyright © 2016 Inria. All rights reserved.
//
#include "Utilities/Exceptions/PrintAndAbort.hpp"
# include "Utilities/Exceptions/PrintAndAbort.hpp"
# include "Utilities/Filesystem/Folder.hpp"
# include "Utilities/Filesystem/File.hpp"
#include "Parameters/Compound/Solid/Solid.hpp"
#include "ModelInstances/UnderDevelopment/CardiacMechanics/VariationalFormulation.hpp"
# include "Operators/GlobalVariationalOperatorInstances/BilinearForm/GradPhiGradPhi.hpp"
#include "ModelInstances/CardiacMechanicsPrestress/VariationalFormulation.hpp"
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
......@@ -185,11 +184,11 @@ namespace HappyHeart
find_coords_of_global_vector_operator_ = std::make_unique<FindCoordsOfGlobalVector>(felt_space_highest_dimension,
GetSystemRhs(electrical_activation_numbering_subset));
input_analytical_prestress_fiber_ = std::make_unique<InputAnalyticalPrestressFiber>(input_parameter_data,
mesh,
raw_match_dof_in_numbering_subset_operator);
input_analytical_prestress_ = std::make_unique<InputAnalyticalPrestress>(input_parameter_data,
mesh,
raw_match_dof_in_numbering_subset_operator);
InputAnalyticalPrestressFiber* raw_input_analytical_prestress_fiber = input_analytical_prestress_fiber_.get();
InputAnalyticalPrestress* raw_input_analytical_prestress = input_analytical_prestress_.get();
stiffness_operator_ =
std::make_unique<StiffnessOperatorType>(felt_space_highest_dimension,
......@@ -198,7 +197,7 @@ namespace HappyHeart
default_quadrature_rule_set,
GetSolid(),
GetTimeManager(),
raw_input_analytical_prestress_fiber);
raw_input_analytical_prestress);
following_pressure_operator_ =
std::make_unique<GVO::FollowingPressure>(felt_space_surface_pressure,
......@@ -460,10 +459,7 @@ namespace HappyHeart
auto& system_solution = GetNonCstSystemSolution(displacement_numbering_subset);
const auto& velocity_previous_time_iteration = GetVectorVelocityPreviousTimeIteration();
// #782 hardcoded.
const double interpolation = 1.;
Wrappers::Petsc::AXPY(interpolation * GetTimeManager().GetTimeStep(), velocity_previous_time_iteration, system_solution, __FILE__, __LINE__);
Wrappers::Petsc::AXPY(GetTimeManager().GetTimeStep(), velocity_previous_time_iteration, system_solution, __FILE__, __LINE__);
system_solution.UpdateGhosts(__FILE__, __LINE__);
}
......@@ -828,7 +824,7 @@ namespace HappyHeart
void VariationalFormulation::VerifyTangent(GlobalVector& rhs)
{
// Verify if the tangent is quadratique.
// Verify if the tangent is quadratic.
const double rhs_norm_iter = rhs.Norm(NORM_2, __FILE__, __LINE__);
if (GetSnes().GetSnesIteration(__FILE__, __LINE__) == 0)
......@@ -840,7 +836,7 @@ namespace HappyHeart
{
if (rhs_norm_iter > rhs_norm_previous_iter_*rhs_norm_previous_iter_)
{
tangent_non_quadratique_ = true;
tangent_not_quadratic_ = true;
Wrappers::Petsc::PrintMessageOnFirstProcessor("\n===========================================\n",
MpiHappyHeart(),
......@@ -865,14 +861,14 @@ namespace HappyHeart
rhs_norm_previous_iter_ = rhs_norm_iter;
}
void VariationalFormulation::WasTangentQuadratique()
void VariationalFormulation::WasTangentQuadratic()
{
if (tangent_non_quadratique_)
if (tangent_not_quadratic_)
{
Wrappers::Petsc::PrintMessageOnFirstProcessor("\n===========================================\n",
MpiHappyHeart(),
__FILE__, __LINE__);
Wrappers::Petsc::PrintMessageOnFirstProcessor("[WARNING] At one or more iteration the tangent was not quadratique.\n",
Wrappers::Petsc::PrintMessageOnFirstProcessor("[WARNING] At one or more iteration the tangent was not quadratic.\n",
MpiHappyHeart(),
__FILE__, __LINE__);
Wrappers::Petsc::PrintMessageOnFirstProcessor("===========================================\n\n",
......@@ -882,7 +878,7 @@ namespace HappyHeart
}
} // namespace CardiacMechanicsNS
} // namespace CardiacMechanicsPrestressNS
} // namespace HappyHeart
......@@ -8,8 +8,8 @@
// Copyright © 2016 Inria. All rights reserved.
//
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_VARIATIONAL_FORMULATION_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_UNDER_DEVELOPMENT_x_CARDIAC_MECHANICS_x_VARIATIONAL_FORMULATION_HPP_
#ifndef HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_VARIATIONAL_FORMULATION_HPP_
# define HAPPY_HEART_x_MODEL_INSTANCES_x_CARDIAC_MECHANICS_PRESTRESS_x_VARIATIONAL_FORMULATION_HPP_
# include <memory>
# include <vector>
......@@ -22,20 +22,16 @@
# include "Parameters/Instances/Private/Configuration.hpp"
# include "Operators/GlobalVariationalOperatorInstances/LinearForm/TransientSource.hpp"
# include "Operators/GlobalVariationalOperatorInstances/BilinearForm/Mass.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/FollowingPressure.hpp"
# include "Operators/GlobalVariationalOperatorInstances/BilinearForm/GradOnGradientBasedElasticityTensor.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/HyperelasticityPolicy/HyperelasticLaws/CiarletGeymonat.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/HyperelasticityPolicy/None.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ViscoelasticityPolicy/None.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ViscoelasticityPolicy/Viscoelasticity.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ActiveStressPolicy/None.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ActiveStressPolicy/AnalyticalPrestressFiber.hpp"
# include "Operators/GlobalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ActiveStressPolicy/AnalyticalPrestress.hpp"
# include "Operators/LocalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/Private/Helper.hpp"
......@@ -44,18 +40,18 @@
# include "Operators/Miscellaneous/FindCoordsOfGlobalVector.hpp"
# include "Operators/Miscellaneous/MatchDofInNumberingSubset.hpp"
# include "Operators/LocalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ActiveStressPolicy/InputAnalyticalPrestressFiber.hpp"
# include "Operators/LocalVariationalOperatorInstances/NonlinearForm/SecondPiolaKirchhoffStressTensor/ActiveStressPolicy/InputAnalyticalPrestress.hpp"
# include "FormulationSolver/VariationalFormulation.hpp"
# include "ModelInstances/UnderDevelopment/CardiacMechanics/InputParameterList.hpp"
# include "ModelInstances/CardiacMechanicsPrestress/InputParameterList.hpp"
namespace HappyHeart
{
namespace CardiacMechanicsNS
namespace CardiacMechanicsPrestressNS
{
......@@ -81,24 +77,24 @@ namespace HappyHeart
//! Friendship to parent class, so this one can access private methods defined below through CRTP.
friend parent;
//!
//! Alias to the hyperelasticity law used.
using HyperelasticityLaw =
GlobalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::HyperelasticLawNS::CiarletGeymonat;
//!
//! Alias to the viscoelasticity policy used.
using ViscoelasticityPolicy =
GlobalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::ViscoelasticityPolicyNS::Viscoelasticity;
//!
//! Alias to the active stress policy used.
using ActiveStressPolicy =
GlobalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::ActiveStressPolicyNS::AnalyticalPrestressFiber<EnumUnderlyingType(FiberIndex::fiber)>;
GlobalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::ActiveStressPolicyNS::AnalyticalPrestress<EnumUnderlyingType(FiberIndex::fiber)>;
//!
//! Alias to the stiffness operator type used.
using StiffnessOperatorType =
GlobalVariationalOperatorNS::SecondPiolaKirchhoffStressTensor<HyperelasticityLaw, ViscoelasticityPolicy, ActiveStressPolicy>;
//!
using InputAnalyticalPrestressFiber = LocalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::ActiveStressPolicyNS::InputAnalyticalPrestressFiber;
//! Alias to the type of the input for the active stress policy.
using InputAnalyticalPrestress = LocalVariationalOperatorNS::SecondPiolaKirchhoffStressTensorNS::ActiveStressPolicyNS::InputAnalyticalPrestress;
public:
......@@ -158,8 +154,8 @@ namespace HappyHeart
//! Compute the Energy of the system at each time step.
void ComputeEnergy();
//! Indicates at the end of the simulation if the tangent was quadratique.
void WasTangentQuadratique();
//! Indicates at the end of the simulation if the tangent was quadratic.
void WasTangentQuadratic();
private:
......@@ -302,7 +298,7 @@ namespace HappyHeart
//! Compute the guess for next time step with the new velocity.
void ComputeGuessForNextTimeStep();
//! Verify if the tangent is quadratique.
//! Verify if the tangent is quadratic between two iterations.
void VerifyTangent(GlobalVector& rhs);
//! Compute the apex elevation.
......@@ -427,18 +423,18 @@ namespace HappyHeart
private:
//!
//! Constant access to the file in which the energy is printed at each time step.
const std::string& GetEnergyFile() const noexcept;
private:
//!
//! Constant access to heart_beat_duration_.
double GetHeartBeatDuration() const noexcept;
//!
//! Constant access to apex_elevation_.
double GetApexElevation() const noexcept;
//!
//! Constant access to velocity_.
double GetVelocity() const noexcept;
private:
......@@ -456,11 +452,11 @@ namespace HappyHeart
*
* \internal <b><tt>[internal]</tt></b> This accessor should not be used except in the Snes::Function() method: the point is to
* store the value given by Petsc internal Newton algorithm.
* Its value should be modified only through the call if \a UpdateEvaluationState().
* Its value should be modified only through the call if \a UpdateDisplacementAtNewtonIteration().
*/
GlobalVector& GetNonCstVectorDisplacementAtNewtonIteration() noexcept;
//!
//! Constant access to the current displacement at newton iteration.
const GlobalVector& GetVectorDisplacementAtNewtonIteration() const noexcept;