Incremental Driver in Put
Incremental Driver in Put
A.Niemunis
1 Introduction
The purpose of the IncrementalDriver is the simulation of various element tests by calling a constitutive routine umat
in a series of time increments. In this way the constitutive routine can be tested under debugger before being used in the
commercial FE program Abaqus R . The subroutine umat obtains the current state of a material and a strain increment
∆. It uses this information to update the state, i.e. to find stress Tt+∆t = f(∆, Tt . . . ) and other state variables after the
increment. The umat is an independent piece of software usually written in Fortran 90. It should be available as a source
code1 to be compiled and linked with IncrementalDriver . The routine umat should be written strictly according to
Abaqus R standard described in Abaqus R User Subroutines Reference Manual 1.1.40. A new constitutive model can be
written as umat and be tested with the help of IncrementalDriver . Although a very simple linear elastic constitutive
model is delivered with the IncrementalDriver as a separate file umat , this file should be replaced by the constitutive
model of interest, of course.
Given all state variables statev and a strain increment dstran = ∆, umat calculates internally a stress increment ∆T =
f(∆, . . . ) and adds it to the stress Tt+∆t = Tt + ∆T. Also the state variables from statev should be updated according
to their evolution equations. Moreover, umat should return the stiffness, i.e. the Jacobian matrix (∂T/∂). This stiffness
is used in IncrementalDriver if a stress path or a mixed path is prescribed, Section 4. IncrementalDriver can
apply series of increments obtained from a time-discretization of a prescribed strain path (t). In each increment Incre-
mentalDriver invokes umat . However, IncrementalDriver can also follow stress paths T(t) or mixed paths calling
umat possibly many times within a single increment in an iterative process. This procedure is similar to the equilibrium
iteration in the FEM: strain increments are adjusted to satisfy a condition formulated in stress. The prescribed compo-
nents of strain increment or strain increment are termed the load and the calculated (remaining) increments are called
the response of the material.
After the compilation the resulting program incrementalDriver.exe can be executed, usually in DOS window. The
program needs three input files and it produces a single output file. The name of the output file should be specified in
the input file test.inp
initialConditions.inp
incrementalDriver.exe
parameters.inp −→ outputfile.out
test.inp
The above names of the files are default. They can be overridden by the command-line parameters. The example below
keeps the default names of input but redirects the output to x.out
incrementalDriver test=test.inp param=parameters.inp ini=initialconditions.inp out=x.out verbose=true
1
restricts the screen output during calculation. All command-line parameters of incrementalDriver are optional.
verbose=false
They may appear in any order. Spaces are treated as separators between the arguments. Spaces must not appear at =.
For all input files: test.inp, parameters.inp and initialconditions.inp the following rules apply:
• No empty lines and no comment lines;
• The end-of-line comments should start with #. Insert some spaces (say 10) between input strings and #.
• Input integers must not have a decimal point;
• Strings in input must not have apostrophes. They should start from the first column (no preceding spaces).
• The asterisk is the first character of each keyword. The capital letters are important in the keywords.
• Only spaces can be used as separators of data in a single line (no commas or semicolons)
If the character # is encoutered then the portion before # is interpreted as the name of the output file and the portion after
# is copied into the output file as heading2 . The output file name is obligatory and there is no default. The output file
name read from test.inp can be overridden by anyName.out in the command line if the argument out=anyName.out appears
in the command line invoking incrementalDriver. This may be useful for writing scripts. The heading (i.e. the text after
#) cannot be overridden.
The subsequent commands in test.inp describe sequences if increments that follow the desired path, i.e. each command
followed by parameters describes a steps (understood as in Abaqus R ) usually consisting of many increments.
2 For Easyplot I use output.ep # /td "nnnnnnnnyxnnnnn" in order to indicate which column should be plotted
2
4.1 A general description of step
Each step begins with a keyword like *LinearLoad, *Deformationgradient, *ImportFile etc. The second line is com-
mon for all steps. It contains the number of increments ninc, the desired number of equilibrium iterations maxiter and
the total time increment of the step (the time increment is deltaTime / ninc ). If you calculate thousands of increments
you can optionally suppress the output using the integer parameter every, after the colon. For example
∗LinearLoad
10000 10 5 0 0 . 0 : 100
...
applies 10000 increments with 10 iterations with the time increment of 0.05 and every 100th state will be written to the
output file. If the colon is absent then every = 1 is assumed, i.e. time, stress, strain and all state variables will be
printed after each increment.
The third line describes the type of components and can be *Cartesian, *Roscoe, RoscoeIsomorph etc. The next six
lines prescribe the components of stress or strain incremens. In very popular steps like TriaxialE1 or OedometricS1 the
type of components is not used and the description of loading is abbreviated.
The prescribed components deltaLoad of ”generalized load” and time interval deltaTime pertain to the whole step and
need to be apportioned to individual increments, usually dividing deltaLoad by ninc. Depending on the flag ifstress(i)
the respective (i-th) component of prescribed strain or stress increment is prescribed as ddstress(i) = deltaLoad/ninc
or strain increment dstran(i) = deltaLoad/ninc.
The required number of iterations maxiter is defined a priori and kept constant for all increments in a given step.
The time interval for a given step may be of importance for example in rate dependent constitutive models. The load
components may be defined using different components of stress and strain (work - conjugated)
• *Cartesian T11 , T22 , T33 , T12 , T13 , T23 and 11 , 22 , 33 , 12 , 13 , 23
• *Roscoe p, q, z, T12 , T13 , T23 and v , q , z , 12 , 13 , 23
• *RoscoeIsomorph P, Q, Z, T12 , T13 , T23 and P , Q , Z , 12 , 13 , 23
√ √
• *Rendulic T11 , 2T22 , Z, T12 , T13 , T23 and 11 , 222 , Z , 12 , 13 , 23
with:
p = −(T11 + T22 + T33 )/3, q = −(T11 − 12 T22 − 21 T33 ), z = −(T22 − T33 )
v = −(11 + 22 + 33 ), q = − 32 (11 − 21 22 − 12 33 ), z = −(22 − 33 )/2,
√ q √
P = −(T11 + T22 + T33 )/ 3 , Q = − 23 (T11 − 21 T22 − 12 T33 ), Z = −(T22 − T33 )/ 2,
√ q √
P = −(11 + 22 + 33 )/ 3, Q = − 23 (11 − 21 22 − 12 33 ), Z = −(22 − 33 )// 2
The change within
Pn theHstep of the Hencky strain = ln U is applied in ninc equal increments ∆. In a 1D we would have
= ln H
H0
n
= i=1 ln i
Hi−1 so equal strain increments ln HHi−1
i
= const do not imply equal increments of displacement.
3
In the current version of the program there is no convergence criterion. The fixed number maxiter of
equilibrium iterations is carried out irrespectively of the convergence. After the last equilibrium iteration the
next load increment is applied, no matter whether the previous iteration was successful (small out of balance
stress) or not. Controlling stress components we should carefully compare the desired stress path with the one
actually applied to the material.
The loading prescribed in test.inp may demand a stress increment which cannot be achieved by the material (e.g.
going outside the yield surface despite softening). In this case the equilibrium iteration in IncrementalDriver
cannot achieve the required state. The calculation will not be interrupted, however. Insufficient accuracy within
the stress controlled regime may also be caused by too small number maxiter of iterations. The number of
equilibrium iterations should be increased for inaccurate Jacobian matrices in umat and for large increments.
Equal increments of displacement can be also imposed by *DeformationGradient, for example:
∗DeformationGradient
n i n c m a x i t e r d e l t a T i m e : e v e r y ! number o f i n c , max . number o f E I , s t e p t i m e i n t e r v a l and s u p p r e s s e d o u t p u t
deltaLoad (1) ! i f s t r e s s f l a g i s a u t o m a t i c a l l y 0 (= s t r a i n −l i k e ) and t h e a x e s a r e ∗Cartesian
deltaLoad (2)
...
deltaLoad (9)
This example defines nine components of the deformation gradient {F11 , F22 , F33 F12 , F21 , F13 , F31 , F23 , F32 } between the
the beginning of the step and the end of the step. The ninc equal increments are calculated with ∆F = n1 (F − 1) They
all take the configuration at the beginning of the step as the reference.
Optionally a column can be multiplied by a numerical ImportFactor. For example, if the imported file contains strains
in [%] in the first column you should read them into the IncrementalDriver with the line:
0 1 * 0.01
Similarly, if the imported file contains geotechnical stress in the second column you should read it with the line:
1 2 * -1 but not 1 2 * (-1)
The column with time can be also scaled by an ImportFactor. You must always give the name of an external file and
the number of columns to be read (there are no defaults). If the number if increments ninc is smaller than the number
of lines in the followMe.inp file then only a part of the path from the file will be executed. If ninc is larger than the
length of followMe.inp then the end-of-file will be encountered. In this case IncrementalDriver ends the step and
continue with the next step.
Hence you need not count the lines but be sure that each line begins with ncols numbers which can be input as
read(1 ,*) real(8), real(8) ... in fortran If deltaTime is positive in the second line of *ImportFile then it will be
set equal in all increment. If deltaTime is negative you must specify the column in the external file corresponding to the
7-th component of loading: the time.
4
∗CirculatingLoad
ninc maxiter deltaTime : every ! number o f i n c r . , max . number o f EI and s t e p t i m e and s u p p r e s s e d o u t p u t
∗Cartesian ! a l t e r n a t i v e s here : ∗Roscoe, ∗RoscoeIsomorph, ∗Rendulic
i f s t r e s s ( 1 ) d e l t a L o a d C i r c ( 1 ) p h a s e 0 ( 1 ) d e l t a L o a d ( 1 ) ! 1/0 F l a g , a m p l i t u d e A 1 , p h a s e w0 1 and s u p e r p o s e d l i n l o a d B 1
i f s t r e s s ( 2 ) deltaLoadCirc ( 2 ) phase0 ( 2 ) deltaLoad ( 2 )
...
i f s t r e s s ( 6 ) deltaLoadCirc ( 6 ) phase0 ( 6 ) deltaLoad ( 6 )
wherein ∆Li denotes either the increment of stress ddstress(i) or the increment of strain dstran(i), depending on the
value of ifstress(i) for the i-th component. Other variables are
deltaTime = the period T so that ω̇ = 2*Pi/deltaTime
∆t = dtime = deltaTime/ninc
Ai = deltaLoadCirc(i) = amplitude
Bi =deltaLoad(i)/ninc = linear shift
t = time(1) + dtime/2 ! step time in the middle of the increment
(0)
ωi = phase0(i)
The change of i-th stress component within the step is denoted as sdi. The change of j-th strain component within the
step is denoted as edj. All restrictions have the formal structure
Mt · ∆T + Me · ∆ = m , (2)
t
whereinPall components
P of M , Me and m are known. The k-th restriction with k = 1, . . . 6 should be input as a separate
t e
line : Mki sdi + Mkj edj = mk with sum over complementary indices i, j from 1 to 6. The parsing abilities of
i j6=i
IncrementalDriver are very limited. Here are the formal rules:
a. The input line cannot be longer than 120 characters.
b. No brackets (), no exponents ** or divisions / may appear.
c. An index number at components sd1,sd2,sd3,sd4,sd5,sd6,ed1,ed2,ed3,ed4,ed5,ed6 may appear at most once in
a restriction (at a strain or at a stress increment), i.e. one cannot write sd1 + sd1 = 0.0d0. Lower case is obligatory
for sd and ed.
d. Each component constitutes a summand and can be preceded by a single factor, e.g. 9.0d-4*sd1 but not 3*3.0d-4*sd1 and
not sd1*3.14. Summands without stress or strain components must be delegated to the RHS, i.e. sd1 + 1.0 + sd2 = 5.0
should be rewritten as sd1 + sd2 = 4.0 .
e. Only numerical coefficients are allowed. You should write 4.0 *sd1 = 1.0 instead of two lines t = 4 and t*sd1 = 1.0.
f. In all multiplications the asterisk * is obligatory. For example you should write 3.0*sd3 = 2.0 and not 3.0 sd3 = 2.0..
g. The summands are separated by + or -.
5
h. All spaces are ignored (spaces inside numbers cause errors, of course).
i. There must be just a single constant value in each restriction and it must appear on the right-hand side of the restriction.
The constant can be preceded by - but not by +. No multiplications like 3.0*4.0 are allowed for.
The end-of-line comments must begin with !. Exactly 6 lines with restrictions must be input.
For 1000 undrained triaxial stress cycles with the Amplitude q ampl = 10 kPa and with 1Hz we can write:
a saw-like version with *LinearLoad or a harmonic version or a saw-like with predefined shearing
*LinearLoad ∗Repetition ∗TriaxialUq
10 10 0.25 1 1000 10 10 1 . 0
*Roscoe ∗CirculatingLoad 10.0
0 0 40 10 1.0 ∗Repetition
1 10 ∗Roscoe 2 1000
0 0 0 0 0 0 ∗TriaxialUq
0 0 1 10 0 0 20 10 0.5
0 0 0 0 0 0 −20.0
0 0 0 0 0 0 ∗TriaxialUq
*Repetition 0 0 0 0 20 10 0.5
2 1000 0 0 0 0 20.0
*LinearLoad ∗TriaxialUq
20 10 0.5 10 10 0.2
*Roscoe −10
0 0
1 -20
0 0
0 0
0 0
0 0
*LinearLoad
20 10 0.5
*Roscoe
0 0
1 20
0 0
0 0
0 0
0 0
*LinearLoad
10 10 0.25
*Roscoe
0 0
1 -10
...
6
4.8 Predefined popular paths
Several short step descriptions have been predefined in incrementalDriver for convenience of geotechnical users. They
are: *OedometricE1, *OedometricS1, *TriaxialE1, *TriaxialS1, *TriaxialUEq, *TriaxialUq, *PureRelaxation,
*PureCreep, *UndrainedCreep
These paths define the principal stresses / strains assuming x1 -axial symmetry of the applied components. The material
response depends on umat and it need not be axisymmetric, of course. The shear components of strain are prescribed as
constant
∗OedometricE1
n i n c m a x i t e r dtime : every
ddstran (1) // l a t e r a l s t r a i n i s assumed c o n s t a n t
∗OedometricS1
n i n c m a x i t e r dtime : e v e r y
ddstress (1) // l a t e r a l s t r a i n i s assumed c o n s t a n t
∗TriaxialE1
ninc maxiter dtime : e v e r y
ddstran (1) // l a t e r a l s t r e s s i s assumed c o n s t a n t
∗TriaxialS1
n i n c m a x i t e r dtime : e v e r y
ddstress (1) // l a t e r a l s t r e s s i s assumed c o n s t a n t
∗TriaxialUEq
ninc m a x i t e r dtime : e v e r y
ddstran (2) // volume = c o n s t a n t , Roscoe ’ s D e l t a e p s i l o n q is applied
∗TriaxialUq
ninc maxiter dtime : e v e r y
ddstress (2) // volume = c o n s t , Roscoe ’ s D e l t a q i s applied
∗PureRelaxation
ninc maxiter dtime : e v e r y
∗PureCreep
ninc m a x i t e r dtime : e v e r y
∗End // can be u s e d t o t e r m i n a t e t h e c a l c u l a t i o n
The exit condition is optional, so the old input files should work fine with the new version. The exit condition must be
written in the same line as the description of step after the separator ? and the whole line must not exceed 40 columns.
You can use addition and multiplication, but both on the left-hand side of the inequality only. The right-hand side must
be a single number. Parsing rules from Section 4.5 apply. No end-of-line comments and no = character may appear (sharp
inequalities only).
Only the following variables can be used in the exit condition:
s1,s2,s3 for principal stress components (tension negative) T1 , T2 , T3
e1,e2,e3,e3 for principal strain components (tension negative)1 , 2 , 3
p,q,P,Q for geotechnical stress invariants
ev,eq,eP,eQ for geotechnical strain invariants.
v1,v2,...v9 for state variables (just the first nine have been implemented)
q,Q,eq,eQ deviatoric invariants are signed, e.g. q = −(T1 − T3 ) assuming triax. symmetry T2 = T3
7
6 End
In order to terminate calculations the command *End can be used. Commands behind *End will not be executed.