~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Mesh/Generator.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme
  • Date: 2009-02-17 10:12:27 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090217101227-mdrolkldak2pgd2i
Tags: 2.3.0.dfsg-1
* New upstream release
  + major graphics and GUI code refactoring; 
  + new full-quad/hexa subdivision algorithm (removed 
    Mesh.RecombineAlgo);
  + improved automatic transfinite corner selection (now also 
    for volumes); 
  + improved visibility browser; new automatic adaptive visualization
    for high-order simplices;
  + modified arrow size, clipping planes and transform options; many
    improvements and
  + bug fixes all over the place.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Gmsh - Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 
1
// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
2
2
//
3
3
// See the LICENSE.txt file for license information. Please report all
4
4
// bugs and problems to <gmsh@geuz.org>.
5
5
 
6
6
#include <stdlib.h>
 
7
#include "GmshConfig.h"
7
8
#include "GmshMessage.h"
8
9
#include "Numeric.h"
9
10
#include "Context.h"
17
18
#include "BackgroundMesh.h"
18
19
#include "BoundaryLayers.h"
19
20
#include "HighOrder.h"
 
21
#include "Generator.h"
20
22
 
21
23
#if !defined(HAVE_NO_POST)
22
24
#include "PView.h"
212
214
      for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){
213
215
        GetQualityMeasure((*it)->quadrangles, gamma, gammaMin, gammaMax,
214
216
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax, 
215
 
                          disto, distoMin,distoMax,quality);
 
217
                          disto, distoMin, distoMax, quality);
216
218
        GetQualityMeasure((*it)->triangles, gamma, gammaMin, gammaMax,
217
219
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax,
218
 
                          disto, distoMin,distoMax,quality);
 
220
                          disto, distoMin, distoMax, quality);
219
221
      }
220
222
    }
221
223
    else{
222
224
      for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){
223
225
        GetQualityMeasure((*it)->tetrahedra, gamma, gammaMin, gammaMax,
224
226
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax, 
225
 
                          disto, distoMin,distoMax,quality);
 
227
                          disto, distoMin, distoMax, quality);
226
228
        GetQualityMeasure((*it)->hexahedra, gamma, gammaMin, gammaMax,
227
229
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax,
228
 
                          disto, distoMin,distoMax,quality);
 
230
                          disto, distoMin, distoMax, quality);
229
231
        GetQualityMeasure((*it)->prisms, gamma, gammaMin, gammaMax,
230
232
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax,
231
 
                          disto, distoMin,distoMax,quality);
 
233
                          disto, distoMin, distoMax,quality);
232
234
        GetQualityMeasure((*it)->pyramids, gamma, gammaMin, gammaMax,
233
235
                          eta, etaMin, etaMax, rho, rhoMin, rhoMax,
234
 
                          disto, distoMin,distoMax,quality);
 
236
                          disto, distoMin, distoMax, quality);
235
237
      }
236
238
    }
237
239
    double N = stat[9] + stat[10] + stat[11] + stat[12];
252
254
#if !defined(HAVE_NO_POST)
253
255
  stat[26] = PView::list.size();
254
256
  for(unsigned int i = 0; i < PView::list.size(); i++) {
255
 
    PViewData *data = PView::list[i]->getData();
 
257
    PViewData *data = PView::list[i]->getData(true);
256
258
    stat[27] += data->getNumPoints();
257
259
    stat[28] += data->getNumLines();
258
260
    stat[29] += data->getNumTriangles();
356
358
            "#e\t\ttau\t\t#Egood\t\t#Egood/#e\tCPU\n");
357
359
  }
358
360
 
359
 
  fprintf(statreport,"\t%16s\t%d\t\t%d\t\t", CTX.base_filename, numFaces, nUnmeshed);
 
361
  fprintf(statreport,"\t%16s\t%d\t\t%d\t\t", m->getName().c_str(), numFaces, nUnmeshed);
360
362
  fprintf(statreport,"%d\t\t%8.7f\t%8.7f\t%8.7f\t%d\t\t%8.7f\t",
361
363
          nTotT, avg / (double)nTotT, best, worst, nTotGoodQuality,
362
364
          (double)nTotGoodQuality / nTotT);
406
408
      if(nIter++ > 10) break;
407
409
    }
408
410
  }
409
 
 
410
 
  gmshCollapseSmallEdges (*m);
 
411
  
 
412
  // gmshCollapseSmallEdges (*m);
411
413
 
412
414
  double t2 = Cpu();
413
415
  CTX.mesh_timer[1] = t2 - t1;
557
559
      if(CTX.mesh.optimize_netgen > i) OptimizeMeshNetgen(m);
558
560
    }
559
561
  }
 
562
 
 
563
  // Subdivide into quads or hexas
 
564
  if(m->getMeshStatus() == 2 && CTX.mesh.algo_subdivide == 1) 
 
565
    RefineMesh(m, CTX.mesh.second_order_linear, true);
 
566
  else if(m->getMeshStatus() == 3 && CTX.mesh.algo_subdivide == 2) 
 
567
    RefineMesh(m, CTX.mesh.second_order_linear, false, true);
560
568
  
561
569
  // Create high order elements
562
570
  if(m->getMeshStatus() && CTX.mesh.order > 1)