Skip to content

Triaxial Test - Consolidated Drained Cyclic Loading using the HCA Model

Finite Element (FE) representation

For the simulation of consolidated drained (CD) cyclic triaxial test using the HCA model we perform a so-called ''single-element-simulation'' and by doing so enforce element test assumptions, i.e. a homogeneous distribution of stress/strain within the test sample. A schematic of the FE representation of the CD test is given below.

triaxCD

In a first initial step, the initial conditions are applied, i.e. initial stress (\(\sigma_1^0, \sigma_2^0\)), initial void ratio \(e_0\) or any other initial state variable required by the constitutive model.

Two different cases are then simulated:

  • Case 1): The strain amplitude \(\varepsilon^{ampl}\) is prescribed as initial condition without explicitly calculating it. In the second HCA step, the accumulation of deformations due to \(10^6\) cycles are simulated using the HCA model with a given strain amplitude of \(\varepsilon^{ampl}=8 \cdot 10^{-4}\).

  • Case 2): The strain amplitude is calculated by simulating an individual cycle and recording the strain path. The hypoplastic model with intergranular strain extension is used to simulate two individual cycles (of which the second is used to calculate the strain amplitude). The HCA phase follows in the fourth step.

Constitutive model

The HCA model is used in combination with the hypoplastic model with intergranular strain extension for this example. The parameters for "Karlsruhe fine sand" for the HCA model are used and provided in the Table below.

\(C_{\textrm{ampl}}\) \(C_{e}\) \(C_{p}\) \(C_{Y}\) \(C_{N1}\) \(C_{N2}\) \(C_{N3}\)
1.33 0.60 0.23 1.68 2.95\(\cdot10^{-4}\) 0.41 \(1.9 \cdot 10^{-5}\)

Model generation

As single-element simulations do not involve complex geometries, we do not use a pre-processor and generate the input file by hand.

  • First we create the four nodes defining the finite element:

    *Node
    1, 0.0 , 0.00
    2, 0.05, 0.00
    3, 0.05, 0.1
    4, 0.00, 0.10
    

  • We use an axisymmetric four node solid element (only one phase considered)

    *Element, type = U4-solid-ax-red
    1, 1, 2, 3, 4
    

  • Next, we define some node and element sets for the assignment of boundary conditions, loads and material parameters:

    *Nset, Nset = nall
    1, 2, 3, 4
    *Nset, Nset = nleft
    1, 4
    *Nset, Nset = nright
    2 , 3
    *Nset, Nset = nbottom
    1 , 2
    *Nset, Nset = ntop
    3 , 4
    *Elset, Elset=eall
    1
    

  • In order to assign the material to the element, we first create a solid section. The material name linked to this solid section is arbitrary but must be specified in a later step.

    *Solid Section, elset = eall, material = soil
    

Sample numgeo input file using the strain amplitude from the experiment as input

