#include #include #include #include "build_libr12.h" extern FILE *outfile, *hrr_header; extern Libr12Params_t Params; extern void punt(char *); static int hash(int a[2][3], int b[2]); int emit_hrr_t_build() { int new_am = Params.new_am; int max_class_size = Params.max_class_size; FILE *code; int p,q,r,s; int ax,ay,az,bx,by,bz,cx,cy,cz,dx,dy,dz; int t0, t1, t2, t3, t4; int i,j,nj,i_i0,i_i1; int k,l,nl,k_i0,k_i1; int cp1dm1_num,cdm1_num; int a, b; int flag; int am_in[2]; int am[2][3]; int xyz; int class_size; int split; int la, lb; int ld, lc, ld_max; int curr_count,curr_subfunction; int num_subfunctions, subbatch_length; int f; static int io[] = {1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153}; static const char am_letter[] = "0pdfghiklmnoqrtuvwxyz"; char code_name[21]; char function_name[18]; char **subfunction_name; for(lc=0;lc<=new_am;lc++) { ld_max = (lc+1)/2; for(ld=1;ld<=ld_max;ld++) { /*----------------------- HRR on centers C and D -----------------------*/ am_in[0] = lc-ld; am_in[1] = ld; class_size = ((am_in[0]+1)*(am_in[0]+2)*(am_in[1]+1)*(am_in[1]+2))/4; nl = (am_in[1]*(am_in[1]+1))/2; cp1dm1_num = (am_in[0]+2)*(am_in[0]+3)*nl/2; cdm1_num = (am_in[0]+1)*(am_in[0]+2)*nl/2; /* Decide if the routine has to be split into several routines producing "subbatches" */ if (class_size > max_class_size) { split = 1; num_subfunctions = ceil((double)class_size/max_class_size); subbatch_length = 1 + class_size/num_subfunctions; } else { split = 0; } sprintf(function_name,"t2hrr3_build_%c%c",am_letter[am_in[0]],am_letter[am_in[1]]); if (split) { subfunction_name = (char **) malloc (num_subfunctions*sizeof(char *)); for(i=0;i\n\n"); if (split) { for(i=0;i\n\n"); if (split) { for(i=0;i