DDLab Manuals
DDLab Manuals
DDLab Manuals
You need to have a C compiler installed on your computer to make it work. This is
ok when you use gcc-3.3. You may have difficulty compiling with higher version of
gcc.
Mobility
In DDLab, the motion of dislocation is expressed by the motion of nodes. Thus,
mobility gives the velocity. DDLab contains several mobility laws; mobfcc1.m,
mobfcc0.m, and mobbcc0.m.
Integrator
An integrator scheme is used to calculate the position of each nodes for a given
time step. The nodal forces and mobility model comprise the equation motion for
the nodes
where g_i sums up both the nodal force and the
mobility model. This is a first ordinary differential equation and we solve it by
integration. DDLab contains two numerical integrator: eulerforward.m,
newtonkrylov.m. ode15s.m, trapezoid.m. In this work, we use trapezoid.m is
used.
Topological Changes
In order to accurately represent dislocation behavir and also for numerical
efficiency, we need a way to handle topological changes, i.e. changes in the
connectivity of nodes. For example, should a line change its length and/or
curvature during the simulation, it may become necessary to adjust the number of
nodes used to represent this dislocation line. The following parameters are used
for topological changes in DDLAB.
Time controls
The following parameters are for time controls.
totalsteps : number of cycles that are run for completion of dd3d command
dt0 : largest timestep that can be taken during a cycle
Display controls
The following parameters are for display controls
Materials constants
The following parameters are Materials constants used in DDLAB.
Miscellaneous
DDLab just track all nodal positions and plot them. However, to better understand
the code structure, two flow charts are presented in this primer: subroutine map
(Fig. 2) and function map (Fig. 3). The subroutine map consists of the MATLAB
subroutine file name, but the function map consists of the function of each
subroutine file. Thus, if you want to know the code in detail, just compare the
subroutine map with the function map, then find the file you want and take a look
at. Thus, these two maps are very useful to study the code structure of DDLab. All
functions of subroutines are explained in the following section which includes
some physics for the detailed explanations.
Subroutines details
SegSegforce.c
This subroutine calculates the force on the two end nodes between two dislocation
seg- ments (so, four nodes) in Fig. 4. The sum of these four force vectors should be
zero by action-reaction principle. f1 + f2 + f3 + f4 = 0
Figure 4: The interaction between the two dislocation segments
cleanupnodes.m
This subroutine start by removing all of the bad nodes in the system and cleans up
the data structures to include good nodes only. A bad node is a point without
connection to any dislocation segment. The point is usually generated by the
shrinkage of a dislocation loop as shown in Fig. 5. At the final stage, the loop
consists of two nodes, so the line direction of two segments is opposite, but their
Burgers vector is the same. Thus, two segments should annihilate. Then, only two
nodes remains. These two nodes are only a mathematical points in elastic medium.
In real material, the loop disappears after shrinkage, so the two nodes in DDLab
has to be removed. Thus, cleanupnodes.m performs the removal of these kinds of
isolated nodes.
Note:
This is very similar with to another case (two nodes and two segments) of
collision.m. Sometimes segments are not permitted to annihilate when the sum
of Burgers vectors are not zero. However, in the case of loop shrinkage, two
segments always have the opposite direction of line sense with the same Burgers
vector. Thus, the annihilation occurs. See collision.m section.
genconnectivity.m
Figure 5 The shrinkage of a dislocation loop. we know linkid Here, nodeid is the
node number which is the row number of rn matrix. linkid is the link number which
is the row number of links matrix.
Integrator
Integrator calls drndt.m, drndt.m computes velocity and force on each node, and
force on each segment. Then, by using these values, Integrator integrates the
velocity with respect to time step. Then, we can get the nodal positions at the
current time step. The nodal forces and the mobility model comprise the equations
of motion of nodes:
where function gi sums up both the nodal force and the mobility model. This is first
ordinary differential equation (ODE), for which the simplest numerical integrator is
the so- called Euler forward method:
ri(t + t) = ri + gi(rj(t))t:
A numerical integrator with a higher order of accuracy is the trapezoid method, ri(t
+ t) = gi(rj(t)) + gi(rj(t + t))
Another important feature of integrator is the time step adjustment. When the
time step is large, we can perform simulation which require long physical time.
However, the large time step always bring large error. Conversely, when the time
step is too short, we can perform the more precise simulation, but it take too long
CPU time to get the result. Thus, it is better to adjust the time step in every
cycle. The present version of DDLab has the time step adjustment as below. This is
the part of the integrator code. ...err = rnvec1 rnvec0 (vnvec + vnvec0) / 2 *
dt;...errmag = max(abs(err));...if(errmag < rntol)break;elsedt = dt / 2;...maxchange = 1.2;... If
the defined err is larger than rntol, the time step is adjusted as the half of current
time step. If the defined err is smaller than rntol, the time step is adjusted as 1.2
times of current time step. Thus, DDLab changes its time step dynamically,
enabling a much more efficient simulation.
A series of time integration schemes are also included with the distribution named
int eulerforward, int eulerbackward, int newtonkrylov. int eulerforward is
an explicit forward integration scheme. <tt>int eulerbackward is a simple
implicit time integration scheme, and int newtonkylov is a more sophisticated
inexact implicit time integration scheme based on the Newton-Krylov matrix-free
solution method. The core of the int newtonkrylov employs a method written by
C. T. Kelley. The time integration scheme is specified in the input deck with the
integrator input parameter.
on each segment, then return it to drndt.m. Then, drndt.m calls mobility. mobility
calculates the force and velocity on each node and return them to drndt.m Finally,
drndt.m return the velocity on node to integrator, which integrate the velocity
with respect to time step. Then, we can get the nodal positions at the current
time step. 4.0.15 segforcevec.m segforcevec calculates the force on each
segment. Note that this is the force not on the node but on the segment. It is
because DDLAB use Peach-Koehler formula fPK(x) = ((x)b)(x) . When we compute PK
force, we need to know the line sense vector () for segment. Thus, firstly DDLAB
calculates the force on each segment which has two end nodes. Then, mobility
function gives the half of force to each node. Finally, we can get the nodal force.
segforcevec.m includes the four functions; constructsegmentlist, pkforcevec,
selfforcevec, remoteforcevec. constructsegmentlist give us the list of all
information about segments as the format n0, n1, bx, by, bz, x0, y0, z0, x1, y1, z1,
nx, ny, nz, where n0 and n1 are nodeids of two end nodes. bx, by, bz is the Burgers
vector of one segment which consists of two end node, n0 and n1. x0, y0, z0 is the
position of node n0 and x1, y1, z1 is the position of node n1. nx, ny, nz is the
normal vector of the glide plane on which the dislocation segment lies. Based on
this list, segforcevec calculate the forces on each segment. selfforcevec calculates
the force on each segment by itself. remoteforcevec calculates the force on the
segment on each segment by the other segments. Finally, the sum of these forces
is the force on segment as below. fseg=[fpk, fpk]*0.5+[fs0, fs1]+[fr0, fr1]; The first
component of fseg (fpk, fs0, fr0) are the force vectors on node n0 and the second
ones are the force vectors on the node n1. The node n0 and n1 are the end nodes
of each segment as shown in Fig. 5.
Figure 7: (a) The example dislocation structure. (b) DDLAB calcuate the force on
the segment by segforcevec.m (c) Then, the half of the force is assigned to two
end nodes of each segment (d) The force on the node has several arms is just the
summation of forces on corresponding arms. 4.0.16 mobfcc1.m, mobfcc0.m,
mobfcc1.m A dislocation's response to forces may also depends on the line
orientation and varies significantly from one material to another. Similar to the
core energy, how dislocation respond to forces is a function of the non-linear
atomistic interactions in the dislocation core and, as such, is beyond the scope of
linear elasticity theory. The response functions have to be imported into the line
DD model in the form of external materials input, either from atomistic
simulations or from experiments A series of mobility functions are included in the
distribution named mobbcc0 mobbcc0b and mobfcc1. mobbcc0 and mobbcc0b are
intended to simulate bcc behavior in which the the screw dislocations are able to
glide in any plane normal to their Burgers vector. The difference between them is
slight and appears in the mobility of dislocations of mixed character. mobfcc1 is
intended to simulate fcc behavior in which the screw dislocation are not able to
cross-slip. The mobility function is chosen in the input deck with the mobility input
parameter.
4.0.17 separation.m For numerical and physical reasons, line-DD simulations need
to handle topological changes, i.e. changes on the connectivity between nodes
since we may want to adjust the number of nodes that represent a dislocation line
if the line gets longer or shorter during the simulation, or when two dislocation
lines meet in space, they may either annihilate or zip together to form a junction,
which also results in a change of nodal topology. Thus many types of topological
changes can be encountered in a line-DD simulation. Fortunately, since we use a
nodal representation here, all topological changes can be implemented through
two basic operators: split (one node split into two ) and merge (two nodes merge
into one) (See next section) and . The implementation of these two operators is
straightforward - all one needs to do is to make sure that at the end of the
operation the Burgers vector sum rule at every node and segment is still satisfied,
moreover, two nodes are either disconnected or connected only once, and each
node is connected with at least two other nodes, if a node has no segment, it will
be deleted. For example, for a 4-arm node such as P in there are 3 different ways
to partition its arms: (12)(34), (13)(24) and (14)(23). It is reasonable to expect that
the way nature would choose should be the one that gives rise to the maximum
energy dissipation rate, which is defined below. Suppose an n-arm mode i stays
intact (not splitting) and it feels a force fi and will move at velocity vi . Then the
local energy dissipation rate is, Wi = fivi. Now suppose that node i splits into two
nodes P and Q, such that node P retains 1, ... ,s of the original neighbors, and
node Q retains the remaining neighbors. Let fP and fQ be the forces on the two
nodes and vP and vQ be their velocities given by the mobility function. Then the
local energy dissipation rate is, WPQ = fPvP + fQvQ.
If WPQ > Wi, then node i prefers to split into two nodes P and Q instead
of moving
as a single node. The energy dissipation rate can be computed for all possible
(topological distince) modes to split i. The mode with the highest energy
dissipation rate is preferred. If a node will split in next step, the two new nodes
actually stay at the same location as the parent node at the current step. Because
the velocities of the two nodes is different (otherwise the node should not split),
the two nodes will be move away from each other in the next time step.
collision.m
remesh.m
As another option, we can change the unit for distance (including both nodal
positions and Burgers vectors) to nm, whereas the unit for stress is still Pa, the
unit of time is still second, and the unit for mobility is still Pa 1s 1.
Introduction
Frank-Read source is a type of dislocation multiplication mechanism. Consider a
segment whose ends are pinned (corresponding to nodes in a network,
precipitates, or sites where the dislocation leaves the glide plane). Under a certain
applied stress the segment bows out by glide. As bow-out proceeds, the radius of
curvature of the line decreases and the line-tension forces tending to restore the
line to a straight configuration increase. For stress less than a critical value, a
metastable equilibrium configuration is attained, in which the line-tension force
balances that caused by the applied stress. For the large bow-out case, following
equilibrium condition holds:
(Hirth-Lothe, p. 752)
where r is the radius of the loop. The radius of the curvature is a minimum when r
= L / 2. Hence the maximum stress for which local equilibrium is possible is given
by the equation above with r = L / 2. For the typical case that L = 103 and = 0.33,
the critical stress for a dislocation initially pure edge and pure screw, respectively,
is * = 0.5b / L and * = 1.5b / L.
When the net local resolved shear stress( the applied stress plus the internal
stresses) exceeds * , the loop has no stable equilibrium configuration but passes
through the successive positions. Provided that the expanding loop neither jogs out
of the original glide plane because of intersections with other dislocations nor is
obstructed from rotating about the pinning point, it will annihilate over a portion
of its length, creating a complete closed loop and restoring the original
configuration. A sequence of loops then continues to form from the source until
sufficient internal stresses are generated for the net resolved shear stress at the
source to drop below * .
To compare the analytic result with DDLab simulation, we need to use the relation
= rc / 2. According to the non-singular continuum theory of dislocation (JMPS 54,
561-587, 2006), the energy of a circular prismatic dislocation loop is
According to Hirth and Lothe, the energy of the same loop is,
Therefore
Reference: J. P. Hirth and J. Lothe, Theory of Dislocations", 2nd ed. (Wiley, New
York, 1982)
F-R Test
1. Criteria to define *
In the case of Frank-Read source, It is difficult to give a quantitative definition on
critical applied stress. When totalsteps is large enough, the bowing process will
eventually stop unless that critical stress has been reached. Let's define a certain
geometric configuration beyond which the dislocation line becomes unstable and
keeps growing, even forming loops. When such configuration is formed, we denote
the current external applied stress as the critical one. It is convenient to use
maximum distance criteria, that we can extract the coordinates of all nodes from
rn and find out the maximum distance from the center of initial dislocation line. If
the maximum distance exceeds an empirical value, let's say, L, which is the length
of initial dislocation line, we can regard the configuration as "critical" and
determine the critical stress, * . Several trials have proven that L is a safe one. As
long as totalsteps is large enough, 2L, 4L etc will also work well.
2. Basic settings
The initial dislocation line is pinned at (-l,-l,-l) ,(l, l, l). (0, 0, 0) is a mobile node
at the center.
We can change any parameter before running dd3d.m. Simple test cases have
shown that when l ranges from 1,000 to 10,000, the external applied stress is at
the order of 10 4.
rn
= [ 1000
1000
1000
7;
-1000
-1000 -1000
7;
0
0
0
0];
links = [1 3 0.5 0.5 0.5 -1 1 0;
maxconnections=8;
lmax = 1000;
lmin = 200;
% fixed lmax and lmin for all cases
areamin=lmin*lmin*sin(60/180*pi)*0.5;
areamax=20*areamin;
a=lmin/sqrt(3)*0.5;
%defined in terms of lmin
Ec = MU/(4*pi)*log(a/0.1);
%Ec=0 when compared with analytical
expression
totalsteps=200;
%enough for rough estimations
dt0=1e7;
mobility='mobfcc1';
%FCC mobility law
%Drag (Mobility) parameters
Bscrew=1e0;
Bedge=1e0;
Beclimb=1e2;
Bline=1.0e-4*min(Bscrew,Bedge);
integrator='int_trapezoid';
rann = 0.5*a;
rntol = 0.5*rann;
doremesh=1;
docollision=1;
doseparation=1;
elasticinteraction=1;
%line tension model when this is zero
plotfreq=1;
plim=10000;
appliedstress =1e-3.*[2 0 1; 0 2 -1; 1 -1 0];
% a value times a stress
tensor
viewangle=[45 -45];
printfreq=1;
%set as 10 for better view
printnode=3;
rmax=100;
3. Algorithm
The critical stress is determined digit by digit. Assuming the critical externally
applied stress is 2.35e-4 times a matrix A, to determine the first digit, simulation
is run for 400 steps when the applied stress is 1e-4*A. The stress will be increased
by 1e-4*A unless the maximum criteria is not reached. We will see, the first digit is
3. As for the second digit, the initial applied stress starts from 2.1e-4*A and
simulation is run for 1000 steps. In the similar manner, 2.2e-4*A will be applied if
critical criteria is not met. Finally, the second digit is 4. To determine the third
digit, simulation starts at 2.31e-4*A...Of course, the matrix A and totalsteps are
subject to change. More simulation steps will be needed when the stress increase
is smaller, i.e. better accuracy. For detailed coding, please refer to crstrfr.m.
4. Investigation
4.1. L dependence
Based on the maximum distance criteria, we can easily determine the critical
applied stress for different initial straight line lengths. Here is a graph showing the
relationship between c and L at a=50.
According to the formula, there is a linear relation between the critical stress and
segment length L, which was also proven by numerical results.
The relative error decreases from 0.26 to 0.20 when the initial segment coordinate
parameter l goes from 1000 to 10,000; however, the error can't be negligible.
Better convergence should occur at a smaller a value. Numerical tests shows that,
when a=1, relative error decreases from 0.20 to 0.18 when l goes from 1000 to
6000. Lower error is expected for longer segments.
It shows that analytical result will be more accurate at smaller a/L ratio.
4.2. a dependence
When a varies from 1 to 50 and l is fixed at 5000, numerical results are given,
shown in following figures
Same as the formula, the critical stress has a linear dependence on ln(L/a)/L
When the length of initial segment increases, relative error seems to decrease
when a approaches 0.
Conclusion
After conducting several test cases of Frank-Read Source using DDLab, we have
shown:
1, The critical stress is linearly dependent on ln(L/a)/L;
2. Numerical results are closer to theoretical ones at small a and large L.
3. Numerical critical stress for a/5 well fits theoretical results for a
Some of the plots above will be updated when more accurate data are available
for a=1 (or less) and L>6000.
Introduction
This tutorial will:
This tutorial assumes that the reader is familiar with the basics of DDLAB. New
users should read DDLab_Manual_01 before proceeding.
A copy of the input decks used in this tutorial can be downloaded from the link at
the bottom of this page.
A tutorial for ParaDiS will be created in the future.
Background
Plastic deformation of metals is usually governed by the motion of dislocations and
their reactions, such as nucleation, pinning, and multiplication. One particularly
important interaction occurs when two dislocations on different glide planes
approach each other. These dislocations could either repel or attract each other
depending on their Burgers vectors and orientations. If they are pulled together,
the dislocations will combine in a way that minimizes their energy. This often
results in the "zipping" of the dislocations along the line of intersection of the glide
planes to form a junction known as a Lomer-Cottrell lock. These junctions have
been shown to be a governing cause of strain hardening in fcc crystals.
Simulation Design
Initial Orientation
slip system
and
where
Batch Execution
Executing a batch of 441 jobs in DDLab is very simple due to the versatility of
MATLAB. A separate script named LC_junction.m was created to call the DDLab
input deck LC_relax.m for all iterations of the dislocations. Although it is possible
to place the loops inside a DDLab input deck, it is best to keep the DDLab portions
of the code separate from the other MATLAB scripts and retain the standard DDLab
file layout.* LC_junction.m then stores the resulting nodal positions, rn; segment
data, links; and junction length, junc_length, for all iterations in the MATLAB
binary file LC_juction_data.mat for later analysis, and also as a restart point for
the dissociation simulations explained in the next section.
*It should also be noted that the input decks for ParaDiS cannot be modified from
their usual format.
, and
, as illustrated in Figure 7.
where
and
are the stress tensor defined in the original and new coordinate
systems, respectively.
is the transformation matrix, where its columns are the
components of the basis written in terms of the basis . If and are chosen
as orthonormal bases, then
cosines, and
equals
%in Pa
where is the shear modulus and is the magnitude of the Burgers vector. From
the relation, it is obvious that dissociation can occur more easily with longer
dislocation arms. If the initial length of the two dislocations increases, the
resulting junction length increases. Also, the length of dislocation arms become
longer (not shown), resulting in lower critical resolved shear stresses.
Description of Files
This section provides a brief description of all the files used in this tutorial and
their hierarchy. The main bullets are the primary scripts, and the sub-bullets are
the functions or scripts they call.
, equals
and those of
, are
,
, and
. The junction data is loaded from
LC_junction_data.mat. The user inputs a guess at the critical shear stress
in coordinate system 2 (see the Resolved Shear Stress Calculation section).
The resulting critical shear stresses are plotted with
and junction length.
It is best to start with a conservative guess to avoid having the dislocations
dissociate and begin acting as Frank-Read sources, which is costly
computationally.
o LC_stress.m- Script with the DDLab input deck for the user specified
in coordinate system 2. It performs the stress transformation
described in the Resolved Shear Stress Calculation section. It also
requires that dis_length, the initial length of the dislocations prior
to junction formation, is specified.
Junction Formation
and
. These results compare well with those published by Madec et. al.<ref
name="Madec"/> Closer examination of the results reveals that reversing the line
direction, , of both dislocations creates junctions with the same length.
Although, the situations are not truly symmetric because the Burgers vectors do
not flip, the lack of external stress means that the only forces are due to the
interaction of the dislocations. Therefore in terms of junction formation, there is
no difference between the junction of two dislocations and that of their opposites.
For example, when
and
and
Junction Dissociation
Note: These are only preliminary results. Feel free to improve upon them. For the
sake of time only a few junctions were manually dissociated.
The first comparisons in LC_dissociate_orientation.m are to see the effect of
orientation on the junction strength.
is fixed at
and
is varied from
to
The effect of the initial dislocation length on the junction strength is studied in
LC_dissociate_length.m The dislocation arm length, should scale with junction
length; thus, the longer dislocations should have lower critical resolved shear
stresses. The junction length scales linearly with dislocation length, as illustrated
in Figure 12. As expected, the junction strength decreases with increased
increased junction length. Figure 13 shows the critical resolved shear stress
appears to scale with , which is predicted by the relationship in the Resolved
Shear Stress Calculation section.
We can discuss in more detail which dislocation length is the controlling parameter
for critical stress. Right now, the relaxed dislocation structure has five segments
and their lengths are all related in this particular series of simulations. More
simulations with different geometries are needed to determine which length is the
controlling parameter.
References
<references/> [1] From Dislocation Junctions to Forest Hardening, Phys. Rev. Lett.
89 255508 (2002), R. Madec, B. Devincre, and L.P. Kubin
Currently, the references only show up automatically to logged in users. We are
looking for a solution to this problem. For now we are just writing the references
by hand.
Downloads
LC_Junction_DDLab.tar.gz - DDLab tutorial files. (Note: best if extracted as a
subdirectory of the DDLab Inputs folder)
Note: there are currently some issues with the fcc mobility law in the latest
release of DDLab (12/18/2007) that we hope to work out in the future. There is
also a typo in mobfcc0.m involving BScrew, Bedge, etc. If you have any trouble
resolving this issue please contact the author for a corrected version of the code.
LC_lock.pdf. - Past version of this tutorial. (Note: There are some errors associated
with the junction length calculation and the codes have been significantly
modified)