In the first example, the strain amplitude is not calculated by a conventional constitutive model, but a measured amplitude from an experiment is used. This is typically the case if the simulations are performed to calibrate or check the parameters of the HCA model.

  • Define the material: In addition to the material parameters, the HCA model requires the declaration of the step types. The first step is a low-cycle ("implicit") step. The actual HCA phase is performed in step HCA. The period of the cycles is 1.

    *Material, name = soil, phases = 1
    
    *Mechanical = HCA_Linear_Elasticity
    5000.0,0.32
    ** Parameters of Karlsruhe fine sand
    **CN1, CN2, CN3, Campl, Ce, 0, Cp2, 0
    **Cy2, Cpi1, Cpi2, Cpi3, patm, eref, eps^ampl_ref, A
    **a, n, nu, phic
    0.000295,0.41,1.9e-05,1.33,0.6,0,0.23,0,
    1.68,0,0,0,100.0,1.054,0.0001,1209,
    1.63,0.5,0.32,0.578
    
    *Density
    2.65
    
    *Implicit hca steps
    Geostatic
    *Explicit hca steps
    HCA
    *HCA cycle time
    1
    

  • Define the initial conditions of the simulation. In the present case this comprises the definition of the initial (effective) stresses, the initial void ratio and the strain amplitude. A value of \(\varepsilon^{ampl}=8 \cdot 10^{-4}\) is set.

    *Initial conditions, type=stress, geostatic
    eall, 0.0, -150.0,  0.10, -150.0, 1.0, 1.0
    
    *Initial conditions, Type = state variables
    ** Initial relative density of 80 %
    eall, void_ratio, 0.818
    eall, strain_ampl, 8d-4
    

  • As in most simulations in geotechnical engineering we start the simulation by initializing the geostatic stress field due to the self weight of the soil and any initial external loading without generating any deformations. In the present case, the initial stress field is solely given by the external load of 150 kPa acting isotropically on the sample. Since this is a very basic simulation, we do not request a field output but rely solely on the print output for evaluating the simulation results.

    *Step, name = Geostatic
    *Geostatic
    
    *Body force, instant
    eall, grav, 10.0, 0., -1, 0.
    *Dload, instant
    eall, p3, -150
    *Dload, instant
    eall, p2, -150
    *Boundary
    nleft, u1, 0.
    nbottom, u2, 0.
    
    *End Step
    

  • In the second step, \(10^6\) cycles are simulated using the HCA model. The initial increment is 0.2, the total step time is \(10^6\), the minimum allowed increment is 0.0001 and the maximum increment is \(10^4\). Note that time does not correspond to physical time in a static step but corresponds in the present case to the number of cycles being simulated. The static analysis type indicates that no inertia forces (and therefore no physical time dependencies) are considered. During the analyses, the average stresses are kept constant. The soil sample is free to settle and deform radially.

    ** ----------------------------------------
    
    *Step, name = HCA, inc = 10000000
    *Static
    0.2, 1d6, 0.0001,1d4
    
    *Body force, instant
    eall, grav, 10.0, 0., -1, 0.
    *Dload, instant
    eall, p3, -150
    *Dload, instant
    eall, p2, -150
    *Boundary
    nleft, u1, 0.
    nbottom, u2, 0.
    
    *output,print
    *Element output, Elset = eall
    S, E, void_ratio, strain_ampl
    *End Step
    

  • We end the input file by using the "End Step" command.

    *End Input
    

Results

The accumulated permanent axial strain versus number of load cycles is given in Figure 2.

triaxCDHCAinput

Python Script for plotting the results

The python script used to generate Figure 2 is given below:

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
from pylab import genfromtxt
from matplotlib import rc
import os 
import numpy as np
dir_path = os.path.dirname(os.path.realpath(__file__))
plt.rcParams['backend'] = "pdf"
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['text.usetex'] = True
plt.rcParams['font.size'] = 12
plt.rcParams['axes.spines.right'] = False
plt.rcParams['axes.spines.top'] = False
plt.rcParams['axes.linewidth'] = 0.8 


#=============================================================================
# Read data
#%% =============================================================================


dirname = '/step-print-out'

dir_path = os.path.normpath(os.getcwd() +dirname)

sim1 = genfromtxt(dir_path+'/'+'EALL_element_1.dat',skip_header=2)

#=============================================================================
# Plot first data
#%% =============================================================================
plt.figure(1)
plt.subplot(111)

plt.semilogx(sim1[:,0]-sim1[0,0],sim1[:,7]*100,'or-', \
         markersize=4,markerfacecolor='none',markevery=20,\
         label=r'Simulation',clip_on=True)

ax = plt.gca()
ax.set_xlabel(r'Number of  cycles [-]')
ax.set_ylabel(r'Accumulated axial strain [\%]',labelpad=7)

plt.tight_layout() 
fig = plt.gcf()  
fig.savefig('accumulated_permanent_strain_drained_input_epsampl.pdf', dpi=600 , bbox_inches='tight')
fig.savefig('accumulated_permanent_strain_drained_input_epsampl.png', dpi=600 , bbox_inches='tight')

Sample numgeo input file calculating the strain amplitude with a conventional model

In the second example, the strain amplitude is calculated by a conventional constitutive model, the hypoplastic model with intergranular strain extension in the present case. Having to calculate the strain amplitude is the case for a typical boundary value problem.

