Skip to content
Snippets Groups Projects
Select Git revision
  • 41d1572918a2ee91a88bc155112bf13f428a70f1
  • main default protected
  • fix/missing-API-documentation-for-python-modules
  • fix/delete_mingw
  • feature/new_systems_methodology
  • fix/missing-api-documentation
  • feature/python_example_folder_update
  • beta_release protected
  • fix/revert-gitlab-config
  • fix/citationEcologicalAssessment
  • documentation/styleupdate
  • feature/lightMode
  • documentation/create_mission_xml
  • 28-empennage-design-update-documentation-according-to-workshop
  • documentation/fix-dot-equations
  • documentation/propulsion-design-module
  • documentation/gitlab-workflow
  • documentation/cost_estimation_update
  • documentation/mkdocs_python_update
  • documentation/tank_design_update
  • documentation/landing_gear_design_update
  • 0.5.0
22 results

getting-started.md

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    clusterutils.py 2.65 KiB
    import tempfile
    import os
    import sys
    
    batchscript_claix18 = '''#!/usr/bin/env zsh
    
    # Autogenerated jobscript targeting the claix18 cluster.
    
    #SBATCH --job-name={jobname}
    #SBATCH --time={walltime}
    #SBATCH --mem-per-cpu={mem_per_cpu}
    #SBATCH --ntasks={num_cores}
    #SBATCH --export=NONE
    #SBATCH --output={jobname}.data/stdout.%j.log
    #SBATCH --error={jobname}.data/stderr.%j.log
    
    {custom_cmds}
    {mpirun} $FLAGS_MPI_BATCH {mc_cmd}
    {custom_post_cmds}
    '''
    
    batch_commands = {
        'claix18': 'sbatch {batchscript}'
    }
    
    valid_systems = ['local', 'claix18']
    
    def generate_batchscript_claix18(cmd, jobname, jobconfig):
        template = batchscript_claix18
    
        custom_cmds = ''
        if 'project' in jobconfig:
            custom_cmds += '#SBATCH --account={}\n'.format(jobconfig['project'])
        custom_cmds += jobconfig.get('custom_cmds', '')
        custom_post_cmds = jobconfig.get('custom_post_cmds', '')
    
        try:
            return template.format(
                jobname=jobname,
                mpirun=jobconfig.get('mpirun','mpirun'),
                mem_per_cpu=jobconfig.get('mem_per_cpu','2G'),
                walltime=jobconfig['mc_walltime'],
                num_cores=jobconfig['num_cores'],
                custom_cmds=custom_cmds,
                custom_post_cmds=custom_post_cmds,
                mc_cmd=' '.join(cmd)
            )
        except KeyError as e:
            raise Exception('Error: required key "{}" missing in jobconfig'.format(e.args[0]))
            
    def generate_batchscript(sysinfo, *args):
        if sysinfo == 'claix18':
            return generate_batchscript_claix18(*args)
        else:
            raise Exception('unknown system type "{}"'.format(sysinfo))
    
    def determine_system():
        sysinfo = os.environ.get('MCLL_SYSTEM_INFO')
    
        if sysinfo == None:
            import socket
            hostname = socket.gethostname()
            if hostname.endswith('.hpc.itc.rwth-aachen.de'):
                sysinfo = 'claix18'
    
        if not sysinfo in valid_systems:
            raise Exception('unknown system type "{}"'.format(sysinfo))
    
        return sysinfo
        
    def run(jobname, jobconfig, cmd):
        sysinfo = determine_system()
    
        print('running on system \'{}\''.format(sysinfo))
    
        if sysinfo == 'local':
            mpicmd = '{} -n {} {}'.format(jobconfig.get('mpirun', 'mpirun'), jobconfig['num_cores'], ' '.join(cmd))
            print('$ '+mpicmd)
            os.system(mpicmd)
        else:
            with tempfile.NamedTemporaryFile(mode='w',delete=False) as f:
                batchscript = generate_batchscript(sysinfo, cmd, jobname, jobconfig)
                print(batchscript)
                f.write(batchscript)
                bscriptname = f.name
            mpicmd = batch_commands[sysinfo].format(batchscript=bscriptname)
            print('$ '+mpicmd)
            os.system(mpicmd)
            os.unlink(f.name)