[Swift-commit] r7980 - in branches/release-0.95/tests: . groups multi_remote sites/communicado tutorial tutorial/app tutorial/bin tutorial/doc tutorial/doc/figs tutorial/doc/images tutorial/doc/images/icons tutorial/part01 tutorial/part02 tutorial/part03 tutorial/part04 tutorial/part05 tutorial/part06

yadunandb at ci.uchicago.edu yadunandb at ci.uchicago.edu
Wed Jul 9 16:22:56 CDT 2014


Author: yadunandb
Date: 2014-07-09 16:27:56 -0500 (Wed, 09 Jul 2014)
New Revision: 7980

Added:
   branches/release-0.95/tests/groups/group-tutorial.sh
   branches/release-0.95/tests/tutorial/
   branches/release-0.95/tests/tutorial/README.asc
   branches/release-0.95/tests/tutorial/app/
   branches/release-0.95/tests/tutorial/app/simulate
   branches/release-0.95/tests/tutorial/app/simulate.py
   branches/release-0.95/tests/tutorial/app/simulate.sh
   branches/release-0.95/tests/tutorial/app/stats
   branches/release-0.95/tests/tutorial/app/stats.py
   branches/release-0.95/tests/tutorial/app/stats.sh
   branches/release-0.95/tests/tutorial/bin/
   branches/release-0.95/tests/tutorial/bin/cleanup
   branches/release-0.95/tests/tutorial/bin/hosts
   branches/release-0.95/tests/tutorial/bin/package_tutorial.sh
   branches/release-0.95/tests/tutorial/bin/plot.sh
   branches/release-0.95/tests/tutorial/doc/
   branches/release-0.95/tests/tutorial/doc/README
   branches/release-0.95/tests/tutorial/doc/TODO
   branches/release-0.95/tests/tutorial/doc/activeplot.png
   branches/release-0.95/tests/tutorial/doc/asciidoc.css
   branches/release-0.95/tests/tutorial/doc/build_docs.sh
   branches/release-0.95/tests/tutorial/doc/cumulativeplot.png
   branches/release-0.95/tests/tutorial/doc/figs/
   branches/release-0.95/tests/tutorial/doc/figs/modis.dia
   branches/release-0.95/tests/tutorial/doc/figs/modis.png
   branches/release-0.95/tests/tutorial/doc/images/
   branches/release-0.95/tests/tutorial/doc/images/icons/
   branches/release-0.95/tests/tutorial/doc/images/icons/caution.png
   branches/release-0.95/tests/tutorial/doc/images/icons/example.png
   branches/release-0.95/tests/tutorial/doc/images/icons/home.png
   branches/release-0.95/tests/tutorial/doc/images/icons/important.png
   branches/release-0.95/tests/tutorial/doc/images/icons/next.png
   branches/release-0.95/tests/tutorial/doc/images/icons/note.png
   branches/release-0.95/tests/tutorial/doc/images/icons/prev.png
   branches/release-0.95/tests/tutorial/doc/images/icons/tip.png
   branches/release-0.95/tests/tutorial/doc/images/icons/up.png
   branches/release-0.95/tests/tutorial/doc/images/icons/warning.png
   branches/release-0.95/tests/tutorial/doc/part01.png
   branches/release-0.95/tests/tutorial/doc/part02.png
   branches/release-0.95/tests/tutorial/doc/part03.png
   branches/release-0.95/tests/tutorial/doc/part04.png
   branches/release-0.95/tests/tutorial/doc/part05.png
   branches/release-0.95/tests/tutorial/doc/part06.png
   branches/release-0.95/tests/tutorial/doc/push.sh
   branches/release-0.95/tests/tutorial/doc/raven.1000.progress.out
   branches/release-0.95/tests/tutorial/doc/raven.10000.progress.out
   branches/release-0.95/tests/tutorial/doc/tutorial.html
   branches/release-0.95/tests/tutorial/part01/
   branches/release-0.95/tests/tutorial/part01/p1.swift
   branches/release-0.95/tests/tutorial/part01/sites.template.xml
   branches/release-0.95/tests/tutorial/part01/swift.new.properties
   branches/release-0.95/tests/tutorial/part01/swift.properties
   branches/release-0.95/tests/tutorial/part01/tc.template.data
   branches/release-0.95/tests/tutorial/part02/
   branches/release-0.95/tests/tutorial/part02/p2.swift
   branches/release-0.95/tests/tutorial/part02/sites.template.xml
   branches/release-0.95/tests/tutorial/part02/swift.new.properties
   branches/release-0.95/tests/tutorial/part02/swift.properties
   branches/release-0.95/tests/tutorial/part02/tc.template.data
   branches/release-0.95/tests/tutorial/part03/
   branches/release-0.95/tests/tutorial/part03/p3.swift
   branches/release-0.95/tests/tutorial/part03/sites.template.xml
   branches/release-0.95/tests/tutorial/part03/swift.new.properties
   branches/release-0.95/tests/tutorial/part03/swift.properties
   branches/release-0.95/tests/tutorial/part03/tc.template.data
   branches/release-0.95/tests/tutorial/part04/
   branches/release-0.95/tests/tutorial/part04/p4.swift
   branches/release-0.95/tests/tutorial/part04/simulate.sh
   branches/release-0.95/tests/tutorial/part04/stats.sh
   branches/release-0.95/tests/tutorial/part04/swift.properties
   branches/release-0.95/tests/tutorial/part05/
   branches/release-0.95/tests/tutorial/part05/p5.swift
   branches/release-0.95/tests/tutorial/part05/simulate.sh
   branches/release-0.95/tests/tutorial/part05/stats.sh
   branches/release-0.95/tests/tutorial/part05/swift.properties
   branches/release-0.95/tests/tutorial/part06/
   branches/release-0.95/tests/tutorial/part06/p6.swift
   branches/release-0.95/tests/tutorial/part06/simulate.sh
   branches/release-0.95/tests/tutorial/part06/stats.sh
   branches/release-0.95/tests/tutorial/part06/swift.properties
   branches/release-0.95/tests/tutorial/setup.sh
   branches/release-0.95/tests/tutorial/swift.properties
   branches/release-0.95/tests/tutorial/test_all.sh
   branches/release-0.95/tests/tutorial/title.txt
Modified:
   branches/release-0.95/tests/groups/group-remote-sanity.sh
   branches/release-0.95/tests/multi_remote/remote_driver.swift
   branches/release-0.95/tests/multi_remote/sites.template.xml
   branches/release-0.95/tests/sites/communicado/sites.template.xml
   branches/release-0.95/tests/user_env.sh
   branches/release-0.95/tests/user_yadu.sh
Log:

Adding skeleton for tutorial tests



Modified: branches/release-0.95/tests/groups/group-remote-sanity.sh
===================================================================
--- branches/release-0.95/tests/groups/group-remote-sanity.sh	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/groups/group-remote-sanity.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -14,4 +14,7 @@
             $TESTDIR/sites/bridled \
           )
 
+GROUPLIST=( $TESTDIR/sites/communicado \
+            $TESTDIR/sites/bridled \
+          )
 checkvars WORK

Added: branches/release-0.95/tests/groups/group-tutorial.sh
===================================================================
--- branches/release-0.95/tests/groups/group-tutorial.sh	                        (rev 0)
+++ branches/release-0.95/tests/groups/group-tutorial.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,12 @@
+# GROUPLIST definition to run all tutorials
+
+GROUPLIST=( # Testing for the tutorial
+            $TESTDIR/tutorial/part01 \
+            $TESTDIR/tutorial/part02 \
+            $TESTDIR/tutorial/part03 \
+            #$TESTDIR/tutorial/part04 \
+            #$TESTDIR/tutorial/part05 \
+            #$TESTDIR/tutorial/part06 \
+          )
+
+checkvars WORK

Modified: branches/release-0.95/tests/multi_remote/remote_driver.swift
===================================================================
--- branches/release-0.95/tests/multi_remote/remote_driver.swift	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/multi_remote/remote_driver.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -85,7 +85,7 @@
         (out[i], err[i], log[i]) = remote_mcs     (wrapper, swift_package);
 	case 4:
         tracef("Skipping Frisbee on MCS (Will fail due to BUG:1030)\n");
-		//(out[i], err[i], log[i]) = remote_frisbee (wrapper, swift_package);
+		(out[i], err[i], log[i]) = remote_frisbee (wrapper, swift_package);
 	case 5:
         tracef("Calling Blues\n");
     	(out[i], err[i], log[i]) = remote_blues   (wrapper, swift_package);

Modified: branches/release-0.95/tests/multi_remote/sites.template.xml
===================================================================
--- branches/release-0.95/tests/multi_remote/sites.template.xml	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/multi_remote/sites.template.xml	2014-07-09 21:27:56 UTC (rev 7980)
@@ -102,19 +102,19 @@
 
 
   <pool handle="uc3">
-    <execution provider="coaster" url="uc3-sub.uchicago.edu" jobmanager="ssh-cl:local"/>
+    <execution provider="coaster" url="login.osgconnect.net" jobmanager="ssh-cl:local"/>
     <profile namespace="karajan" key="jobThrottle">10.00</profile>
     <profile namespace="karajan" key="initialScore">10000</profile>
     <profile namespace="globus"  key="jobsPerNode">1</profile>
-    <profile namespace="globus"  key="maxtime">36000</profile>
-    <profile namespace="globus"  key="maxWalltime">01:05:00</profile>
+    <profile namespace="globus"  key="maxtime">3600</profile>
+    <profile namespace="globus"  key="maxWalltime">00:30:00</profile>
     <profile namespace="globus"  key="highOverAllocation">100</profile>
     <profile namespace="globus"  key="lowOverAllocation">100</profile>
-    <profile namespace="globus"  key="slots">2</profile>
+    <profile namespace="globus"  key="slots">1</profile>
     <profile namespace="globus"  key="maxNodes">1</profile>
     <profile namespace="globus"  key="nodeGranularity">1</profile>
-    <!-- <profile namespace="globus"  key="condor.+AccountingGroup">"group_friends.yadunand"</profile> -->
     <profile namespace="globus"  key="jobType">nonshared</profile>
+    <profile namespace="globus"  key="condor.+ProjectName">"Swift"</profile>
     <workdirectory>/home/UC3_USERNAME/swiftwork</workdirectory>
   </pool>
 
@@ -140,7 +140,7 @@
     <profile namespace="globus" key="maxWalltime">01:05:00</profile>
     <profile namespace="karajan" key="jobThrottle">0.0799</profile>
     <profile namespace="karajan" key="initialScore">10000</profile>
-    <workdirectory>/sandbox/MCS_USERNAME/swiftwork</workdirectory>
+    <workdirectory>/homes/MCS_USERNAME/swiftwork</workdirectory>
   </pool>
 
   <pool handle="bridled">
@@ -152,7 +152,6 @@
     <profile namespace="globus" key="maxWalltime">01:05:00</profile>
     <profile namespace="karajan" key="jobThrottle">0.0799</profile>
     <profile namespace="karajan" key="initialScore">10000</profile>
-    <profile namespace="globus" key="userHomeOverride">/home/BRID_USERNAME/swiftwork</profile>
     <workdirectory>/home/BRID_USERNAME/swiftwork</workdirectory>
   </pool>
 
@@ -165,7 +164,6 @@
     <profile namespace="globus" key="maxWalltime">01:05:00</profile>
     <profile namespace="karajan" key="jobThrottle">0.0799</profile>
     <profile namespace="karajan" key="initialScore">10000</profile>
-    <profile namespace="globus" key="userHomeOverride">/home/COMM_USERNAME/swiftwork</profile>
     <workdirectory>/home/COMM_USERNAME/swiftwork</workdirectory>
   </pool>
 

Modified: branches/release-0.95/tests/sites/communicado/sites.template.xml
===================================================================
--- branches/release-0.95/tests/sites/communicado/sites.template.xml	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/sites/communicado/sites.template.xml	2014-07-09 21:27:56 UTC (rev 7980)
@@ -10,7 +10,7 @@
     <profile namespace="globus" key="maxWalltime">01:05:00</profile>
     <profile namespace="karajan" key="jobThrottle">0.0799</profile>
     <profile namespace="karajan" key="initialScore">10000</profile>
-    <profile namespace="globus" key="userHomeOverride">/home/{env.USER}/swiftwork</profile>
     <workdirectory>/home/{env.USER}/swiftwork</workdirectory>
   </pool>
-</config>
\ No newline at end of file
+
+</config>

