diff --git a/Post/adaptiveData.cpp b/Post/adaptiveData.cpp index 6c1dfa1906b29353932529de5ed620cb8098ead1..cb106d23570c92e404fc7645898370fd4c8d00c9 100644 --- a/Post/adaptiveData.cpp +++ b/Post/adaptiveData.cpp @@ -654,30 +654,66 @@ void adaptiveHexahedron::recurError(adaptiveHexahedron *h, double AVG, double to if(!h->e[0]) h->visible = true; else { - double vr; - double v1 = h->e[0]->V(); - double v2 = h->e[1]->V(); - double v3 = h->e[2]->V(); - double v4 = h->e[3]->V(); - double v5 = h->e[4]->V(); - double v6 = h->e[5]->V(); - double v7 = h->e[6]->V(); - double v8 = h->e[7]->V(); - vr = (v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8) * .125; - double v = h->V(); - if(fabs(v - vr) > AVG * tol) { - h->visible = false; - recurError(h->e[0], AVG, tol); - recurError(h->e[1], AVG, tol); - recurError(h->e[2], AVG, tol); - recurError(h->e[3], AVG, tol); - recurError(h->e[4], AVG, tol); - recurError(h->e[5], AVG, tol); - recurError(h->e[6], AVG, tol); - recurError(h->e[7], AVG, tol); + const double v1 = h->e[0]->V(); + const double v2 = h->e[1]->V(); + const double v3 = h->e[2]->V(); + const double v4 = h->e[3]->V(); + const double v5 = h->e[4]->V(); + const double v6 = h->e[5]->V(); + const double v7 = h->e[6]->V(); + const double v8 = h->e[7]->V(); + const double vr = (v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8) * .125; + const double v = h->V(); + if(!h->e[0]->e[0]) { + if(fabs(v - vr) > AVG * tol) { + h->visible = false; + recurError(h->e[0], AVG, tol); + recurError(h->e[1], AVG, tol); + recurError(h->e[2], AVG, tol); + recurError(h->e[3], AVG, tol); + recurError(h->e[4], AVG, tol); + recurError(h->e[5], AVG, tol); + recurError(h->e[6], AVG, tol); + recurError(h->e[7], AVG, tol); + } + else + h->visible = true; + } + else { + double vii[8][8]; + for(int i = 0; i < 8; i++) + for(int j = 0; j < 8; j++) + vii[i][j] = h->e[i]->e[j]->V(); + double vri[8]; + for(int k = 0; k < 8; k++) { + vri[k] = 0.0; + for(int l = 0; l < 8; l++) { + vri[k] += vii[k][l]; + } + vri[k] /= 8.0; + } + if(fabs(h->e[0]->V() - vri[0]) > AVG * tol || + fabs(h->e[1]->V() - vri[1]) > AVG * tol || + fabs(h->e[2]->V() - vri[2]) > AVG * tol || + fabs(h->e[3]->V() - vri[3]) > AVG * tol || + fabs(h->e[4]->V() - vri[4]) > AVG * tol || + fabs(h->e[5]->V() - vri[5]) > AVG * tol || + fabs(h->e[6]->V() - vri[6]) > AVG * tol || + fabs(h->e[7]->V() - vri[7]) > AVG * tol || + fabs(v - vr) > AVG * tol) { + h->visible = false; + recurError(h->e[0], AVG, tol); + recurError(h->e[1], AVG, tol); + recurError(h->e[2], AVG, tol); + recurError(h->e[3], AVG, tol); + recurError(h->e[4], AVG, tol); + recurError(h->e[5], AVG, tol); + recurError(h->e[6], AVG, tol); + recurError(h->e[7], AVG, tol); + } + else + h->visible = true; } - else - h->visible = true; } } @@ -773,18 +809,12 @@ void adaptivePrism::recurError(adaptivePrism *p, double AVG, double tol) if(!p->e[0]) p->visible = true; else { - double vr; + double vi[8]; + for(int i = 0; i < 8; i++) + vi[i] = p->e[i]->V(); + const double vr = (vi[0] + vi[1] + vi[2] + vi[3]/2 + vi[4] + vi[5] + vi[6] + vi[7]/2) / 7; + const double v = p->V(); if(!p->e[0]->e[0]) { - double v1 = p->e[0]->V(); - double v2 = p->e[1]->V(); - double v3 = p->e[2]->V(); - double v4 = p->e[3]->V(); - double v5 = p->e[4]->V(); - double v6 = p->e[5]->V(); - double v7 = p->e[6]->V(); - double v8 = p->e[7]->V(); - vr = (v1 + v2 + v3 + v4/2 +v5 +v6 +v7 +v8/2) / 7; - double v = p->V(); if(fabs(v - vr) > AVG * tol){ p->visible = false; recurError(p->e[0], AVG, tol); @@ -801,23 +831,19 @@ void adaptivePrism::recurError(adaptivePrism *p, double AVG, double tol) } else { bool err = false; - double ve[8]; for(int i = 0; i < 8; i++){ - double v1 = p->e[i]->e[0]->V(); - double v2 = p->e[i]->e[1]->V(); - double v3 = p->e[i]->e[2]->V(); - double v4 = p->e[i]->e[3]->V(); - double v5 = p->e[i]->e[4]->V(); - double v6 = p->e[i]->e[5]->V(); - double v7 = p->e[i]->e[6]->V(); - double v8 = p->e[i]->e[7]->V(); - double vr = (v1 + v2 + v3 + v4/2 +v5 +v6 +v7 +v8/2) / 7; - ve[i] = p->e[i]->V(); - err |= (fabs((ve[i] - vr)) > AVG*tol); + double vi1 = p->e[i]->e[0]->V(); + double vi2 = p->e[i]->e[1]->V(); + double vi3 = p->e[i]->e[2]->V(); + double vi4 = p->e[i]->e[3]->V(); + double vi5 = p->e[i]->e[4]->V(); + double vi6 = p->e[i]->e[5]->V(); + double vi7 = p->e[i]->e[6]->V(); + double vi8 = p->e[i]->e[7]->V(); + double vri = (vi1 + vi2 + vi3 + vi4/2 + vi5 + vi6 + vi7 + vi8/2) / 7; + err |= (fabs((vi[i] - vri)) > AVG * tol); } - double vr = (ve[0] + ve[1] + ve[2] + ve[3] / 2 + - ve[4] + ve[5] + ve[6] + ve[7] / 2) / 7; - err |= (fabs((p->V() - vr))>AVG*tol); + err |= (fabs((v - vr)) > AVG * tol); if(err) { p->visible = false; for(int i = 0; i < 8; i++)