/* Tools for working with the Portable Batch System in gp */ cload(hpxh); pbsenq(shfile) = { local(processid); processid = extern(concat([pbsfolder,"pbsenq ",shfile])); if(length(processid) == 0, error("empty process id in pbsenq")); return(processid); } pbsenqints(F,manindblabel,fnctl,prec,intstrategy,outname) = { local(workingdir,intgrls0,intlist,numints,powlist,j,gpfile,mtfile,tau1,tau2,z1,z2,dbfile,shfile,joblist); workingdir = concat([componentfolder,"tmp/",outname,"/"]); system("rm -rf " workingdir); /* THIS IS DANGEROUS ! */ system("mkdir " workingdir); kill(flisexpr); install(flisexpr,s); intgrls0 = flisexpr(concat([intstrategy,"(",F,")"])); kill(flisexpr); intlist = intgrls0[1]; numints = length(intlist); powlist = intgrls0[2]; /* write out the manin table */ mtfile = concat([workingdir,"manin.table"]); mtable = ellmanincomb(ellmanindbget(manindblabel),fnctl[1],fnctl[2]); print(mtfile); write(mtfile,mtable); /* write gp and sh scripts for integrals */ for(j=1,numints, gpfile = concat([workingdir,"int",j,".gp"]); write(gpfile,"\\r " componentfolder "componentmanager.pari"); write(gpfile,"cload(hpxh);"); write(gpfile,"mtable = read(\"" mtfile "\");"); tau1 = intlist[j][1] + [0,prec^2,0]; tau2 = intlist[j][2] + [0,prec^2,0]; z1 = intlist[j][3]; z2 = intlist[j][4]; prc = padicprec(prec,component(prec,1)); write(gpfile,"int" j " = hpxhint9(" tau1 "," tau2 "," z1 "," z2 ",mtable," prc ");"); outfile = concat([workingdir,"int",j,".out"]); write(gpfile,"write(\"" outfile "\",int" j ");"); shfile = concat([workingdir,"int",j,".sh"]); write(shfile,"#PBS -k oe"); write(shfile,"#PBS -l mem=100mb,cput=24:00:00"); write(shfile,"#PBS -q long@cauchy.math.mcgill.ca"); /* INSERT OTHER PBS INSTRUCTIONS HERE */ write(shfile,"#!/bin/sh"); write(shfile,""); write(shfile,"echo Entering gp..."); write(shfile,"gp -s 100M < int" j ".gp"); write(shfile,"echo Exited gp."); ); /* write gp script for collation */ gpfile = concat([workingdir,"collate.gp"]); write(gpfile,"\\r " componentfolder "componentmanager.pari"); write(gpfile,"cload(tate);"); for(j=1,numints, write(gpfile,concat(["int",j," = read(\"",workingdir,"int",j,".out","\");"])); ); write(gpfile,"PROD = 1;"); for(j=1,numints, write(gpfile,"PROD = cpmul(PROD,cppow(int" j "," powlist[j] "));"); ); dbfile = concat([componentfolder,"db/J/",outname]); write(gpfile,"write(\"" dbfile "\",PROD);"); /* enqueue the integrals */ joblist = vector(numints); for(j=1,numints, joblist[j] = pbsenq(concat([workingdir,"int",j,".sh"])); ); /* write sh script for collation and enqueue script */ shfile = concat([workingdir,"collate.sh"]); for(j=1,numints, write(shfile,"#PBS -W " joblist[j]); ); write(shfile,"#PBS -k oe"); write(shfile,"#PBS -q short@cauchy.math.mcgill.ca"); /* INSERT OTHER PBS INSTRUCTIONS HERE */ write(shfile,"#!/bin/sh"); write(shfile,""); write(shfile,"echo Entering gp..."); write(shfile,"gp < collate.gp"); write(shfile,"echo Exited gp."); pbsenq(shfile); }