Added: branches/release-0.95/tests/tutorial/README.asc
===================================================================
--- branches/release-0.95/tests/tutorial/README.asc	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/README.asc	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link doc/README
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/README.asc
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/app/simulate
===================================================================
--- branches/release-0.95/tests/tutorial/app/simulate	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/simulate	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link simulate.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/app/simulate
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/app/simulate.py
===================================================================
--- branches/release-0.95/tests/tutorial/app/simulate.py	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/simulate.py	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+import sys
+import os
+import socket
+import time
+import math
+import random
+import getpass
+
+def parse():
+    from optparse import OptionParser
+    parser=OptionParser()
+    parser.add_option("-b", "--bias", type="int", dest="bias", default=0,
+                      help="offset bias: add this integer to all results");
+
+    parser.add_option("-B", "--biasfile", type="string", dest="biasfile",
+                      default="none", help="file of integer biases to add to results" );
+
+    parser.add_option("-l", "--log", type="string", dest="log", default="yes",
+                      help="generate a log in stderr if not nul");
+
+    parser.add_option("-n", "--nvalues", type="int", dest="nvalues",default=1,
+                      help="print this many values per simulation" );
+
+    parser.add_option("-s", "--seed", type="int", dest="initseed", default=0,
+                      help="use this integer [0..32767] as a seed");
+
+    parser.add_option("-S", "--seedfile", type="string", dest="seedfile",
+                      default="none", help="use this file (containing integer seeds [0..32767]) one per line" );
+
+    parser.add_option("-t", "--timesteps", type="int", dest="timesteps",
+                      default=0, help='number of simulated "timesteps" in seconds (determines runtime)' );
+
+    parser.add_option("-r", "--range", type="int", dest="range", default=100,
+                      help="range (limit) of generated results" );
+
+    parser.add_option("-w", "--width", type="int", dest="width", default=8,
+                      help="Width ?" );
+
+    parser.add_option("-x", "--scale", type="int", dest="scale", default=1,
+                      help="scale the results by this integer" );
+    # Not implemented yet
+    parser.add_option("-p", "--paramfile", type="string", dest="paramfile", default="none",
+                      help="Not implemented yet" );
+    return (parser.parse_args());
+
+def log():
+    import datetime
+    print >> sys.stderr, "Called as: ", str(sys.argv)
+    print >> sys.stderr, "Start time: ", datetime.datetime.now()
+    print >> sys.stderr, "Running on node: ", socket.gethostname()
+    print >> sys.stderr, "Running as user: ", getpass.getuser()
+    print >> sys.stderr, "\nEnvironment:\n\n"
+    print >> sys.stderr, os.environ
+
+def printparams(options):
+    print 'bias =',options.bias
+    print 'biasfile = ',options.biasfile
+    print 'log = ', options.log
+    print 'nvalues = ',options.nvalues
+    print 'seed = ', options.initseed
+    print 'seedfile = ', options.seedfile
+    print 'timesteps = ', options.timesteps
+    print 'range = ', options.range
+    print 'width = ', options.width
+    print 'scale = ', options.scale
+    print 'paramfile = ', options.paramfile
+
+def simulate(options):
+    time.sleep(options.timesteps)
+    bias=[];
+    if (options.biasfile != "none"):
+        try:
+            with open(options.biasfile) as biasfile:
+                lines = biasfile.read().splitlines()
+                for line in lines:
+                    bias.append(int(line))
+        except IOError:
+            print "Error accessing content from file: ", options.biasfile 
+    bias_count = len(bias)
+
+    for i in range(options.nvalues):
+        value = (random.random() +
+        random.random()*math.pow(2,16) +
+        random.random()*math.pow(2,32) +
+        random.random()*math.pow(2,48))
+        value=( (int(value)%options.range) * options.scale + options.bias)
+        if ( i < bias_count ):
+            value = value + bias[i]
+        elif ( bias_count > 0 ):
+            value = value + bias[bias_count-1]
+
+        print '{num:{fill}{width}}'.format(num=value, fill=' ', width=options.width)
+
+
+def seed(options):
+    if (options.initseed != 0 ):
+        random.seed(options.initseed)
+    if (options.seedfile != "none"):
+        try:
+            with open(options.seedfile) as seedfile:
+                lines=seedfile.read().splitlines()
+                seed = 0
+                for line in lines:
+                    seed = seed + int(line)
+            random.seed(seed)
+        except IOError:
+            print "Could not open file: ", options.seedfile
+
+
+if __name__ == "__main__":
+    (options, args) = parse()
+    printparams(options)
+    seed(options)
+    simulate(options)
+    log()
+
+
+
+
+
+
+
+
+


Property changes on: branches/release-0.95/tests/tutorial/app/simulate.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/app/simulate.sh
===================================================================
--- branches/release-0.95/tests/tutorial/app/simulate.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/simulate.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,136 @@
+#! /bin/bash
+
+sleep 20
+printparams()
+{
+  printf "\nSimulation parameters:\n\n"
+  echo bias=$bias
+  echo biasfile=$biasfile
+  echo initseed=$initseed
+  echo log=$log
+  echo paramfile=$paramfile
+  echo range=$range
+  echo scale=$scale
+  echo seedfile=$seedfile
+  echo timesteps=$timesteps
+  echo output width=$width
+}
+
+log() {
+  printf "\nCalled as: $0: $cmdargs\n\n"
+  printf "Start time: "; /bin/date
+  printf "Running as user: "; /usr/bin/id
+  printf "Running on node: "; /bin/hostname
+  printf "Node IP address: "; /bin/hostname -I
+  printparams
+  printf "\nEnvironment:\n\n"
+  printenv | sort
+}
+
+addsims() {
+  while read f1 ; do
+    read -u 3 f2 
+    if [ _$f1 = _ ]; then f1=$lastf1; fi
+    if [ _$f2 = _ ]; then f2=$lastf2; fi
+    printf "%${width}d\n" $(($f1+$f2)) 
+    lastf1=$f1
+    lastf2=$f2
+  done <$1 3<$2
+}
+
+# set defaults
+
+bias=0
+biasfile=none
+initseed=none
+log=yes
+paramfile=none
+range=100
+scale=1
+seedfile=none
+timesteps=0
+nvalues=1
+width=8
+cmdargs="$*"
+
+usage()
+{
+  echo $0: usage:
+  cat <<END
+    -b|--bias       offset bias: add this integer to all results
+    -B|--biasfile   file of integer biases to add to results
+    -l|--log        generate a log in stderr if not null
+    -n|--nvalues    print this many values per simulation            
+    -r|--range      range (limit) of generated results
+    -s|--seed       use this integer [0..32767] as a seed
+    -S|--seedfile   use this file (containing integer seeds [0..32767]) one per line
+    -t|--timesteps  number of simulated "timesteps" in seconds (determines runtime)
+    -x|--scale      scale the results by this integer
+    -h|-?|?|--help  print this help
+END
+}
+
+# FIXME: NOT YET IMPLEMENTED:
+#    -p|--paramfile  take these parameters (in form param=value) from this file 
+#    -p|--paramfile) paramfile=$2 ;;
+
+while [ $# -gt 0 ]; do
+  case $1 in
+    -b|--bias)      bias=$2      ;;
+    -B|--biasfile)  biasfile=$2  ;;
+    -l|--log)       log=$2       ;;
+    -n|--nvalues)   nvalues=$2   ;;       
+    -s|--seed)      initseed=$2  ;;
+    -S|--seedfile)  seedfile=$2  ;;
+    -t|--timesteps) timesteps=$2 ;;
+    -r|--range)     range=$2     ;;   
+    -w|--width)     width=$2     ;;
+    -x|--scale)     scale=$2     ;;
+    -h|-?|--help|*) usage; exit  ;;
+  esac
+  shift 2
+done
+    
+# process initial seed
+
+if [ $initseed != none ]; then
+  RANDOM=$initseed
+fi
+
+# process file of seeds
+
+if [ $seedfile != none ]; then
+  seed=0
+  while read $seedfile s; do
+    seed=$(($seed+$s))
+  done <$seedfile
+  RANDOM=$seed
+fi
+
+# run for some number of "timesteps"
+
+sleep $timesteps
+
+# emit N (nvalues) "simulation results" scaled and biased by argument values
+
+simout=$(mktemp simout.XXXX)
+for ((i=0;i<$nvalues;i++)); do
+  # value=$(( (($RANDOM)*(2**16))+$RANDOM ))
+  value=$(( (($RANDOM)*(2**48)) + (($RANDOM)*(2**32)) + (($RANDOM)*(2**16)) + $RANDOM ))
+  printf "%${width}d\n" $(( ($value%range)*scale+bias))
+done  >$simout
+
+# process file of biases
+
+if [ $biasfile != none ]; then
+  addsims $simout $biasfile
+else
+  cat $simout
+fi
+rm $simout
+
+# log environmental data
+
+if [ $log != off ]; then
+  log 1>&2
+fi


Property changes on: branches/release-0.95/tests/tutorial/app/simulate.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/app/stats
===================================================================
--- branches/release-0.95/tests/tutorial/app/stats	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/stats	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link stats.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/app/stats
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/app/stats.py
===================================================================
--- branches/release-0.95/tests/tutorial/app/stats.py	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/stats.py	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+import socket
+import sys
+import os
+
+def log():
+    import datetime
+    print >> sys.stderr, "Called as: ", str(sys.argv)
+    print >> sys.stderr, "Start time: ", datetime.datetime.now()
+    print >> sys.stderr, "Running on node: ", socket.gethostname()
+    print >> sys.stderr, "Running as user: ",os.getlogin()
+    print >> sys.stderr, "\nEnvironment:\n\n"
+    print >> sys.stderr, os.environ
+
+def stat():
+    total = 0
+    count = 0
+    for f in sys.argv[1:]:
+        try:
+            with open(f) as ifile:
+                lines = ifile.read().splitlines()
+                for line in lines:
+                    total += int(line)
+                    count += 1
+        except IOError:
+            print "Error accessing content from file: ", options.biasfile
+        print total/count
+
+if __name__ == "__main__":
+    log()
+    stat()


Property changes on: branches/release-0.95/tests/tutorial/app/stats.py
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/app/stats.sh
===================================================================
--- branches/release-0.95/tests/tutorial/app/stats.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/app/stats.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+log() {
+  printf "\nCalled as: $0: $cmdargs\n\n"
+  printf "Start time: "; /bin/date
+  printf "Running as user: "; /usr/bin/id
+  printf "Running on node: "; /bin/hostname
+  printf "Node IP address: "; /bin/hostname -I
+  printf "\nEnvironment:\n\n"
+  printenv | sort
+}
+
+awk '
+
+{ sum += $1}
+
+END { printf("%d\n",sum/NR) }
+' $*
+log 1>&2


Property changes on: branches/release-0.95/tests/tutorial/app/stats.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/bin/cleanup
===================================================================
--- branches/release-0.95/tests/tutorial/bin/cleanup	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/bin/cleanup	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,2 @@
+rm -rf *.log *.rlog *.d p?-*-*-* *.kml *.swiftx *.out output outdir logs hi.* _concurrent .swift/tmp run???
+


Property changes on: branches/release-0.95/tests/tutorial/bin/cleanup
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/bin/hosts
===================================================================
--- branches/release-0.95/tests/tutorial/bin/hosts	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/bin/hosts	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+for h in $(cat hosts.txt); do ssh $h hostname -f; done


Property changes on: branches/release-0.95/tests/tutorial/bin/hosts
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/bin/package_tutorial.sh
===================================================================
--- branches/release-0.95/tests/tutorial/bin/package_tutorial.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/bin/package_tutorial.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,15 @@
+#! /bin/sh
+ 
+BIN=$(cd $(dirname $0); pwd)
+BASE=$(cd $BIN/..; pwd)
+LOC=$(cd $BASE/..; pwd)
+
+echo executing $0 from BIN=$BIN
+echo making tutorial package of BASE=$BASE
+echo placing tutorial package in LOC=$LOC
+
+(
+  cd $LOC
+  tar zcf swift-cray-tutorial.tgz  --exclude-vcs swift-cray-tutorial
+  scp swift-cray-tutorial.tgz p01532 at raven.cray.com:
+)


Property changes on: branches/release-0.95/tests/tutorial/bin/package_tutorial.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/bin/plot.sh
===================================================================
--- branches/release-0.95/tests/tutorial/bin/plot.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/bin/plot.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+#usage: ./plotswiftlogs.ketan <swift-logfile.log>
+
+SWIFTLOGFILE=$1
+
+#TMPDIR=`mktemp -d plotlog.XXX`
+
+grep -i ProgressTicker $SWIFTLOGFILE > swiftoutfile.out
+
+SWIFTOUTFILE=swiftoutfile.out
+
+#extract start time
+TMPDATE=`grep -i progress $SWIFTOUTFILE 2>/dev/null | head -n 1 | cut -f1-2 -d ' '`
+START_TIME=`date +%s -d "$TMPDATE"`
+
+#extract end time
+TMPDATE=`grep -i progress $SWIFTOUTFILE 2>/dev/null | tail -n 1 | cut -f1-2 -d ' '`
+END_TIME=`date +%s -d "$TMPDATE"`
+
+#duration
+DIFFTIME=$((END_TIME - START_TIME))
+
+#extract active runs in a file
+(grep -o -i "Active:[0-9]*" $SWIFTOUTFILE 2>/dev/null | awk -F: '{print $2}' >active.txt)
+
+#extract successful completions in a file
+(grep -o -i "Successfully:[0-9]*" $SWIFTOUTFILE 2>/dev/null | awk -F: '{print $2}' > cumulative.txt)
+
+#prepare tics
+activelines=`wc -l active.txt | awk '{print $1}'`
+cumulines=`wc -l cumulative.txt | awk '{print $1}'`
+
+if [ $activelines -ne 0 ]
+then
+  activelinespertic=`echo "scale=5 ; $DIFFTIME / $activelines" | bc`
+fi
+
+seq 0 $activelinespertic $DIFFTIME > activetics.txt
+
+if [ $cumulines -ne 0 ]
+then
+    cumulinespertic=`echo "scale=5 ; $DIFFTIME / $cumulines" | bc`
+fi
+
+seq 0 $cumulinespertic $DIFFTIME > cumultics.txt
+
+#final plot data
+paste activetics.txt active.txt > plot_active.txt
+paste cumultics.txt cumulative.txt > plot_cumulative.txt
+
+cat << EOF1 > plotit.gp
+set terminal png enhanced
+set nokey
+set output "cumulativeplot.png"
+set xlabel "Time in sec"
+set ylabel "number of completed apps"
+set title "Cumulative Apps Completed"
+plot "plot_cumulative.txt" using 1:2 with lines
+set output "activeplot.png"
+set xlabel "Time in sec"
+set ylabel "number of active apps"
+set title "Active Apps"
+plot "plot_active.txt" using 1:2 with line
+EOF1
+
+gnuplot plotit.gp 2>/dev/null
+rm swiftoutfile.out plotit.gp active.txt cumulative.txt activetics.txt plot_active.txt plot_cumulative.txt cumultics.txt