Only the required modifications of the first example are explained in the following. The rest of the input file remains identical.

  • The first two steps are low-cycle ("implicit") steps. The sinusoidal load is applied in FirstCycle and in SecCycle, whereby the strain curve is recorded for the latter. The actual HCA phase is performed in the step named HCA. The period of the cycles is 1.

    *Material, name = soil, phases = 1
    
    ** Parameters of Karlsruhe fine sand
    *mechanical = HCA_Hypoplasticity
    **phi, nu, hS, n, ed0, ec0, ei0, alpha
    **beta, mT, mR, R, betaR, chi, Kw
    0.577, 0.0, 4d6, 0.27, 0.677, 1.054, 1.15, 0.14
    2.5, 1.2, 2.4, 1d-4, 0.1, 6.0 , 0.
    *******
    **CN1, CN2, CN3, Campl, Ce, 0, Cp2, 0
    **Cy2, Cpi1, Cpi2, Cpi3, patm, eref, eps^ampl_ref, A
    **a, n, nu, phic
    0.000295, 0.41, 0.000019, 1.33, 0.6, 0, 0.23, 0
    1.68, 0, 0, 0, 100, 1.054, 0.0001, 1209
    1.63, 0.5, 0.32, 0.577
    
    *Density
    2.65
    
    *Implicit hca steps
    Geostatic, FirstCycle
    *Recording hca steps
    SecCycle
    *Explicit hca steps
    HCA
    *HCA cycle time
    1
    

  • To apply cyclic loading, a sinusoidal amplitude with a frequency of 1 Hz is defined in addition.

    *Amplitude, name = sine1Hz, Type=periodic
    1, 0.0, 0.0, 6.283
    0.0, 1.0
    

  • In the second and third step, one individual cycle is simulated in each step. The steps are defined identical.

    *Step, name = FirstCycle, inc = 10000000
    *Static
    0.02, 1, 0.0001, 0.02
    
    *Body force, instant
    eall, grav, 10.0, 0., -1, 0.
    *Dload, instant
    eall, p3, -150
    *Dload, instant
    eall, p2, -150
    
    *Dload, amplitude=sine1Hz
    eall, P3, -60
    
    *Boundary
    nleft, u1, 0.
    nbottom, u2, 0.
    
    *output,print
    *Element output, Elset = eall
    S, E, void_ratio, strain_ampl
    *End Step
    
    ** ----------------------------------------
    
    *Step, name = SecCycle, inc = 10000000
    *Static
    0.02, 1, 0.0001, 0.02
    
    *Body force, instant
    eall, grav, 10.0, 0., -1, 0.
    *Dload, instant
    eall, p3, -150
    *Dload, instant
    eall, p2, -150
    
    *Dload, amplitude=sine1Hz
    eall, P3, -60
    
    *Boundary
    nleft, u1, 0.
    nbottom, u2, 0.
    
    *output,print
    *Element output, Elset = eall
    S, E, void_ratio, strain_ampl
    *End Step
    

The HCA step remains unchanged.

Results

The accumulated permanent axial strain versus number of load cycles is given in Figure 3. The simulated individual cycles are well visible. The strain amplitude calculated using the hypoplastic model with intergranular strain extension is approximately \(\varepsilon^{ampl}=5.6 \cdot 10^{-4}\) (see the print output), which is slightly lower than in the first example and results in less accumulated strain during the HCA phase.

triaxCDHCAcalculated

Complete input file for a predefined strain amplitude

The complete input file is given below.

**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=
**                                  numgeo                                    
**             Copyright (C) 2024 Jan Machacek, Patrick Staubach              
**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=

**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=
**
**
** For this simple problem we do not need to define any parts or sections
**
**
*Node
1, 0.0 , 0.00
2, 0.05, 0.00
3, 0.05, 0.1
4, 0.00, 0.10

*Nset, Nset=nall
1, 2, 3, 4, 5
*Nset, Nset=nleft
1, 4
*Nset, Nset=nright
2 , 3
*Nset, Nset=nbottom
1 , 2
*Nset, Nset=ntop
3 , 4

*Element, type = U4-solid-ax-red
1, 1, 2, 3, 4

*Elset, Elset=eall
1

** ----------------------------------------

*Solid Section, Elset = eall, material=soil

** ----------------------------------------

*Material, name = soil, phases = 1

*Mechanical = HCA_Linear_Elasticity
5000.0,0.32
** Parameters of Karlsruhe fine sand
0.000295,0.41,1.9e-05,1.33,0.6,0,0.23,0,
1.68,0,0,0,100.0,1.054,0.0001,1209,
1.63,0.5,0.32,0.578

*Density
2.65


*Implicit hca steps
Geostatic
*Explicit hca steps
HCA
*HCA cycle time
1

** ----------------------------------------

*Initial conditions, type=stress, geostatic
eall, 0.0, -150.0,  0.10, -150.0, 1.0, 1.0

*Initial conditions, Type = state variables
** Initial relative density of 80 %
eall, void_ratio, 0.818
eall, strain_ampl, 8d-4

** ----------------------------------------

** ----------------------------------------

*Step, name = Geostatic
*Geostatic

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150
*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*End Step

** ----------------------------------------

*Step, name = HCA, inc = 10000000
*Static
0.2, 1d6, 0.0001,1d4

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150
*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*output,print
*Element output, Elset = eall
S, E, void_ratio, strain_ampl, strain_acc, cyclic_history, fampl, fe, fp, fY
*End Step

** ----------------------------------------

*End Input

Complete input file calculating the strain amplitude

The complete input file is given below.

**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=
**                                  numgeo                                    
**             Copyright (C) 2024 Jan Machacek, Patrick Staubach              
**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=

**=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=~~=
**
**
** For this simple problem we do not need to define any parts or sections
**
**
*Node
1, 0.0 , 0.00
2, 0.05, 0.00
3, 0.05, 0.1
4, 0.00, 0.10

*Nset, Nset=nall
1, 2, 3, 4
*Nset, Nset=nleft
1, 4
*Nset, Nset=nright
2 , 3
*Nset, Nset=nbottom
1 , 2
*Nset, Nset=ntop
3 , 4

*Element, type = U4-solid-ax-red
1, 1, 2, 3, 4

*Elset, Elset=eall
1

** ----------------------------------------

*Solid Section, Elset = eall, material=soil

** ----------------------------------------

*Material, name = soil, phases = 1

** Parameters of Karlsruhe fine sand
*mechanical = HCA_Hypoplasticity
**phi, nu, hS, n, ed0, ec0, ei0, alpha
**beta, mT, mR, R, betaR, chi, Kw
0.577, 0.0, 4d6, 0.27, 0.677, 1.054, 1.15, 0.14
2.5, 1.2, 2.4, 1d-4, 0.1, 6.0 , 0.
*******
**CN1, CN2, CN3, Campl, Ce, 0, Cp2, 0
**Cy2, Cpi1, Cpi2, Cpi3, patm, eref, eps^ampl_ref, A
**a, n, nu, phic
0.000295, 0.41, 0.000019, 1.33, 0.6, 0, 0.23, 0
1.68, 0, 0, 0, 100, 1.054, 0.0001, 1209
1.63, 0.5, 0.32, 0.577

*Density
2.65

*Implicit hca steps
Geostatic,FirstCycle
*Recording hca steps
SecCycle
*Explicit hca steps
HCA
*HCA cycle time
1

** ----------------------------------------

*Initial conditions, type=stress, geostatic
eall, 0.0, -150.0,  0.10, -150.0, 1.0, 1.0

*Initial conditions, Type = state variables
** Initial relative density of 80 %
eall, void_ratio, 0.818

** ----------------------------------------

*Amplitude, name = sine1Hz, Type=periodic
1, 0.0, 0.0, 6.283
0.0, 1.0

** ----------------------------------------

*Step, name = Geostatic
*Geostatic

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150
*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*End Step


** ----------------------------------------

*Step, name = FirstCycle, inc = 10000000
*Static
0.02, 1, 0.0001, 0.02

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150

*Dload, amplitude=sine1Hz
eall, P3, -60

*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*output,print
*Element output, Elset = eall
S, E, void_ratio, strain_ampl
*End Step

** ----------------------------------------

*Step, name = SecCycle, inc = 10000000
*Static
0.02, 1, 0.0001, 0.02

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150

*Dload, amplitude=sine1Hz
eall, P3, -60

*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*output,print
*Element output, Elset = eall
S, E, void_ratio, strain_ampl
*End Step
** ----------------------------------------

*Step, name = HCA, inc = 10000000
*Static
0.2, 1d6, 0.0001,1d4

*Body force, instant
eall, grav, 10.0, 0., -1, 0.
*Dload, instant
eall, p3, -150
*Dload, instant
eall, p2, -150
*Boundary
nleft, u1, 0.
nbottom, u2, 0.

*output,print
*Element output, Elset = eall
S, E, void_ratio, strain_ampl
*End Step

** ----------------------------------------

*End Input