M10 DisregistryAnalysis: Difference between revisions
Jump to navigation
Jump to search
Manual 10 for MD++
(Created page with '<H1 ALIGN="CENTER"><FONT SIZE="-1">Manual 10 for MD++ </FONT> <BR> Visualize Disregistry Vector</H1> <DIV> <P ALIGN="CENTER"><STRONG>Keonwook Kang and Wei Cai</STRONG></P> </DI…') |
No edit summary |
||
| (One intermediate revision by the same user not shown) | |||
| Line 11: | Line 11: | ||
<!--Table of Child-Links--> |
<!--Table of Child-Links--> |
||
If you use '''ddrij''' to visualize or analyze disregistry vectors in your simulation results, |
If you use '''ddrij''' to visualize or analyze disregistry vectors in your simulation results, please cite the following paper: |
||
Keonwook Kang and Wei Cai, Int. J. of Plasticity '''26''' (2010) 1387 |
Keonwook Kang and Wei Cai, Int. J. of Plasticity '''26''' (2010) 1387 |
||
| Line 34: | Line 34: | ||
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 3 |
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 3 |
||
[[Image:Testdisreg1.gif | |
[[Image:Testdisreg1.gif | thumb | center | 600px | Fig.1 ]] |
||
[[Image:Testdisreg2.gif | |
[[Image:Testdisreg2.gif | thumb | center | 600px | Fig.2 ]] |
||
<pre> |
<pre> |
||
| Line 272: | Line 272: | ||
} |
} |
||
</pre> |
</pre> |
||
== Notes == |
== Notes == |
||
Latest revision as of 05:57, 19 May 2011
Manual 10 for MD++
Visualize Disregistry Vector
Keonwook Kang and Wei Cai
If you use ddrij to visualize or analyze disregistry vectors in your simulation results, please cite the following paper:
Keonwook Kang and Wei Cai, Int. J. of Plasticity 26 (2010) 1387
Compile execution file
$ make ddrij build=R SYS=gpp
Run example file
Identify bonds
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 0
Read/plot bonds
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 1
Read bonds and calculate the disregistry vector
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 2
Plot disregistry vectors
$ bin/ddrij_cpp ./scripts/Examples/example09-disreg.tcl 3
# -*-shell-script-*-
source "scripts/Examples/Tcl/startup.tcl"
#*******************************************
# Definition of procedures
#*******************************************
proc initmd { n } {
MD++ setoverwrite
MD++ dirname = "runs/test-disreg"
MD++ NIC = 200 NNM = 400
}
proc DotProd {a b} {
# Calculate dot product of a and b
if {[llength $a] < 3 || [llength $b] < 3} {
return -code error "Vectors must have 3 components!"
}
scan $a "%f %f %f" ax ay az
scan $b "%f %f %f" bx by bz
return [format %22.16e [expr $ax*$bx + $ay*$by + $az*$bz]]
}
proc VectorNorm { a } {
# Calculate |a|.
if { [llength $a] < 3 } {
return -code error "Vectors must have 3 components!"
}
#scan $a "%f %f %f" ax ay az
set ax [lindex $a 0]; set ay [lindex $a 1]; set az [lindex $a 2];
set d [format %22.16e [expr sqrt($ax*$ax + $ay*$ay + $az*$az)]]
return $d
}
proc normalize {v} {
if {[llength $v] < 3 } {
return -code error "Vectors must have 3 components!"
}
set vx [lindex $v 0]; set vy [lindex $v 1]; set vz [lindex $v 2]
#set v2 [format %22.16e [expr $vx*$vx + $vy*$vy + $vz*$vz]]
#set v_mag [format %22.16e [expr sqrt($v2)]]
set v_mag [VectorNorm $v]
set ex [format %22.16e [expr $vx/$v_mag]]
set ey [format %22.16e [expr $vy/$v_mag]]
set ez [format %22.16e [expr $vz/$v_mag]]
return [list $ex $ey $ez]
}
proc fix_atoms_on_tilted_plane { sx0 sy0 sz0 d } {
#------------------------------------------------------------
#Select atoms to fix for dislocation nucleation
#
set C1 {0 0 1}; set C2 {1 -1 0}; set C3 {1 1 0}
#set n { 1 1 -1};
set n { 0.85 0.85 -1};
set e1 [normalize $C1]; set e2 [normalize $C2]; set e3 [normalize $C3]
set nx [DotProd $n $e1]; set ny [DotProd $n $e2]; set nz [DotProd $n $e3]
set n [list $nx $ny $nz];
puts "n = ([format %10.6e $nx], [format %10.6e $ny], [format %10.6e $nz])\
in unit of a in lab coordinate."
set NP [MD++_Get NP]
set Lx [MD++_Get H_11]; set Ly [MD++_Get H_22]; set Lz [MD++_Get H_33]
set x0 [expr $sx0*$Lx]; set y0 [expr $sy0*$Ly]; set z0 [expr $sz0*$Lz];
set N_fixed 0
for { set i 0 } { $i < $NP } { incr i 1 } {
set sx [MD++_Get SR( [expr $i*3 ] ) ]
set sy [MD++_Get SR( [expr $i*3+1] ) ]
set sz [MD++_Get SR( [expr $i*3+2] ) ]
set x [expr $Lx*$sx ]
set y [expr $Ly*$sy ]
set z [expr $Lz*$sz ]
#puts "atom ($i) ($x $y $z)"
set ndotx [expr ($x-$x0)*$nx + ($y-$y0)*$ny + ($z-$z0)*$nz]
if { [expr abs($ndotx)] <= $d } {
MD++ fixed($i) = 1
set N_fixed [expr $N_fixed + 1]
}
}
puts "Number of fixed atoms : $N_fixed"
}
proc setup_window { } { MD++ {
# Plot Configuration
atomradius = [0.3 0.4] bondradius = 0.3
atomcolor0 = SandyBrown atomcolor1 = LightGrey
bondcolor = red backgroundcolor = white #gray70
fixatomcolor = yellow
color00 = "orange" color01 = "purple" color02 = "green"
color03 = "magenta" color04 = "cyan" color05 = "purple"
color06 = "gray80" color07 = "white"
plot_map_pbc = 1
plot_color_axis = 0
win_width = 1200 win_height = 1000
plotfreq = 10 rotateangles = [ 30 -10 0 1.25 ]
} }
proc openwindow { } {
setup_window
MD++ openwin alloccolors rotate saverot eval plot
#MD++ calcentralsymmetry input = \[ 0 20 100 \] GnuPlotHistogram
}
#*******************************************
# Main program starts here
#*******************************************
if { $argc == 0 } {
set status 0
} elseif { $argc > 0 } {
set status [lindex $argv 0]
}
puts "status = $status"
if { $argc >= 0 && $argc <= 1 } {
set n 0; set m 0
} elseif { $argc > 1 && $argc <=2 } {
set n [lindex $argv 1]; set m 0
} elseif { $argc > 2 } {
set n [lindex $argv 1]; set m [lindex $argv 2]
}
puts "n = $n, m = $m"
# lattice constant of DC Si
set a_Si 5.431
if { $status == 0 } {
# Identify bonds
MD++ setnolog
initmd " "
# cut-off distance to declare a bond between two atoms
# usu. the distance to the 1st neighbor
set rc [expr $a_Si*sqrt(3)/4]
# Add buffer distance.
set rc [expr 1.3*$rc]
MD++ RLIST = 4.1490
# Read the reference configuration
MD++ incnfile = ../../structures/Examples/ref-testdisreg.cn readcn eval
# Will be used to determine the bond direction.
# If dot(slip_normal,r_{ij}) < 0, then r_{ij} := -r_{ij}.
MD++ slip_normal = \[ -1.0 0.0 1.414214 \]
# Specify the region where the diregistry analysis is applied
MD++ plot_limits = \[1 -1 1 -1 1 -0.150 -0.031 \]
MD++ input = \[ $rc \] identify_bonds
# Write bond data:
# [bond.i bond.j bond.center.x bond.center.y bond.center.z bond.type]
MD++ finalcnfile = bonds.dat write_bonds
openwindow
MD++ sleep quit
} elseif { $status == 1 } {
# Read/Plob bonds
MD++ setnolog
initmd " "
MD++ RLIST = 4.1490
MD++ incnfile = ../../structures/Examples/ref-testdisreg.cn readcn eval
# Read bond data
MD++ incnfile = bonds.dat read_bonds
setup_window
MD++ plot_limits = \[1 -1 1 -1 1 -0.150 -0.031 \]
MD++ openwin alloccolors rotate saverot eval plot_bonds
MD++ sleep quit
} elseif { $status == 2 } {
# Read bonds and calculate the displacement difference (or disregistry) vector ddrij
MD++ setnolog
initmd " "
# Will be used to tag a bond if its |ddrij| > rc
set rc [expr sqrt(2)/2*$a_Si]
MD++ RLIST = 4.1490
# Read bond data
MD++ incnfile = bonds.dat read_bonds
# The deformed configuration
MD++ incnfile = ../../structures/Examples/deformed-testdisreg.cn readcn eval
# The reference configuration
MD++ incnfile = ../../structures/Examples/ref-testdisreg.cn
MD++ input = $rc calddrij
# Write disregistry data:
# [ddrij.disreg.x ddrij.disreg.y ddrij.disreg.z ddrij.norm ddrij.tag]
MD++ finalcnfile = ddrij.dat write_ddrij
MD++ quit
} elseif { $status == 3 } {
# Read/Plot ddrij
MD++ setnolog
initmd " "
MD++ RLIST = 4.1490
MD++ incnfile = ../../structures/Examples/ref-testdisreg.cn readcn eval
MD++ incnfile = bonds.dat read_bonds
MD++ incnfile = ddrij.dat read_ddrij
fix_atoms_on_tilted_plane 0.0 0.0 -0.095 8
MD++ reversefixedatoms removefixedatoms
setup_window
MD++ slip_normal = \[ -1.0 0.0 1.414214 \]
MD++ plot_limits = \[ 1 -1 1 -1 1 -0.150 -0.031 \]
MD++ openwin alloccolors rotate saverot eval plot_ddrij
MD++ sleep quit
} else {
puts "unknown status = $status"
MD++ quit
}