Property changes on: branches/release-0.95/tests/tutorial/bin/plot.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/doc/README
===================================================================
--- branches/release-0.95/tests/tutorial/doc/README	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/README	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,773 @@
+Swift Tutorial for the Cloud
+----------------------------
+
+This tutorial is viewable at: <TODO> http://swiftlang.org/tutorials/cloud <FIX>
+
+
+Introduction: Why Parallel Scripting?
+-------------------------------------
+
+Swift is a simple scripting language for executing many instances of
+ordinary application programs on distributed parallel resources.
+Swift scripts run many copies of ordinary programs concurrently, using
+statements like this:
+-----
+foreach protein in proteinList {
+  runBLAST(protein);
+}
+-----
+Swift acts like a structured "shell" language. It runs programs
+concurrently as soon as their inputs are available, reducing the need
+for complex parallel programming.  Swift expresses your workflow in a
+portable fashion: The same script runs on multicore computers,
+clusters, clouds, grids, and supercomputers.
+
+In this tutorial, you'll be able to first try a few Swift examples
+(parts 1-3) on your local machine, to get a sense of the
+language. Then in parts 4-6 you'll run similar workflows on cloud
+compute nodes, and see how more complex workflows can be expressed
+with Swift scripts.
+
+Running the tutorial on you local machine
+-----------------------------------------
+
+If you are running the swift-cloud-tutorial on your local machine, ensure that
+you have swift-0.95-RC6 or greater installed.
+
+Swift installation
+~~~~~~~~~~~~~~~~~~
+
+[source, bash]
+-----
+# Download the swift-0.95 package
+wget http://swiftlang.org/packages/swift-0.95-RC6.tar.gz
+# Extract package
+tar xfz swift-0.95-RC6.tar.gz
+# Add swift to the PATH environment variable
+export PATH=$PATH:/path/to/swift-0.95-RC6/bin
+-----
+
+Get the swift-on-cloud repository
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Clone the repository from github
+[source,bash]
+----
+git clone https://github.com/yadudoc/swift-on-cloud.git
+cd swift-on-cloud
+----
+
+Or, download the zip file from github and unpack.
+[source,bash]
+----
+# Download
+wget https://github.com/yadudoc/swift-on-cloud/archive/master.zip
+unzip master.zip
+mv swift-on-cloud-master swift-on-cloud
+cd swift-on-cloud
+----
+
+Run the swift-cloud-tutorial from the cloud
+-------------------------------------------
+
+To run the tutorial on Google Compute Engine (GCE), follow the instructions here: +
+    https://github.com/yadudoc/swift-on-cloud/tree/master/compute-engine +
+or, follow instructions for GCE, in the compute-engine folder of the swift-on-cloud
+repository. Once your instances are running, connect to the headnode. Everthing
+that you require for the swift-cloud-tutorial is already set up for you on the headnode.
+
+
+Simple "science applications" for the workflow tutorial
+-------------------------------------------------------
+
+This tutorial is based on two intentionally trivial example programs,
+`simulation.sh` and `stats.sh`, (implemented as bash shell scripts)
+that serve as easy-to-understand proxies for real science
+applications. These "programs" behave as follows.
+
+simulate.sh
+~~~~~~~~~~~
+
+The simulation.sh script serves as a trivial proxy for any more
+complex scientific simulation application. It generates and prints a
+set of one or more random integers in the range [0-2^62) as controlled
+by its command line arguments, which are:
+
+-----
+$ ./app/simulate.sh --help
+./app/simulate.sh: usage:
+    -b|--bias       offset bias: add this integer to all results [0]
+    -B|--biasfile   file of integer biases to add to results [none]
+    -l|--log        generate a log in stderr if not null [y]
+    -n|--nvalues    print this many values per simulation [1]
+    -r|--range      range (limit) of generated results [100]
+    -s|--seed       use this integer [0..32767] as a seed [none]
+    -S|--seedfile   use this file (containing integer seeds [0..32767]) one per line [none]
+    -t|--timesteps  number of simulated "timesteps" in seconds (determines runtime) [1]
+    -x|--scale      scale the results by this integer [1]
+    -h|-?|?|--help  print this help
+$
+-----
+
+All of thess arguments are optional, with default values indicated above as `[n]`.
+
+////
+.simulation.sh arguments
+[width="80%",cols="^2,10",options="header"]
+
+|=======================
+|Argument|Short|Description
+|1    |runtime: sets run time of simulation.sh in seconds
+|2    |range: limits generated values to the range [0,range-1]
+|3    |biasfile: add the integer contained in this file to each value generated
+|4    |scale: multiplies each generated value by this integer
+|5    |count: number of values to generate in the simulation
+|=======================
+////
+
+With no arguments, simulate.sh prints 1 number in the range of
+1-100. Otherwise it generates n numbers of the form (R*scale)+bias
+where R is a random integer. By default it logs information about its
+execution environment to stderr.  Here's some examples of its usage:
+
+-----
+$ simulate.sh 2>log
+       5
+$ head -4 log
+
+Called as: /home/wilde/swift/tut/CIC_2013-08-09/app/simulate.sh:
+Start time: Thu Aug 22 12:40:24 CDT 2013
+Running on node: login01.osgconnect.net
+
+$ simulate.sh -n 4 -r 1000000 2>log
+  239454
+  386702
+   13849
+  873526
+
+$ simulate.sh -n 3 -r 1000000 -x 100 2>log
+ 6643700
+62182300
+ 5230600
+
+$ simulate.sh -n 2 -r 1000 -x 1000 2>log
+  565000
+  636000
+
+$ time simulate.sh -n 2 -r 1000 -x 1000 -t 3 2>log
+  336000
+  320000
+real    0m3.012s
+user    0m0.005s
+sys     0m0.006s
+-----
+
+stats.sh
+~~~~~~~~
+
+The stats.sh script serves as a trivial model of an "analysis"
+program. It reads N files each containing M integers and simply prints
+the\ average of all those numbers to stdout. Similarly to simulate.sh
+it logs environmental information to the stderr.
+
+-----
+$ ls f*
+f1  f2  f3  f4
+
+$ cat f*
+25
+60
+40
+75
+
+$ stats.sh f* 2>log
+50
+-----
+
+
+Basic of the Swift language with local execution
+------------------------------------------------
+
+A Summary of Swift in a nutshell
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+* Swift scripts are text files ending in `.swift` The `swift` command
+runs on any host, and executes these scripts. `swift` is a Java
+application, which you can install almost anywhere.  On Linux, just
+unpack the distribution `tar` file and add its `bin/` directory to
+your `PATH`.
+
+* Swift scripts run ordinary applications, just like shell scripts
+do. Swift makes it easy to run these applications on parallel and
+remote computers (from laptops to supercomputers). If you can `ssh` to
+the system, Swift can likely run applications there.
+
+* The details of where to run applications and how to get files back
+and forth are described in configuration files separate from your
+program. Swift speaks ssh, PBS, Condor, SLURM, LSF, SGE, Cobalt, and
+Globus to run applications, and scp, http, ftp, and GridFTP to move
+data.
+
+* The Swift language has 5 main data types: `boolean`, `int`,
+`string`, `float`, and `file`. Collections of these are dynamic,
+sparse arrays of arbitrary dimension and structures of scalars and/or
+arrays defined by the `type` declaration.
+
+* Swift file variables are "mapped" to external files. Swift sends
+files to and from remote systems for you automatically.
+
+* Swift variables are "single assignment": once you set them you can't
+change them (in a given block of code).  This makes Swift a natural,
+"parallel data flow" language. This programming model keeps your
+workflow scripts simple and easy to write and understand.
+
+* Swift lets you define functions to "wrap" application programs, and
+to cleanly structure more complex scripts. Swift `app` functions take
+files and parameters as inputs and return files as outputs.
+
+* A compact set of built-in functions for string and file
+manipulation, type conversions, high level IO, etc. is provided.
+Swift's equivalent of `printf()` is `tracef()`, with limited and
+slightly different format codes.
+
+* Swift's `foreach {}` statement is the main parallel workhorse of the
+language, and executes all iterations of the loop concurrently. The
+actual number of parallel tasks executed is based on available
+resources and settable "throttles".
+
+* In fact, Swift conceptually executes *all* the statements,
+expressions and function calls in your program in parallel, based on
+data flow. These are similarly throttled based on available resources
+and settings.
+
+* Swift also has `if` and `switch` statements for conditional
+execution. These are seldom needed in simple workflows but they enable
+very dynamic workflow patterns to be specified.
+
+We'll see many of these points in action in the examples below. Lets
+get started!
+
+Part 1: Run a single application under Swift
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The first swift script, p1.swift, runs simulate.sh to generate a
+single random number. It writes the number to a file.
+
+image::part01.png["p1 workflow",align="center"]
+
+.p1.swift
+-----
+sys::[cat ../part01/p1.swift]
+-----
+
+
+To run this script, run the following command:
+-----
+$ cd part01
+$ swift p1.swift
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1413-oa6fdib2
+Progress:  time: Tue, 27 Aug 2013 14:13:33 -0500
+Final status: Tue, 27 Aug 2013 14:13:33 -0500  Finished successfully:1
+$ cat sim.out 
+      84
+$ swift p1.swift
+$ cat sim.out 
+      36
+-----
+
+To cleanup the directory and remove all outputs (including the log
+files and directories that Swift generates), run the cleanup script
+which is located in the tutorial PATH:
+
+[source,bash]
+-----
+$ cleanup
+-----
+
+NOTE: You'll also find two Swift configuration files in each `partNN`
+directory of this tutorial.  These specify the environment-specific
+details of where to find application programs (file `apps`) and where
+to run them (file `sites.xml`).  These files will be explained in more
+detail in parts 4-6, and can be ignored for now.
+
+////
+It defines
+things like the work directory, the scheduler to use, and how to
+control parallelism. The sites.xml file below will tell Swift to run
+on the local machine only, and run just 1 task at a time.
+
+.swift.properties
+-----
+sys::[cat ../part01/swift.properties]
+-----
+
+ In this case, it
+indicates that the app "simulate" (the first token in the command line
+declaration of the function `simulation`, at line NNN) is located in the file
+simulate.sh and (since the path `simulate.sh` is specified with no
+directory components) Swift expects that the `simulate.sh` executable
+will be available in your $PATH.
+
+.apps
+-----
+sys::[cat ../part01/apps]
+-----
+
+////
+
+Part 2: Running an ensemble of many apps in parallel with a "foreach" loop
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The `p2.swift` script introduces the `foreach` parallel iteration
+construct to run many concurrent simulations.
+
+image::part02.png[align="center"]
+
+.p2.swift
+-----
+sys::[cat ../part02/p2.swift]
+-----
+
+The script also shows an
+example of naming the output files of an ensemble run. In this case, the output files will be named
+`output/sim_N.out`.
+
+In part 2, we also update the apps file. Instead of using shell script (simulate.sh), we use
+the equivalent python version (simulate.py). The new apps file now looks like this:
+
+-----
+sys::[cat ../part02/apps]
+-----
+
+Swift does not need to know anything about the language an application is written in. The application 
+can be written in Perl, Python, Java, Fortran, or any other language.
+
+To run the script and view the output:
+-----
+$ cd ../part02
+$ swift p2.swift
+$ ls output
+sim_0.out  sim_1.out  sim_2.out  sim_3.out  sim_4.out  sim_5.out  sim_6.out  sim_7.out  sim_8.out  sim_9.out
+$ more output/*
+::::::::::::::
+output/sim_0.out
+::::::::::::::
+      44
+::::::::::::::
+output/sim_1.out
+::::::::::::::
+      55
+...
+::::::::::::::
+output/sim_9.out
+::::::::::::::
+      82
+-----
+
+Part 3: Analyzing results of a parallel ensemble
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+After all the parallel simulations in an ensemble run have completed,
+its typically necessary to gather and analyze their results with some
+kind of post-processing analysis program or script.  p3.swift
+introduces such a postprocessing step. In this case, the files created
+by all of the parallel runs of `simulation.sh` will be averaged by by
+the trivial "analysis application" `stats.sh`:
+
+image::part03.png[align="center"]
+
+.p3.swift
+----
+sys::[cat ../part03/p3.swift]
+----
+
+To run:
+----
+$ cd part03
+$ swift p3.swift
+----
+
+Note that in `p3.swift` we expose more of the capabilities of the
+`simulate.sh` application to the `simulation()` app function:
+
+-----
+app (file o) simulation (int sim_steps, int sim_range, int sim_values)
+{
+  simulate "--timesteps" sim_steps "--range" sim_range "--nvalues" sim_values stdout=filename(o);
+}
+-----
+
+`p3.swift` also shows how to fetch application-specific values from
+the `swift` command line in a Swift script using `arg()` which
+accepts a keyword-style argument and its default value:
+
+-----
+int nsim   = toInt(arg("nsim","10"));
+int steps  = toInt(arg("steps","1"));
+int range  = toInt(arg("range","100"));
+int values = toInt(arg("values","5"));
+-----
+
+Now we can specify that more runs should be performed and that each should run for more timesteps, and produce more that one value each, within a specified range, using command line arguments placed after the Swift script name in the form `-parameterName=value`:
+
+-----
+$ swift p3.swift -nsim=3 -steps=10 -values=4 -range=1000000
+
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1439-s3vvo809
+Progress:  time: Tue, 27 Aug 2013 14:39:42 -0500
+Progress:  time: Tue, 27 Aug 2013 14:39:53 -0500  Active:2  Stage out:1
+Final status: Tue, 27 Aug 2013 14:39:53 -0500  Finished successfully:4
+
+$ ls output/
+average.out  sim_0.out  sim_1.out  sim_2.out
+$ more output/*
+::::::::::::::
+output/average.out
+::::::::::::::
+651368
+::::::::::::::
+output/sim_0.out
+::::::::::::::
+  735700
+  886206
+  997391
+  982970
+::::::::::::::
+output/sim_1.out
+::::::::::::::
+  260071
+  264195
+  869198
+  933537
+::::::::::::::
+output/sim_2.out
+::::::::::::::
+  201806
+  213540
+  527576
+  944233
+-----
+
+Now try running (`-nsim=`) 100 simulations of (`-steps=`) 1 second each:
+
+-----
+$ swift p3.swift -nsim=100 -steps=1 
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1444-rq809ts6
+Progress:  time: Tue, 27 Aug 2013 14:44:55 -0500
+Progress:  time: Tue, 27 Aug 2013 14:44:56 -0500  Selecting site:79  Active:20  Stage out:1
+Progress:  time: Tue, 27 Aug 2013 14:44:58 -0500  Selecting site:58  Active:20  Stage out:1  Finished successfully:21
+Progress:  time: Tue, 27 Aug 2013 14:44:59 -0500  Selecting site:37  Active:20  Stage out:1  Finished successfully:42
+Progress:  time: Tue, 27 Aug 2013 14:45:00 -0500  Selecting site:16  Active:20  Stage out:1  Finished successfully:63
+Progress:  time: Tue, 27 Aug 2013 14:45:02 -0500  Active:15  Stage out:1  Finished successfully:84
+Progress:  time: Tue, 27 Aug 2013 14:45:03 -0500  Finished successfully:101
+Final status: Tue, 27 Aug 2013 14:45:03 -0500  Finished successfully:101
+-----
+
+We can see from Swift's "progress" status that the tutorial's default
+`swift.properties` parameters for local execution allow Swift to run up to 20
+application invocations concurrently on the login node. We'll look at
+this in more detail in the next sections where we execute applications
+on the site's compute nodes.
+
+
+Running applications on compute nodes with Swift
+------------------------------------------------
+
+Part 4: Running a parallel ensemble on compute nodes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+`p4.swift` will run our mock "simulation"
+applications on compute nodes.  The script is similar to as
+`p3.swift`, but specifies that each simulation app invocation should
+additionally return the log file which the application writes to
+`stderr`.
+
+////
+
+FIXME: need to revise this figure: drop prog:
+
+, making the parallel portion of the script behave like this:
+
+image::part04.png[align="center"]
+
+.p4.swift
+----
+sys::[cat ../part04/p4.swift]
+----
+////
+
+Now when you run `swift p4.swift` you'll see that two types output
+files will placed in the `output/` directory: `sim_N.out` and
+`sim_N.log`.  The log files provide data on the runtime environment of
+each app invocation. For example:
+
+-----
+$ cat output/sim_0.log 
+
+Called as: simulate.sh: --timesteps 1 --range 100 --nvalues 5
+
+Start time: Tue Oct 22 14:54:11 CDT 2013
+Running as user: uid=5116(davidk) gid=311(collab) groups=311(collab),104(fuse),1349(swift),45053(swat)
+Running on node: stomp
+Node IP address: 140.221.9.237 
+
+Simulation parameters:
+
+bias=0
+biasfile=none
+initseed=none
+log=yes
+paramfile=none
+range=100
+scale=1
+seedfile=none
+timesteps=1
+output width=8
+
+Environment:
+
+EDITOR=vim
+HOME=/homes/davidk
+JAVA_HOME=/nfs/proj-davidk/jdk1.7.0_01
+LANG=C
+....
+-----
+
+/////
+To tell Swift to run the apps on compute nodes, we specify in the
+`apps` file that the apps should be executed on the `cloud` site
+(instead of the `localhost` site).  We can specify the location of
+each app in the third field of the `apps` file, with either an
+absolute pathname or the name of an executable to be located in
+`PATH`). Here we use the latter form:
+
+-----
+$ cat apps
+cloud simulate simulate.sh
+cloud stats    stats.sh
+-----
+
+You can experiment, for example, with an alternate version of stats.sh by specfying that app's location explicitly:
+
+-----
+$ cat apps
+cloud simulate simulate.sh
+cloud stats    /home/users/p01532/bin/my-alt-stats.sh
+-----
+
+We can see that when we run many apps requesting a larger set of nodes (6), we are indeed running on the compute nodes:
+-----
+$ swift p4.swift -nsim=1000 -steps=1 
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1638-t23ax37a
+Progress:  time: Tue, 27 Aug 2013 16:38:11 -0500
+Progress:  time: Tue, 27 Aug 2013 16:38:12 -0500  Initializing:966
+Progress:  time: Tue, 27 Aug 2013 16:38:13 -0500  Selecting site:499  Submitting:500  Submitted:1
+Progress:  time: Tue, 27 Aug 2013 16:38:14 -0500  Selecting site:499  Stage in:1  Submitted:500
+Progress:  time: Tue, 27 Aug 2013 16:38:16 -0500  Selecting site:499  Submitted:405  Active:95  Stage out:1
+Progress:  time: Tue, 27 Aug 2013 16:38:17 -0500  Selecting site:430  Submitted:434  Active:66  Stage out:1  Finished successfully:69
+Progress:  time: Tue, 27 Aug 2013 16:38:18 -0500  Selecting site:388  Submitted:405  Active:95  Stage out:1  Finished successfully:111
+...
+Progress:  time: Tue, 27 Aug 2013 16:38:30 -0500  Stage in:1  Submitted:93  Active:94  Finished successfully:812
+Progress:  time: Tue, 27 Aug 2013 16:38:31 -0500  Submitted:55  Active:95  Stage out:1  Finished successfully:849
+Progress:  time: Tue, 27 Aug 2013 16:38:32 -0500  Active:78  Stage out:1  Finished successfully:921
+Progress:  time: Tue, 27 Aug 2013 16:38:34 -0500  Active:70  Stage out:1  Finished successfully:929
+Progress:  time: Tue, 27 Aug 2013 16:38:37 -0500  Stage in:1  Finished successfully:1000
+Progress:  time: Tue, 27 Aug 2013 16:38:38 -0500  Stage out:1  Finished successfully:1000
+Final status: Tue, 27 Aug 2013 16:38:38 -0500  Finished successfully:1001
+
+$ grep "on node:" output/*log | head
+output/sim_0.log:Running on node: nid00063
+output/sim_100.log:Running on node: nid00060
+output/sim_101.log:Running on node: nid00061
+output/sim_102.log:Running on node: nid00032
+output/sim_103.log:Running on node: nid00060
+output/sim_104.log:Running on node: nid00061
+output/sim_105.log:Running on node: nid00032
+output/sim_106.log:Running on node: nid00060
+output/sim_107.log:Running on node: nid00061
+output/sim_108.log:Running on node: nid00062
+
+$ grep "on node:" output/*log | awk '{print $4}' | sort | uniq -c
+    158 nid00032
+    156 nid00033
+    171 nid00060
+    178 nid00061
+    166 nid00062
+    171 nid00063
+$ hostname
+raven
+$ hostname -f
+nid00008
+-----
+/////
+Performing larger Swift runs
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To test with larger runs, there are two changes that are required. The first is a 
+change to the command line arguments. The example below will run 1000 simulations
+with each simulation taking 5 seconds.
+
+-----
+$ swift p6.swift -steps=5 -nsim=1000
+-----
+
+Part 5: Controlling the compute-node pools where applications run
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This section is under development.
+
+Part 6: Specifying more complex workflow patterns
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+p6.swift expands the workflow pattern of p4.swift to add additional
+stages to the workflow. Here, we generate a dynamic seed value that
+will be used by all of the simulations, and for each simulation, we
+run an pre-processing application to generate a unique "bias
+file". This pattern is shown below, followed by the Swift script.
+
+image::part06.png[align="center"]
+
+.p6.swift
+----
+sys::[cat ../part06/p6.swift]
+----
+
+Note that the workflow is based on data flow dependencies: each simulation depends on the seed value, calculated in this statement:
+-----
+seedfile = genseed(1);
+-----
+and on the bias file, computed and then consumed in these two dependent statements:
+-----
+  biasfile = genbias(1000, 20, simulate_script);
+  (simout,simlog) = simulation(steps, range, biasfile, 1000000, values, simulate_script, seedfile);
+-----
+
+To run:
+----
+$ cd ../part06
+$ swift p6.swift
+----
+
+The default parameters result in the following execution log:
+
+-----
+$ swift p6.swift
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1917-jvs4gqm5
+Progress:  time: Tue, 27 Aug 2013 19:17:56 -0500
+
+*** Script parameters: nsim=10 range=100 num values=10
+
+Progress:  time: Tue, 27 Aug 2013 19:17:57 -0500  Stage in:1  Submitted:10
+Generated seed=382537
+Progress:  time: Tue, 27 Aug 2013 19:17:59 -0500  Active:9  Stage out:1  Finished successfully:11
+Final status: Tue, 27 Aug 2013 19:18:00 -0500  Finished successfully:22
+-----
+which produces the following output:
+-----
+$ ls -lrt output
+total 264
+-rw-r--r-- 1 p01532 61532     9 Aug 27 19:17 seed.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_9.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_8.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_7.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_6.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_5.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_4.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_3.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_2.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_1.dat
+-rw-r--r-- 1 p01532 61532   180 Aug 27 19:17 bias_0.dat
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:17 sim_9.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_9.log
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_8.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:17 sim_7.out
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:17 sim_6.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_6.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:17 sim_5.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_5.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:17 sim_4.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_4.log
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:17 sim_1.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:18 sim_8.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:18 sim_7.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:18 sim_3.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:18 sim_3.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:18 sim_2.out
+-rw-r--r-- 1 p01532 61532 14898 Aug 27 19:18 sim_2.log
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:18 sim_1.out
+-rw-r--r-- 1 p01532 61532    90 Aug 27 19:18 sim_0.out
+-rw-r--r-- 1 p01532 61532 14897 Aug 27 19:18 sim_0.log
+-rw-r--r-- 1 p01532 61532     9 Aug 27 19:18 average.out
+-rw-r--r-- 1 p01532 61532 14675 Aug 27 19:18 average.log
+-----
+
+Each sim_N.out file is the sum of its bias file plus newly "simulated" random output scaled by 1,000,000:
+
+-----
+$ cat output/bias_0.dat
+     302
+     489
+      81
+     582
+     664
+     290
+     839
+     258
+     506
+     310
+     293
+     508
+      88
+     261
+     453
+     187
+      26
+     198
+     402
+     555
+
+$ cat output/sim_0.out
+64000302
+38000489
+32000081
+12000582
+46000664
+36000290
+35000839
+22000258
+49000506
+75000310
+-----
+
+We produce 20 values in each bias file. Simulations of less than that
+number of values ignore the unneeded number, while simualtions of more
+than 20 will use the last bias number for all remoaining values past
+20.  As an exercise, adjust the code to produce the same number of
+bias values as is needed for each simulation.  As a further exercise,
+modify the script to generate a unique seed value for each simulation,
+which is a common practice in ensemble computations.
+
+Tips for Specific Resources
+---------------------------
+
+Open Science Data Cloud
+~~~~~~~~~~~~~~~~~~~~~~~
+1. When you start instances on OSDC, use the standard Ubuntu image.
+2. Ensure that your SSH key is added to the instance for password login.
+3. Swift should run on the OSDC headnode.
+4. You can use the following command within coaster-service.conf to automatically
+populate WORKER_HOSTS with the IP addresses of all active instances you have running.
+
+-----
+export WORKER_HOSTS=$( nova list | grep ACTIVE | sed -e 's/^.*private=//' -e 's/ .*//' |sed ':a;N;$!ba;s/\n/ /g' )
+-----

