I’m trying to visualize Q-values using C++.
Currently, I can’t get the intended outline to appear as shown in the file below. Could someone please tell me why?
As it stands, it’s currently a cube.
I want to display a rectangular prism outline.
please share your data
The code is as follows:
IMAX=1700
JMAX=204
KMAX=204
dx=0.002
dy=0.00025
dz=0.002
The grid is cut with x and z at equal intervals and y at non-equal intervals.
The Q value threshold is set to 9.94.
void write_paraview(
double x0\[\],
double y0\[\],
double z0\[\],
double q\[\]\[JMAX + 1\]\[IMAX + 1\],
double uzudo\[\]\[JMAX + 1\]\[IMAX + 1\],
double u0\[\]\[JMAX + 1\]\[IMAX + 1\],
double v0\[\]\[JMAX + 1\]\[IMAX + 1\],
double w0\[\]\[JMAX + 1\]\[IMAX + 1\],
double p0\[\]\[JMAX + 1\]\[IMAX + 1\]) {
ofstream datado;
char str\[32\];
sprintf(str, "paraview.%04d.vtk", n / 250);
//char str2\[20\];
//sprintf(str, "./data2/paraview_output/");
std::string datafile = "./data2/paraview_output/";
//string datafile = str2;
//mkdir(str2, 0777);
datafile.append(str);
datado.open(datafile.c_str(), ios::out | ios::binary);
if (!datado) {
cout << "Error: cannot open file(" << datafile.c_str() << ")" << endl;
exit(1);
}
if (n == 0) {
datado << "# vtk DataFile Version 2.0" << endl;
datado << "q_uzudo" << endl;
datado << "ASCII" << endl;
datado << "DATASET RECTILINEAR_GRID" << endl;
datado << "DIMENSIONS " << IMAX + 1 << ' ' << JMAX + 1 << ' ' << KMAX + 1 << endl;
datado << "X_COORDINATES " << IMAX + 1 << " double" << endl;
for (int i = 0; i < IMAX + 1; i++) {
datado << x0\[i\] << ' ';
}
datado << endl;
datado << "Y_COORDINATES " << JMAX + 1 << " double" << endl;
for (int j = 0; j < JMAX + 1; j++) {
datado << y0\[j\] << ' ';
}
datado << endl;
datado << "Z_COORDINATES " << KMAX + 1 << " double" << endl;
for (int k = 0; k < KMAX + 1; k++) {
datado << z0\[k\] << ' ';
}
datado << endl;
}
else { //境界内の計算
int imin = 0, imax = 0, jmin = 0, jmax = 0, kmin = 0, kmax = 0;
for (int i = 1; i < IMAX; i++) {
for (int j = 1; j < JMAX; j++) {
for (int k = 1; k < KMAX; k++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
imin = i;
goto loopend1;
}
}
}
}
loopend1:
for (int i = IMAX - 1; i > 0; i--) {
for (int j = 1; j < JMAX; j++) {
for (int k = 1; k < KMAX; k++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
imax = i;
goto loopend2;
}
}
}
}
loopend2:
for (int j = 1; j < JMAX; j++) {
for (int i = 1; i < IMAX; i++) {
for (int k = 1; k < KMAX; k++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
jmin = j;
goto loopend3;
}
}
}
}
loopend3:
for (int j = JMAX - 1; j > 0; j--) {
for (int i = 1; i < IMAX; i++) {
for (int k = 1; k < KMAX; k++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
jmax = j;
goto loopend4;
}
}
}
}
loopend4:
for (int k = 1; k < KMAX; k++) {
for (int j = 1; j < JMAX; j++) {
for (int i = 1; i < IMAX; i++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
kmin = k;
goto loopend5;
}
}
}
}
loopend5:
for (int k = KMAX - 1; k > 0; k--) {
for (int j = 1; j < JMAX; j++) {
for (int i = 1; i < IMAX; i++) {
if (q\[k\]\[j\]\[i\] > q_threshold) {
kmax = k;
goto loopend6;
}
}
}
}
loopend6:
datado << "# vtk DataFile Version 2.0" << endl;
datado << "q_uzudo" << endl;
datado << "ASCII" << endl;
datado << "DATASET RECTILINEAR_GRID" << endl;
datado << "DIMENSIONS " << imax - imin + 3 << ' ' << jmax - jmin + 3 << ' ' << kmax - kmin + 3 << endl;
datado << "X_COORDINATES " << imax - imin + 3 << " double" << endl;
for (int i = imin - 1; i < imax + 2; i++) {
datado << x0\[i\] << ' ';
}
datado << endl;
datado << "Y_COORDINATES " << jmax - jmin + 3 << " double" << endl;
for (int j = jmin - 1; j < jmax + 2; j++) {
datado << y0\[j\] << ' ';
}
datado << endl;
datado << "Z_COORDINATES " << kmax - kmin + 3 << " double" << endl;
for (int k = kmin - 1; k < kmax + 2; k++) {
datado << z0\[k\] << ' ';
}
datado << endl;
datado << "POINT_DATA " << (imax - imin + 3) \* (jmax - jmin + 3) \* (kmax - kmin + 3) << endl;
datado << "SCALARS q double" << endl;
datado << "LOOKUP_TABLE default" << endl;
for (int k = kmin - 1; k < kmax + 2; k++) {
for (int j = jmin - 1; j < jmax + 2; j++) {
for (int i = imin - 1; i < imax + 2; i++) {
datado << q\[k\]\[j\]\[i\] << endl;
}
}
}
datado << "SCALARS uzudo double" << endl;
datado << "LOOKUP_TABLE default" << endl;
for (int k = kmin - 1; k < kmax + 2; k++) {
for (int j = jmin - 1; j < jmax + 2; j++) {
for (int i = imin - 1; i < imax + 2; i++) {
datado << uzudo\[k\]\[j\]\[i\] << endl;
}
}
}
datado << "VECTORS v double" << endl;
for (int k = kmin - 1; k < kmax + 2; k++) {
for (int j = jmin - 1; j < jmax + 2; j++) {
for (int i = imin - 1; i < imax + 2; i++) {
datado << u0\[k\]\[j\]\[i\] << ' ' << v0\[k\]\[j\]\[i\] << ' ' << w0\[k\]\[j\]\[i\] << endl;
}
}
}
}
datado.close();
}
please share your data
paraview.0100.vtk (13.4 KB)
paraview.0101.vtk (3.2 MB)
I couldn’t do it !
Please tell me exactly how to do it.
Got it!
Thank you for your answer!






