EXPORT void fprint_vector_of_floats( FILE *file, int number, double *f) { int i, num; static const int MAX_FLOATS = 255; if (is_binary_output() == YES) { while (number > 0) { num = min(number,MAX_FLOATS); (void) fprintf(file,"\f%c",num); (void) fwrite((const void *)f,sizeof(double),num,file); number -= num; } } else { (void) fprintf(file,"%"FFMT,f[0]); for (i = 1; i < number; i++) (void) fprintf(file," %"FFMT,f[i]); (void) fprintf(file,"\n"); } } /*end fprint_vector_of_floats*/
EXPORT void fprint_float( FILE *file, const char *mesg, double value, const char *end) { (void) fprintf(file,"%s",mesg); if (is_binary_output() == YES) { (void) fprintf(file,"\f%c",1); (void) fwrite((const void *) &value,sizeof(double),1,file); } else (void) fprintf(file,"%"FFMT,value); (void) fprintf(file,"%s",end); } /*end fprint_float*/
EXPORT void fprint_gas_data( FILE *file, Locstate state) { (void) fprintf(file,"State information for the "); if (state == NULL) { (void) fprintf(file,"NULL state 0x%p\n\n",(POINTER)state); return; } if (is_obstacle_state(state)) { (void) fprintf(file,"OBSTACLE state 0x%p\n\n",(POINTER)state); return; } (void) fprintf(file,"state 0x%p\n",(POINTER)state); (void) fprintf(file,"\tState Data "); if (is_binary_output() == YES) { uint64_t prms; float *x; int stype = state_type(state); int failed = material_failure(state); (void) fprintf(file,"\f%c",(char)Params(state)->sizest); x = &Dens(state); (void) fwrite((const void *)x,FLOAT,2+SMAXD,file); prms = gas_param_number(Params(state)); (void) fwrite((const void *)&prms,sizeof(uint64_t),1,file); (void) fwrite((const void *)&stype,sizeof(int),1,file); (void) fwrite((const void *)&failed,sizeof(int),1,file); #if defined(COMBUSTION_CODE) switch (Composition_type(state)) { case ZND: case PTFLAME: (void) fwrite((const void *)pdens(state),FLOAT,1,file); break; case TWO_CONSTITUENT_REACTIVE: (void) fwrite((const void *)pdens(state),FLOAT,2,file); break; case PURE_NON_REACTIVE: default: break; } #endif /* defined(COMBUSTION_CODE) */ if(g_composition_type() == MULTI_COMP_NON_REACTIVE) { if(Params(state) != NULL && Params(state)->n_comps != 1) { int i; for(i = 0; i < Params(state)->n_comps; i++) (void) fwrite((const void *)&(pdens(state)[i]),FLOAT,1,file); } } (void) fprintf(file,"\n"); return; } (void) fprintf(file,"\n"); switch (state_type(state)) { case GAS_STATE: g_fprint_state(file,state); break; case EGAS_STATE: g_fprint_Estate(file,state); break; case TGAS_STATE: g_fprint_Tstate(file,state); break; case FGAS_STATE: g_fprint_Fstate(file,state); break; case VGAS_STATE: verbose_fprint_state(file,"",state); break; default: screen("ERROR in fprint_gas_data(), " "unknown state type %d\n",state_type(state)); clean_up(ERROR); } } /*end fprint_gas_data*/
EXPORT void g_verbose_fprint_state( FILE *file, const char *name, Locstate state) { bool bin_out; int i, dim; float p, c, S, v[SMAXD], speed; static char vname[3][3] = { "vx", "vy", "vz"}; static char mname[3][3] = { "mx", "my", "mz"}; if (name == NULL) name = ""; (void) fprintf(file,"\n%s:\n",name); (void) fprintf(file,"address %p\n",state); if (state == NULL || is_obstacle_state(state)) { (void) fprintf(file,"(OBSTACLE STATE)\n\n"); return; } dim = Params(state)->dim; p = pressure(state); c = sound_speed(state); S = entropy(state); (void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n", "density",Dens(state), "specific internal energy", specific_internal_energy(state)); (void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n","pressure",p, "sound speed",c); (void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n","temperature", temperature(state),"specific entropy",S); speed = 0.0; for (i = 0; i < dim; i++) { v[i] = vel(i,state); speed += sqr(v[i]); (void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n", mname[i],mom(i,state),vname[i],v[i]); } speed = sqrt(speed); (void) fprintf(file,"%-24s = %-"FFMT"","total energy",energy(state)); if (c > 0. && Dens(state) > 0.) (void) fprintf(file," %-24s = %-"FFMT"\n","Mach number",speed / c); else (void) fprintf(file,"\n"); #if defined(TWOD) if (dim == 2) (void) fprintf(file,"%-24s = %-"FFMT"\n","velocity angle", degrees(angle(v[0],v[1]))); #endif /* defined(TWOD) */ fprint_state_type(file,"State type = ",state_type(state)); (void) fprintf(file,"Params state = %llu\n", gas_param_number(Params(state))); bin_out = is_binary_output(); set_binary_output(NO); if (debugging("prt_params")) fprint_Gas_param(file,Params(state)); else (void) fprintf(file,"Gas_param = %llu\n", gas_param_number(Params(state))); set_binary_output(bin_out); //if(p< -2000 || p>10000) //{ // printf("#huge pressure\n"); // clean_up(0); //} #if !defined(COMBUSTION_CODE) (void) fprintf(file,"\n"); #else /* !defined(COMBUSTION_CODE) */ if (Composition_type(state) == PURE_NON_REACTIVE) { (void) fprintf(file,"\n"); return; } (void) fprintf(file,"%-24s = %-12s %-24s = %-"FFMT"\n","burned", Burned(state) ? "BURNED" : "UNBURNED", "q",Params(state)->q); (void) fprintf(file,"%-24s = %-"FFMT"\n","t_crit", Params(state)->critical_temperature); if (Composition_type(state) == PTFLAME) { (void) fprintf(file,"\n"); return; } (void) fprintf(file,"%-24s = %-"FFMT"\n","product density",Prod(state)); (void) fprintf(file,"%-24s = %-"FFMT"\n", "reaction progress",React(state)); if (Composition_type(state) == ZND) { (void) fprintf(file,"\n"); return; } (void) fprintf(file,"%-24s = %-"FFMT"\n","rho1",Dens1(state)); #endif /* !defined(COMBUSTION_CODE) */ (void) fprintf(file,"%-24s = %-24s %-24s = %-"FFMT"\n\n","gamma_set", Local_gamma_set(state)?"YES" : "NO","local_gamma", Local_gamma(state)); if(g_composition_type() == MULTI_COMP_NON_REACTIVE) { if(Params(state) != NULL && Params(state)->n_comps != 1) { for(i = 0; i < Params(state)->n_comps; i++) (void) fprintf(file,"partial density[%2d] = %"FFMT"\n", i,pdens(state)[i]); (void) fprintf(file,"\n"); /* TMP the following print is for the debuging display purpose */ for(i = 0; i < Params(state)->n_comps; i++) (void) fprintf(file,"[%d]Mass fraction = %-"FFMT"\n", i, pdens(state)[i]/Dens(state)); (void) fprintf(file,"\n"); } } } /*end g_verbose_fprint_state*/
EXPORT void fprint_SESAME_params( FILE *file, SESAME_EOS *seos) { bool bio = is_binary_output(); (void) fprintf(file,"\tEquation of state = %d SESAME\n",SESAME); (void) fprintf(file,"\tsesame library = %s\n",seos->seslib); (void) fprintf(file,"\tSesame material index = %d\n",seos->ids2); fwrite_float(file,"\tDiscreteness = ",seos->eps,bio,"%"FFMT,"\n"); (void) fprintf(file,"\tDensity-Temperature window parameters\n"); fwrite_float(file,"\t minimum density = ",Rho_min(seos),bio, "%"FFMT" g/cc",", "); fwrite_float(file,"maximum density = ",Rho_max(seos),bio, "%"FFMT" g/cc",", "); fwrite_float(file,"reference density = ",Rho_ref(seos),bio, "%"FFMT" g/cc","\n"); fwrite_float(file,"\t minimum temperature = ", Temp_min(seos),bio,"%"FFMT" K"," "); fwrite_float(file,"maximum temperature = ",Temp_max(seos), bio,"%"FFMT" K",", "); fwrite_float(file,"\t reference temperature = ", Temp_ref(seos),bio,"%"FFMT" K","\n"); fwrite_float(file,"\t reference sound speed = ", Reference_sound_speed(seos),bio,"%"FFMT" km/sec","\n"); (void) fprintf(file," \tdensity mesh = %d temperature mesh = %d\n", Nrho_hyp(seos),Ntemp_hyp(seos)); fwrite_float(file,"\tAbsolute error = ",seos->abser0,bio,"%"FFMT," "); fwrite_float(file,"relative error = ",seos->reler0,bio,"%"FFMT,"\n"); (void) fprintf(file,"\tPressure Limits\n"); fwrite_float(file,"\t minimum pressure = ", Pressure_min(seos),bio,"%"FFMT" GPa",", "); fwrite_float(file,"maximum pressure = ", Pressure_max(seos),bio,"%"FFMT" GPa",", "); fwrite_float(file,"reference pressure = ", Pressure_ref(seos),bio,"%"FFMT" GPa","\n"); (void) fprintf(file,"\tEnergy Limits\n"); fwrite_float(file,"\t minimum energy = ", Energy_min(seos),bio,"%"FFMT" kJ/g",", "); fwrite_float(file,"maximum energy = ", Energy_max(seos),bio,"%"FFMT" kJ/g",", "); fwrite_float(file,"reference energy = ", Energy_ref(seos),bio,"%"FFMT" kJ/g","\n"); (void) fprintf(file,"\tEntropy Limits\n"); fwrite_float(file,"\t minimum entropy = ", Entropy_min(seos),bio,"%"FFMT," "); fwrite_float(file,"maximum entropy = ",Entropy_max(seos),bio,"%"FFMT, "\n"); (void) fprintf(file,"\tEntropy grid mapping parameters\n"); fwrite_float(file,"\t density-entropy entropy scale = ", RS_entropy_scale(seos),bio,"%"FFMT,"\n"); fwrite_float(file,"\t density-entropy entropy shift = ", RS_entropy_shift(seos),bio,"%"FFMT,"\n"); fwrite_float(file,"\t pressure-entropy entropy scale = ", PS_entropy_scale(seos),bio,"%"FFMT,"\n"); fwrite_float(file,"\t pressure-entropy entropy shift = ", PS_entropy_shift(seos),bio,"%"FFMT,"\n"); (void) fprintf(file,"\tMultiphase eos = %s\n", (multiphase_eos(seos) == YES) ? "YES" : "NO"); } /*end fprint_SESAME_params*/
EXPORT void fprint_rectangular_grid( FILE *file, const RECT_GRID *grid) { const char* const* Dnm = grid->Remap.Dnm; const char* const* dnm = grid->Remap.dnm; boolean b_oput = is_binary_output(); int i; int dim; if (grid == NULL) return; dim = grid->dim; (void) fprintf(file,PRINT_GRID_DIMENSION,grid->dim); if (b_oput == YES) { (void) fprintf(file,"\f%c",0); (void) fprintf(file,"MAXD = %d FLOAT = %d\n",MAXD,(int)FLOAT); } /* Print grid widths */ for (i = 0; i < dim; ++i) { (void) fprintf(file,"%10s = %-"FFMT"%s", Dnm[i],grid->U[i]-grid->L[i], (i==dim-1) ? "\n" : " "); } #define print_grid_float(x) \ (b_oput == YES) ? (void) fwrite((const void *)&(x),FLOAT,1,file) :\ (void) fprintf(file,"%-"FFMT,(x)) /* Print grid endpoints */ for (i = 0; i < dim; ++i) { (void) fprintf(file," %sL = ",Dnm[i]); print_grid_float(grid->L[i]); (void) fprintf(file," %sU = ",Dnm[i]); print_grid_float(grid->U[i]); (void) fprintf(file,"%s",(i==dim-1)?"\n":" "); } /* Print grid spacings */ for (i = 0; i < dim; ++i) { (void) fprintf(file," h%s = ",dnm[i]); print_grid_float(grid->h[i]); (void) fprintf(file," %smax = %-10d%s",dnm[i],grid->gmax[i], (i==dim-1)?"\n":" "); } /* Print global grid endpoints */ for (i = 0; i < dim; ++i) { (void) fprintf(file," G%sL = ",Dnm[i]); print_grid_float(grid->GL[i]); (void) fprintf(file," G%sU = ",Dnm[i]); print_grid_float(grid->GU[i]); (void) fprintf(file,"%s",(i==dim-1)?"\n":" "); } /* Print virtual domain grid endpoints */ for (i = 0; i < dim; ++i) { (void) fprintf(file," V%sL = ",Dnm[i]); print_grid_float(grid->VL[i]); (void) fprintf(file," V%sU = ",Dnm[i]); print_grid_float(grid->VU[i]); (void) fprintf(file,"%s",(i==dim-1)?"\n":" "); } /* Print buffer zone widths in grid units */ for (i = 0; i < dim; ++i) { (void) fprintf(file,"%slbuf = %-10d %subuf = %-10d%s", dnm[i],grid->lbuf[i],dnm[i],grid->ubuf[i], (i==dim-1)?"\n":" "); } /*TODO Provide printing of variable grid spacings */ #undef print_grid_float } /*end fprint_rectangular_grid*/