Added: branches/release-0.95/tests/tutorial/doc/TODO
===================================================================
--- branches/release-0.95/tests/tutorial/doc/TODO	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/TODO	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,137 @@
+PLAN
+
+basics
+cloud
+uc3
+multisystems
+(modis)
+
+get hosts.txt for cloud dynamically
+
+Show variety of UC3 activity and what ran where
+
+get hostname and app_resources into provider staging (hostname into all _swiftwrap)
+
+Show gridftp and go connect to process the modis dataset
+
+Show SwiftR for R users, SwiftPy for Enthought PY?
+
+fetching apps vs sending apps vs parrot/cvmfs/oasis etc ????
+
+Demo script-aps, bin apps, building apps, caching apps. etc.
+
+Do a Swift BLAST workflow  -- with viz !!!  (spice it up with help from Dina)
+
+OSG page from Mats: "Is your job HTC-ready"
+
+Use new Trunk config in tutorial?
+
+
+Add viz and status display; add node probing to tutorial.
+
+Debug failure with pinfiles
+
+
+What "exercises to suggest?"
+
+- run stats app locally
+- installed vs transferred apps
+- transferred programs vs transferred scripts
+- summarize things about the env from the .log files, ala stats.
+
+Y-style dag: 2 sims and average
+
+Show how to find temp files at runtime...
+
+Show how to find hung processes at runtime...  (or get other trace data...)
+
+make your owb versions of the programs; verify that you can substitute them
+
+Add a layer to isolate shell version v installed version
+
+Show how to handle a paramfile
+
+Test if OSGCOnnect works and account string (PorjectName) works OK for both!
+
+SHow how to handle long lists of files (eg writeData and other swift.properties)
+
+Expand arith to arb prec using bc
+
+
+ISSUES
+
+error in pin files? debug and turn back on
+PATH issues for various providers
+
+bin dir?
+
+setup.csh and .csh testing
+
+IMPROVEMENTS
+
+1. Cleanup.sh mentioned in the tutorial
+[fixed]
+ 
+2. cd ../part02
+[fixed]
+ 
+3. support for zsh, csh
+[pending]
+ 
+4. What results are created and where did the outputs go ?
+and pointers to what the log files mean
+[pending]
+ 
+5. Part4,
+- cd ../part04 is missing. Cleanup the README
+[fixed]
+ 
+6. Part5
+- cd ../part05 is missing. Cleanup
+[fixed]
+ 
+7. Part7
+-Change from running on Tukey analysis cluster compute nodes
+[fixed]
+ 
+8. Part6
+command line args for nsim and steps, tell user the different behavior
+that can be expected with different arg options
+[pending]
+ 
+9. Draw workflow for the modis demos
+[pending]
+ 
+10. Link to more technical swift-lang references
+[pending]
+ 
+11. Links to detailed language constructs, when explaining
+apps, link to the section on apps in the userguide.
+[pending]
+ 
+ 
+ 
+---
+
+From Yadu:
+
+I've committed all the changes that I made on Friday and you can get them 
+from -> https://svn.ci.uchicago.edu/svn/vdl2/SwiftTutorials/CIC_2013-08-09
+
+I'm trying to make this tutorial easily work on several sites so that, we
+do not have to tweak things for every single tutorial. Once this is done,
+I can also add it to the test-battery as well. I think this has value 
+considering that we spend atleast 1-2 days for every demo.
+
+Now, the major pending item is the Modis demo, specifically the issue of 
+bringing data to any site and scripts. Slight tweaks to allow for sending
+the scripts as args to apps would also be needed.
+
+So the major changes are: 
+1. Source the setup.sh script with the target site name
+eg. source setups.sh <cloud|uc3|midway|beagle>
+2. No separate cloud folder
+3. [pending] fix modis data and scripts
+4. [pending] support for zsh and other shells? 
+
+---

