0
Gaussian CUBE 파일을 작성하는 C 또는 C++의 빠른 루틴에 관심이 있습니다. 순간 내가 가진 가장 빠른 코드는 이것이다 :C 또는 C++에서 Gaussian CUBE 파일을 빠르게 작성하는 방법
이FILE* outfile;
outfile = fopen(recSpace[iPlane].filename.c_str(), "w");
fprintf(outfile, "%s\n", " GAUSSIAN CUBE FORMAT ");
fprintf(outfile, "%s\n", " OUTER LOOP : X, MIDDLE LOOP : Y, INNER LOOP : Z");
fprintf(outfile, "%d %12.6f %12.6f %12.6f\n", 0, x0, y0, z0);
fprintf(outfile, "%5d %10.3f %10.3f %10.3f\n", nx, x1, 0.0, 0.0);
fprintf(outfile, "%5d %10.3f %10.3f %10.3f\n", ny, 0.0, y1, 0.0);
fprintf(outfile, "%5d %10.3f %10.3f %10.3f\n", nz, 0.0, 0.0, z1);
int numbers_per_line = 0;
double* numbers = (double*)malloc(6 * sizeof(double));
for(unsigned int k=0; k<nz; k++)
{
std::cout << "Writing layer " << k + 1 << " out of " << nz << std::endl;
for(unsigned int j=0; j<ny;j++)
{
numbers_per_line = 0;
for(unsigned int i=0; i<nx; i++)
{
int address = i * nx * ny + j * ny + k;
if(numbers_per_line < 6)
{
numbers[numbers_per_line] = layer[address];
numbers_per_line++;
}
if(numbers_per_line == 6)
{
fprintf(outfile, "%g %g %g %g %g %g \n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5]);
numbers_per_line = 0;
}
}
if(numbers_per_line % 6 != 0)
{
for(int l=0; l<numbers_per_line; l++)
{
fprintf(outfile, "%g", numbers[l]);
}
fprintf(outfile, "\n");
}
}
}
fclose(outfile);
그것은 윈도우 7 64 비트에서 601 * 601 * 601 볼륨을 작성하는 약 5 분 정도 소요됩니다. 더 빠른 방법이 있습니까?
감사합니다.