SIMPSON version 3.1Zdenek Tosner, Rasmus Andersen, Niels Chr. Nielsen, and Thomas Vosegaard Released: March 25, 2011 Downloads:
Version 3.1 is a bug-fix release to version 3.0. The bugs were in the OC routines and for the second-order quadrupolar interaction during delays. New features in version 3.0:This section describes add-ons to the functionality of SIMPSON. All previous features are kept without any change except everything executes much faster for larger spin systems (more than 2 spins). Such speed up was gained thanks to replacing original matrix manipulations hard coded in SIMPSON by full use of BLAS and LAPACK pre-built (and performance optimized) libraries. Extra speed is achieved by implementing fast acquisition algorithms and parallelization. Parallel calculationsThere are implemented two ways of parallel calculations. The first one makes use of fork mechanism supported on linux and mac (not MS windows). The program automatically detects number of processor cores and starts appropriate number of instances. This number can be modified by setting the environment variable SIMPSON_NUM_CORES to a given number. The second way is based on MPI and needs SIMPSON properly built from sources. Before installing form sources, make sure the following prerequisites are installed:
According to the specific versions and flavors of these prerequisites, it may be necessary to adjust the makefile. The makefile directives below show how to include and link to these packages. To enable MPI, add '-I/path/to/mpi/include' to the include list, '-lmpi' to the library list, and '-DMPI' to the flags list, i.e.: INCLUDES = -I/usr/include/tcl8.5 -I/usr/lib/openmpi/include Now, type make to build SIMPSON. Once built, SIMPSON can be run with MPI using mpirun. Make sure to start as many MPI processes as there are processor cores. For instance, in a cluster setup with 8 machines, each equipped with 4 processor cores, one should start 8*4 processes (the fork mechanism from above is not used when using MPI): New direct acquisition methodWorks for static as well as MAS simulations. Pulse sequence includes new command
In the input file, use coding like this: par {
...
method idirect
...
}
proc pulseq {} {
global par
pulse ... ... acq_block { delay $dw }
}
for free precession, or acq_block { pulse $dw ...}
for decoupling on some channel, or acq_block {
pulse dw/2 rf1 ...
pulse dw/2 rf2 ...
pulse dw/2 rf3 ...
pulse dw/2 rf4 ...
}
for some periodic rf pulse sequence (rf1, rf2, rf3, rf4) repeated every two dwell-time periods (and that would work just for MAS at the moment). Here one should be careful with synchronization, when the pulse sequence has to be repeated many times to match MAS, efficiency is lost. New version of g-COMPUTEThe original simpson did not allow for preparation of density matrix before acquisition. The spin state had to be independent of the g-angle when acquisition starts. This is now released, again using acq_block {} command. Pulse sequence in parenthesis has to have duration of one rotor period divided by the number of g-angles (this originates from ideas behind g-COMPUTE, only then efficient averaging can be used). However, spectral width does not need to be spin_rate*gamma_angles - it just needs to stay simply synchronized like in the example. The following code is possible par {
...
method igcompute
gamma_angles 10
spin_rate 12000
sw spin_rate*gamma_angles/3
...
}
proc pulseq {} {
global par
pulse ...
...
acq_block {
delay [expr 1.0e6/$par(spin_rate) \
/$par(gamma_angles)]
}
}
Some tricks cutting unnecessary operations has been used and this implementation is not only more general but also slightly faster (20% for 5 spins) than the original gcompute code. General notes
pulseq {} {
global par
set dw [expr 1.0e6/$par(sw)]
acq_block { delay $dw }
}
pulseq {} {
global par
delay [expr 1.0e6/$par(sw)]
store 1
reset
acq_block { prop 1}
}
|
|
Last update Mar 25, 2011 by webmaster |