Added: branches/release-0.95/tests/tutorial/doc/activeplot.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/activeplot.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/asciidoc.css
===================================================================
--- branches/release-0.95/tests/tutorial/doc/asciidoc.css	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/asciidoc.css	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,26 @@
+a:link { color:navy; }
+a:visited { color:navy; }
+
+.monospaced, code, pre {
+  font-family: "Courier New", Courier, monospace;
+  font-size: medium; /* inherit; */
+  color: black;
+  padding: 0;
+  margin: 0;
+}
+
+/*
+  background: #f8f8f8;
+  border: 1px solid #dddddd;
+  border-left: 5px solid #f0f0f0;
+  margin-right: 10%;
+*/
+
+div.listingblock > div.content {
+  padding: 0.5em;
+  background: none;
+  border: none;
+  border-left: none;
+  margin-right: none;
+}
+

Added: branches/release-0.95/tests/tutorial/doc/build_docs.sh
===================================================================
--- branches/release-0.95/tests/tutorial/doc/build_docs.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/build_docs.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,4 @@
+#!/bin/bash -e
+
+asciidoc -a icons -a toc -a toplevels=2 -a stylesheet=$PWD/asciidoc.css -a max-width=800px -o tutorial.html README
+


Property changes on: branches/release-0.95/tests/tutorial/doc/build_docs.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/doc/cumulativeplot.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/cumulativeplot.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/figs/modis.dia
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/figs/modis.dia
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/figs/modis.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/figs/modis.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/caution.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/caution.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/example.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/example.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/home.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/home.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/important.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/important.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/next.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/note.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/note.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/prev.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/prev.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/tip.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/tip.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/up.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/up.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/images/icons/warning.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/images/icons/warning.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part01.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part01.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part02.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part02.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part03.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part03.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part04.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part04.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part05.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part05.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/part06.png
===================================================================
(Binary files differ)


Property changes on: branches/release-0.95/tests/tutorial/doc/part06.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: branches/release-0.95/tests/tutorial/doc/push.sh
===================================================================
--- branches/release-0.95/tests/tutorial/doc/push.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/push.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+# scp -r swift-cray-tutorial.html images *png login.ci.uchicago.edu:/ci/www/projects/swift/tutorials/cray
+
+tar zcf - --exclude-vcs *html *png images | ssh login.ci.uchicago.edu "cd /ci/www/projects/swift/tutorials/cray; tar zxf -"


Property changes on: branches/release-0.95/tests/tutorial/doc/push.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/doc/raven.1000.progress.out
===================================================================
--- branches/release-0.95/tests/tutorial/doc/raven.1000.progress.out	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/raven.1000.progress.out	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,34 @@
+p01532 at raven:~/swift-cray-tutorial/part04> swift p4.swift -nsim=1000 -steps=5
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130824-2131-g43l2g51
+Progress:  time: Sat, 24 Aug 2013 21:31:42 -0500
+
+*** Script parameters: nsim=1000 steps=5 range=100 
+
+Progress:  time: Sat, 24 Aug 2013 21:31:43 -0500  Initializing:998  Selecting site:2
+Progress:  time: Sat, 24 Aug 2013 21:31:45 -0500  Submitting:999  Submitted:1
+Progress:  time: Sat, 24 Aug 2013 21:31:46 -0500  Stage in:1  Submitted:999
+Progress:  time: Sat, 24 Aug 2013 21:31:52 -0500  Submitted:712  Active:287  Stage out:1
+Progress:  time: Sat, 24 Aug 2013 21:31:53 -0500  Submitted:682  Active:278  Stage out:8  Finished successfully:32
+Progress:  time: Sat, 24 Aug 2013 21:31:54 -0500  Submitted:605  Active:252  Stage out:32  Finished successfully:111
+Progress:  time: Sat, 24 Aug 2013 21:31:55 -0500  Submitted:480  Active:264  Stage out:23  Finished successfully:233
+Progress:  time: Sat, 24 Aug 2013 21:31:57 -0500  Submitted:442  Active:287  Stage out:1  Finished successfully:270
+Progress:  time: Sat, 24 Aug 2013 21:31:58 -0500  Submitted:432  Active:287  Stage out:1  Finished successfully:280
+Progress:  time: Sat, 24 Aug 2013 21:31:59 -0500  Submitted:411  Active:287  Stage out:1  Finished successfully:301
+Progress:  time: Sat, 24 Aug 2013 21:32:00 -0500  Submitted:317  Active:287  Finished successfully:396
+Progress:  time: Sat, 24 Aug 2013 21:32:01 -0500  Submitted:244  Active:263  Stage out:25  Finished successfully:468
+Progress:  time: Sat, 24 Aug 2013 21:32:02 -0500  Submitted:213  Active:233  Stage out:1  Finished successfully:553
+Progress:  time: Sat, 24 Aug 2013 21:32:03 -0500  Submitted:210  Active:221  Stage out:1  Finished successfully:568
+Progress:  time: Sat, 24 Aug 2013 21:32:04 -0500  Submitted:191  Active:221  Finished successfully:588
+Progress:  time: Sat, 24 Aug 2013 21:32:05 -0500  Submitted:122  Active:213  Stage out:7  Finished successfully:658
+Progress:  time: Sat, 24 Aug 2013 21:32:06 -0500  Submitted:117  Active:129  Stage out:5  Finished successfully:749
+Progress:  time: Sat, 24 Aug 2013 21:32:09 -0500  Submitted:117  Active:98  Stage out:1  Finished successfully:784
+Progress:  time: Sat, 24 Aug 2013 21:32:10 -0500  Submitted:96  Active:95  Stage out:1  Finished successfully:808
+Progress:  time: Sat, 24 Aug 2013 21:32:11 -0500  Stage in:1  Submitted:33  Active:91  Stage out:4  Finished successfully:871
+Progress:  time: Sat, 24 Aug 2013 21:32:12 -0500  Submitted:21  Active:96  Finished successfully:883
+Progress:  time: Sat, 24 Aug 2013 21:32:14 -0500  Submitted:21  Active:95  Stage out:1  Finished successfully:883
+Progress:  time: Sat, 24 Aug 2013 21:32:15 -0500  Active:93  Stage out:1  Finished successfully:906
+Progress:  time: Sat, 24 Aug 2013 21:32:16 -0500  Active:42  Stage out:2  Finished successfully:956
+Progress:  time: Sat, 24 Aug 2013 21:32:20 -0500  Active:20  Stage out:1  Finished successfully:979
+Final status: Sat, 24 Aug 2013 21:32:20 -0500  Finished successfully:1000

Added: branches/release-0.95/tests/tutorial/doc/raven.10000.progress.out
===================================================================
--- branches/release-0.95/tests/tutorial/doc/raven.10000.progress.out	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/raven.10000.progress.out	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,34 @@
+p01532 at raven:~/swift-cray-tutorial/part04> swift p4.swift -nsim=10000 -steps=2
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130824-2132-n4z3dxk1
+Progress:  time: Sat, 24 Aug 2013 21:32:43 -0500
+
+*** Script parameters: nsim=10000 steps=2 range=100 
+
+Progress:  time: Sat, 24 Aug 2013 21:32:45 -0500  Initializing:3
+Progress:  time: Sat, 24 Aug 2013 21:32:46 -0500  Initializing:33
+Progress:  time: Sat, 24 Aug 2013 21:32:47 -0500  Initializing:1613
+Progress:  time: Sat, 24 Aug 2013 21:32:50 -0500  Selecting site:9999  Submitting:1
+Progress:  time: Sat, 24 Aug 2013 21:32:52 -0500  Selecting site:8998  Stage in:1  Submitted:1001
+Progress:  time: Sat, 24 Aug 2013 21:32:55 -0500  Selecting site:8998  Submitted:714  Active:287  Stage out:1
+Progress:  time: Sat, 24 Aug 2013 21:32:57 -0500  Selecting site:8950  Submitted:714  Active:287  Stage out:1  Finished successfully:48
+Progress:  time: Sat, 24 Aug 2013 21:32:58 -0500  Selecting site:8921  Submitting:1  Submitted:713  Active:257  Stage out:31  Finished successfully:77
+Progress:  time: Sat, 24 Aug 2013 21:32:59 -0500  Selecting site:8858  Stage in:1  Submitting:5  Submitted:708  Active:178  Stage out:110  Finished successfully:140
+Progress:  time: Sat, 24 Aug 2013 21:33:00 -0500  Selecting site:8658  Stage in:1  Submitting:1  Submitted:713  Active:287  Finished successfully:340
+.....
+Progress:  time: Sat, 24 Aug 2013 21:34:39 -0500  Submitted:555  Active:287  Finished successfully:9158
+Progress:  time: Sat, 24 Aug 2013 21:34:40 -0500  Submitted:454  Active:283  Stage out:4  Finished successfully:9259
+Progress:  time: Sat, 24 Aug 2013 21:34:41 -0500  Submitted:361  Active:285  Stage out:3  Finished successfully:9351
+Progress:  time: Sat, 24 Aug 2013 21:34:42 -0500  Submitted:265  Active:287  Stage out:1  Finished successfully:9447
+Progress:  time: Sat, 24 Aug 2013 21:34:43 -0500  Submitted:206  Active:224  Stage out:6  Finished successfully:9564
+Progress:  time: Sat, 24 Aug 2013 21:34:44 -0500  Submitted:185  Active:155  Stage out:10  Finished successfully:9650
+Progress:  time: Sat, 24 Aug 2013 21:34:45 -0500  Submitted:181  Active:124  Stage out:39  Finished successfully:9656
+Progress:  time: Sat, 24 Aug 2013 21:34:46 -0500  Submitted:169  Active:56  Stage out:94  Finished successfully:9681
+Progress:  time: Sat, 24 Aug 2013 21:34:47 -0500  Submitted:76  Active:95  Stage out:1  Finished successfully:9828
+Progress:  time: Sat, 24 Aug 2013 21:34:48 -0500  Submitted:67  Active:95  Stage out:1  Finished successfully:9837
+Progress:  time: Sat, 24 Aug 2013 21:34:49 -0500  Active:81  Stage out:1  Finished successfully:9918
+Progress:  time: Sat, 24 Aug 2013 21:34:50 -0500  Active:71  Stage out:1  Finished successfully:9928
+Progress:  time: Sat, 24 Aug 2013 21:34:51 -0500  Active:6  Stage out:2  Finished successfully:9992
+Final status: Sat, 24 Aug 2013 21:34:51 -0500  Finished successfully:10000
+p01532 at raven:~/swift-cray-tutorial/part04> 

