/** * @brief Open a new session, plot a signal, close the session. * @param title Plot title * @param style Plot style * @param label_x Label for X * @param label_y Label for Y * @param x Array of X coordinates * @param y Array of Y coordinates (can be NULL) * @param n Number of values in x and y. * @return * * This function opens a new gnuplot session, plots the provided * signal as an X or XY signal depending on a provided y, waits for * a carriage return on stdin and closes the session. * * It is Ok to provide an empty title, empty style, or empty labels for * X and Y. Defaults are provided in this case. */ void gnuplot_plot_once(char* title, char* style, char* label_x, char* label_y, float* x, float* y, int n) { gnuplot_ctrl* handle; if (x==NULL || n<1) return; if ((handle = gnuplot_init()) == NULL) return; if (style!=NULL) gnuplot_setstyle(handle, style); else gnuplot_setstyle(handle, (char*)"lines"); if (label_x!=NULL) gnuplot_set_xlabel(handle, label_x); else gnuplot_set_xlabel(handle, (char*)"X"); if (label_y!=NULL) gnuplot_set_ylabel(handle, label_y); else gnuplot_set_ylabel(handle, (char*)"Y"); if (y==NULL) gnuplot_plot_x(handle, x, n, title); else gnuplot_plot_xy(handle, x, y, n, title); printf("press ENTER to continue\n"); while (getchar()!='\n') {} gnuplot_close(handle); return; }
int main(int arg, char *argv[]) { int Npoint, dec, line, Nline, sector; double x0, xf; //socket variable SOCKET sock; const char *IP="192.168.128.3"; init_TCP_client(&sock, IP, Port); int Nset=5; char settings[Nset]; receive_TCP_client(&sock, settings, Nset); x0=(double)int_converter(settings[0]); xf=(double)int_converter(settings[1]); dec=int_converter(settings[2]); line=int_converter(settings[3]); Nline=line/2; sector=int_converter(settings[4]); Npoint=(int)(2.0*(xf-x0)*125.0/1.48/((double)dec)); char *buff=(char *)malloc((Npoint+1)*sizeof(char)); //gnuplot variable gnuplot_ctrl * h; double *y= (double *)malloc(Npoint*sizeof(double)); int i,j; //gnuplot object h=gnuplot_init(); gnuplot_setstyle(h,"lines"); gnuplot_set_xlabel(h,"time (us)"); gnuplot_set_ylabel(h,"signal"); gnuplot_cmd(h,"set yrange [1:%d]",Ymax); gnuplot_cmd(h,"set xrange [0:%d]",Npoint-1); while(1) { if (receive_TCP_client(&sock, buff, Npoint+1)==1) { break; } if ((int)(buff[0])==Nline) { for (i=1; i<Npoint+1 ; i++) { y[i-1]=(double)(buff[i]); } gnuplot_resetplot(h); gnuplot_plot_x(h, y, Npoint, "RP"); } } usleep(30); close(sock); free(y); return 0; }
void gnuplot_plot_once( char * title, char * style, char * label_x, char * label_y, double * x, double * y, int n ) { gnuplot_ctrl * handle ; if (x==NULL || n<1) return ; handle = gnuplot_init(); if (style!=NULL) { gnuplot_setstyle(handle, style); } else { gnuplot_setstyle(handle, "lines"); } if (label_x!=NULL) { gnuplot_set_xlabel(handle, label_x); } else { gnuplot_set_xlabel(handle, "X"); } if (label_y!=NULL) { gnuplot_set_ylabel(handle, label_y); } else { gnuplot_set_ylabel(handle, "Y"); } if (y==NULL) { gnuplot_plot_x(handle, x, n, title); } else { gnuplot_plot_xy(handle, x, y, n, title); } printf("press ENTER to continue\n"); while (getchar()!='\n') {} gnuplot_close(handle); return ; }
void BatchBinSet::plotBatchMu(const char* filename, const char* xlabel, const char* ylabel) { if (_num_batches == 0) log_printf(ERROR, "Cannot plot batch mu since the binners" " for this BatchBinSet have not yet been generated"); else if (!_statistics_compute) log_printf(ERROR, "Cannot plot batch mu since is has not yet" " not yet been computed for this BatchBinSet"); /* Plot the neutron flux */ gnuplot_ctrl* handle = gnuplot_init(); gnuplot_set_xlabel(handle, (char*)xlabel); gnuplot_set_ylabel(handle, (char*)ylabel); gnuplot_setstyle(handle, (char*)"dots"); gnuplot_saveplot(handle, (char*)filename); gnuplot_plot_xy(handle, getBinner(0)->getBinCenters(), _batch_mu, _num_bins, (char*)"Batch Mu"); gnuplot_close(handle); }
int main(int arg, char *argv[]) { int Npoint; //socket variable SOCKET sock; const char *IP="192.168.128.3"; init_TCP_client(&sock, IP, Port); get_RP_settings(&sock); printf("r0=%f\n",r0); printf("rf=%f\n",rf); printf("dec=%i\n",dec); printf("Nline=%i\n",Nline); printf("sector=%f\n",sector); printf("mode_RP=%i\n",mode_RP); int l=0; Npoint=(int)(2.0*(rf-r0)*125.0/1.48/((double)dec)); if (Npoint>16384) {Npoint=16384;} printf("Npoint = %i\n",Npoint); int powd, pad_len; if (power_two(Npoint,&powd)){powd++;} pad_len=int_pow(2,powd); init_table(pad_len); float fech=125000000.0/((float)dec); //gnuplot variable gnuplot_ctrl * h; double *y= (double *)malloc(Npoint*sizeof(double)); int i; int Ymax=1.5; //gnuplot object h=gnuplot_init(); gnuplot_setstyle(h,"lines"); gnuplot_set_xlabel(h,"time (us)"); gnuplot_set_ylabel(h,"signal"); //gnuplot_cmd(h,"set yrange [0:%d]", 2*Ymax); gnuplot_cmd(h,"set xrange [0:%d]",Npoint-1); char name[30]; if (mode_RP==0) { int powd, pad_len; if (power_two(Npoint,&powd)){powd++;} pad_len=int_pow(2,powd); double *pad=NULL; pad=(double *)malloc(pad_len*sizeof(double)); double *env=NULL; env=(double *)malloc(pad_len*sizeof(double)); gnuplot_cmd(h,"set yrange [-0.01:1.5]"); gnuplot_cmd(h,"set xrange [0:%d]",Npoint-1); int16_t *buff=(int16_t *)malloc((Npoint+1)*sizeof(int16_t)); while(1) { if(receive_int16_TCP_client(&sock, buff, Npoint+1)==1){break;} for (i=1 ; i<Npoint+1 ; i++){y[i-1]=(double)(buff[i])/409.6;} //divide by 409.6 to have voltage value zero_padding(y, pad, Npoint, pad_len, 1); envelope(pad, env, pad_len, fech, fmin, fmax, 0); gnuplot_resetplot(h); //gnuplot_plot_x(h, y, Npoint, "Oscillo int16_t"); gnuplot_plot_x(h, env, pad_len, "Oscillo int16_t"); //sprintf(name, "int%i.txt", l); //writefile(y, Npoint, name); l++; } free(buff); free(pad); free(env); } else if (mode_RP==1) { char *buff=(char *)malloc((Npoint+1)*sizeof(char)); while(1) { if(receive_TCP_client(&sock, buff, Npoint+1)==1){break;} for (i=1 ; i<Npoint+1 ; i++){y[i-1]=(double)(int_converter(buff[i]));} gnuplot_resetplot(h); gnuplot_plot_x(h, y, Npoint, "Oscillo 256 gray"); sprintf(name, "char%i.txt", l); //writefile(y, Npoint, name); l++; } free(buff); } else {printf("Problem of settings\n");} usleep(30); close(sock); free(y); return 0; }
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void Plotter::setXLabel(const std::string& xLabel) { if (_plotter) gnuplot_set_xlabel(_plotter, const_cast<char*>(xLabel.c_str())); }
int main(void) { int i,j,k,m,seed,idx,fcluster[S+1+1],bond[N+1][NB+1],cluster_size[S+1+1][B+1]; double X[S+1+1],temperature[S+1]; char filename[20]; gnuplot_ctrl*a; gnuplot_ctrl*b; FILE *fp1=fopen("Iris01.dat","r"),//Αρχικό αρχείο δεδομένων-Συμπληρώνεται και στη συνάρτηση output, εάν θέλουμε να κάνουμε διστδιάστατες προβολές *fp2=fopen("data_iris.dat","w"),//Αρχείο που δημιουργείται, με τα παραγόμενα δεδομένα (χ,Τ,cluster size κλπ) *fp3=fopen("cluster_iris","w"),//αρχείο με πληροφορίες για τα clusters *fp4=fopen("G.dat","w"),//αρχείο με πληροφορίες για τη συνάρτηση G *fp5=fopen("nbors_iris.dat","r");//αρχείο γειτόνων, που παρήχθησαν από το πρόγραμμα nbors.c /*Parameters(Παράμετροι)*/ T0=EPS; //Starting Temperature(αρχική θερμοκρασία) Tmax=0.09; //Highest Temperature(τελική θερμοκρασία) Tinc=(Tmax-T0)/S; //Temperature Increment(βήμα θερμοκρασίας) th=0.5; //Threshold Value for condition [G(i,j)>th] (κατώφλι για τη συνθήκη [G(i,j)>th]) /*Read data from file(διάβασμα αρχείου)*/ /* ============= ============= */ //Initialise data(Αρχικοποίηση δεδομένων) for(i=0;i<=N;i++)for(j=0;j<=DM;j++)data[i][j]=0.0;T=0.0; for(i=0;i<=N;i++)for(j=0;j<=NB;j++){dist[i][j]=0.0;nbors[i][j]=0;} for(i=0;i<=N;i++)for(j=0;j<=NB;j++){J[i][j]=0.0;G[i][j]=0.0;} for(i=0;i<=S+1;i++){X[i]=0.0;fcluster[i]=0;} for(i=0;i<=S+1;i++)for(j=0;j<=B;j++)cluster_size[i][j]=0; for(i=0;i<=N;i++)for(j=0;j<=NB;j++)bond[i][j]=0; for(i=0;i<=N;i++)G_max[i]=0.0;for(i=0;i<=S;i++)temperature[i]=0; for(i=0;i<=N;i++)cluster[i]=0; for(i=0;i<S+1;i++)a1[i]=0.0; //Open file(Άνοιγμα αρχείου) //File 1--------------------------------------------- if(fp1==NULL) { printf("Unable to open file for reading\n"); exit(1); } rewind(fp1);//rewinding file(τοποθέτηση δείκτη αρχείου στην αρχή) i=1;j=1; while(fscanf(fp1,"%lf",&data[i][j])!=EOF) { j++; if(j==DM+1) { i++; j=1; }//Read data from file(Ανάγνωση δεδομένων από το αρχείο) } fclose(fp1); //File 1--------------------------------------------- printf("\nReading Data Complete\n"); //open file (άνοιγμα αρχείου γειτόνων) //File 5--------------------------------------------- if(fp5==NULL) { printf("\nUnable to open file for reading\n"); exit(1); } i=1;j=1; while (fscanf(fp5,"%d ",&nbors[i][j])!=EOF) { j++; if(j==NB+1) { i++; j=1; } } fclose(fp5); printf("Reading Neighbor List File Complete\n"); //File 5--------------------------------------------- /*Calculate Interaction Matrix*/ /*============================*/ /*-----CALL interaction_matrix function to calculate the interactions between the points (Καλούμε τη συνάρτηση interaction_matrix για τον υπολογισμό των αλληλεπιδράσεων μεταξύ των σημείων )------*/ interaction_matrix(nbors,J,dist,data); /*------ */ printf("Calculate Interaction matrix complete\n"); //Create random numbers(Δημιουργούμε τυχαίους αριθμούς) srand48((unsigned int)time(NULL)); printf("seed =%d\n",(unsigned int) time(NULL)); seed=1083354197; srand48(seed); /*--------------------------------------------------------*/ for(k=1;k<=S+1;k++)//Temperature steps (Βήματα θερμοκρασίας) { /* Clustering Algorithm(Αλγόριθμος Ομαδοποίησης) */ T=T0+Tinc*(k-1); X[k]=SW(q,T,nbors,bond,cluster,J,G);//χ[T] Calculation printf("T= %f X[%d] = %f\n",T,k,X[k]); temperature[k]=T; /* Final Data Clusters */ fcluster[k]=final_cluster(k,q,th,nbors,bond,cluster,cluster_data,G); printf("# of clusters[%d]=%d\n",k,fcluster[k]); if(plot_pixelmap==1) { sprintf(filename,"%f",temperature[k]); strncat(filename,".ppm",4); output(lattice,filename); } /* Find Biggest Clusters */ find_ClusterSize(k,cluster,fcluster,cluster_size); } /*--------------------------------------------------------*/ /*Write result to file (εγγραφή αποτελεσμάτων σε αρχείο)*/ //File 2--------------------------------------------- X[2]=0.0309; for(i=1;i<=S+1;i++) { fprintf(fp2,"%f %f %d ",T0+Tinc*(i-1),X[i],fcluster[i]); for(j=1;j<=B;j++) { fprintf(fp2," %d ",cluster_size[i][j]); } fprintf(fp2,"\n"); } fclose(fp2); //File 2--------------------------------------------- //File 3--------------------------------------------- for(i=1;i<=N;i++) { for(j=1;j<=S+1;j++) { fprintf(fp3,"%d ",cluster_data[i][j]); } fprintf(fp3,"\n"); } fclose(fp3); //File 3--------------------------------------------- //File 4--------------------------------------------- for(i=1;i<=N;i++) { for(j=1;j<=NB;j++) { fprintf(fp4,"%f ",G[i][j]); } fprintf(fp4,"\n"); } fclose(fp4); //File 4--------------------------------------------- /*Gnuplot Graphics session - Συνεδρία γραφικών Gnuplot*/ a=gnuplot_init(); gnuplot_setstyle(a,"lines"); gnuplot_set_xlabel(a,"Boltzmann constant*temperature"); gnuplot_set_ylabel(a,"Susceptibility density"); gnuplot_cmd(a,"set terminal svg"); gnuplot_cmd(a,"set output \"Susceptibility.svg\""); for(k=0;k<=S;k++) {//Correction for Gnuplot, nothing important temperature[k]=temperature[k+1]; X[k]=X[k+1]; } gnuplot_plot_xy(a,temperature,X,(S+1),"X");//plotting X for all temperatures. (σχεδιάζουμε την χ για όλες τις θερμοκρασίες.) gnuplot_close(a); //---------------------------------------------------------// b=gnuplot_init(); gnuplot_setstyle(b,"lines"); gnuplot_set_xlabel(b,"Boltzmann constant*temperature"); gnuplot_set_ylabel(b,"Cluster Size"); gnuplot_cmd(b,"set terminal svg"); gnuplot_cmd(b,"set output \"Clustersize.svg\""); //gnuplot_cmd(b,"set xrange [0:0.08]");//optional. sets the x-axis range. for (i=1;i<=B;i++)//For all the biggest clusters(για όλα τα μεγαλύτερα clusters) { for (j=1;j<=(S+1);j++)//For all temperatures (για όλες τις θερμοκρασίες) { a1[j]=(double)cluster_size[j][i];//keep current cluster array depending on T, to plot(κρατάμε τον τρέχοντα πίνακα για ένα συγκεκριμένο cluster για όλες τις Τ) } gnuplot_plot_xy(b,temperature,a1,(S+1),"cluster");//plotting current cluster curve (σχεδιάζουμε την καμπύλη του τρέχοντος cluster) }//now we have all cluster curves in a single diagram.(έχουμε όλες τις καμπύλες cluster σε μία γραφική παράσταση) gnuplot_close(b); //---------------------------------------------------------// return 0; }
void consensus (void *space, Uint *consensus, Uint len, IntSequence *query, Uint seedlen, void* info) { Uint i,j; char *constr; double sum, norm; double *consensus_double; double *seedprobability; imbissinfo *imbiss; IntSequence *consensusSequence; gnuplot_ctrl *h; imbiss = (imbissinfo*) info; seedprobability = ALLOCMEMORY(space, NULL, double, len); for (i=0; i < len; i++) { for (sum=0.0, j=0; j < seedlen; j++) { sum += imbiss->score[(Uint) query->sequence[i+j]]; } seedprobability[i] = log10(imbiss->K*2500000*seedlen* exp(-(double)imbiss->lambda*sum)); } consensusSequence = initSequence(space); consensusSequence->sequence = consensus; consensusSequence->length = len; constr = printSequence(space, consensusSequence, 60); printf("%s\n", constr); FREEMEMORY(space, constr); consensus_double = ALLOCMEMORY(space, NULL, double, len); h = gnuplot_init(); gnuplot_setstyle(h, "lines"); sum = 0; for(i=0; i < len; i++) { sum += consensus[i]; } for(i=0; i < len; i++) { norm = consensus[i]; norm = (norm > 0) ? norm : 1; consensus_double[i] = log10(norm); /* log10(imbiss->K*3000000*len*exp(-(double)consensus[i])); if (consensus_double[i] < -400) consensus_double[i]=-400;*/ } gnuplot_cmd(h, "set title 'IMBISS - seed statistics' -28,0 font'Helvetica,15'"); gnuplot_cmd(h, "set label '%s' at screen 0.12,0.92 font 'Helvetica,12'", imbiss->query->strings[0].str); gnuplot_cmd(h, "set label 'seed length: %d' at graph 0.05,0.95 font 'Helvetica, 12'", seedlen); gnuplot_set_xlabel(h, "query sequence residue"); gnuplot_set_ylabel(h, "log"); gnuplot_plot_x(h, consensus_double, len, "log(number of matches)"); gnuplot_plot_x(h, seedprobability, len, "log(Kmn*e^{lambda*score(seed)})"); FREEMEMORY(space, seedprobability); FREEMEMORY(space, consensus_double); FREEMEMORY(space, consensusSequence); }
/** * Parses a command. * * @param ctok Command string in strtok. * @param csv_file CSV file location. * @param gp gnuplot object. * @return True if the program should continue running. */ bool parse_cmd_line(char *ctok, char **csv_file, gnuplot_ctrl *gp, char *prompt, bool quiet) { // Command. if (!strcmp(ctok, "quit") || !strcmp(ctok, "exit")) { return false; } else if (!strcmp(ctok, "legend")) { // Toogle legend. if (!strcmp(strtok(NULL, " "), "off")) { gnuplot_cmd(gp, "set key off"); if (!quiet) { printf("Legend turned off.\n"); } } else { gnuplot_cmd(gp, "set key on"); if (!quiet) { printf("Legend turned on.\n"); } } } else if (!strcmp(ctok, "xlabel") || !strcmp(ctok, "ylabel")) { // Set xy label. char arg[64] = ""; char xy = ctok[0]; parse_spaced_arg(arg, ctok); if (!quiet) { printf("%clabel set to \"%s\"\n", xy, arg); } switch (xy) { case 'x': gnuplot_set_xlabel(gp, arg); break; case 'y': gnuplot_set_ylabel(gp, arg); } } else if (!strcmp(ctok, "plot")) { // Plot data. char lg_title[64] = ""; uint8_t col = atoi(strtok(NULL, " ")); double *items = NULL; unsigned int n = 0; parse_spaced_arg(lg_title, ctok); n = read_csv_col(&items, *csv_file, col); gnuplot_setstyle(gp, "lines"); gnuplot_plot_x(gp, items, n, lg_title); } else if (!strcmp(ctok, "gp")) { // Execute raw gnuplot command. char gp_cmd[1024] = ""; parse_spaced_arg(gp_cmd, ctok); gnuplot_cmd(gp, gp_cmd); } else if (!strcmp(ctok, "load")) { // Load CSV. char filename[2048] = ""; parse_spaced_arg(filename, ctok); *csv_file = malloc(strlen(filename) + 1); strcpy(*csv_file, filename); generate_prompt(prompt, *csv_file); } else { printf("Invalid command: %s\n", ctok); } return true; }
int main(int argc, char *argv[]) { FILE *inputfiles,*posting_file; int i=0; char *fileinput,*stemming_file,*posting_filename; if(argc < 2) { printf("\nIncorrect Usage. ./keywordengine <filelist.txt>\n"); return 0; } if((inputfiles=fopen(argv[1],"r+"))==NULL) { printf("\nCould not open %s. Exiting\n",argv[1]); exit(0); } if((posting_file=fopen("../output/posting_list_file_input.txt","w"))==NULL) { printf("\nFatal Error! Could not open/create posting_list_file_input.txt. Check output directory.\nErrorcode : %d\n",errno); exit(0); } int after_stemming=0; int before_stemming=0; double ratio=0.0; double array[20]; for(i=0; i<20; i++) { array[i]=0; } while(!feof(inputfiles)) { fileinput=(char *)malloc(sizeof(char)*FILENAME); fscanf(inputfiles,"%s\n",fileinput); stemming_file=(char *)malloc(sizeof(char)*(strlen(fileinput)+8)); strcpy(stemming_file,"output_"); strcat(stemming_file,fileinput); posting_filename=(char *)malloc(sizeof(char)*(strlen(stemming_file)+6)); strcpy(posting_filename,"stem_"); strcat(posting_filename,stemming_file); fprintf(posting_file,"%s\n",posting_filename); /* Tokenise and remove stopwords */ getwords(fileinput); /* Add to postings list */ initialize(); before_stemming=add_document_to_postingslist(stemming_file); /* Apply Porter's Stemmer */ stemmer(stemming_file); /* Add to postings list */ initialize(); after_stemming=add_document_to_postingslist(posting_filename); ratio=(double)after_stemming/before_stemming; //printf("\nbefore=%d and after=%d Ratio= %lf\n",before_stemming,after_stemming,ratio); if(0 <= ratio && 0.05 > ratio ) array[0]++; else if(0.75 <= ratio && 0.765 > ratio ) array[1]++; else if(0.765 <= ratio && 0.780 > ratio ) array[2]++; else if(0.780 <= ratio && 0.795 > ratio ) array[3]++; else if(0.795 <= ratio && 0.810 > ratio ) array[4]++; else if(0.810 <= ratio && 0.825 > ratio ) array[5]++; else if(0.825 <= ratio && 0.840 > ratio ) array[6]++; else if(0.840 <= ratio && 0.855 > ratio ) array[7]++; else if(0.855 <= ratio && 0.870 > ratio ) array[8]++; else if(0.870 <= ratio && 0.885 > ratio ) array[9]++; else if(0.885 <= ratio && 0.9 > ratio ) array[10]++; else if(0.9 <= ratio && 0.915 > ratio ) array[11]++; else if(0.915 <= ratio && 0.930 > ratio ) array[12]++; else if(0.930 <= ratio && 0.945 > ratio ) array[13]++; else if(0.945 <= ratio && 0.960 > ratio ) array[14]++; else if(0.960 <= ratio && 0.975 > ratio ) array[15]++; else if(0.975 <= ratio && 0.990 > ratio ) array[16]++; else if(0.990 <= ratio && 1.05 > ratio ) array[17]++; else if(1.05 <= ratio && 1.20 > ratio ) array[18]++; else if(1.20 <= ratio && 1.35 >= ratio ) array[19]++; i++; free(fileinput); fileinput=NULL; } fclose(posting_file); fclose(inputfiles); gnuplot_ctrl *h1; h1 = gnuplot_init() ; gnuplot_setstyle(h1, "lines"); gnuplot_set_xlabel(h1, "Compression"); gnuplot_set_ylabel(h1, "Frequency"); gnuplot_plot_x(h1, array ,20, "Ratio Graph") ; getchar(); /*Closing the files*/ gnuplot_close(h1); return 0; }
int main(int argc, const char **argv) { Options options(argc, argv); Timer timer; log_setlevel(options.getVerbosity()); /* Get the number of neutrons, bins and batches */ int num_neutrons = options.getNumNeutrons(); int num_bins = options.getNumBins(); int num_batches = options.getNumBatches(); int num_threads = options.getNumThreads(); int num_gen; int num_alive; log_printf(NORMAL, "Beginning two region problem with %d neutrons, " "%d bins, %d batches, %d threads...", num_neutrons, num_bins, num_batches, num_threads); /* Create a handle for plotting with gnuplot */ gnuplot_ctrl* handle; /* Create a set of plotting flux bins for each batch */ BatchBinSet* total_flux = new BatchBinSet(); BatchBinSet* fuel_flux = new BatchBinSet(); BatchBinSet* moderator_flux = new BatchBinSet(); total_flux->createBinners(1E-6, 1E7, num_bins, num_batches, LOGARITHMIC, FLUX_ENERGY, (char*)"all"); fuel_flux->createBinners(1E-6, 1E7, num_bins, num_batches, LOGARITHMIC, FLUX_ENERGY, (char*)"all"); moderator_flux->createBinners(1E-6, 1E7, num_bins, num_batches, LOGARITHMIC, FLUX_ENERGY, (char*)"all"); /* Create bins to compute total fission and absorption rates */ BatchBinSet* tot_fiss_rate = new BatchBinSet(); BatchBinSet* tot_abs_rate = new BatchBinSet(); tot_fiss_rate->createBinners(1E-7, 1E7, 1, num_batches, EQUAL, FISSION_RATE_ENERGY, (char*)"all"); tot_abs_rate->createBinners(1E-7, 1E7, 1, num_batches, EQUAL, ABSORPTION_RATE_ENERGY, (char*)"all"); float nu_bar = 2.455; /* CASMO edit for average # neutrons per fission */ /* Create bins to compute two group cell-averaged cross-sections */ BatchBinSet* capture_2G = new BatchBinSet(); BatchBinSet* absorb_2G = new BatchBinSet(); BatchBinSet* fission_2G = new BatchBinSet(); BatchBinSet* elastic_2G = new BatchBinSet(); BatchBinSet* total_2G = new BatchBinSet(); BatchBinSet* two_group_flux = new BatchBinSet(); float two_group_E_ranges[3] = {0.0, 0.625, 1E7}; capture_2G->createBinners(two_group_E_ranges, 2, num_batches, CAPTURE_RATE_ENERGY, (char*)"all"); absorb_2G->createBinners(two_group_E_ranges, 2, num_batches, ABSORPTION_RATE_ENERGY, (char*)"all"); fission_2G->createBinners(two_group_E_ranges, 2, num_batches, FISSION_RATE_ENERGY, (char*)"all"); elastic_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"all"); total_2G->createBinners(two_group_E_ranges, 2, num_batches, COLLISION_RATE_ENERGY, (char*)"all"); two_group_flux->createBinners(two_group_E_ranges, 2, num_batches, FLUX_ENERGY, (char*)"all"); /* Create bins to compute two group isotopic cross-sections */ BatchBinSet* H1_capture_rate_2G = new BatchBinSet(); BatchBinSet* H1_elastic_rate_2G = new BatchBinSet(); BatchBinSet* O16_elastic_rate_2G = new BatchBinSet(); BatchBinSet* ZR90_elastic_rate_2G = new BatchBinSet(); BatchBinSet* U235_capture_rate_2G = new BatchBinSet(); BatchBinSet* U235_elastic_rate_2G = new BatchBinSet(); BatchBinSet* U235_fission_rate_2G = new BatchBinSet(); BatchBinSet* U238_capture_rate_2G = new BatchBinSet(); BatchBinSet* U238_elastic_rate_2G = new BatchBinSet(); BatchBinSet* U238_fission_rate_2G = new BatchBinSet(); H1_capture_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, CAPTURE_RATE_ENERGY, (char*)"H1"); H1_elastic_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"H1"); O16_elastic_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"O16"); ZR90_elastic_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"ZR90"); U235_capture_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, CAPTURE_RATE_ENERGY, (char*)"U235"); U235_elastic_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"U235"); U235_fission_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, FISSION_RATE_ENERGY, (char*)"U235"); U238_capture_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, CAPTURE_RATE_ENERGY, (char*)"U238"); U238_elastic_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, ELASTIC_RATE_ENERGY, (char*)"U238"); U238_fission_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, FISSION_RATE_ENERGY, (char*)"U238"); /* Create bins to compute moderator to fuel flux ratios */ int num_ratios = 13; BatchBinSet* fuel_flux_ratio = new BatchBinSet(); BatchBinSet* moderator_flux_ratio = new BatchBinSet(); float flux_ratio_E_ranges[14] = {0.0, 0.1, 0.5, 1.0, 6.0, 10.0, 25.0, 50.0, 100.0, 1000.0, 10000.0, 100000.0, 500000.0, 10000000.0}; fuel_flux_ratio->createBinners(flux_ratio_E_ranges, num_ratios, num_batches, FLUX_ENERGY, (char*)"all"); moderator_flux_ratio->createBinners(flux_ratio_E_ranges, num_ratios, num_batches, FLUX_ENERGY, (char*)"all"); /* Create bins to compute the diffusion coefficient for three methods */ BatchBinSet* coll_rate_2G = new BatchBinSet(); BatchBinSet* transport_rate_2G = new BatchBinSet(); BatchBinSet* diffusion_rate_2G = new BatchBinSet(); coll_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, COLLISION_RATE_ENERGY, (char*)"all"); transport_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, TRANSPORT_RATE_ENERGY, (char*)"all"); diffusion_rate_2G->createBinners(two_group_E_ranges, 2, num_batches, DIFFUSION_RATE_ENERGY, (char*)"all"); /* 2-region pin cell geometric parameters (units in cm) */ float r_fuel = 0.4096; float r_gap = 0.4178; float r_cladding = 0.4750; float pitch = 1.26; float p2 = pitch * pitch; /* 2-region homogenized densities (g/cm^3) and enrichment */ float rho_fuel = 10.2; float rho_cladding = 6.549; float rho_coolant = 0.9966; float enrichment = 0.03035; /* Isotope number densities */ float N_A = 6.023E23; /* Avogadro's number (at / mol) */ float N_U238 = rho_fuel*N_A*(1.0 - enrichment) / ((238.0 * (1.0 - enrichment)) + (235.0*enrichment) + (16.0*2.0)); float N_U235 = rho_fuel*N_A*enrichment / ((238.0 * (1.0 - enrichment)) + (235.0*enrichment) + (16.0*2.0)); float N_O16 = rho_fuel*N_A*2.0 / ((238.0 * (1.0 - enrichment)) + (235.0*enrichment) + (16.0*2.0)); float N_ZR90 = rho_cladding*N_A / 90.0; float N_H2O = rho_coolant*N_A / 18.0; float N_H1 = rho_coolant*N_A*2.0 / 18.0; /* 2-region pin cell volumes (cm^3) */ float v_fuel = M_PI*r_fuel*r_fuel; float v_gap = M_PI*(r_gap*r_gap - r_fuel*r_fuel); float v_cladding = M_PI*(r_cladding*r_cladding - r_gap*r_gap); float v_coolant = p2 - M_PI*r_cladding*r_cladding; float v_moderator = v_gap + v_cladding + v_coolant; float v_total = v_fuel + v_moderator; /* Compute homogenized moderator number densities using volume weighting */ N_H2O *= (v_coolant / v_moderator); N_H1 *= (v_coolant / v_moderator); N_ZR90 *= (v_cladding / v_moderator); /* Dancoff factor from CASMO-5 */ float dancoff = 0.277; /* Escape cross-section */ float sigma_e = 1.0 / (2.0*r_fuel); /* Carlvik's two-term rational model */ float A = (1.0 - dancoff) / dancoff; float alpha1 = ((5.0*A + 6.0) - sqrt(A*A + 36.0*A + 36.0)) / (2.0*(A+1.0)); float alpha2 = ((5.0*A + 6.0) + sqrt(A*A + 36.0*A + 36.0)) / (2.0*(A+1.0)); float beta = (((4.0*A + 6.0) / (A + 1.0)) - alpha1) / (alpha2 - alpha1); /* Print out the geometry parameters */ log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, "\t\t\t\tGeometry Parameters (cm)"); log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, ""); log_printf(NORMAL, "r_fuel = %f", r_fuel); log_printf(NORMAL, "r_gap = %f", r_gap); log_printf(NORMAL, "r_cladding = %f", r_cladding); log_printf(NORMAL, "pitch = %f", pitch); log_printf(NORMAL, "total cell area = %f", p2); log_printf(NORMAL, "v_fuel = %f", v_fuel); log_printf(NORMAL, "v_gap = %f", v_gap); log_printf(NORMAL, "v_cladding = %f", v_cladding); log_printf(NORMAL, "v_coolant = %f", v_coolant); log_printf(NORMAL, "v_moderator = %f", v_moderator); log_printf(NORMAL, "v_total = %f", v_total); log_printf(NORMAL, ""); /* Print to the console the number densities */ log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, "\t\t\t\tNumber Densities (at/cm^3)"); log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, ""); log_printf(NORMAL, "H1:\t%1.5e", N_H1); log_printf(NORMAL, "H2O:\t%1.5e", N_H2O); log_printf(NORMAL, "ZR90:\t%1.5e", N_ZR90); log_printf(NORMAL, "U235:\t%1.5e", N_U235); log_printf(NORMAL, "U238:\t%1.5e", N_U238); log_printf(NORMAL, "O16:\t%1.5e", N_O16); log_printf(NORMAL, ""); /* Print to the console the collision probability parameters */ log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, "\t\t\tTwo Region Collision Probability Parameters"); log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, ""); log_printf(NORMAL, "dancoff = %f", dancoff); log_printf(NORMAL, "sigma_e = %f", sigma_e); log_printf(NORMAL, "A = %f", A); log_printf(NORMAL, "alpha1 = %f", alpha1); log_printf(NORMAL, "alpha2 = %f", alpha2); log_printf(NORMAL, "beta = %f", beta); log_printf(NORMAL, ""); /* Create isotopes*/ char* delim = (char*)"\t"; Isotope* H1 = new Isotope(); H1->setA(1); H1->setIsotopeType((char*)"H1"); H1->loadXS((char*)"pendf/h-1_capture.txt", CAPTURE, delim); H1->loadXS((char*)"pendf/h-1_elastic.txt", ELASTIC, delim); H1->setElasticAngleType(ISOTROPIC_LAB); H1->initializeThermalScattering(1E-6, 15, 1000, 15); Isotope* O16 = new Isotope(); O16->setA(16); O16->setIsotopeType((char*)"O16"); O16->loadXS((char*)"pendf/o-16_elastic.txt", ELASTIC, delim); O16->setElasticAngleType(ISOTROPIC_LAB); Isotope* ZR90 = new Isotope(); ZR90->setA(90); ZR90->setIsotopeType((char*)"ZR90"); ZR90->loadXS((char*)"pendf/zr-90_elastic.txt", ELASTIC, delim); ZR90->setElasticAngleType(ISOTROPIC_LAB); Isotope* U235 = new Isotope(); U235->setA(235); U235->setIsotopeType((char*)"U235"); U235->loadXS((char*)"pendf/u-235_capture.txt", CAPTURE, delim); U235->setOneGroupElasticXS(11.4, ISOTROPIC_LAB); U235->loadXS((char*)"pendf/u-235_fission.txt", FISSION, delim); Isotope* U238 = new Isotope(); U238->setA(238); U238->setIsotopeType((char*)"U238"); U238->loadXS((char*)"pendf/u-238_capture.txt", CAPTURE, delim); U238->setOneGroupElasticXS(11.3, ISOTROPIC_LAB); U238->loadXS((char*)"pendf/u-238_fission.txt", FISSION, delim); /* Create Materials */ Material* moderator = new Material[num_threads]; Material* fuel = new Material[num_threads]; /* Create Regions for each thread */ Region1D* pellet = new Region1D[num_threads]; Region1D* coolant = new Region1D[num_threads]; /* Create Fissioners for each thread */ Fissioner* fissioners = new Fissioner[num_threads]; /* Create Region class objects for each thread */ for (int i=0; i < num_threads; i++) { /* Initialize Materials for each thread with isotope clones */ moderator[i].setMaterialName((char*)"moderator"); fuel[i].setMaterialName((char*)"fuel"); moderator[i].addIsotope(ZR90->clone(), N_ZR90); moderator[i].addIsotope(H1->clone(), N_H1); moderator[i].addIsotope(O16->clone(), N_H2O); moderator[i].rescaleCrossSections(1E-7, 1E7, 50000, LOGARITHMIC); fuel[i].addIsotope(U235->clone(), N_U235); fuel[i].addIsotope(U238->clone(), N_U238); fuel[i].addIsotope(O16->clone(), N_O16); fuel[i].rescaleCrossSections(1E-7, 1E7, 50000, LOGARITHMIC); /* Set the two region collision probability parameters */ pellet[i].setRegionName((char*)"pellet"); pellet[i].setMaterial(&fuel[i]); pellet[i].setAsFuel(); pellet[i].setOtherPinCellRegion(&coolant[i]); pellet[i].setVolume(v_fuel); pellet[i].setTwoRegionPinCellParams(sigma_e, beta, alpha1, alpha2); coolant[i].setRegionName((char*)"coolant"); coolant[i].setMaterial(&moderator[i]); coolant[i].setAsModerator(); coolant[i].setOtherPinCellRegion(&pellet[i]); coolant[i].setVolume(v_moderator); coolant[i].setTwoRegionPinCellParams(sigma_e, beta, alpha1, alpha2); /* Set the fissioner class for this thread to have 10MeV maximum and * 5000 sample bins */ fissioners[i].setEMax(10.0); fissioners[i].setNumBins(200); fissioners[i].buildCDF(); } /* Run the simulation */ log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, "\t\t\t\tBeginning Simulation..."); log_printf(NORMAL, "*******************************************************" "*************************"); log_printf(NORMAL, ""); timer.start(); omp_set_num_threads(num_threads); #pragma omp parallel shared(total_flux, fuel_flux, moderator_flux,\ fuel_flux_ratio, moderator_flux_ratio,\ tot_fiss_rate, tot_abs_rate, U235_capture_rate_2G,\ U235_elastic_rate_2G, U235_fission_rate_2G,\ U238_capture_rate_2G, U238_elastic_rate_2G,\ U238_fission_rate_2G, H1_capture_rate_2G,\ H1_elastic_rate_2G, O16_elastic_rate_2G,\ ZR90_elastic_rate_2G, fuel, moderator, \ pellet, coolant, fissioners) { /* Loop over batches */ #pragma omp for private(num_gen, num_alive) for (int b=0; b < num_batches; b++) { int thread_num = omp_get_thread_num(); log_printf(NORMAL, "Batch: %d\tThread: %d", b, thread_num); /* Set the binns for this batch */ pellet[thread_num].clearBinners(); pellet[thread_num].addBinner(total_flux->getBinner(b)); pellet[thread_num].addBinner(fuel_flux->getBinner(b)); pellet[thread_num].addBinner(fuel_flux_ratio->getBinner(b)); pellet[thread_num].addBinner(tot_fiss_rate->getBinner(b)); pellet[thread_num].addBinner(tot_abs_rate->getBinner(b)); pellet[thread_num].addBinner(U235_capture_rate_2G->getBinner(b)); pellet[thread_num].addBinner(U235_elastic_rate_2G->getBinner(b)); pellet[thread_num].addBinner(U235_fission_rate_2G->getBinner(b)); pellet[thread_num].addBinner(U238_capture_rate_2G->getBinner(b)); pellet[thread_num].addBinner(U238_elastic_rate_2G->getBinner(b)); pellet[thread_num].addBinner(U238_fission_rate_2G->getBinner(b)); pellet[thread_num].addBinner(O16_elastic_rate_2G->getBinner(b)); pellet[thread_num].addBinner(two_group_flux->getBinner(b)); pellet[thread_num].addBinner(coll_rate_2G->getBinner(b)); pellet[thread_num].addBinner(transport_rate_2G->getBinner(b)); pellet[thread_num].addBinner(diffusion_rate_2G->getBinner(b)); pellet[thread_num].addBinner(capture_2G->getBinner(b)); pellet[thread_num].addBinner(fission_2G->getBinner(b)); pellet[thread_num].addBinner(absorb_2G->getBinner(b)); pellet[thread_num].addBinner(elastic_2G->getBinner(b)); pellet[thread_num].addBinner(total_2G->getBinner(b)); coolant[thread_num].clearBinners(); coolant[thread_num].addBinner(total_flux->getBinner(b)); coolant[thread_num].addBinner(moderator_flux->getBinner(b)); coolant[thread_num].addBinner(moderator_flux_ratio->getBinner(b)); coolant[thread_num].addBinner(tot_fiss_rate->getBinner(b)); coolant[thread_num].addBinner(tot_abs_rate->getBinner(b)); coolant[thread_num].addBinner(H1_capture_rate_2G->getBinner(b)); coolant[thread_num].addBinner(H1_elastic_rate_2G->getBinner(b)); coolant[thread_num].addBinner(O16_elastic_rate_2G->getBinner(b)); coolant[thread_num].addBinner(ZR90_elastic_rate_2G->getBinner(b)); coolant[thread_num].addBinner(two_group_flux->getBinner(b)); coolant[thread_num].addBinner(coll_rate_2G->getBinner(b)); coolant[thread_num].addBinner(transport_rate_2G->getBinner(b)); coolant[thread_num].addBinner(diffusion_rate_2G->getBinner(b)); coolant[thread_num].addBinner(capture_2G->getBinner(b)); coolant[thread_num].addBinner(fission_2G->getBinner(b)); coolant[thread_num].addBinner(absorb_2G->getBinner(b)); coolant[thread_num].addBinner(elastic_2G->getBinner(b)); coolant[thread_num].addBinner(total_2G->getBinner(b)); /* Initialize all neutrons for this batch and add them to slab 1 */ for (int n=0; n < num_neutrons; n++) { neutron* new_neutron = initializeNewNeutron(); new_neutron->_x = 0.0; new_neutron->_mu = (float(rand()) / RAND_MAX) * 2.0 - 1.0; new_neutron->_energy = fissioners[thread_num].emitNeutroneV(); pellet[thread_num].addNeutron(new_neutron); } /* Loop over all neutrons until they are all dead */ num_gen = 1; num_alive = num_neutrons; while (num_alive > 0) { log_printf(DEBUG, "batch = %d, thread = %d, gen = %d, " "num_alive = %d", b, thread_num, num_gen, num_alive); num_gen++; num_alive = 0; /* Transfer neutrons between regions based on * two region collision probabilities */ pellet[thread_num].twoRegionNeutronTransferral(); coolant[thread_num].twoRegionNeutronTransferral(); /* Update each region's vector of neutrons with those * neutrons which were just transferred */ pellet[thread_num].initializeTransferredNeutrons(); coolant[thread_num].initializeTransferredNeutrons(); /* Move neutrons within each region */ pellet[thread_num].moveNeutrons(); coolant[thread_num].moveNeutrons(); num_alive = pellet[thread_num].getNumNeutrons() + coolant[thread_num].getNumNeutrons(); } } } log_printf(NORMAL, ""); /* Stop the timer record the timing split for this simulation */ timer.stop(); timer.recordSplit("Pset 4 time (sec)"); /* Compute batch statistics for total flux and flux in fuel, moderator */ total_flux->computeScaledBatchStatistics(num_neutrons*v_total); fuel_flux->computeScaledBatchStatistics(num_neutrons*v_fuel); moderator_flux->computeScaledBatchStatistics(num_neutrons*v_moderator); /* Compute batch statistics for total fission and absorption rates */ tot_fiss_rate->computeScaledBatchStatistics(num_neutrons*v_total); tot_abs_rate->computeScaledBatchStatistics(num_neutrons*v_total); /* Compute batch statistics for cell-averaged macro cross-sections */ capture_2G->computeScaledBatchStatistics(num_neutrons*v_total); fission_2G->computeScaledBatchStatistics(num_neutrons*v_total); absorb_2G->computeScaledBatchStatistics(num_neutrons*v_total); elastic_2G->computeScaledBatchStatistics(num_neutrons*v_total); total_2G->computeScaledBatchStatistics(num_neutrons*v_total); /* Compute batch statistics for one group cross-sections */ H1_capture_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); H1_elastic_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); O16_elastic_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); ZR90_elastic_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U235_capture_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U235_elastic_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U235_fission_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U238_capture_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U238_elastic_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); U238_fission_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); two_group_flux->computeScaledBatchStatistics(num_neutrons*v_total); coll_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); transport_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); diffusion_rate_2G->computeScaledBatchStatistics(num_neutrons*v_total); /* Compute k-infinity */ float fiss_rate_mu = tot_fiss_rate->getBatchMu()[0]; float fiss_rate_var = tot_fiss_rate->getBatchVariance()[0]; float abs_rate_mu = tot_abs_rate->getBatchMu()[0]; float abs_rate_var = tot_abs_rate->getBatchVariance()[0]; float k_inf = fiss_rate_mu * nu_bar / abs_rate_mu; float k_inf_var = (fiss_rate_mu*fiss_rate_mu)*abs_rate_var + (abs_rate_mu*abs_rate_mu)*fiss_rate_var + fiss_rate_var*abs_rate_var; float k_inf_std_dev = sqrt(k_inf_var); /* Compute moderator to fuel flux ratios */ fuel_flux_ratio->computeScaledBatchStatistics(num_neutrons*v_fuel); moderator_flux_ratio->computeScaledBatchStatistics(num_neutrons*v_moderator); fuel_flux_ratio->computeScaledBatchStatistics(num_neutrons*v_fuel); moderator_flux_ratio->computeScaledBatchStatistics(num_neutrons*v_moderator); /* Print to the console the total fission rate */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\t\tTotal Fission Rate (Batch Statistics)"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(NORMAL, ""); log_printf(RESULT, "Tot fission rate = %1.8f\t\tVariance = %1.8f", tot_fiss_rate->getBatchMu()[0], tot_fiss_rate->getBatchVariance()[0]); log_printf(RESULT, "Tot absorption rate = %f\t\tVariance = %f", tot_abs_rate->getBatchMu()[0], tot_abs_rate->getBatchVariance()[0]); log_printf(RESULT, "k_inf = %f\t\tvariance = %1.8f \t\t 2 sigma = %1.8f", k_inf, k_inf_var, k_inf_std_dev); log_printf(RESULT, ""); /* Print to the console the moderator/fuel flux ratios */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\t\t\tModerator/Fuel Flux Ratios"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, ""); float ratio; for (int i=1; i < num_ratios+1; i++) { ratio = moderator_flux_ratio->getBatchMu()[i-1] / fuel_flux_ratio->getBatchMu()[i-1]; log_printf(RESULT, "[%2.e eV - %2.e eV]:\t%f", flux_ratio_E_ranges[i-1], flux_ratio_E_ranges[i], ratio); } log_printf(RESULT, ""); /* Print to the console the cell-averaged fast to thermal flux ratio */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\t\tCell-Averaged Fast-to-Thermal Flux Ratio"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, ""); double* two_group_flux_mu = two_group_flux->getBatchMu(); double flux1 = two_group_flux_mu[0]; double flux2 = two_group_flux_mu[1]; log_printf(RESULT, "Ratio = %f", flux2 / flux1); log_printf(RESULT, ""); /* Print to the console the two group macroscopic cross-sections */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\tTwo Group Macroscopic Cross-Sections (cm^-1)"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, ""); float xs1, xs2; log_printf(RESULT, "\t\t\t[%1.1f eV - %1.3f eV]\t[%1.3f eV - %1.1e eV]", two_group_flux->getBinner(0)->getBinEdges()[0], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[2]); /* H1 capture */ xs1 = H1_capture_rate_2G->getBatchMu()[0] / flux1; xs2 = H1_capture_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "H1 Capture: \t\t%f\t\t%f", xs1, xs2); /* H1 elastic */ xs1 = H1_elastic_rate_2G->getBatchMu()[0] / flux1; xs2 = H1_elastic_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "H1 Elastic: \t\t%f\t\t%f", xs1, xs2); /* O16 elastic */ xs1 = O16_elastic_rate_2G->getBatchMu()[0] / flux1; xs2 = O16_elastic_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "O16 Elastic: \t\t%f\t\t%f", xs1, xs2); /* ZR90 elastic */ xs1 = ZR90_elastic_rate_2G->getBatchMu()[0] / flux1; xs2 = ZR90_elastic_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "ZR90 Elastic: \t\t%f\t\t%f", xs1, xs2); /* U235 capture */ xs1 = U235_capture_rate_2G->getBatchMu()[0] / flux1; xs2 = U235_capture_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U235 Capture: \t\t%f\t\t%f", xs1, xs2); /* U235 elastic */ xs1 = U235_elastic_rate_2G->getBatchMu()[0] / flux1; xs2 = U235_elastic_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U235 Elastic: \t\t%f\t\t%f", xs1, xs2); /* U235 fission */ xs1 = U235_fission_rate_2G->getBatchMu()[0] / flux1; xs2 = U235_fission_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U235 Fission: \t\t%f\t\t%f", xs1, xs2); /* U238 capture */ xs1 = U238_capture_rate_2G->getBatchMu()[0] / flux1; xs2 = U238_capture_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U238 Capture: \t\t%f\t\t%f", xs1, xs2); /* U238 elastic */ xs1 = U238_elastic_rate_2G->getBatchMu()[0] / flux1; xs2 = U238_elastic_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U238 Elastic: \t\t%f\t\t%f", xs1, xs2); /* U238 fission */ xs1 = U238_fission_rate_2G->getBatchMu()[0] / flux1; xs2 = U238_fission_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "U238 Fission: \t\t%f\t\t%f", xs1, xs2); log_printf(RESULT, ""); /* Print to the console the two group macroscopic cross-sections */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\tTwo Group Cell-Averaged Macroscopic " "Cross-Sections (cm^-1)"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, ""); log_printf(RESULT, "\t\t\t[%1.1f eV - %1.3f eV]\t[%1.3f eV - %1.1e eV]", two_group_flux->getBinner(0)->getBinEdges()[0], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[2]); /* Flux */ log_printf(RESULT, "Flux: \t\t\t%f\t\t%f", flux1, flux2); /* Capture */ xs1 = capture_2G->getBatchMu()[0] / flux1; xs2 = capture_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Capture: \t\t\t%f\t\t%f", xs1, xs2); /* Fission */ xs1 = fission_2G->getBatchMu()[0] / flux1; xs2 = fission_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Fission: \t\t\t%f\t\t%f", xs1, xs2); /* Absorption */ xs1 = absorb_2G->getBatchMu()[0] / flux1; xs2 = absorb_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Absorb: \t\t\t%f\t\t%f", xs1, xs2); /* Elastic */ xs1 = elastic_2G->getBatchMu()[0] / flux1; xs2 = elastic_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Elastic: \t\t\t%f\t\t%f", xs1, xs2); /* Total */ xs1 = total_2G->getBatchMu()[0] / flux1; xs2 = total_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Total: \t\t\t%f\t\t%f", xs1, xs2); log_printf(RESULT, ""); /* Print to the console the two group macroscopic cross-sections */ log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\t\tTwo Group Diffusion Coefficients"); log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, ""); log_printf(RESULT, "\t\t\t[%1.1f eV - %1.3f eV]\t[%1.3f eV - %1.1e eV]", two_group_flux->getBinner(0)->getBinEdges()[0], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[1], two_group_flux->getBinner(0)->getBinEdges()[2]); float sigma_t1, sigma_t2; float sigma_tr1, sigma_tr2; float D1, D2; sigma_t1 = coll_rate_2G->getBatchMu()[0] / flux1; sigma_t2 = coll_rate_2G->getBatchMu()[1] / flux2; D1 = 1.0 / (3.0 * sigma_t1); D2 = 1.0 / (3.0 * sigma_t2); log_printf(RESULT, "1/(3*sigma_t):\t\t%f\t\t%f", D1, D2); sigma_tr1 = transport_rate_2G->getBatchMu()[0] / flux1; sigma_tr2 = transport_rate_2G->getBatchMu()[1] / flux2; D1 = 1.0 / (3.0 * sigma_tr1); D2 = 1.0 / (3.0 * sigma_tr2); log_printf(RESULT, "1/(3*sigma_tr):\t\t%f\t\t%f", D1, D2); D1 = diffusion_rate_2G->getBatchMu()[0] / flux1; D2 = diffusion_rate_2G->getBatchMu()[1] / flux2; log_printf(RESULT, "Diff coeff:\t\t%f\t\t%f", D1, D2); log_printf(RESULT, ""); /* Plot the total neutron flux */ handle = gnuplot_init(); gnuplot_set_xlabel(handle, (char*)"Energy (eV)"); gnuplot_set_ylabel(handle, (char*)"flux"); gnuplot_set_xrange(handle, 0.005, 1E7); gnuplot_cmd(handle, (char*)"set logscale xy"); gnuplot_cmd(handle, (char*)"set title \"Normalized Flux\""); gnuplot_setstyle(handle, (char*)"lines"); gnuplot_plot_xy(handle, total_flux->getBinner(0)->getBinCenters(), total_flux->getBatchMu(), num_bins, (char*)"Total Flux"); gnuplot_plot_xy(handle, fuel_flux->getBinner(0)->getBinCenters(), fuel_flux->getBatchMu(), num_bins, (char*)"Fuel Flux"); gnuplot_saveplot(handle, (char*)"flux"); gnuplot_plot_xy(handle, moderator_flux->getBinner(0)->getBinCenters(), moderator_flux->getBatchMu(), num_bins, (char*)"Moderator Flux"); gnuplot_close(handle); /* Free all allocated memory */ delete [] pellet; delete [] coolant; delete [] fissioners; delete [] moderator; delete [] fuel; delete total_flux; delete fuel_flux; delete moderator_flux; delete tot_fiss_rate; delete tot_abs_rate; delete fuel_flux_ratio; delete moderator_flux_ratio; delete H1_capture_rate_2G; delete H1_elastic_rate_2G; delete O16_elastic_rate_2G; delete U235_capture_rate_2G; delete U235_elastic_rate_2G; delete U235_fission_rate_2G; delete U238_capture_rate_2G; delete U238_elastic_rate_2G; delete U238_fission_rate_2G; delete ZR90_elastic_rate_2G; delete two_group_flux; delete coll_rate_2G; delete transport_rate_2G; delete diffusion_rate_2G; delete H1; delete O16; delete ZR90; delete U235; delete U238; log_printf(RESULT, "*******************************************************" "*************************"); log_printf(RESULT, "\t\t\t\tTiming Results"); log_printf(RESULT, "*******************************************************" "*************************"); timer.printSplits(); }