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

*** empty log message ***

parent 004875e3
No related branches found
No related tags found
No related merge requests found
// $Id: PViewDataListIO.cpp,v 1.13 2008-03-08 22:03:13 geuzaine Exp $ // $Id: PViewDataListIO.cpp,v 1.14 2008-03-09 21:36:16 geuzaine Exp $
// //
// Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
// //
...@@ -419,9 +419,8 @@ class pVertexLessThan{ ...@@ -419,9 +419,8 @@ class pVertexLessThan{
} }
}; };
static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp, static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp, int nbstep,
std::set<pVertex, pVertexLessThan> *nodes, std::set<pVertex, pVertexLessThan> *nodes, int *numelm)
int *numelm)
{ {
if(!nbelm) return; if(!nbelm) return;
int nb = List_Nbr(list) / nbelm; int nb = List_Nbr(list) / nbelm;
...@@ -435,7 +434,9 @@ static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp, ...@@ -435,7 +434,9 @@ static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp,
std::set<pVertex, pVertexLessThan>::iterator it = nodes->find(n); std::set<pVertex, pVertexLessThan>::iterator it = nodes->find(n);
if(it == nodes->end()){ if(it == nodes->end()){
n.Num = nodes->size() + 1; n.Num = nodes->size() + 1;
for(int k = 0; k < nbcomp; k++) n.Val.push_back(v[nbcomp * j + k]); for(int ts = 0; ts < nbstep; ts++)
for(int k = 0; k < nbcomp; k++)
n.Val.push_back(v[nbcomp * nbnod * ts + nbcomp * j + k]);
nodes->insert(n); nodes->insert(n);
} }
} }
...@@ -446,58 +447,35 @@ static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp, ...@@ -446,58 +447,35 @@ static void getNodeMSH(int nbelm, List_T *list, int nbnod, int nbcomp,
static void writeElementMSH(FILE *fp, int num, int nbnod, pVertex nod[8], static void writeElementMSH(FILE *fp, int num, int nbnod, pVertex nod[8],
int nbcomp, double *vals, int dim) int nbcomp, double *vals, int dim)
{ {
// compute average value in elm
double d = 0.;
for(int k = 0; k < nbnod; k++) {
double *v = &vals[nbcomp * k];
switch(nbcomp) {
case 1: // scalar
d += v[0];
break;
case 3 : // vector
d += sqrt(DSQR(v[0]) + DSQR(v[1]) + DSQR(v[2]));
break;
case 9 : // tensor
d += ComputeVonMises(v);
break;
}
}
d /= (double)nbnod;
// assign val as elementary region number
int ele = (int)fabs(d), phys = 1;
switch(dim){ switch(dim){
case 0: case 0:
fprintf(fp, "%d 15 2 %d %d %d\n", num, phys, ele, nod[0].Num); fprintf(fp, "%d 15 0 %d\n", num, nod[0].Num);
break; break;
case 1: case 1:
fprintf(fp, "%d 1 2 %d %d %d %d\n", num, phys, ele, nod[0].Num, nod[1].Num); fprintf(fp, "%d 1 0 %d %d\n", num, nod[0].Num, nod[1].Num);
break; break;
case 2: case 2:
if(nbnod == 3) if(nbnod == 3)
fprintf(fp, "%d 2 2 %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 2 0 %d %d %d\n", num, nod[0].Num, nod[1].Num, nod[2].Num);
nod[0].Num, nod[1].Num, nod[2].Num);
else else
fprintf(fp, "%d 3 2 %d %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 3 0 %d %d %d %d\n", num, nod[0].Num, nod[1].Num,
nod[0].Num, nod[1].Num, nod[2].Num, nod[3].Num); nod[2].Num, nod[3].Num);
break; break;
case 3: case 3:
default: default:
if(nbnod == 4) if(nbnod == 4)
fprintf(fp, "%d 4 2 %d %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 4 0 %d %d %d %d\n", num, nod[0].Num, nod[1].Num,
nod[0].Num, nod[1].Num, nod[2].Num, nod[3].Num); nod[2].Num, nod[3].Num);
else if(nbnod == 5) else if(nbnod == 5)
fprintf(fp, "%d 7 2 %d %d %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 7 0 %d %d %d %d %d\n", num, nod[0].Num, nod[1].Num,
nod[0].Num, nod[1].Num, nod[2].Num, nod[3].Num, nod[4].Num); nod[2].Num, nod[3].Num, nod[4].Num);
else if(nbnod == 6) else if(nbnod == 6)
fprintf(fp, "%d 6 2 %d %d %d %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 6 0 %d %d %d %d %d %d\n", num, nod[0].Num, nod[1].Num,
nod[0].Num, nod[1].Num, nod[2].Num, nod[3].Num, nod[4].Num, nod[2].Num, nod[3].Num, nod[4].Num, nod[5].Num);
nod[5].Num);
else else
fprintf(fp, "%d 5 2 %d %d %d %d %d %d %d %d %d %d\n", num, phys, ele, fprintf(fp, "%d 5 0 %d %d %d %d %d %d %d %d\n", num, nod[0].Num,
nod[0].Num, nod[1].Num, nod[2].Num, nod[3].Num, nod[4].Num, nod[1].Num, nod[2].Num, nod[3].Num, nod[4].Num, nod[5].Num,
nod[5].Num, nod[6].Num, nod[7].Num); nod[6].Num, nod[7].Num);
break; break;
} }
} }
...@@ -541,30 +519,30 @@ bool PViewDataList::writeMSH(std::string name) ...@@ -541,30 +519,30 @@ bool PViewDataList::writeMSH(std::string name)
std::set<pVertex, pVertexLessThan> nodes; std::set<pVertex, pVertexLessThan> nodes;
int numelm = 0; int numelm = 0;
getNodeMSH(NbSP, SP, 1, 1, &nodes, &numelm); getNodeMSH(NbSP, SP, 1, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVP, VP, 1, 3, &nodes, &numelm); getNodeMSH(NbVP, VP, 1, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTP, TP, 1, 9, &nodes, &numelm); getNodeMSH(NbTP, TP, 1, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSL, SL, 2, 1, &nodes, &numelm); getNodeMSH(NbSL, SL, 2, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVL, VL, 2, 3, &nodes, &numelm); getNodeMSH(NbVL, VL, 2, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTL, TL, 2, 9, &nodes, &numelm); getNodeMSH(NbTL, TL, 2, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbST, ST, 3, 1, &nodes, &numelm); getNodeMSH(NbST, ST, 3, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVT, VT, 3, 3, &nodes, &numelm); getNodeMSH(NbVT, VT, 3, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTT, TT, 3, 9, &nodes, &numelm); getNodeMSH(NbTT, TT, 3, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSQ, SQ, 4, 1, &nodes, &numelm); getNodeMSH(NbSQ, SQ, 4, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVQ, VQ, 4, 3, &nodes, &numelm); getNodeMSH(NbVQ, VQ, 4, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTQ, TQ, 4, 9, &nodes, &numelm); getNodeMSH(NbTQ, TQ, 4, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSS, SS, 4, 1, &nodes, &numelm); getNodeMSH(NbSS, SS, 4, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVS, VS, 4, 3, &nodes, &numelm); getNodeMSH(NbVS, VS, 4, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTS, TS, 4, 9, &nodes, &numelm); getNodeMSH(NbTS, TS, 4, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSH, SH, 8, 1, &nodes, &numelm); getNodeMSH(NbSH, SH, 8, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVH, VH, 8, 3, &nodes, &numelm); getNodeMSH(NbVH, VH, 8, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTH, TH, 8, 9, &nodes, &numelm); getNodeMSH(NbTH, TH, 8, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSI, SI, 6, 1, &nodes, &numelm); getNodeMSH(NbSI, SI, 6, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVI, VI, 6, 3, &nodes, &numelm); getNodeMSH(NbVI, VI, 6, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTI, TI, 6, 9, &nodes, &numelm); getNodeMSH(NbTI, TI, 6, 9, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbSY, SY, 5, 1, &nodes, &numelm); getNodeMSH(NbSY, SY, 5, 1, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbVY, VY, 5, 3, &nodes, &numelm); getNodeMSH(NbVY, VY, 5, 3, NbTimeStep, &nodes, &numelm);
getNodeMSH(NbTY, TY, 5, 9, &nodes, &numelm); getNodeMSH(NbTY, TY, 5, 9, NbTimeStep, &nodes, &numelm);
fprintf(fp, "$MeshFormat\n2 0 8\n$EndMeshFormat\n"); fprintf(fp, "$MeshFormat\n2 0 8\n$EndMeshFormat\n");
fprintf(fp, "$Nodes\n"); fprintf(fp, "$Nodes\n");
...@@ -604,22 +582,24 @@ bool PViewDataList::writeMSH(std::string name) ...@@ -604,22 +582,24 @@ bool PViewDataList::writeMSH(std::string name)
writeElementsMSH(fp, NbTY, TY, 5, 9, 3, &nodes, &numelm); writeElementsMSH(fp, NbTY, TY, 5, 9, 3, &nodes, &numelm);
fprintf(fp, "$EndElements\n"); fprintf(fp, "$EndElements\n");
#if 1 // test new postpro node-based storage #if 1 // test new node-based storage
int numNodes = nodes.size(); int numNodes = nodes.size();
if(numNodes){ if(numNodes){
fprintf(fp, "$NodeData\n"); int numComp = nodes.begin()->Val.size() / NbTimeStep;
fprintf(fp, "\"%s\"\n", getName().c_str()); for(int ts = 0; ts < NbTimeStep; ts++){
int timeStep = 0, numComp = nodes.begin()->Val.size(); double time = getTime(ts);
double time = 0.; fprintf(fp, "$NodeData\n");
fprintf(fp, "%d %.16g %d %d\n", timeStep, time, numComp, numNodes); fprintf(fp, "\"%s\"\n", getName().c_str());
for(std::set<pVertex, pVertexLessThan>::iterator it = nodes.begin(); fprintf(fp, "%d %.16g %d %d\n", ts, time, numComp, numNodes);
it != nodes.end(); ++it){ for(std::set<pVertex, pVertexLessThan>::iterator it = nodes.begin();
fprintf(fp, "%d", it->Num); it != nodes.end(); ++it){
for(int i = 0; i < it->Val.size(); i++) fprintf(fp, "%d", it->Num);
fprintf(fp, " %.16g", it->Val[i]); for(int i = 0; i < numComp; i++)
fprintf(fp, "\n"); fprintf(fp, " %.16g", it->Val[ts * numComp + i]);
fprintf(fp, "\n");
}
fprintf(fp, "$EndNodeData\n");
} }
fprintf(fp, "$EndNodeData\n");
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment