This program calculates atom displacements between 2 configurations
an input and a reference structure files.
The value of the total strain in the input structure can be calculated
on each atom by finite differences using this displacement field
and its variation in a neighbourhood sphere.
The program can also calculate elastic and plastic strain, Nye tensors,
density of Burgers vector using the method described in:
C. S. Hartley and Y. Mishin, Acta Mater. 53, 1313 (2005).
Reference crystallographic patterns have to be defined
to associate each atom with one of these patterns.
See variables: patternFile, patternAngleThreshold, patternSelectionMethod, rNeigh
The program can be used to generate gnuplot script files and data files
needed to draw Vitek differential displacement maps.
(currently implemented only for a screw dislocation in a bcc, fcc or hcp lattice)
The gnuplot script file can be then personalized. If this file already exists,
the program will not overwrite it. You need to delete it if you want a new one
to be generated.
See variables: outVitek
These differential displacement maps can be then fitted with program vitekFit
to define dislocation positions.
Execution:
=========
displacement input.dat
where input.dat is the input file
If input.dat="-", the input is read from current unit (keyboard or piped other command like echo)
Structure of the input file:
===========================
The input file contains only the namelist input
&input
...
//
inpFile, refFile
↑
(type: character string ,
default: '-' ,
mandatory: yes )
Name of the structure file used as input (strained) and reference.
If inpFile='-' or refFile="-", the structure is read from keyboard.
The file formats are defined by refXyz | refCfg | refGin | refSiesta | refNDM | refLmpDump | refLmpData | refPoscar
and by inpXyz | inpCfg | inpGin | inpSiesta | inpNDM | inpLmpDump | inpLmpData | inpPoscar
Reference structure file is needed only if one wants to compute
the total displacement or its gradient, or the total or plastic strain.
See also: inpXyz, inpCfg, inpGin, inpSiesta, inpNDM, inpLmpDump, inpLmpData, inpPoscar
,
refXyz, refCfg, refGin, refSiesta, refNDM, refLmpDump, refLmpData, refPoscar
inpXyz, inpCfg, inpGin, inpSiesta, inpNDM, inpLmpDump, inpLmpData, inpPoscar
↑
refXyz, refCfg, refGin, refSiesta, refNDM, refLmpDump, refLmpData, refPoscar
↑
imm
↑
(type: integer ,
default: 0 ,
mandatory: no )
Maximal number of atom in the structure.
imm needs to be defined if the input structure is duplicated
to dimension the arrays.
Otherwise, the actual number of atoms, read from input structure file, is used.
See also: duplicate
duplicate
↑
(type: logical ,
default: .false. ,
mandatory: no )
If duplicate=.true., the crystal is duplicated, both the input and reference structures.
lat(1:3) is the number of times the crystal should be duplicated
in each direction given by the vectors at(1:3,i) read in the structure file.
If lat(i) is negative, then the opposite of the vector at(1:3,i) is used.
The maximal number of atoms in the duplicated structure needs to be set with imm
and the periodicity vectors have to be defined.
When the structure is also rotated, the duplication is done first and then the rotation.
The periodicity vectors used for duplication are thus those before rotation.
For small simulation boxes, it may be necessary to duplicate the structure
to find all neighbours of the atoms, when neighbours are needed
(to extract Nye tensors or calculate strain for instance)
See also: imm
,
lat
lat
↑
rotate
↑
(type: logical ,
default: .false. ,
mandatory: no )
If rotate=.true., the crystal is rotated using rotation matrix defined in rot(1:3,1:3)
Both the input and reference structures are rotated.
See also: rot
rot
↑
translate
↑
(type: logical ,
default: .false. ,
mandatory: no )
If translate=.true., the crystal is translated with the vector uTranslate(1:3)
Both the input and reference structures are translated.
See also: uTranslate
uTranslate
↑
(type: real, dim(3) ,
default: 0. ,
mandatory: no )
Translation vector used when translate=.true.
If alat is defined, uTranslate(1:3) is multiplied by alat.
See also: translate
,
alat
clipAtom
↑
(type: logical ,
default: .false. ,
mandatory: no )
If clipAtom=.true., periodic boundary conditions are applied
to atom coordinates to bring them back in the primitive unit cell.
The periodicity vectors have to be defined.
The transformation is applied both to the input and the reference structures.
clipDisplacement
↑
(type: logical ,
default: .false. ,
mandatory: no )
If clipDisplacement=.true., periodic boundary conditions are applied
to atom displacements.
The periodicity vectors have to be defined.
alat
↑
(type: real ,
default: 1. ,
mandatory: no )
Length used to scale all distances in the present input file.
For program displacement, it affects the quantities rNeigh and uTranslate(1:3).
fixGravity
↑
(type: logical ,
default: .false. ,
mandatory: no )
If fixGravity=.true., a solid displacement is added to atom positions
in the input structure to keep fixed the gravity center compared
to the reference structure.
The same solid displacement is added to the calculated atom displacements.
As a consequence, the displacement average is null.
patternFile
↑
(type: character string ,
default: empty ,
mandatory: no )
Name of the file where are stored the crystallographic patterns
defining the atom reference neighbourhoods.
This is necessary to calculate elastic or plastic strains,
Nye tensors or Burgers density.
This file can then be generated with programs patternInit or patternDetect.
See also: patternAngleThreshold
,
patternSelectionMethod
patternAngleThreshold
↑
(type: real ,
default: 10. ,
mandatory: no )
Threshold angle for pairing neighbour vectors when associating
each atom with a reference crystallographic pattern.
Two bonds, in the atom neighbourhood of the input structure
and in the reference crystallographic pattern, match
if the angle difference between the two corresponding directions
is smaller than this threshold.
See also: patternFile
,
patternSelectionMethod
patternSelectionMethod
↑
(type: integer ,
default: 3 ,
mandatory: no )
Method used to associate a reference crystallographic pattern to each atom
by comparing the atomic bonds of the corresponding neighbourhoods
patternSelectionMethod
= 1 : Select pattern which maximises the number of matches
look to the NORM OF THE DISPLACEMENT if 2 patterns are equivalent
= 2 : Select pattern which maximises the number of matches
look to the norm of the ELASTIC GRADIENT if 2 patterns are equivalent
= 3 : Select pattern which minimizes the number of unmatched bonds
look to the NORM OF THE DISPLACEMENT if 2 patterns are equivalent
= 4 : Select pattern which minimizes the number of unmatched bonds
look to the norm of the ELASTIC GRADIENT if 2 patterns are equivalent
See also: patternFile
,
patternAngleThreshold
rNeigh
↑
(type: real ,
default: -1. ,
mandatory: yes )
Distance cutoff defining the sphere where atom neighbours have to be looked for.
If alat is defined, rNeigh is multiplied by alat.
See also: alat
max_nNeigh
↑
bNye
↑
lNye
↑
outFile
↑
(type: character string ,
default: '-' ,
mandatory: no )
Name of the structure file where to save the input or the reference structure,
depending of the value of variable 'initial',
which auxiliary properties set for each atom (displacement, strain, dislocation density, ...)
If outFile="-", the output file is printed on screen.
The file format is defined by outXyz | outCfg | outOnlyAtoms
See also: outXyz, outCfg, outOnlyAtoms, outLmpDump, outLmpData, outPoscar
,
initial
,
out_alat
outXyz, outCfg, outOnlyAtoms, outLmpDump, outLmpData, outPoscar
↑
(type: logical ,
default: .false. ,
mandatory: no )
Format of the structure file used for output.
If all variables are set to .false. (default), the output structure
is not written.
See also: outFile
outVitek
↑
(type: logical ,
default: .false. ,
mandatory: no )
Write output files needed to plot Vitek differential displacement map with gnuplot.
The program assumed screw dislocation orientated along z, for different crystal structures
(bcc, fcc, hcp), as defined by variable VitekCrystalType.
The lattice parameter needs to be known. It is defined with the variable out_alat
The program assumes periodic boundary conditions, which means that the periodicity
vectors need to be defined both for reference and input structures.
See also: VitekCrystalType
,
scriptVitekFileScrew
,
outVitekFileScrew
,
pointVitekFile
,
scriptVitekFileEdge
,
outVitekFileEdge
,
lVitekPerioXY
,
out_alat
VitekCrystalType
↑
(type: character string ,
default: 'bcc' ,
mandatory: no )
Define crystal type for differential displacement map.
possible values:
- 'bcc' or 'bcc111': 1/2[111] screw dislocation in bcc crystal
- 'bcc100': [100] screw dislocation in bcc crystal
- 'fcc': 1/2[110] screw dislocation in fcc crystal
- 'hcp': 1/3[11-20] screw dislocation in hcp crystal
The dislocation line should be along z axis
See also: outVitek
scriptVitekFileScrew
↑
outVitekFileScrew
↑
pointVitekFile
↑
scriptVitekFileEdge
↑
outVitekFileEdge
↑
lVitekPerioXY
↑
(type: logical ,
default: .FALSE. ,
mandatory: no )
When true, consider also periodic images of atoms in the plane XY
perpendicular to the dislocation line when drawing differential displacement maps.
It can be used to see differential displacements at the border
of the simulation box.
See also: outVitek
out_alat
↑
(type: real ,
default: 1. ,
mandatory: no )
When the output structure is written with xyz or cfg file format,
atomic positions and periodicity vectors can be scaled by a lattice parameter
given in out_alat.
This variable is also used to define the lattice parameter necessary
to draw Vitek differential displacement maps.
See also: outFile
,
outVitek
,
Structure file formats
initial
↑
(type: logical ,
default: .false. ,
mandatory: no )
If initial=.true. (.false.), the coordinates of the input (reference) structure
are used on output.
out_displacement
↑
(type: logical ,
default: .true. ,
mandatory: no )
If out_displacement=.true., the displacement defined on each atom
is printed in output structure file.
out_gradDisplacement
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_gradDisplacement=.true., the gradient of the displacement
defined on each atom is printed in output structure file.
The gradient is obtained from atom displacements by finite differences.
rNeigh needs to have been set to define atom neighbourhood used for finite differences.
out_strain
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_strain=.true., the total strain defined on each atom
is printed in output structure file.
The total strain is obtained from the gradient of the total displacement
using Green-Lagrange (default) or Euler-Lagrange definition.
See also: out_gradDisplacement
,
EulerLagrange
EulerLagrange
↑
(type: logical ,
default: .false. ,
mandatory: no )
If EulerLagrange=.true., the Euler Lagrange definition is used
to obtain strain from displacement gradient.
If EulerLagrange=.false., the Green Lagrange definition is used.
See also: out_strain
,
out_elasticStrain
out_gradElasticDisplacement
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_gradElasticDisplacement=.true., the gradient of the elastic displacement
defined on each atom is printed in output structure file.
The gradient is obtained from atom displacements by finite differences,
using only the elastic contribution to the displacement.
Reference crystallographic patterns, read in file defined by patternFile,
are used to calculate this elastic contribution.
rNeigh needs to have been set to define atom neighbourhood used for finite differences.
out_elasticStrain
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_elasticStrain=.true., the elastic strain defined on each atom
is printed in output structure file.
The elastic strain is obtained from the gradient of the elastic displacement
using Green-Lagrange (default) or Euler-Lagrange definition.
See also: out_gradDisplacement
,
EulerLagrange
out_plasticStrain
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_plasticStrain=.true., the plastic strain defined on each atom
is printed in output structure file.
The plastic strain is obtained from the difference between
the total and the elastic strains.
See also: out_strain
,
out_elasticStrain
out_nye
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_nye=.true., the Nye tensor defined on each atom
is printed in output structure file.
The Nye tensor is obtained from the plastic strain
by finite differences.
See also: out_plasticStrain
out_BurgersDensity
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_burgersDensity=.true., the Burgers density defined on each atom
is printed in output structure file.
The Burgers density is obtained by projection of the Nye tensor
using lNye and bNye for the directions of the dislocation lines
and of the Burgers vector.
See also: out_nye
,
bNye
,
lNye
out_neighbours
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_neighbours=.true., the number of neighbours
is saved in output structure file for each atom.
See also: outFile
out_pattern
↑
(type: logical ,
default: .false. ,
mandatory: no )
If out_pattern=.true., the output pattern
is saved in output structure file for each atom.
See also: outFile
verbosity
↑
(type: integer ,
default: 4 ,
mandatory: no )
Integer values defining amount of information on output unit.
verbosity=0: no output
verbosity=4: normal output
verbosity>=10: debugging
debug
↑
(type: logical ,
default: .false ,
mandatory: no )
For debug purpose.