Added: branches/release-0.95/tests/tutorial/doc/tutorial.html
===================================================================
--- branches/release-0.95/tests/tutorial/doc/tutorial.html	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/doc/tutorial.html	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,953 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
+<meta name="generator" content="AsciiDoc 8.6.9" />
+<title></title>
+<style type="text/css">
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
+
+/* Default font. */
+body {
+  font-family: Georgia,serif;
+}
+
+/* Title font. */
+h1, h2, h3, h4, h5, h6,
+div.title, caption.title,
+thead, p.table.header,
+#toctitle,
+#author, #revnumber, #revdate, #revremark,
+#footer {
+  font-family: Arial,Helvetica,sans-serif;
+}
+
+body {
+  margin: 1em 5% 1em 5%;
+}
+
+a {
+  color: blue;
+  text-decoration: underline;
+}
+a:visited {
+  color: fuchsia;
+}
+
+em {
+  font-style: italic;
+  color: navy;
+}
+
+strong {
+  font-weight: bold;
+  color: #083194;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #527bbd;
+  margin-top: 1.2em;
+  margin-bottom: 0.5em;
+  line-height: 1.3;
+}
+
+h1, h2, h3 {
+  border-bottom: 2px solid silver;
+}
+h2 {
+  padding-top: 0.5em;
+}
+h3 {
+  float: left;
+}
+h3 + * {
+  clear: left;
+}
+h5 {
+  font-size: 1.0em;
+}
+
+div.sectionbody {
+  margin-left: 0;
+}
+
+hr {
+  border: 1px solid silver;
+}
+
+p {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+ul, ol, li > p {
+  margin-top: 0;
+}
+ul > li     { color: #aaa; }
+ul > li > * { color: black; }
+
+.monospaced, code, pre {
+  font-family: "Courier New", Courier, monospace;
+  font-size: inherit;
+  color: navy;
+  padding: 0;
+  margin: 0;
+}
+pre {
+  white-space: pre-wrap;
+}
+
+#author {
+  color: #527bbd;
+  font-weight: bold;
+  font-size: 1.1em;
+}
+#email {
+}
+#revnumber, #revdate, #revremark {
+}
+
+#footer {
+  font-size: small;
+  border-top: 2px solid silver;
+  padding-top: 0.5em;
+  margin-top: 4.0em;
+}
+#footer-text {
+  float: left;
+  padding-bottom: 0.5em;
+}
+#footer-badges {
+  float: right;
+  padding-bottom: 0.5em;
+}
+
+#preamble {
+  margin-top: 1.5em;
+  margin-bottom: 1.5em;
+}
+div.imageblock, div.exampleblock, div.verseblock,
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
+div.admonitionblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+div.admonitionblock {
+  margin-top: 2.0em;
+  margin-bottom: 2.0em;
+  margin-right: 10%;
+  color: #606060;
+}
+
+div.content { /* Block element content. */
+  padding: 0;
+}
+
+/* Block element titles. */
+div.title, caption.title {
+  color: #527bbd;
+  font-weight: bold;
+  text-align: left;
+  margin-top: 1.0em;
+  margin-bottom: 0.5em;
+}
+div.title + * {
+  margin-top: 0;
+}
+
+td div.title:first-child {
+  margin-top: 0.0em;
+}
+div.content div.title:first-child {
+  margin-top: 0.0em;
+}
+div.content + div.title {
+  margin-top: 0.0em;
+}
+
+div.sidebarblock > div.content {
+  background: #ffffee;
+  border: 1px solid #dddddd;
+  border-left: 4px solid #f0f0f0;
+  padding: 0.5em;
+}
+
+div.listingblock > div.content {
+  border: 1px solid #dddddd;
+  border-left: 5px solid #f0f0f0;
+  background: #f8f8f8;
+  padding: 0.5em;
+}
+
+div.quoteblock, div.verseblock {
+  padding-left: 1.0em;
+  margin-left: 1.0em;
+  margin-right: 10%;
+  border-left: 5px solid #f0f0f0;
+  color: #888;
+}
+
+div.quoteblock > div.attribution {
+  padding-top: 0.5em;
+  text-align: right;
+}
+
+div.verseblock > pre.content {
+  font-family: inherit;
+  font-size: inherit;
+}
+div.verseblock > div.attribution {
+  padding-top: 0.75em;
+  text-align: left;
+}
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
+div.verseblock + div.attribution {
+  text-align: left;
+}
+
+div.admonitionblock .icon {
+  vertical-align: top;
+  font-size: 1.1em;
+  font-weight: bold;
+  text-decoration: underline;
+  color: #527bbd;
+  padding-right: 0.5em;
+}
+div.admonitionblock td.content {
+  padding-left: 0.5em;
+  border-left: 3px solid #dddddd;
+}
+
+div.exampleblock > div.content {
+  border-left: 3px solid #dddddd;
+  padding-left: 0.5em;
+}
+
+div.imageblock div.content { padding-left: 0; }
+span.image img { border-style: none; vertical-align: text-bottom; }
+a.image:visited { color: white; }
+
+dl {
+  margin-top: 0.8em;
+  margin-bottom: 0.8em;
+}
+dt {
+  margin-top: 0.5em;
+  margin-bottom: 0;
+  font-style: normal;
+  color: navy;
+}
+dd > *:first-child {
+  margin-top: 0.1em;
+}
+
+ul, ol {
+    list-style-position: outside;
+}
+ol.arabic {
+  list-style-type: decimal;
+}
+ol.loweralpha {
+  list-style-type: lower-alpha;
+}
+ol.upperalpha {
+  list-style-type: upper-alpha;
+}
+ol.lowerroman {
+  list-style-type: lower-roman;
+}
+ol.upperroman {
+  list-style-type: upper-roman;
+}
+
+div.compact ul, div.compact ol,
+div.compact p, div.compact p,
+div.compact div, div.compact div {
+  margin-top: 0.1em;
+  margin-bottom: 0.1em;
+}
+
+tfoot {
+  font-weight: bold;
+}
+td > div.verse {
+  white-space: pre;
+}
+
+div.hdlist {
+  margin-top: 0.8em;
+  margin-bottom: 0.8em;
+}
+div.hdlist tr {
+  padding-bottom: 15px;
+}
+dt.hdlist1.strong, td.hdlist1.strong {
+  font-weight: bold;
+}
+td.hdlist1 {
+  vertical-align: top;
+  font-style: normal;
+  padding-right: 0.8em;
+  color: navy;
+}
+td.hdlist2 {
+  vertical-align: top;
+}
+div.hdlist.compact tr {
+  margin: 0;
+  padding-bottom: 0;
+}
+
+.comment {
+  background: yellow;
+}
+
+.footnote, .footnoteref {
+  font-size: 0.8em;
+}
+
+span.footnote, span.footnoteref {
+  vertical-align: super;
+}
+
+#footnotes {
+  margin: 20px 0 20px 0;
+  padding: 7px 0 0 0;
+}
+
+#footnotes div.footnote {
+  margin: 0 0 5px 0;
+}
+
+#footnotes hr {
+  border: none;
+  border-top: 1px solid silver;
+  height: 1px;
+  text-align: left;
+  margin-left: 0;
+  width: 20%;
+  min-width: 100px;
+}
+
+div.colist td {
+  padding-right: 0.5em;
+  padding-bottom: 0.3em;
+  vertical-align: top;
+}
+div.colist td img {
+  margin-top: 0.3em;
+}
+
+ at media print {
+  #footer-badges { display: none; }
+}
+
+#toc {
+  margin-bottom: 2.5em;
+}
+
+#toctitle {
+  color: #527bbd;
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-top: 1.0em;
+  margin-bottom: 0.1em;
+}
+
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+div.toclevel2 {
+  margin-left: 2em;
+  font-size: 0.9em;
+}
+div.toclevel3 {
+  margin-left: 4em;
+  font-size: 0.9em;
+}
+div.toclevel4 {
+  margin-left: 6em;
+  font-size: 0.9em;
+}
+
+span.aqua { color: aqua; }
+span.black { color: black; }
+span.blue { color: blue; }
+span.fuchsia { color: fuchsia; }
+span.gray { color: gray; }
+span.green { color: green; }
+span.lime { color: lime; }
+span.maroon { color: maroon; }
+span.navy { color: navy; }
+span.olive { color: olive; }
+span.purple { color: purple; }
+span.red { color: red; }
+span.silver { color: silver; }
+span.teal { color: teal; }
+span.white { color: white; }
+span.yellow { color: yellow; }
+
+span.aqua-background { background: aqua; }
+span.black-background { background: black; }
+span.blue-background { background: blue; }
+span.fuchsia-background { background: fuchsia; }
+span.gray-background { background: gray; }
+span.green-background { background: green; }
+span.lime-background { background: lime; }
+span.maroon-background { background: maroon; }
+span.navy-background { background: navy; }
+span.olive-background { background: olive; }
+span.purple-background { background: purple; }
+span.red-background { background: red; }
+span.silver-background { background: silver; }
+span.teal-background { background: teal; }
+span.white-background { background: white; }
+span.yellow-background { background: yellow; }
+
+span.big { font-size: 2em; }
+span.small { font-size: 0.6em; }
+
+span.underline { text-decoration: underline; }
+span.overline { text-decoration: overline; }
+span.line-through { text-decoration: line-through; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+
+/*
+ * xhtml11 specific
+ *
+ * */
+
+div.tableblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+div.tableblock > table {
+  border: 3px solid #527bbd;
+}
+thead, p.table.header {
+  font-weight: bold;
+  color: #527bbd;
+}
+p.table {
+  margin-top: 0;
+}
+/* Because the table frame attribute is overriden by CSS in most browsers. */
+div.tableblock > table[frame="void"] {
+  border-style: none;
+}
+div.tableblock > table[frame="hsides"] {
+  border-left-style: none;
+  border-right-style: none;
+}
+div.tableblock > table[frame="vsides"] {
+  border-top-style: none;
+  border-bottom-style: none;
+}
+
+
+/*
+ * html5 specific
+ *
+ * */
+
+table.tableblock {
+  margin-top: 1.0em;
+  margin-bottom: 1.5em;
+}
+thead, p.tableblock.header {
+  font-weight: bold;
+  color: #527bbd;
+}
+p.tableblock {
+  margin-top: 0;
+}
+table.tableblock {
+  border-width: 3px;
+  border-spacing: 0px;
+  border-style: solid;
+  border-color: #527bbd;
+  border-collapse: collapse;
+}
+th.tableblock, td.tableblock {
+  border-width: 1px;
+  padding: 4px;
+  border-style: solid;
+  border-color: #527bbd;
+}
+
+table.tableblock.frame-topbot {
+  border-left-style: hidden;
+  border-right-style: hidden;
+}
+table.tableblock.frame-sides {
+  border-top-style: hidden;
+  border-bottom-style: hidden;
+}
+table.tableblock.frame-none {
+  border-style: hidden;
+}
+
+th.tableblock.halign-left, td.tableblock.halign-left {
+  text-align: left;
+}
+th.tableblock.halign-center, td.tableblock.halign-center {
+  text-align: center;
+}
+th.tableblock.halign-right, td.tableblock.halign-right {
+  text-align: right;
+}
+
+th.tableblock.valign-top, td.tableblock.valign-top {
+  vertical-align: top;
+}
+th.tableblock.valign-middle, td.tableblock.valign-middle {
+  vertical-align: middle;
+}
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
+  vertical-align: bottom;
+}
+
+
+/*
+ * manpage specific
+ *
+ * */
+
+body.manpage h1 {
+  padding-top: 0.5em;
+  padding-bottom: 0.5em;
+  border-top: 2px solid silver;
+  border-bottom: 2px solid silver;
+}
+body.manpage h2 {
+  border-style: none;
+}
+body.manpage div.sectionbody {
+  margin-left: 3em;
+}
+
+ at media print {
+  body.manpage div#toc { display: none; }
+}
+
+
+a:link { color:navy; }
+a:visited { color:navy; }
+
+.monospaced, code, pre {
+  font-family: "Courier New", Courier, monospace;
+  font-size: medium; /* inherit; */
+  color: black;
+  padding: 0;
+  margin: 0;
+}
+
+/*
+  background: #f8f8f8;
+  border: 1px solid #dddddd;
+  border-left: 5px solid #f0f0f0;
+  margin-right: 10%;
+*/
+
+div.listingblock > div.content {
+  padding: 0.5em;
+  background: none;
+  border: none;
+  border-left: none;
+  margin-right: none;
+}
+
+</style>
+<script type="text/javascript">
+/*<![CDATA[*/
+var asciidoc = {  // Namespace.
+
+/////////////////////////////////////////////////////////////////////
+// Table Of Contents generator
+/////////////////////////////////////////////////////////////////////
+
+/* Author: Mihai Bazon, September 2002
+ * http://students.infoiasi.ro/~mishoo
+ *
+ * Table Of Content generator
+ * Version: 0.4
+ *
+ * Feel free to use this script under the terms of the GNU General Public
+ * License, as long as you do not remove or alter this notice.
+ */
+
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
+
+// toclevels = 1..4.
+toc: function (toclevels) {
+
+  function getText(el) {
+    var text = "";
+    for (var i = el.firstChild; i != null; i = i.nextSibling) {
+      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
+        text += i.data;
+      else if (i.firstChild != null)
+        text += getText(i);
+    }
+    return text;
+  }
+
+  function TocEntry(el, text, toclevel) {
+    this.element = el;
+    this.text = text;
+    this.toclevel = toclevel;
+  }
+
+  function tocEntries(el, toclevels) {
+    var result = new Array;
+    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
+    // Function that scans the DOM tree for header elements (the DOM2
+    // nodeIterator API would be a better technique but not supported by all
+    // browsers).
+    var iterate = function (el) {
+      for (var i = el.firstChild; i != null; i = i.nextSibling) {
+        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
+          var mo = re.exec(i.tagName);
+          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
+            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
+          }
+          iterate(i);
+        }
+      }
+    }
+    iterate(el);
+    return result;
+  }
+
+  var toc = document.getElementById("toc");
+  if (!toc) {
+    return;
+  }
+
+  // Delete existing TOC entries in case we're reloading the TOC.
+  var tocEntriesToRemove = [];
+  var i;
+  for (i = 0; i < toc.childNodes.length; i++) {
+    var entry = toc.childNodes[i];
+    if (entry.nodeName.toLowerCase() == 'div'
+     && entry.getAttribute("class")
+     && entry.getAttribute("class").match(/^toclevel/))
+      tocEntriesToRemove.push(entry);
+  }
+  for (i = 0; i < tocEntriesToRemove.length; i++) {
+    toc.removeChild(tocEntriesToRemove[i]);
+  }
+
+  // Rebuild TOC entries.
+  var entries = tocEntries(document.getElementById("content"), toclevels);
+  for (var i = 0; i < entries.length; ++i) {
+    var entry = entries[i];
+    if (entry.element.id == "")
+      entry.element.id = "_toc_" + i;
+    var a = document.createElement("a");
+    a.href = "#" + entry.element.id;
+    a.appendChild(document.createTextNode(entry.text));
+    var div = document.createElement("div");
+    div.appendChild(a);
+    div.className = "toclevel" + entry.toclevel;
+    toc.appendChild(div);
+  }
+  if (entries.length == 0)
+    toc.parentNode.removeChild(toc);
+},
+
+
+/////////////////////////////////////////////////////////////////////
+// Footnotes generator
+/////////////////////////////////////////////////////////////////////
+
+/* Based on footnote generation code from:
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
+ */
+
+footnotes: function () {
+  // Delete existing footnote entries in case we're reloading the footnodes.
+  var i;
+  var noteholder = document.getElementById("footnotes");
+  if (!noteholder) {
+    return;
+  }
+  var entriesToRemove = [];
+  for (i = 0; i < noteholder.childNodes.length; i++) {
+    var entry = noteholder.childNodes[i];
+    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
+      entriesToRemove.push(entry);
+  }
+  for (i = 0; i < entriesToRemove.length; i++) {
+    noteholder.removeChild(entriesToRemove[i]);
+  }
+
+  // Rebuild footnote entries.
+  var cont = document.getElementById("content");
+  var spans = cont.getElementsByTagName("span");
+  var refs = {};
+  var n = 0;
+  for (i=0; i<spans.length; i++) {
+    if (spans[i].className == "footnote") {
+      n++;
+      var note = spans[i].getAttribute("data-note");
+      if (!note) {
+        // Use [\s\S] in place of . so multi-line matches work.
+        // Because JavaScript has no s (dotall) regex flag.
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+        spans[i].innerHTML =
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
+          "' title='View footnote' class='footnote'>" + n + "</a>]";
+        spans[i].setAttribute("data-note", note);
+      }
+      noteholder.innerHTML +=
+        "<div class='footnote' id='_footnote_" + n + "'>" +
+        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
+        n + "</a>. " + note + "</div>";
+      var id =spans[i].getAttribute("id");
+      if (id != null) refs["#"+id] = n;
+    }
+  }
+  if (n == 0)
+    noteholder.parentNode.removeChild(noteholder);
+  else {
+    // Process footnoterefs.
+    for (i=0; i<spans.length; i++) {
+      if (spans[i].className == "footnoteref") {
+        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
+        href = href.match(/#.*/)[0];  // Because IE return full URL.
+        n = refs[href];
+        spans[i].innerHTML =
+          "[<a href='#_footnote_" + n +
+          "' title='View footnote' class='footnote'>" + n + "</a>]";
+      }
+    }
+  }
+},
+
+install: function(toclevels) {
+  var timerId;
+
+  function reinstall() {
+    asciidoc.footnotes();
+    if (toclevels) {
+      asciidoc.toc(toclevels);
+    }
+  }
+
+  function reinstallAndRemoveTimer() {
+    clearInterval(timerId);
+    reinstall();
+  }
+
+  timerId = setInterval(reinstall, 500);
+  if (document.addEventListener)
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
+  else
+    window.onload = reinstallAndRemoveTimer;
+}
+
+}
+asciidoc.install(2);
+/*]]>*/
+</script>
+</head>
+<body class="article" style="max-width:800px">
+<div id="header">
+<div id="toc">
+  <div id="toctitle">Table of Contents</div>
+  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
+</div>
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="_swift_tutorial_for_the_cloud">Swift Tutorial for the Cloud</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>//// This tutorial is viewable at:
+<TODO> <a href="http://swiftlang.org/tutorials/cloud">http://swiftlang.org/tutorials/cloud</a> <FIX></p></div>
+<div class="tableblock">
+<table rules="all"
+width="80%"
+frame="border"
+cellspacing="0" cellpadding="4">
+<caption class="title">Table 1. simulation.sh arguments</caption>
+<col width="16%" />
+<col width="83%" />
+<thead>
+<tr>
+<th align="center" valign="top">Argument</th>
+<th align="left" valign="top">Short</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center" valign="top"><p class="table">Description</p></td>
+<td align="left" valign="top"><p class="table">1</p></td>
+</tr>
+<tr>
+<td align="center" valign="top"><p class="table">runtime: sets run time of simulation.sh in seconds</p></td>
+<td align="left" valign="top"><p class="table">2</p></td>
+</tr>
+<tr>
+<td align="center" valign="top"><p class="table">range: limits generated values to the range [0,range-1]</p></td>
+<td align="left" valign="top"><p class="table">3</p></td>
+</tr>
+<tr>
+<td align="center" valign="top"><p class="table">biasfile: add the integer contained in this file to each value generated</p></td>
+<td align="left" valign="top"><p class="table">4</p></td>
+</tr>
+<tr>
+<td align="center" valign="top"><p class="table">scale: multiplies each generated value by this integer</p></td>
+<td align="left" valign="top"><p class="table">5</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="paragraph"><p>It defines
+things like the work directory, the scheduler to use, and how to
+control parallelism. The sites.xml file below will tell Swift to run
+on the local machine only, and run just 1 task at a time.</p></div>
+<div class="listingblock">
+<div class="title">sites.xml</div>
+<div class="content">
+<pre><code></code></pre>
+</div></div>
+<div class="literalblock">
+<div class="content">
+<pre><code> In this case, it
+indicates that the app "simulate" (the first token in the command line
+declaration of the function `simulation`, at line NNN) is located in the file
+simulate.sh and (since the path `simulate.sh` is specified with no
+directory components) Swift expects that the `simulate.sh` executable
+will be available in your $PATH.</code></pre>
+</div></div>
+<div class="listingblock">
+<div class="title">apps</div>
+<div class="content">
+<pre><code></code></pre>
+</div></div>
+<div class="paragraph"><p>FIXME: need to revise this figure: drop prog:</p></div>
+<div class="paragraph"><p>, making the parallel portion of the script behave like this:</p></div>
+<div class="imageblock" style="text-align:center;">
+<div class="content">
+<img src="part04.png" alt="part04.png" />
+</div>
+</div>
+<div class="listingblock">
+<div class="title">p4.swift</div>
+<div class="content">
+<pre><code>type file;
+
+app (file out, file log) simulation (int sim_steps, int sim_range, int sim_values, file sim_script)
+{
+  bash "simulate.sh" "--timesteps" sim_steps "--range" sim_range "--nvalues" sim_values stdout=@out stderr=@log;
+}
+
+app (file out, file log) analyze (file s[], file stat_script)
+{
+  bash "stats.sh" filenames(s) stdout=@out stderr=@log;
+}
+
+int nsim   = toInt(arg("nsim",   "10"));
+int steps  = toInt(arg("steps",  "1"));
+int range  = toInt(arg("range",  "100"));
+int values = toInt(arg("values", "5"));
+
+file simulate_script <"simulate.sh">;
+file stats_script <"stats.sh">;
+
+file sims[];
+
+foreach i in [0:nsim-1] {
+  file simout <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  file simlog <single_file_mapper; file=strcat("output/sim_",i,".log")>;
+  (simout,simlog) = simulation(steps,range,values,simulate_script);
+  sims[i] = simout;
+}
+
+file stats_out<"output/average.out">;
+file stats_log<"output/average.log">;
+(stats_out, stats_log) = analyze(sims, stats_script);</code></pre>
+</div></div>
+<div class="paragraph"><p>To tell Swift to run the apps on compute nodes, we specify in the
+<code>apps</code> file that the apps should be executed on the <code>cloud</code> site
+(instead of the <code>localhost</code> site).  We can specify the location of
+each app in the third field of the <code>apps</code> file, with either an
+absolute pathname or the name of an executable to be located in
+<code>PATH</code>). Here we use the latter form:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>$ cat apps
+cloud simulate simulate.sh
+cloud stats    stats.sh</code></pre>
+</div></div>
+<div class="paragraph"><p>You can experiment, for example, with an alternate version of stats.sh by specfying that app’s location explicitly:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>$ cat apps
+cloud simulate simulate.sh
+cloud stats    /home/users/p01532/bin/my-alt-stats.sh</code></pre>
+</div></div>
+<div class="paragraph"><p>We can see that when we run many apps requesting a larger set of nodes (6), we are indeed running on the compute nodes:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>$ swift p4.swift -nsim=1000 -steps=1
+Swift 0.94.1 RC2 swift-r6895 cog-r3765
+
+RunID: 20130827-1638-t23ax37a
+Progress:  time: Tue, 27 Aug 2013 16:38:11 -0500
+Progress:  time: Tue, 27 Aug 2013 16:38:12 -0500  Initializing:966
+Progress:  time: Tue, 27 Aug 2013 16:38:13 -0500  Selecting site:499  Submitting:500  Submitted:1
+Progress:  time: Tue, 27 Aug 2013 16:38:14 -0500  Selecting site:499  Stage in:1  Submitted:500
+Progress:  time: Tue, 27 Aug 2013 16:38:16 -0500  Selecting site:499  Submitted:405  Active:95  Stage out:1
+Progress:  time: Tue, 27 Aug 2013 16:38:17 -0500  Selecting site:430  Submitted:434  Active:66  Stage out:1  Finished successfully:69
+Progress:  time: Tue, 27 Aug 2013 16:38:18 -0500  Selecting site:388  Submitted:405  Active:95  Stage out:1  Finished successfully:111
+...
+Progress:  time: Tue, 27 Aug 2013 16:38:30 -0500  Stage in:1  Submitted:93  Active:94  Finished successfully:812
+Progress:  time: Tue, 27 Aug 2013 16:38:31 -0500  Submitted:55  Active:95  Stage out:1  Finished successfully:849
+Progress:  time: Tue, 27 Aug 2013 16:38:32 -0500  Active:78  Stage out:1  Finished successfully:921
+Progress:  time: Tue, 27 Aug 2013 16:38:34 -0500  Active:70  Stage out:1  Finished successfully:929
+Progress:  time: Tue, 27 Aug 2013 16:38:37 -0500  Stage in:1  Finished successfully:1000
+Progress:  time: Tue, 27 Aug 2013 16:38:38 -0500  Stage out:1  Finished successfully:1000
+Final status: Tue, 27 Aug 2013 16:38:38 -0500  Finished successfully:1001
+
+$ grep "on node:" output/*log | head
+output/sim_0.log:Running on node: nid00063
+output/sim_100.log:Running on node: nid00060
+output/sim_101.log:Running on node: nid00061
+output/sim_102.log:Running on node: nid00032
+output/sim_103.log:Running on node: nid00060
+output/sim_104.log:Running on node: nid00061
+output/sim_105.log:Running on node: nid00032
+output/sim_106.log:Running on node: nid00060
+output/sim_107.log:Running on node: nid00061
+output/sim_108.log:Running on node: nid00062
+
+$ grep "on node:" output/*log | awk '{print $4}' | sort | uniq -c
+    158 nid00032
+    156 nid00033
+    171 nid00060
+    178 nid00061
+    166 nid00062
+    171 nid00063
+$ hostname
+raven
+$ hostname -f
+nid00008</code></pre>
+</div></div>
+</div>
+</div>
+</div>
+<div id="footnotes"><hr /></div>
+<div id="footer">
+<div id="footer-text">
+Last updated 2014-06-25 01:12:51 CDT
+</div>
+</div>
+</body>
+</html>

Added: branches/release-0.95/tests/tutorial/part01/p1.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part01/p1.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part01/p1.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,9 @@
+type file;
+
+app (file o) simulation ()
+{
+  simulate stdout=filename(o);
+}
+
+file f <"sim.out">;
+f = simulation();

Added: branches/release-0.95/tests/tutorial/part01/sites.template.xml
===================================================================
--- branches/release-0.95/tests/tutorial/part01/sites.template.xml	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part01/sites.template.xml	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites">
+
+<pool handle="local">
+<filesystem provider="local"/>
+<profile namespace="karajan" key="jobThrottle">0.03</profile>
+<workdirectory>/tmp/yadunand/swiftwork</workdirectory>
+<execution provider="coaster" jobmanager="local:local"/>
+<profile namespace="globus" key="jobsPerNode">4</profile>
+<profile namespace="karajan" key="initialScore">10000</profile>
+</pool>
+
+</config>

Added: branches/release-0.95/tests/tutorial/part01/swift.new.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part01/swift.new.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part01/swift.new.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,10 @@
+site=local
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}

Added: branches/release-0.95/tests/tutorial/part01/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part01/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part01/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,8 @@
+use.provider.staging=true
+use.wrapper.staging=false
+wrapperlog.always.transfer=true
+execution.retries=0
+lazy.errors=false
+provider.staging.pin.swiftfiles=false
+sitedir.keep=true
+tcp.port.range=50000,51000
\ No newline at end of file

Added: branches/release-0.95/tests/tutorial/part01/tc.template.data
===================================================================
--- branches/release-0.95/tests/tutorial/part01/tc.template.data	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part01/tc.template.data	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+* * * INSTALLED INTEL32::LINUX null

Added: branches/release-0.95/tests/tutorial/part02/p2.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part02/p2.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part02/p2.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,11 @@
+type file;
+
+app (file o) simulation ()
+{
+  simulate stdout=filename(o);
+}
+
+foreach i in [0:9] {
+  file f <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  f = simulation();
+}

Added: branches/release-0.95/tests/tutorial/part02/sites.template.xml
===================================================================
--- branches/release-0.95/tests/tutorial/part02/sites.template.xml	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part02/sites.template.xml	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites">
+
+<pool handle="local">
+<filesystem provider="local"/>
+<profile namespace="karajan" key="jobThrottle">0.03</profile>
+<workdirectory>/tmp/yadunand/swiftwork</workdirectory>
+<execution provider="coaster" jobmanager="local:local"/>
+<profile namespace="globus" key="jobsPerNode">4</profile>
+<profile namespace="karajan" key="initialScore">10000</profile>
+</pool>
+
+</config>

Added: branches/release-0.95/tests/tutorial/part02/swift.new.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part02/swift.new.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part02/swift.new.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,10 @@
+site=local
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}

Added: branches/release-0.95/tests/tutorial/part02/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part02/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part02/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,8 @@
+use.provider.staging=true
+use.wrapper.staging=false
+wrapperlog.always.transfer=true
+execution.retries=0
+lazy.errors=false
+provider.staging.pin.swiftfiles=false
+sitedir.keep=true
+tcp.port.range=50000,51000
\ No newline at end of file

Added: branches/release-0.95/tests/tutorial/part02/tc.template.data
===================================================================
--- branches/release-0.95/tests/tutorial/part02/tc.template.data	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part02/tc.template.data	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+* * * INSTALLED INTEL32::LINUX null

Added: branches/release-0.95/tests/tutorial/part03/p3.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part03/p3.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part03/p3.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,27 @@
+type file;
+
+app (file o) simulation (int sim_steps, int sim_range, int sim_values)
+{
+  simulate "--timesteps" sim_steps "--range" sim_range "--nvalues" sim_values stdout=filename(o);
+}
+
+app (file o) analyze (file s[])
+{
+  stats filenames(s) stdout=filename(o);
+}
+
+int nsim   = toInt(arg("nsim","10"));
+int steps  = toInt(arg("steps","1"));
+int range  = toInt(arg("range","100"));
+int values = toInt(arg("values","5"));
+
+file sims[];
+
+foreach i in [0:nsim-1] {
+  file simout <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  simout = simulation(steps,range,values);
+  sims[i] = simout;
+}
+
+file stats<"output/average.out">;
+stats = analyze(sims);

Added: branches/release-0.95/tests/tutorial/part03/sites.template.xml
===================================================================
--- branches/release-0.95/tests/tutorial/part03/sites.template.xml	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part03/sites.template.xml	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config xmlns="http://www.ci.uchicago.edu/swift/SwiftSites">
+
+<pool handle="local">
+<filesystem provider="local"/>
+<profile namespace="karajan" key="jobThrottle">0.03</profile>
+<workdirectory>/tmp/yadunand/swiftwork</workdirectory>
+<execution provider="coaster" jobmanager="local:local"/>
+<profile namespace="globus" key="jobsPerNode">4</profile>
+<profile namespace="karajan" key="initialScore">10000</profile>
+</pool>
+
+</config>

Added: branches/release-0.95/tests/tutorial/part03/swift.new.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part03/swift.new.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part03/swift.new.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,10 @@
+site=local
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}

Added: branches/release-0.95/tests/tutorial/part03/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part03/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part03/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,8 @@
+use.provider.staging=true
+use.wrapper.staging=false
+wrapperlog.always.transfer=true
+execution.retries=0
+lazy.errors=false
+provider.staging.pin.swiftfiles=false
+sitedir.keep=true
+tcp.port.range=50000,51000
\ No newline at end of file

Added: branches/release-0.95/tests/tutorial/part03/tc.template.data
===================================================================
--- branches/release-0.95/tests/tutorial/part03/tc.template.data	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part03/tc.template.data	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+* * * INSTALLED INTEL32::LINUX null

Added: branches/release-0.95/tests/tutorial/part04/p4.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part04/p4.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part04/p4.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,32 @@
+type file;
+
+app (file out, file log) simulation (int sim_steps, int sim_range, int sim_values, file sim_script)
+{
+  bash "simulate.sh" "--timesteps" sim_steps "--range" sim_range "--nvalues" sim_values stdout=@out stderr=@log;
+}
+
+app (file out, file log) analyze (file s[], file stat_script)
+{
+  bash "stats.sh" filenames(s) stdout=@out stderr=@log;
+}
+
+int nsim   = toInt(arg("nsim",   "10"));
+int steps  = toInt(arg("steps",  "1"));
+int range  = toInt(arg("range",  "100"));
+int values = toInt(arg("values", "5"));
+
+file simulate_script <"simulate.sh">;
+file stats_script <"stats.sh">;
+
+file sims[];
+
+foreach i in [0:nsim-1] {
+  file simout <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  file simlog <single_file_mapper; file=strcat("output/sim_",i,".log")>;
+  (simout,simlog) = simulation(steps,range,values,simulate_script);
+  sims[i] = simout;
+}
+
+file stats_out<"output/average.out">;
+file stats_log<"output/average.log">;
+(stats_out, stats_log) = analyze(sims, stats_script);

Added: branches/release-0.95/tests/tutorial/part04/simulate.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part04/simulate.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part04/simulate.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/simulate.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part04/simulate.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part04/stats.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part04/stats.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part04/stats.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/stats.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part04/stats.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part04/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part04/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part04/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,98 @@
+site=osgconnect
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}
+
+site.beagle {
+   jobManager=pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+site.beagle-remote {
+   jobManager=login4.beagle.ci.uchicago.edu:pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+
+site.osgconnect {
+   jobmanager=condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.osgconnect-remote {
+   jobmanager=login.osgconnect.net:condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.midway-remote {
+   jobManager=slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.midway-remote {
+   jobManager=midway.rcc.uchicago.edu:slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.cloud {
+   taskWalltime=04:00:00
+   initialScore=10000
+   filesystem=local
+   jobmanager=coaster-persistent:local:local:http://localhost:50010
+   workerManager=passive
+   taskThrottle=800
+   workdir=/home/$USER/work
+}
+

Added: branches/release-0.95/tests/tutorial/part05/p5.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part05/p5.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part05/p5.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,31 @@
+type file;
+
+app (file out, file log) simulation (int sim_steps, int sim_range, int sim_values, file sim_script)
+{
+  sh "simulate.sh" "--timesteps" sim_steps "--range" sim_range "--nvalues" sim_values stdout=@out stderr=@log;
+}
+
+app (file out, file log) analyze (file s[], file stat_script)
+{
+  sh "stats.sh" filenames(s) stdout=@out stderr=@log;
+}
+
+int nsim   = toInt(arg("nsim",   "10"));
+int steps  = toInt(arg("steps",  "1"));
+int range  = toInt(arg("range",  "100"));
+int values = toInt(arg("values", "5"));
+
+file sims[];
+file simulate_script <"simulate.sh">;
+file stats_script <"stats.sh">;
+
+foreach i in [0:nsim-1] {
+  file simout <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  file simlog <single_file_mapper; file=strcat("output/sim_",i,".log")>;
+  (simout,simlog) = simulation(steps,range,values,simulate_script);
+  sims[i] = simout;
+}
+
+file stats_out<"output/average.out">;
+file stats_log<"output/average.log">;
+(stats_out, stats_log) = analyze(sims,stats_script);

Added: branches/release-0.95/tests/tutorial/part05/simulate.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part05/simulate.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part05/simulate.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/simulate.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part05/simulate.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part05/stats.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part05/stats.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part05/stats.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/stats.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part05/stats.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part05/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part05/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part05/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,98 @@
+site=osgconnect
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}
+
+site.beagle {
+   jobManager=pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+site.beagle-remote {
+   jobManager=login4.beagle.ci.uchicago.edu:pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+
+site.osgconnect {
+   jobmanager=condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.osgconnect-remote {
+   jobmanager=login.osgconnect.net:condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.midway-remote {
+   jobManager=slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.midway-remote {
+   jobManager=midway.rcc.uchicago.edu:slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.cloud {
+   taskWalltime=04:00:00
+   initialScore=10000
+   filesystem=local
+   jobmanager=coaster-persistent:local:local:http://localhost:50010
+   workerManager=passive
+   taskThrottle=800
+   workdir=/home/$USER/work
+}
+

Added: branches/release-0.95/tests/tutorial/part06/p6.swift
===================================================================
--- branches/release-0.95/tests/tutorial/part06/p6.swift	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part06/p6.swift	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,57 @@
+type file;
+
+# app() functions for application programs to be called:
+
+app (file out) genseed (int nseeds, file seed_script)
+{
+  sh "simulate.sh" "-r" 2000000 "-n" nseeds stdout=@out;
+}
+
+app (file out) genbias (int bias_range, int nvalues, file bias_script)
+{
+  sh "simulate.sh" "-r" bias_range "-n" nvalues stdout=@out;
+}
+
+app (file out, file log) simulation (int timesteps, int sim_range,
+                                     file bias_file, int scale, int sim_count, 
+                                     file sim_script, file seed_file)
+{
+  sh "simulate.sh" "-t" timesteps "-r" sim_range "-B" @bias_file "-x" scale
+           "-n" sim_count "-S" @seed_file stdout=@out stderr=@log;
+}
+
+app (file out, file log) analyze (file s[], file stat_script)
+{
+  sh "stats.sh" filenames(s) stdout=@out stderr=@log;
+}
+
+# Command line arguments
+
+int  nsim  = toInt(arg("nsim",   "10"));  # number of simulation programs to run
+int  steps = toInt(arg("steps",  "1"));   # number of timesteps (seconds) per simulation
+int  range = toInt(arg("range",  "100")); # range of the generated random numbers
+int  values = toInt(arg("values", "10"));  # number of values generated per simulation
+
+# Main script and data
+
+file simulate_script <"simulate.sh">;
+file stats_script <"stats.sh">;
+file seedfile <"output/seed.dat">;        # Dynamically generated bias for simulation ensemble
+
+tracef("\n*** Script parameters: nsim=%i range=%i num values=%i\n\n", nsim, range, values);
+seedfile = genseed(1,simulate_script);
+
+file sims[];                      # Array of files to hold each simulation output
+
+foreach i in [0:nsim-1] {
+  file biasfile <single_file_mapper; file=strcat("output/bias_",i,".dat")>;
+  file simout   <single_file_mapper; file=strcat("output/sim_",i,".out")>;
+  file simlog   <single_file_mapper; file=strcat("output/sim_",i,".log")>;
+  biasfile = genbias(1000, 20, simulate_script);
+  (simout,simlog) = simulation(steps, range, biasfile, 1000000, values, simulate_script, seedfile);
+  sims[i] = simout;
+}
+
+file stats_out<"output/average.out">;
+file stats_log<"output/average.log">;
+(stats_out,stats_log) = analyze(sims, stats_script);

Added: branches/release-0.95/tests/tutorial/part06/simulate.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part06/simulate.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part06/simulate.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/simulate.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part06/simulate.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part06/stats.sh
===================================================================
--- branches/release-0.95/tests/tutorial/part06/stats.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part06/stats.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+link ../app/stats.sh
\ No newline at end of file


Property changes on: branches/release-0.95/tests/tutorial/part06/stats.sh
___________________________________________________________________
Added: svn:special
   + *

Added: branches/release-0.95/tests/tutorial/part06/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/part06/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/part06/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,98 @@
+site=osgconnect
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}
+
+site.beagle {
+   jobManager=pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+site.beagle-remote {
+   jobManager=login4.beagle.ci.uchicago.edu:pbs
+   # Change queue to batch for larger jobs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   # Specify jobProject if a default project is not set
+   # jobProject=CI-CCR000013
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+
+site.osgconnect {
+   jobmanager=condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.osgconnect-remote {
+   jobmanager=login.osgconnect.net:condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.midway-remote {
+   jobManager=slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.midway-remote {
+   jobManager=midway.rcc.uchicago.edu:slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.cloud {
+   taskWalltime=04:00:00
+   initialScore=10000
+   filesystem=local
+   jobmanager=coaster-persistent:local:local:http://localhost:50010
+   workerManager=passive
+   taskThrottle=800
+   workdir=/home/$USER/work
+}
+

Added: branches/release-0.95/tests/tutorial/setup.sh
===================================================================
--- branches/release-0.95/tests/tutorial/setup.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/setup.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,27 @@
+# ensure that this script is being sourced
+if [ ${BASH_VERSINFO[0]} -gt 2 -a "${BASH_SOURCE[0]}" = "${0}" ] ; then
+  echo ERROR: script ${BASH_SOURCE[0]} must be executed as: source ${BASH_SOURCE[0]}
+  exit 1
+fi
+
+# Setting scripts folder to the PATH env var.
+TUTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+if [ _$(which cleanup 2>/dev/null) != _$TUTDIR/bin/cleanup ]; then
+  echo Adding $TUTDIR/bin:$TUTDIR/app: to front of PATH
+  PATH=$TUTDIR/bin:$TUTDIR/app:$PATH
+else
+  echo Assuming $TUTDIR/bin:$TUTDIR/app: is already at front of PATH
+fi
+
+if [[ $HOSTNAME == headnode* ]]
+then
+    export JAVA=/usr/local/bin/jdk1.7.0_51/bin
+    export SWIFT=/usr/local/bin/swift-0.95/bin
+    export PATH=$JAVA:$SWIFT:$PATH
+fi
+
+echo Swift version is $(swift -version)
+
+return
+

Added: branches/release-0.95/tests/tutorial/swift.properties
===================================================================
--- branches/release-0.95/tests/tutorial/swift.properties	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/swift.properties	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,83 @@
+site=osgconnect
+use.provider.staging=true
+execution.retries=2
+
+site.local {
+   jobmanager=local
+   initialScore=10000
+   filesystem=local
+   workdir=/tmp/$USER/swiftwork
+}
+
+site.beagle {
+#   jobManager=login4.beagle.ci.uchicago.edu:pbs
+   jobManager=pbs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+site.beagle-remote {
+   jobManager=login4.beagle.ci.uchicago.edu:pbs
+   jobQueue=development
+   tasksPerWorker=8
+   providerAttributes=pbs.aprun;pbs.mpp;depth=24
+   initialScore=10000
+   filesystem=local
+   jobWalltime=00:10:00
+   taskWalltime=00:02:00
+   userHomeOverride=/lustre/beagle/$USER
+   workDir=/lustre/beagle/$USER
+}
+
+
+site.osgconnect {
+   jobmanager=condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.osgconnect-remote {
+   jobmanager=login.osgconnect.net:condor
+   filesystem=local
+   initialscore=10000
+   taskWalltime=01:00:00
+   workdir=/tmp/swiftwork
+   maxJobs=2
+   tasksPerWorker=5
+   taskThrottle=50
+   condor.+projectname=Swift
+}
+
+site.midway-remote {
+   jobManager=midway.rcc.uchicago.edu:slurm
+   jobQueue=westmere
+   tasksPerWorker=12
+   initialScore=10000
+   filesystem=local
+   jobproject=pi-wilde
+   workdir=/scratch/midway/$USER/work
+}
+
+site.cloud {
+   taskWalltime=04:00:00
+   initialScore=10000
+   filesystem=local
+   jobmanager=coaster-persistent:local:local:http://localhost:50010
+   workerManager=passive
+   taskThrottle=800
+   workdir=/home/$USER/work
+}
+

Added: branches/release-0.95/tests/tutorial/test_all.sh
===================================================================
--- branches/release-0.95/tests/tutorial/test_all.sh	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/test_all.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+source setup.sh
+
+for i in $(seq 1 1 3)
+do
+    pushd .
+    echo "============================TESTING part0$i==========================="
+    cd part0$i
+    swift p$i.swift -site=local
+    if [[ $? == 0 ]]
+    then
+        echo "Cleaning up!"
+        cleanup
+    fi
+    echo -e "\n\n"
+    popd
+done
+
+SITES=('beagle-remote' 'midway-remote' 'osgconnect-remote' "$1")
+for i in $(seq 4 1 6)
+do
+    pushd .
+    echo "============================TESTING part0$i==========================="
+    cd part0$i
+
+    for SITE in ${SITES[*]}
+    do
+        echo "Running on SITE : $SITE"
+        swift p$i.swift -site=$SITE
+        if [[ $? == 0 ]]
+        then
+            echo "Cleaning up!"
+            cleanup
+        fi
+    done
+    echo -e "\n\n"
+    popd
+done


Property changes on: branches/release-0.95/tests/tutorial/test_all.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: branches/release-0.95/tests/tutorial/title.txt
===================================================================
--- branches/release-0.95/tests/tutorial/title.txt	                        (rev 0)
+++ branches/release-0.95/tests/tutorial/title.txt	2014-07-09 21:27:56 UTC (rev 7980)
@@ -0,0 +1 @@
+Run the swift tutorial

Modified: branches/release-0.95/tests/user_env.sh
===================================================================
--- branches/release-0.95/tests/user_env.sh	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/user_env.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -19,3 +19,5 @@
    export GLOBUS_HOSTNAME=swift.rcc.uchicago.edu
    export GLOBUS_TCP_PORT_RANGE=50000,51000
 fi;
+
+export PATH=$PWD/tutorial/app:$PATH

Modified: branches/release-0.95/tests/user_yadu.sh
===================================================================
--- branches/release-0.95/tests/user_yadu.sh	2014-07-09 20:00:23 UTC (rev 7979)
+++ branches/release-0.95/tests/user_yadu.sh	2014-07-09 21:27:56 UTC (rev 7980)
@@ -35,3 +35,5 @@
    export GLOBUS_HOSTNAME=swift.rcc.uchicago.edu
    export GLOBUS_TCP_PORT_RANGE=50000,51000
 fi;
+
+export PATH=$PWD/tutorial/app:$PATH




More information about the Swift-commit mailing list