// writeuint: escribe en la posición (x,y) el entero sin signo 'i' con los // atributos de texto 'atr' (definidos en 'screen.h') void writeuint (unsigned char atr, unsigned char x, unsigned char y, unsigned int i) { int rem; // unsigned int como máximo vale 65535, por tanto, necesitamos // 6 caracteres, "65535\0" char s[6]; int j = 5; s[j] = '\0'; // De entero a carácter while (j != 0) { rem = i % 10; i = i / 10; // 48 en ASCII es 0 s[--j] = 48 + rem; } writetxt(atr,x,y,s); }
// writelong: escribe en la posición (x,y) el entero long 'l' con los // atributos de texto 'atr' (definidos en 'screen.h') void writelong (unsigned char atr, unsigned char x, unsigned char y, unsigned long int l) { int rem; // unsigned long int como máximo vale 2^32 = 4294967296, por tanto, // necesitamos 11 caracteres, "4294967296\0" char s[11]; int j = 10; s[j] = '\0'; // De entero a caracter while (j != 0) { rem = l % 10; l = l / 10; // 48 en ASCII es 0 s[--j] = 48 + rem; } writetxt(atr,x,y,s); }
int main (int argc, char * argv[]){ std::string dir1string; std::string filename1input; std::string filename1output; std::string tmpstr; const char* dir1input = argv[1]; int mode = atoi(argv[2]); DIR *d1; struct dirent *dir1struct; std::string filename1str; std::vector<std::string> run1ls; ccmc::Kameleon kameleon1; float *x = NULL; float *y = NULL; float *z = NULL; int *s = NULL; grid(&s,&x,&y,&z); int Npts; if (mode == 0) { // Write txt file of y=0 plane Npts = s[0]*s[2]; } if (mode == 1) { // Write vtk of full volume Npts = s[0]*s[1]*s[2]; } /////////////////////////////////////////////////////////////// //std::cout << "Directory" << ": " << dir1input << std::endl; dir1string = dir1input; dir1string.append("/GM_CDF"); std::cout << dir1input << ": Reading." << std::endl; d1 = opendir(dir1string.c_str()); if (d1) { while ((dir1struct = readdir(d1)) != NULL) { if (strstr(dir1struct->d_name,".cdf")) { run1ls.push_back(dir1struct->d_name); } } } else { std::cout << "** Could not open " << dir1string << std::endl; } // SORT THE STRING SO FILENAMES ARE IN ORDER std::sort(run1ls.begin(), run1ls.end()); std::cout << dir1input << ": Num of files : " << run1ls.size() << std::endl; std::cout << dir1input << ": First file : " << run1ls[0] << std::endl; std::cout << dir1input << ": Last file : " << run1ls[run1ls.size()-1] << std::endl; /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// // loop over timesteps for(int loopnum = 0; loopnum<run1ls.size(); loopnum++ ){ filename1input = dir1string; filename1input.append("/"); filename1input.append(run1ls[loopnum]); std::cout << dir1input << ": "; long status1 = kameleon1.open(filename1input); std::cout << filename1input << ": Opened with status: " << status1 << std::endl; std::cout << filename1input << ": Loading variables started." << std::endl; if(kameleon1.doesVariableExist("x")){kameleon1.loadVariable("x");}else{return 1;} if(kameleon1.doesVariableExist("y")){kameleon1.loadVariable("y");}else{return 1;} if(kameleon1.doesVariableExist("z")){kameleon1.loadVariable("z");}else{return 1;} if(kameleon1.doesVariableExist("bx")){kameleon1.loadVariable("bx");}else{return 1;} if(kameleon1.doesVariableExist("by")){kameleon1.loadVariable("by");}else{return 1;} if(kameleon1.doesVariableExist("bz")){kameleon1.loadVariable("bz");}else{return 1;} if(kameleon1.doesVariableExist("jx")){kameleon1.loadVariable("jx");}else{return 1;} if(kameleon1.doesVariableExist("jy")){kameleon1.loadVariable("jy");}else{return 1;} if(kameleon1.doesVariableExist("jz")){kameleon1.loadVariable("jz");}else{return 1;} if(kameleon1.doesVariableExist("ux")){kameleon1.loadVariable("ux");}else{return 1;} if(kameleon1.doesVariableExist("uy")){kameleon1.loadVariable("uy");}else{return 1;} if(kameleon1.doesVariableExist("uz")){kameleon1.loadVariable("uz");}else{return 1;} if(kameleon1.doesVariableExist("p")){kameleon1.loadVariable("p");}else{return 1;} if(kameleon1.doesVariableExist("rho")){kameleon1.loadVariable("rho");}else{return 1;} std::cout << filename1input << ": Loading variables finished." << std::endl; ccmc::Interpolator * interpolator1 = kameleon1.createNewInterpolator(); boost::numeric::ublas::matrix<float> value1(14,Npts); boost::numeric::ublas::matrix<float> xyz(3,Npts); std::cout << filename1input << ": Interpolating started." << std::endl; int l = 0; for (int k = 0; k < s[2]; k++){ for (int j = 0; j < s[1]; j++){ if ((y[j] != 0.0) & (mode == 0)){ continue; } for (int i = 0; i < s[0]; i++){ xyz(0,l) = x[i]; xyz(1,l) = y[j]; xyz(2,l) = z[k]; value1(0,l) = interpolator1->interpolate("x", x[i], y[j], z[k]); value1(1,l) = interpolator1->interpolate("y", x[i], y[j], z[k]); value1(2,l) = interpolator1->interpolate("z", x[i], y[j], z[k]); value1(3,l) = interpolator1->interpolate("bx", x[i], y[j], z[k]); value1(4,l) = interpolator1->interpolate("by", x[i], y[j], z[k]); value1(5,l) = interpolator1->interpolate("bz", x[i], y[j], z[k]); value1(6,l) = interpolator1->interpolate("jx", x[i], y[j], z[k]); value1(7,l) = interpolator1->interpolate("jy", x[i], y[j], z[k]); value1(8,l) = interpolator1->interpolate("jz", x[i], y[j], z[k]); value1(9,l) = interpolator1->interpolate("ux", x[i], y[j], z[k]); value1(10,l) = interpolator1->interpolate("uy", x[i], y[j], z[k]); value1(11,l) = interpolator1->interpolate("uz", x[i], y[j], z[k]); value1(12,l) = interpolator1->interpolate("p", x[i], y[j], z[k]); value1(13,l) = interpolator1->interpolate("rho", x[i], y[j], z[k]); l++; } } } std::cout << filename1input << ": Interpolating finished." << std::endl; /////////////////////////////////////////////////////////////// kameleon1.close(); if (mode == 0) { /////////////////////////////////////////////////////////////// filename1output = dir1input; boost::replace_all(filename1output, "data/", "output/"); filename1output.append("/data/cuts"); tmpstr = "mkdir -p "; tmpstr.append(filename1output); system(tmpstr.c_str()); filename1output.append("/Step_"); if (loopnum < 10) { filename1output.append("0"); } filename1output.append(boost::lexical_cast<std::string>(loopnum)); filename1output.append("_Y_eq_0.txt"); std::cout << filename1output << ": Writing started." << std::endl; writetxt(filename1output,value1,xyz,s); std::cout << filename1output << ": Writing finished." << std::endl; /////////////////////////////////////////////////////////////// } if (mode == 1) { /////////////////////////////////////////////////////////////// filename1output = dir1input; boost::replace_all(filename1output, "data/", "output/"); filename1output.append("/data/volumes"); tmpstr = "mkdir -p "; tmpstr.append(filename1output); system(tmpstr.c_str()); filename1output.append("/Step_"); if (loopnum < 10) { filename1output.append("0"); } filename1output.append(boost::lexical_cast<std::string>(loopnum)); filename1output.append(".vtk"); std::cout << filename1output << ": Writing started." << std::endl; writevtk(filename1output,x,y,z,value1,s); std::cout << filename1output << ": Writing finished." << std::endl; /////////////////////////////////////////////////////////////// } value1.clear(); } return 0; }