Skip to content
Snippets Groups Projects
Commit 7f2948ac authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

make the bgmesh work with quads
parent 9ab834c0
Branches
Tags
No related merge requests found
...@@ -206,7 +206,6 @@ void CopyViewOptions(Post_View *src, Post_View *dest); ...@@ -206,7 +206,6 @@ void CopyViewOptions(Post_View *src, Post_View *dest);
void CombineViews(int time, int how, int remove); void CombineViews(int time, int how, int remove);
int BGMWithView (Post_View *ErrView); int BGMWithView (Post_View *ErrView);
double ErrorInView(Post_View * ErrView, int *n);
Post_View *Create2DGraph(char *xname, char *yname, int nbdata, double *x, double *y); Post_View *Create2DGraph(char *xname, char *yname, int nbdata, double *x, double *y);
GmshColorTable *Get_ColorTable(int num); GmshColorTable *Get_ColorTable(int num);
......
// $Id: 3D_BGMesh.cpp,v 1.38 2006-01-06 00:34:25 geuzaine Exp $ // $Id: 3D_BGMesh.cpp,v 1.39 2006-01-28 15:02:26 geuzaine Exp $
// //
// Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
// //
...@@ -161,13 +161,56 @@ static void AIG(void *a, void *b) ...@@ -161,13 +161,56 @@ static void AIG(void *a, void *b)
AddSimplexInGrid(TMPM, s, BOITE); AddSimplexInGrid(TMPM, s, BOITE);
} }
void BGMWithViewList(int Nb, List_T *List, Tree_T *Pts, int NbNod, Vertex *VertexUp)
{
if(Nb) {
int nb = List_Nbr(List) / Nb;
for(int i = 0; i < List_Nbr(List); i += nb) {
double *X = (double *)List_Pointer_Fast(List, i);
double *Y = (double *)List_Pointer_Fast(List, i + NbNod);
double *Z = (double *)List_Pointer_Fast(List, i + 2 * NbNod);
double *Val = (double *)List_Pointer_Fast(List, i + 3 * NbNod);
Vertex *ver[4];
for(int j = 0; j < NbNod; j++) {
Vertex V;
Vertex *v = &V;
v->Pos.X = X[j];
v->Pos.Y = Y[j];
v->Pos.Z = Z[j];
if(Tree_Query(Pts, &v)) {
ver[j] = v;
}
else {
v = Create_Vertex(TMPM->MaxPointNum++, X[j], Y[j], Z[j], Val[j], -1.0);
ver[j] = v;
Tree_Add(TMPM->Vertices, &v);
Tree_Add(Pts, &v);
}
}
if(NbNod == 3){ // tri
Simplex *s = Create_Simplex(ver[0], ver[1], ver[2], VertexUp);
Tree_Add(TMPM->Simplexes, &s);
}
else{
if(VertexUp){ // quad
Simplex *s1 = Create_Simplex(ver[0], ver[1], ver[2], VertexUp);
Tree_Add(TMPM->Simplexes, &s1);
Simplex *s2 = Create_Simplex(ver[0], ver[2], ver[3], VertexUp);
Tree_Add(TMPM->Simplexes, &s2);
}
else{ // tet
Simplex *s = Create_Simplex(ver[0], ver[1], ver[2], ver[3]);
Tree_Add(TMPM->Simplexes, &s);
}
}
}
}
}
int BGMWithView(Post_View * ErrView) int BGMWithView(Post_View * ErrView)
{ {
Vertex *VertexUp, *v, V, *ver[4]; Vertex *VertexUp;
Tree_T *Pts; Tree_T *Pts;
int i, j, k, nb;
double *X, *Y, *Z, *Val;
Simplex *si;
if(TMPM){ if(TMPM){
Tree_Action(TMPM->Vertices, Free_Vertex); Tree_Action(TMPM->Vertices, Free_Vertex);
...@@ -184,69 +227,17 @@ int BGMWithView(Post_View * ErrView) ...@@ -184,69 +227,17 @@ int BGMWithView(Post_View * ErrView)
TMPM->BGM.Typ = ONFILE; TMPM->BGM.Typ = ONFILE;
TMPM->Vertices = Tree_Create(sizeof(Vertex *), compareVertex); TMPM->Vertices = Tree_Create(sizeof(Vertex *), compareVertex);
TMPM->Simplexes = Tree_Create(sizeof(Simplex *), compareSimplex); TMPM->Simplexes = Tree_Create(sizeof(Simplex *), compareSimplex);
TMPM->MaxPointNum = 0;
Create_BgMesh(ONFILE, .2, THEM); Create_BgMesh(ONFILE, .2, THEM);
k = 1; BGMWithViewList(ErrView->NbST, ErrView->ST, Pts, 3, VertexUp);
if(ErrView->NbST) { BGMWithViewList(ErrView->NbSQ, ErrView->SQ, Pts, 4, VertexUp);
nb = List_Nbr(ErrView->ST) / ErrView->NbST; BGMWithViewList(ErrView->NbSS, ErrView->SS, Pts, 4, NULL);
for(i = 0; i < List_Nbr(ErrView->ST); i += nb) {
X = (double *)List_Pointer_Fast(ErrView->ST, i);
Y = (double *)List_Pointer_Fast(ErrView->ST, i + 3);
Z = (double *)List_Pointer_Fast(ErrView->ST, i + 6);
Val = (double *)List_Pointer_Fast(ErrView->ST, i + 9);
for(j = 0; j < 3; j++) {
v = &V;
v->Pos.X = X[j];
v->Pos.Y = Y[j];
v->Pos.Z = Z[j];
if(Tree_Query(Pts, &v)) {
ver[j] = v;
}
else {
v = Create_Vertex(k++, X[j], Y[j], Z[j], Val[j], -1.0);
ver[j] = v;
Tree_Add(TMPM->Vertices, &v);
Tree_Add(Pts, &v);
}
}
si = Create_Simplex(ver[0], ver[1], ver[2], VertexUp);
Tree_Add(TMPM->Simplexes, &si);
}
}
if(ErrView->NbSS) {
nb = List_Nbr(ErrView->SS) / ErrView->NbSS;
for(i = 0; i < List_Nbr(ErrView->SS); i += nb) {
X = (double *)List_Pointer_Fast(ErrView->SS, i);
Y = (double *)List_Pointer_Fast(ErrView->SS, i + 4);
Z = (double *)List_Pointer_Fast(ErrView->SS, i + 8);
Val = (double *)List_Pointer_Fast(ErrView->SS, i + 12);
for(j = 0; j < 4; j++) {
v = &V;
v->Pos.X = X[j];
v->Pos.Y = Y[j];
v->Pos.Z = Z[j];
if(Tree_Query(Pts, &v)) {
ver[j] = v;
}
else {
v = Create_Vertex(k++, X[j], Y[j], Z[j], Val[j], -1.0);
ver[j] = v;
Tree_Add(TMPM->Vertices, &v);
Tree_Add(Pts, &v);
}
}
si = Create_Simplex(ver[0], ver[1], ver[2], ver[3]);
Tree_Add(TMPM->Simplexes, &si);
}
}
TMPM->Grid.init = 0; TMPM->Grid.init = 0;
TMPM->Grid.Nx = 10; TMPM->Grid.Nx = 20;
TMPM->Grid.Ny = 10; TMPM->Grid.Ny = 20;
TMPM->Grid.Nz = 10; TMPM->Grid.Nz = 20;
Tree_Action(TMPM->Vertices, findminmax); Tree_Action(TMPM->Vertices, findminmax);
getminmax(&TMPM->Grid.min.X, &TMPM->Grid.min.Y, &TMPM->Grid.min.Z, getminmax(&TMPM->Grid.min.X, &TMPM->Grid.min.Y, &TMPM->Grid.min.Z,
&TMPM->Grid.max.X, &TMPM->Grid.max.Y, &TMPM->Grid.max.Z); &TMPM->Grid.max.X, &TMPM->Grid.max.Y, &TMPM->Grid.max.Z);
...@@ -268,39 +259,3 @@ int BGMWithView(Post_View * ErrView) ...@@ -268,39 +259,3 @@ int BGMWithView(Post_View * ErrView)
return 1; return 1;
} }
double ErrorInView(Post_View * ErrView, int *n)
{
double e, tot = 0.0, *Val;
int i, j = 0, nb;
if(ErrView == NULL) {
Msg(WARNING, "Empty error view");
return 0.;
}
if(ErrView->NbST) {
nb = List_Nbr(ErrView->ST) / ErrView->NbST;
for(i = 0; i < List_Nbr(ErrView->ST); i += nb) {
Val = (double *)List_Pointer_Fast(ErrView->ST, i + 9);
e = (Val[0] + Val[1] + Val[2]) / 3.;
tot += e * e;
j++;
}
}
if(ErrView->NbSS) {
nb = List_Nbr(ErrView->SS) / ErrView->NbSS;
for(i = 0; i < List_Nbr(ErrView->SS); i += nb) {
Val = (double *)List_Pointer_Fast(ErrView->SS, i + 12);
e = (Val[0] + Val[1] + Val[2] + Val[3]) * 0.25;
tot += e * e;
j++;
}
}
*n = j;
return 100 * sqrt(tot);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment