--sas

l17-makejob.c

Feb 25th, 2022 (edited)
897
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char** argv) {
  6.     if (argc == 1)
  7.         exit(1);
  8.  
  9.     if (!(argc == 2 || argc == 4 || argc == 6 || argc == 8 || argc == 10))
  10.         exit(2);
  11.  
  12.     int walltime = 60, nodes = 4, ppn = 2, np = 6;
  13.     int* argp;
  14.     char** argstr;
  15.  
  16.     for (argstr = argv + 2; *argstr != NULL; ++argstr) {
  17.         if (!strcmp(*argstr, "-walltime"))
  18.             argp = &walltime;
  19.         else if (!strcmp(*argstr, "-nodes"))
  20.             argp = &nodes;
  21.         else if (!strcmp(*argstr, "-ppn"))
  22.             argp = &ppn;
  23.         else if (!strcmp(*argstr, "-np"))
  24.             argp = &np;
  25.         else
  26.             *argp = atoi(*argstr);
  27.     }
  28.    
  29.     char job_name[100] = "job-";
  30.     strcat(job_name, (argv[1] + 2));
  31.     int len = strlen(job_name);
  32.     job_name[len - 4] = '\0';
  33.  
  34.     char jobsh_name[100];
  35.     strcpy(jobsh_name, job_name);
  36.     strcat(jobsh_name, ".sh");
  37.     FILE* jobp = fopen(jobsh_name, "w");
  38.     fprintf(jobp, "#!/bin/bash\n\n");
  39.     fprintf(jobp, "#PBS -l walltime=%02d:%02d:%02d,nodes=%d:ppn=%d\n",
  40.             (walltime / 60) / 60, (walltime / 60) % 60, walltime % 60, nodes, ppn);
  41.     fprintf(jobp, "#PBS -N %s\n", job_name);
  42.     fprintf(jobp, "#PBS -q batch\n\n");
  43.     fprintf(jobp, "cd $PBS_O_WORKDIR\n");
  44.     fprintf(jobp, "mpirun --hostfile $PBS_NODEFILE -np %d %s", np, argv[1]);
  45.  
  46.     return 0;
  47. }
Add Comment
Please, Sign In to add comment