Usage

MTest can also be used to model a pipe subjected to various loadings. This extension to pipes is often referred to as PTest.

By default, MTest considers a unique material point. Switching to pipe modeling can be done by either using a file with the extension .ptest or by using the command-line option --scheme=ptest.

Getting help on the command line

The following line allows displaying the list of supported keywords:

mtest --scheme=ptest --help-keywords-list

The help associated with a given keyword can be displayed using the following --help-keyword command line argument, as in the following example:

mtest --scheme=ptest --help-keyword=@RadialLoading

A simple tutorial

Overview and modeling hypotheses

Behaviours

Geometry and finite element discretization

Geometry

The geometry of the pipe is specified using the self-explanatory keywords @InnerRadius and @OuterRadius.

Finite element discretization

The finite element discretization is specified using the self-explanatory keywords @ElementType and @NumberOfElements. The following element types are supported: Linear and Quadratic. By default, quadratic elements are used.

Type of analysis

By default, simulations are done in a finite strain framework. The @PerformSmallStrainAnalysis, which is followed by a boolean, allows switching to a resolution under the infinitesimal strain hypothesis.

Radial loadings

The RadialLoading keyword let the user choose the kind of loading to be applied to the pipe in radial direction.

This keyword is followed by a string. The following loading are supported:

Note that the modeling of a mandrel may affect the axial loading once the pipe and the mandrel are in contact. Modeling of a mandrel is detailed below in a dedicated section.

Imposed inner pressure loading

Imposed outer pressure loading

Imposed inner radius loading

PTest now supports imposing the evolution of the inner radius of the pipe. In this case, PTest adds the inner pressure as an unknown and reports it in the output file.

Example of usage

The following code shows how to impose the evolution of the inner radius of the pipe:

@RadialLoading 'ImposedInnerRadius';
@InnerRadiusEvolution{0 : 4.2e-3, 1 : 4.3e-3};

Tight pipe

MTest is able to model a tight pipe, which assumes that the amount of substance of the gas inside the pipe is constant. The evolution of the inner pressure is linked to the temperature and radius evolution through the gas equation of state. By default, the equation of state of a perfect gas is used.

Specifying the gas equation of state

The equation of state of the gas can be specified using the @GasEquationOfState keyword.

This keywords expects a function \(f\paren{P,V,T}\) such that the equation of state is:

\[ f\paren{P,V,T, n}=0 \qquad{(1)}\]

where:

A first example

In this example, the equation of state of a perfect gas is specified:

@FillingPressure      1.e5;
@FillingTemperature 293.15;
@Real 'R' 8.314;
@GasEquationOfState 'P*V-n*R*T';

A second example

In this example, the equation of state of a perfect gas is specified, but one can consider a case where the gas only occupies a fraction \(\alpha\,V\) of the volume inside the pipe:

@FillingPressure      1.e5;
@FillingTemperature 293.15;
@Real 'R' 8.314;
@Real 'a' '0.8';
@GasEquationOfState 'P*a*V-n*R*T';

Axial loadings

The AxialLoading keyword let the user choose the kind of loading to be applied to the pipe in the axial direction.

This keyword is followed by a string. The following loadings are supported:

Note that the modeling of a mandrel may affect the axial loading once the pipe and the mandrel are in contact. Modeling of a mandrel is detailed below in a dedicated section.

End-cap effect

Imposed axial growth

See the @AxialGrowthEvolution for details.

Imposed axial force

See the @AxialForceEvolution for details.

Modeling a non-deformable mandrel inside the pipe

The effect of a mandrel located inside the pipe can be modelled by defining the evolution of its radius \(R_{m}\) using the @MandrelRadiusEvolution keyword. The inner radius \(R_{i}\) will then satisfy the following unilateral boundary condition:

\[ R_{i} - R_{m} \geq 0 \]

This boundary condition is imposed by using a Lagrange multiplier. Its value is given by the contact pressure in the output file. The total pressure applied to the inner surface of the pipe is given by the sum of the imposed pressure (if any) and the contact pressure. Only the imposed inner pressure is used to compute the end cap effect.

This boundary condition is not compatible with:

Axial binding

If the evolution of the axial growth of the mandrel is defined using the @MandrelAxialGrowthEvolution keyword, an axial binding between the mandrel and the pipe is assumed, i.e. the difference between the axial growth of the pipe \(\varepsilon^{p}_{zz}\) and the axial growth of the mandrel \(\varepsilon^{p}_{zz}\) is assumed to be constant to its value when the contact between the mandrel and the pipe is detected:

\[ \varepsilon^{p}_{zz}-\varepsilon^{m}_{zz}=\textrm{Cste} \]

This axial boundary condition is not compatible with the boundary condition imposing the evolution of the axial growth of the pipe.

Support for failure criteria for pipes

Failure criteria can be added to pipe modelling using the @FailureCriterion keyword. Note that no failure criterion is currently shipped with MTest.

A failure criterion is called at the end of each time step to detect failure of the pipe.

Each failure criterion adds a column to the output file giving the status of the criterion:

In case of failure, three policies can be selected using the @FailurePolicy keyword:

Example of usage

@FailurePolicy 'FreezeState';
@FailureCriterion 'ElongationAtBreak' {maximum_value : 1e-4};

Support for oxidation models for pipes

The @OxidationModel keyword introduces a model which computes an oxidation length at either the inner boundary or the outer boundary of the pipe. This keyword must be followed by a data map with the following entries:

An oxidation model must define an internal state variable named OxidationLength. The values of the material properties and external state variables passed to an oxidation model are computed on the boundary on which the model is defined.

The definition of at least one oxidation model automatically defines an evolution named OxidationStatus which states if an integration point is inside an oxidation layer.

Example of usage

@OxidationModel{
  model : 'umatm5deziroxoxidationmodel_srma2020b',
  library : 'src/libUmatM5.so',
  boundary : 'outer_boundary'
};

Post-processings

The computeIntegralValue and computeMeanValue post-processings

The computeIntegralValue and computeMeanValue post-processings allows calculating the integral and the average of a scalar value in the thickness of the pipe. Those functions allows to calculating those quantities in the current or initial configurations

Example of usage

@AdditionalOutputs {'mean_value_initial_configuration':'SRR',
                    'mean_value_current_configuration':'SRR'}; // compute mean values of SRR
@AdditionalOutputs {'integral_value_initial_configuration':'SRR',
                    'integral_value_current_configuration':'SRR'}; // compute integral values of SRR