I am a PhD student and simulating a rising bubble in a liquid by using one of the tutorial given at the basilisk site "bubble rising in a large tank".
When i simulate the code on the older version of basilisk (more than 2 years old )it creates the perfect working VTK file for a para-view but on a newer version of basilisk it creates a corrupted VTK file which shows spikes and unstructured bubble shape. Kindly let me know the solution. Below are the reference files and VTK code I am using.
void output_vtu_ascii_foreach (scalar * list, vector * vlist, int n, FILE * fp, bool linear)
{
#if defined(_OPENMP)
int num_omp = omp_get_max_threads();
omp_set_num_threads(1);
#endif
vertex scalar marker[];
int no_points = 0, no_cells=0 ;
foreach_vertex(){
marker[] = _k;
no_points += 1;
}
foreach(){
no_cells += 1;
}
fputs ("<?xml version=\"1.0\"?>\n"
"<VTKFile type=\"UnstructuredGrid\" version=\"1.0\" byte_order=\"LittleEndian\" header_type=\"UInt64\">\n", fp);
fputs ("\t <UnstructuredGrid>\n", fp);
fprintf (fp,"\t\t <Piece NumberOfPoints=\"%d\" NumberOfCells=\"%d\">\n", no_points, no_cells);
fputs ("\t\t\t <CellData Scalars=\"scalars\">\n", fp);
for (scalar s in list) {
fprintf (fp,"\t\t\t\t <DataArray type=\"Float64\" Name=\"%s\" format=\"ascii\">\n",
s.name);
foreach(){
fprintf (fp, "%g\n", val(s));
}
fputs ("\t\t\t\t </DataArray>\n", fp);
}
for (vector v in vlist) {
fprintf (fp,"\t\t\t\t <DataArray type=\"Float64\" NumberOfComponents=\"3\" Name=\"Vect-%s\" format=\"ascii\">\n",
v.x.name);
foreach(){
#if dimension == 2
fprintf (fp, "%g %g 0.\n", val(v.x), val(v.y));
#endif
#if dimension == 3
fprintf (fp, "%g %g %g\n", val(v.x), val(v.y), val(v.z));
#endif
}
fputs ("\t\t\t\t </DataArray>\n", fp);
}
fputs ("\t\t\t </CellData>\n", fp);
fputs ("\t\t\t <Points>\n", fp);
fputs ("\t\t\t\t <DataArray type=\"Float64\" NumberOfComponents=\"3\" format=\"ascii\">\n", fp);
foreach_vertex(){
#if dimension == 2
fprintf (fp, "%g %g 0\n", x, y);
#endif
#if dimension == 3
fprintf (fp, "%g %g %g\n", x, y, z);
#endif
}
fputs ("\t\t\t\t </DataArray>\n", fp);
fputs ("\t\t\t </Points>\n", fp);
fputs ("\t\t\t <Cells>\n", fp);
fputs ("\t\t\t\t <DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\">\n", fp);
foreach(){
#if dimension == 2
// Edit OLAND:
// %g will turn into scientific notation for high integer values. this does not work with paraview
//fprintf (fp, "%g %g %g %g \n", marker[], marker[1,0], marker[1,1], marker[0,1]);
int ape1 = marker[];
int ape2 = marker[1,0];
int ape3 = marker[1,1];
int ape4 = marker[0,1];
fprintf (fp, "%u %u %u %u \n", ape1, ape2, ape3, ape4);
#endif
#if dimension == 3
// Edit OLAND:
// %g will turn into scientific notation for high integer values. this does not work with paraview
//fprintf (fp, "%g %g %g %g %g %g %g %g\n", marker[], marker[1,0,0], marker[1,1,0], marker[0,1,0],marker[0,0,1], marker[1,0,1], marker[1,1,1], marker[0,1,1]);
int ape1 = marker[];
int ape2 = marker[1,0,0];
int ape3 = marker[1,1,0];
int ape4 = marker[0,1,0];
int ape5 = marker[0,0,1];
int ape6 = marker[1,0,1];
int ape7 = marker[1,1,1];
int ape8 = marker[0,1,1];
fprintf (fp, "%u %u %u %u %u %u %u %u\n", ape1, ape2, ape3, ape4, ape5, ape6, ape7, ape8);
#endif
}
fputs ("\t\t\t\t </DataArray>\n", fp);
fputs ("\t\t\t\t <DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\">\n", fp);
for (int i = 1; i < no_cells+1; i++){
#if dimension == 2
fprintf (fp, "%d \n", i*4);
#endif
#if dimension == 3
fprintf (fp, "%d \n", i*8);
#endif
}
fputs ("\t\t\t\t </DataArray>\n", fp);
fputs ("\t\t\t\t <DataArray type=\"UInt8\" Name=\"types\" format=\"ascii\">\n", fp);
foreach(){
#if dimension == 2
fputs ("9 \n", fp);
#endif
#if dimension == 3
fputs ("12 \n", fp);
#endif
}
fputs ("\t\t\t\t </DataArray>\n", fp);
fputs ("\t\t\t </Cells>\n", fp);
fputs ("\t\t </Piece>\n", fp);
fputs ("\t </UnstructuredGrid>\n", fp);
fputs ("</VTKFile>\n", fp);
fflush (fp);
#if defined(_OPENMP)
omp_set_num_threads(num_omp);
#endif
}
t > 0 ? sprintf(name, "profiles_%4.4d_n%3.3d.vtu", i,pid()) : sprintf(name, "profiles_n%3.3d.vtu",pid());
fp = fopen(name, "w"); output_vtu_ascii_foreach ((scalar *) {f}, (vector *) {u}, N, fp, false); fclose (fp);
t > 0 ? sprintf(name, "profiles_%4.4d.pvtu", t) : sprintf(name, "profiles.pvtu");
fp = fopen(name, "w"); output_pvtu_ascii ((scalar *) {f}, (vector *) {u}, N, fp, subname); fclose (fp);