tadded job script generating function for Penguin Computing - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 782ab30d3a9320b25581637664f1fdb0ca0d3844
 (DIR) parent ea1a476542b8adc0da33a38eba71a93cb6822d7c
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Wed,  3 Sep 2014 09:56:33 +0200
       
       added job script generating function for Penguin Computing
       
       Diffstat:
         M python/sphere.py                    |      66 +++++++++++++++++++++++++++++++
       
       1 file changed, 66 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/python/sphere.py b/python/sphere.py
       t@@ -3376,6 +3376,72 @@ class sim:
                    if fh is not None:
                        fh.close()
        
       +    def torqueScriptPenguin(self,
       +            email='adc@geo.au.dk',
       +            email_alerts='ae',
       +            walltime='1920:00:00',
       +            queue='H30G',
       +            spheredir='/home/adc/code/sphere'):
       +        '''
       +        Creates a job script for the Torque queue manager for the simulation
       +        object.
       +
       +        :param email: The e-mail address that Torque messages should be sent to
       +        :type email: str
       +        :param email_alerts: The type of Torque messages to send to the e-mail
       +            address. The character 'b' causes a mail to be sent when the
       +            execution begins. The character 'e' causes a mail to be sent when
       +            the execution ends normally. The character 'a' causes a mail to be
       +            sent if the execution ends abnormally. The characters can be written
       +            in any order.
       +        :type email_alerts: str
       +        :param walltime: The maximal allowed time for the job, in the format
       +            'HH:MM:SS'.
       +        :type walltime: str
       +        :param queue: The Torque queue to schedule the job for
       +        :type queue: str
       +        :param spheredir: The path to the root directory of sphere on the
       +            cluster
       +        :type spheredir: str
       +        '''
       +
       +        self.writebin()
       +        filename = self.sid + ".sh"
       +        fh = None
       +        try :
       +            fh = open(filename, "w")
       +
       +            fh.write('#!/bin/sh\n')
       +            fh.write('#PBS -S /bin/bash\n')
       +            fh.write('#PBS -N ' + self.sid + '\n')
       +            fh.write('#PBS -l nodes=1:ppn=8\n')
       +            fh.write('#PBS -l walltime=' + walltime + '\n')
       +            fh.write('#PBS -q ' + queue + '\n')
       +            fh.write('#PBS -M ' + email + '\n')
       +            fh.write('#PBS -m ' + email_alerts + '\n')
       +            fh.write('module load cmake/2.8.11.2\n')
       +            fh.write('module load cuda/6.0\n')
       +            fh.write('module load python/2.7.4\n')
       +            fh.write('module load numpy/1.7.1/python.2.7.4\n')
       +            fh.write('module load matplotlib/1.7.1/python.2.7.4\n')
       +            fh.write('echo "`whoami`@`hostname`\n')
       +            fh.write('echo "Start at `date`\n')
       +            fh.write('nvidia-smi\n')
       +            fh.write('cd ' + spheredir + '\n')
       +            fh.write('rm CMakeCache.txt\n')
       +            fh.write('cmake . && make\n')
       +            fh.write('./sphere input/' + self.sid + '.bin > /dev/null &\n')
       +            fh.write('wait\n')
       +            if (use_workdir == True):
       +                fh.write('cp $WORKDIR/output/* $ORIGDIR/output/\n')
       +            fh.write('echo "End at `date`"\n')
       +
       +            print('submit with `qsub ' + filename + '`')
       +
       +        finally :
       +            if fh is not None:
       +                fh.close()
       +
            def render(self,
                    method = "pres",
                    max_val = 1e3,