8 long int get_point(
int i,
int j,
int k,
int Npx,
int Npy) {
16 n = k * Npx * Npy + j * Npx + I;
29 std::cerr <<
"\n" <<
"Writing VTK" << std::endl;
32 sprintf(filename,
"output.vtk");
33 FILE *fp = fopen(filename,
"w");
35 fprintf(fp,
"# vtk DataFile Version 3.0\n");
36 fprintf(fp,
"particle point data\n");
37 fprintf(fp,
"ASCII\n");
38 fprintf(fp,
"DATASET UNSTRUCTURED_GRID\n");
39 long int nPoints = Npx * Npy * Npz * nodes.size();
45 fprintf(fp,
"POINTS %ld double\n", nPoints);
47 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
49 Block* block_data = (*iterator)->get_block_data();
50 int N = block_data->
mesh->
N;
51 double dx = block_data->
dx;
52 double dy = block_data->
dy;
53 double dz = block_data->
dz;
54 double x_min = block_data->
x_min;
55 double y_min = block_data->
y_min;
56 double z_min = block_data->
z_min;
69 for(
int k = 0; k<Npz; k++) {
70 for(
int j = 0; j<Npy; j++) {
71 for(
int i = 0; i<Npx ; i++) {
72 fprintf(fp,
"%2.8lf %2.8lf %2.8lf\n",x_min + i*dx, y_min + j*dy, z_min + k*dz);
80 fprintf(fp,
"\n\nCELLS %ld %ld\n", nCells, 9*nCells);
82 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
88 point[0] = node_count*Npx*Npy*Npz +
get_point(i,j,k,Npx,Npy);
89 point[1] = node_count*Npx*Npy*Npz +
get_point(i+1,j,k,Npx,Npy);
90 point[2] = node_count*Npx*Npy*Npz +
get_point(i+1,j+1,k,Npx,Npy);
91 point[3] = node_count*Npx*Npy*Npz +
get_point(i,j+1,k,Npx,Npy);
92 point[4] = node_count*Npx*Npy*Npz +
get_point(i,j,k+1,Npx,Npy);
93 point[5] = node_count*Npx*Npy*Npz +
get_point(i+1,j,k+1,Npx,Npy);
94 point[6] = node_count*Npx*Npy*Npz +
get_point(i+1,j+1,k+1,Npx,Npy);
95 point[7] = node_count*Npx*Npy*Npz +
get_point(i,j+1,k+1,Npx,Npy);
97 fprintf(fp,
"8 %ld %ld %ld %ld %ld %ld %ld %ld \n",point[0], point[1], point[2], point[3], point[4], point[5], point[6], point[7]);
107 fprintf(fp,
"\n\nCELL_TYPES %ld\n", nCells);
109 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
123 fprintf(fp,
"\n\nCELL_DATA %ld\n", nCells);
124 fprintf(fp,
"SCALARS input_field_data double 1\n");
125 fprintf(fp,
"LOOKUP_TABLE default\n");
127 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
130 Block* block_data = (*iterator)->get_block_data();
137 fprintf(fp,
"%lf \n",block_data->
field->
val[i][j][k]);
146 fprintf(fp,
"\nSCALARS %s double 1\n",
scalar_fields[f].c_str());
147 fprintf(fp,
"LOOKUP_TABLE default\n");
149 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
152 Block* block_data = (*iterator)->get_block_data();
167 fprintf(fp,
"\nVECTORS location_data double\n");
170 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
173 Block* block_data = (*iterator)->get_block_data();
180 fprintf(fp,
"%lf %lf %lf\n",block_data->
mesh->
x[i][j][k], block_data->
mesh->
y[i][j][k], block_data->
mesh->
z[i][j][k]);
187 fprintf(fp,
"\nVECTORS %s double\n",
vector_fields[f].c_str());
190 for (std::list<Octree*>::iterator iterator = nodes.begin(), end = nodes.end(); iterator != end; ++iterator) {
192 Block* block_data = (*iterator)->get_block_data();
This class is a generic data block of a octree node in the block-based AMR mesh.
std::vector< std::string > scalar_fields
std::vector< std::string > vector_fields
long int get_point(int i, int j, int k, int Npx, int Npy)
std::list< Octree * > nodes
void write_vtk(std::list< Octree * > &nodes)