minor updates on examples/SPIN

This commit is contained in:
araven
2018-01-09 21:19:28 +01:00
committed by julient31
parent ab200cff06
commit 01f378d265

View File

@ -13,67 +13,67 @@ FILE=view_${TS}.vmd
cat >${FILE} <<EOF
proc vmd_draw_arrow {mol start end} {
set middle [vecadd $start [vecscale 0.9 [vecsub $end $start]]]
graphics $mol cylinder $start $middle radius 0.05
graphics $mol cone $middle $end radius 0.01 color 3
set middle [vecadd \$start [vecscale 0.9 [vecsub \$end \$start]]]
graphics \$mol cylinder \$start $middle radius 0.05
graphics \$mol cone \$middle \$end radius 0.01 color 3
}
proc vmd_draw_vector {args} {
set usage {"draw vector {x1 y1 z1} {x2 y2 z2} [scale <s>] [resolution <res>] [radius <r>] [filled <yes/no>]"}
# defaults
set scale 3.0
set res 5
set scale 2.0
set res 50
set radius 0.1
set filled yes
if {[llength $args] < 3} {
error "wrong # args: should be $usage"
if {[llength \$args] < 3} {
error "wrong # args: should be \$usage"
}
set mol [lindex $args 0]
set center [lindex $args 1]
set vector [lindex $args 2]
if {[llength $center] != 3 || [llength $vector] != 3} {
error "wrong type of args: should be $usage"
set mol [lindex \$args 0]
set center [lindex \$args 1]
set vector [lindex \$args 2]
if {[llength \$center] != 3 || [llength \$vector] != 3} {
error "wrong type of args: should be \$usage"
}
foreach {flag value} [lrange $args 3 end] {
switch -glob $flag {
scale {set scale $value}
res* {set res $value}
rad* {set radius $value}
fill* {set filled $value}
default {error "unknown option '$flag': should be $usage" }
foreach {flag value} [lrange \$args 3 end] {
switch -glob \$flag {
scale {set scale \$value}
res* {set res \$value}
rad* {set radius \$value}
fill* {set filled \$value}
default {error "unknown option '\$flag': should be \$usage" }
}
}
set vechalf [vecscale [expr $scale * 0.5] $vector]
return [list \
[graphics $mol color yellow]\
[graphics $mol cylinder [vecsub $center $vechalf]\
[vecadd $center [vecscale 0.7 $vechalf]] \
radius $radius resolution $res filled $filled] \
[graphics $mol color orange]\
[graphics $mol cone [vecadd $center [vecscale 0.6 $vechalf]] \
[vecadd $center $vechalf] radius [expr $radius * 2.5] \
resolution $res]]
set vechalf [vecscale [expr \$scale * 0.5] \$vector]
return [list \\
[graphics \$mol color yellow]\\
[graphics \$mol cylinder [vecsub \$center \$vechalf]\\
[vecadd \$center [vecscale 0.7 \$vechalf]] \\
radius \$radius resolution \$res filled \$filled] \\
[graphics \$mol color orange]\\
[graphics \$mol cone [vecadd \$center [vecscale 0.6 \$vechalf]] \\
[vecadd \$center \$vechalf] radius [expr \$radius * 2.5] \\
resolution \$res]]
}
proc vmd_draw_spin {args} {
global molid
graphics $molid delete all
set frame [molinfo $molid get frame]
set natoms [molinfo $molid get numatoms]
for {set i 0} {$i < $natoms} {incr i} {
set sel [atomselect top "index $i"]
set coords [lindex [$sel get {x y z}] $molid]
set velocities [lindex [$sel get {vx vy vz}] $molid]
draw vector $coords $velocities
set uvx [lindex [$sel get {vx}] $molid]
set uvy [lindex [$sel get {vy}] $molid]
set uvz [lindex [$sel get {vz}] $molid]
$sel set user [vecadd [vecadd [vecscale $uvy $uvy] [vecscale $uvz $uvz] ] [vecscale $uvx $uvx]]
$sel set user $uvy
#draw vector $coords {0.0 uvy 0.0}
graphics \$molid delete all
set frame [molinfo \$molid get frame]
set natoms [molinfo \$molid get numatoms]
for {set i 0} {\$i < \$natoms} {incr i} {
set sel [atomselect top "index \$i"]
set coords [lindex [\$sel get {x y z}] \$molid]
set velocities [lindex [\$sel get {vx vy vz}] \$molid]
draw vector \$coords \$velocities
set uvx [lindex [\$sel get {vx}] \$molid]
set uvy [lindex [\$sel get {vy}] \$molid]
set uvz [lindex [\$sel get {vz}] \$molid]
\$sel set user [vecadd [vecadd [vecscale \$uvy \$uvy] [vecscale \$uvz \$uvz] ] [vecscale \$uvx \$uvx]]
\$sel set user \$uvy
#draw vector \$coords {0.0 uvy 0.0}
}
#pbc box -color 3
}