Changeset 2781


Ignore:
Timestamp:
01/07/10 14:27:14 (15 years ago)
Author:
Mathieu Morlighem
Message:

minor bamg

Location:
issm/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Bamgx/Bamgx.cpp

    r2780 r2781  
    3939        int     nelout, nodsout;
    4040
     41        /*Bamg options*/
     42        int    iso;
     43        int    maxnbv;
     44        double hmin,hmax;
     45        double gradation;
     46        double cutoff;
     47        int    verbosity;
     48        int    splitcorners;
     49
    4150        /*Bamg variables: */
    4251        int i,j,num;
    4352        hinterpole=1; // by def interpolation a h
    4453        int fileout=0;
    45         int nbvx = 1000000;
    46         int iso =0,AbsError=0,nbjacoby=1,allquad=0;
     54        int AbsError=0,nbjacoby=1,allquad=0;
    4755        int NoMeshReconstruction=0;
    4856        int Rescaling = 1;
     
    5058        Real8 cutoffradian=-1;
    5159        double anisomax = 1e6;
    52         double err=0.01,errg=0.1,coef=1,hmin=1.e-100,hmax=1.e17,gradation=1.2,cutoff=1e-5;
     60        double err=0.01,errg=0.1,coef=1;
    5361        int KeepBackVertices=1;
    5462        double hminaniso=1e-100;
     
    6169        Int4 nbsolbb=0,lsolbb=0;
    6270        Int4 nbsolBB=0,lsolBB=0;
    63         int SplitEdgeWith2Boundary=0;
    6471        int rbbeqMbb=0,rBBeqMBB=0;
    6572        int ChoiseHessien = 0;
     
    6976                 *fnopo=0,*fftq=0,*fam=0,*famdba=0,*rbb=0,*rBB=0,*wbb=0,*wBB=0,
    7077                 *fMbb=0,*foM=0,*fMBB=0;
    71         long int verbosity =10;
    7278        char *datargv[128] ;
    7379        int datargc=1;
    7480        datargv[0]= datargv[1]=0;// for create a error if no parameter
    7581
    76         /*testing*/
    77         int splitpbedge=1;
    78 
    7982        /*Bamg options*/
    8083        iso=bamgargs->iso;
     84        maxnbv=bamgargs->maxnbv;
    8185        hmin=bamgargs->hmin;
    8286        hmax=bamgargs->hmax;
    8387        gradation=bamgargs->gradation;
    8488        cutoff=bamgargs->cutoff;
    85 
    86         /*Recover options from inputs: */
    87         if(splitpbedge)SplitEdgeWith2Boundary=1;
     89        verbosity=bamgargs->verbose;
     90        splitcorners=bamgargs->splitcorners;
    8891
    8992        // some verification
    9093        NoMeshReconstruction= fmeshr !=0;
    9194        if (!fmeshback) fmeshback=fmeshr;
    92        
    9395        if ( maxsubdiv > boundmaxsubdiv || maxsubdiv <= 1.0)
    9496        {
     
    9698                exit(3);
    9799        }
    98         if (iso)
    99                 anisomax=1;
     100        if (iso) anisomax=1;
    100101        if (!(fmetrix||fMbb))
    101102                NbSmooth=0; // no metric -> no smoothing
     
    113114                /*Mesh generation {{{1*/
    114115                if (verbosity>0) printf("Construction of a mesh from a given geometry\n");
    115                 Geometry Gh(bamggeom);
     116                Geometry Gh(bamggeom,bamgargs);
    116117                hmin = Max(hmin,Gh.MinimalHmin());
    117118                hmax = Min(hmax,Gh.MaximalHmax());
     
    128129
    129130                //generate mesh
    130                 Triangles Th(nbvx,Gh);
     131                Triangles Th(maxnbv,Gh);
     132                if(splitcorners) Th.SplitInternalEdgeWithBorderVertices();
     133                Th.ReNumberingTheTriangleBySubDomain();
     134                //if(NbSmooth>0) Th.SmoothingVertex(NbSmooth,omega);
     135                Th.SmoothingVertex(3,omega);
    131136
    132137                //Build output
     
    161166
    162167                /*Read background mesh from simple delaunay triangulation: */
    163                 Triangles BTh(bamgmesh->index,bamgmesh->x,bamgmesh->y,bamgmesh->numberofelements,bamgmesh->numberofnodes,nbvx,cutoffradian); // read the background mesh
     168                Triangles BTh(bamgmesh,bamgargs); // read the background mesh
    164169
    165170                hmin = Max(hmin,BTh.MinimalHmin());
     
    232237
    233238                        Triangles & Th( *(NoMeshReconstruction
    234                                                         ?  new Triangles(*Thr,&Thr->Gh,Thb,nbvx) // copy the mesh + free space to modification 
    235                                                         :  new Triangles(nbvx,BTh,KeepBackVertices)     // construct a new mesh
     239                                                        ?  new Triangles(*Thr,&Thr->Gh,Thb,maxnbv) // copy the mesh + free space to modification 
     240                                                        :  new Triangles(maxnbv,BTh,KeepBackVertices)     // construct a new mesh
    236241                                                        ));
    237242                        if (Thr != &BTh) delete Thr;
     
    241246                        if (allquad)
    242247                         Th.SplitElement(allquad==2);
    243                         if(SplitEdgeWith2Boundary)
     248                        if(splitcorners)
    244249                         Th.SplitInternalEdgeWithBorderVertices();
    245250                        Th.ReNumberingTheTriangleBySubDomain();
  • issm/trunk/src/c/Bamgx/Mesh2.h

    r2772 r2781  
    802802  ~Triangles();
    803803  Triangles(const char * ,Real8=-1) ;
    804   Triangles(double* elements, double* x, double* y, int nel, int nods,int NBV, Real8=-1);
     804  Triangles(BamgMesh* bamgmesh,BamgArgs* bamgargs);
    805805 
    806806  Triangles(Int4 nbvx,Triangles & BT,int keepBackVertices=1)
     
    898898
    899899  void Read(MeshIstream &,int version,Real8 cutoffradian);
    900   void ReadFromMatlabMesh(double* elements,double* x,double* y,int nel,int nods,int inbvx,Real8 cutoffradian);
     900  void ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgArgs* bamgargs);
    901901  void Read_am_fmt(MeshIstream &);
    902902  void Read_amdba(MeshIstream &);
     
    984984  Real8 MaximalHmax() {return Max(pmax.x-pmin.x,pmax.y-pmin.y);}
    985985  void ReadGeometry(const char * ) ;
    986   void ReadGeometry(BamgGeom* bamggeom);
     986  void ReadGeometry(BamgGeom* bamggeom, BamgArgs* bamgargs);
    987987  void ReadGeometry(MeshIstream & ,const char *)  ;
    988988
     
    990990  Geometry() {EmptyGeometry();}// empty Geometry
    991991  void AfterRead();
    992   Geometry(BamgGeom* bamggeom) {EmptyGeometry();OnDisk=1;ReadGeometry(bamggeom);AfterRead();}
     992  Geometry(BamgGeom* bamggeom, BamgArgs* bamgargs) {EmptyGeometry();OnDisk=1;ReadGeometry(bamggeom,bamgargs);AfterRead();}
    993993  Geometry(const char * filename) {EmptyGeometry();OnDisk=1;ReadGeometry(filename);AfterRead();}
    994994
  • issm/trunk/src/c/Bamgx/MeshRead.cpp

    r2778 r2781  
    3939static const  Direction NoDirOfSearch=Direction();
    4040
    41 void Triangles::ReadFromMatlabMesh(double* elements,double* x,double* y,int nel,int nods,int NBV,Real8 cutoffradian){
    42 
    43         long int verbosity=0;
    44 
     41void Triangles::ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgArgs* bamgargs){
     42
     43        int verbosity;
    4544        Real8 hmin = HUGE_VAL;// the infinie value
    46        
     45        Int4 i1,i2,i3,iref;
    4746        Int4 i;
    48         Int4 dim=0;
    4947        Int4 hvertices =0;
    5048        Int4 ifgeom=0;
    5149        Metric M1(1);
    52         int field=0;
    53         int showfield=0;
    54        
    55         field=0;
    56         dim=2;
    57         nbv=NBV;
    58         nbvx=NBV;
    59         nbiv = NBV;
    60 
    61 
    62         vertices=(Vertex*)xmalloc(nbvx*sizeof(Vertex));
    63         ordre=(Vertex**)xmalloc(nbvx*sizeof(Vertex*));
    64 
    65         for (i=0;i<nods;i++){
    66                                
    67                 vertices[i].r.x=x[i];
    68                 vertices[i].r.y=y[i];
     50        Int4 dim=2;
     51
     52        nbv=bamgmesh->numberofnodes;
     53        nbvx=bamgargs->maxnbv;
     54        nbt=bamgmesh->numberofelements;
     55        nbtx=2*nbvx-2; // for filling The Holes and quadrilaterals
     56        nbiv=nbvx;
     57
     58        vertices=(Vertex*)xmalloc(nbv*sizeof(Vertex));
     59        ordre=(Vertex**)xmalloc(nbv*sizeof(Vertex*));
     60
     61        /*Create Vertices*/
     62        for (i=0;i<bamgmesh->numberofnodes;i++){
     63                vertices[i].r.x=bamgmesh->x[i];
     64                vertices[i].r.y=bamgmesh->y[i];
    6965                vertices[i].ReferenceNumber=1;
    7066                vertices[i].DirOfSearch =NoDirOfSearch;
     
    7369        }
    7470
    75         nbtx =  2*nbvx-2; // for filling The Holes and quadrilaterals
    76 
    77         triangles =(Triangle*)xmalloc(nbtx*sizeof(Triangle));
    78         nbt =0;
    79         for (i=0;i<nel;i++){
    80                 Int4 i1,i2,i3,iref;
    81                 Triangle & t = triangles[nbt++];
    82                 i1=(Int4)*(elements+i*3+0);
    83                 i2=(Int4)*(elements+i*3+1);
    84                 i3=(Int4)*(elements+i*3+2);
    85 
    86                 iref=1;
    87                 t = Triangle(this,i1-1,i2-1,i3-1);
    88                 t.color=iref;
    89         }
    90 
    91         /*build geometry: */
    92         ConsGeometry(cutoffradian);     
     71        /*Create triangles*/
     72        triangles=(Triangle*)xmalloc(nbt*sizeof(Triangle));
     73        for (i=0;i<bamgmesh->numberofelements;i++){
     74                Triangle & t = triangles[i];
     75                i1=(Int4)bamgmesh->index[i*3+0]-1; //for C indexing
     76                i2=(Int4)bamgmesh->index[i*3+1]-1; //for C indexing
     77                i3=(Int4)bamgmesh->index[i*3+2]-1; //for C indexing
     78                t=Triangle(this,i1,i2,i3);
     79                t.color=1;
     80        }
     81
     82        /*Recreate geometry: */
     83        ConsGeometry(-1);       //MaximalAngleOfCorner is actually in BamgGeom...
    9384        Gh.AfterRead();
    94 
    9585}
    9686
     
    969959}
    970960
    971 Triangles::Triangles(double* elements, double* x, double* y, int nel, int nods,int NBV,Real8 cutoffradian) : Gh(*(new Geometry())), BTh(*this){
     961Triangles::Triangles(BamgMesh* bamgmesh, BamgArgs* bamgargs):Gh(*(new Geometry())),BTh(*this){
    972962
    973963  PreInit(0,"none");
    974964  OnDisk = 1;
    975   printf("ok1\n");
    976 
    977   ReadFromMatlabMesh(elements,x,y,nel,nods,NBV,cutoffradian);
     965
     966  ReadFromMatlabMesh(bamgmesh,bamgargs);
    978967  printf("ok2\n");
    979968
    980969  SetIntCoor();
    981   printf("ok3\n");
    982970
    983971  FillHoleInMesh();
    984   printf("ok4\n");
     972  throw ErrorException(__FUNCT__,exprintf("test test"));
    985973
    986974
     
    998986}
    999987
    1000 void Geometry::ReadGeometry(BamgGeom* bamggeom){
    1001 
    1002         int verbose=1;
    1003         assert(empty());
     988void Geometry::ReadGeometry(BamgGeom* bamggeom,BamgArgs* bamgargs){
     989
     990        int verbose;
    1004991        nbiv=nbv=nbvx=0;
    1005992        nbe=nbt=nbtx=0;
     
    10161003        nbvx = nbv;
    10171004        nbiv = nbv;
     1005        verbose=bamgargs->verbose;
    10181006
    10191007        //some checks
     
    12311219        if(bamggeom->SubDomain){
    12321220                Int4 i0,i1,i2,i3;
    1233                 if(verbose>3) printf("Reading SubDomain");
     1221                if(verbose>3) printf("Reading SubDomain\n");
    12341222                NbSubDomains=bamggeom->NumSubDomain;
    12351223                subdomains = new GeometricalSubDomain[NbSubDomains];
  • issm/trunk/src/c/objects/BamgArgs.h

    r2780 r2781  
    88struct BamgArgs{
    99
    10         int    iso;
    11         double hmin;
    12         double hmax;
    13         double gradation;
    14         double cutoff;
     10        int     iso;
     11        int     maxnbv;
     12        double  hmin;
     13        double  hmax;
     14        double  gradation;
     15        double  cutoff;
     16        int     splitcorners;
     17        int     verbose;
     18        double* metric;
    1519
    1620};
  • issm/trunk/src/m/classes/public/bamg.m

    r2780 r2781  
    1919bamg_geometry.Edges=zeros(0,3);
    2020bamg_geometry.hVertices=zeros(0,1);
     21bamg_geometry.MaximalAngleOfCorner=getfieldvalue(options,'MaximalAngleOfCorner',10);
    2122bamg_geometry.NumSubDomain=0;
    2223bamg_geometry.SubDomain=zeros(0,3);
     
    6667% Bamg Options {{{1
    6768bamg_options.iso=getfieldvalue(options,'iso',0);
     69bamg_options.maxnbv=getfieldvalue(options,'maxnbv',10^6);
    6870bamg_options.hmin=getfieldvalue(options,'hmin',10^-100);
    6971bamg_options.hmax=getfieldvalue(options,'hmax',10^100);
    7072bamg_options.gradation=getfieldvalue(options,'gradation',1.2);
    7173bamg_options.cutoff=getfieldvalue(options,'cutoff',10^-5);
     74bamg_options.verbose=getfieldvalue(options,'verbose',1);
     75bamg_options.splitcorners=getfieldvalue(options,'splitcorners',1);
     76bamg_options.metric=getfieldvalue(options,'metric',zeros(0,3));
    7277%}}}
    7378
  • issm/trunk/src/mex/Bamg/Bamg.cpp

    r2780 r2781  
    2626        double* Edges=NULL;
    2727        double* hVertices=NULL;
     28        double  MaximalAngleOfCorner;
    2829        int     NumSubDomain;
    2930        double* SubDomain=NULL;
    3031
    3132        /*Options inputs*/
    32         int    iso;
     33        int    iso,maxnbv,verbose,splitcorners;
    3334        double hmin,hmax;
    3435        double gradation;
    3536        double cutoff;
     37        double* metric;
    3638
    3739        /*Boot module: */
     
    5557        bamggeom.MetricVertices=NULL;
    5658        bamggeom.h1h2VpVertices=NULL;
    57         bamggeom.MaximalAngleOfCorner=10;
     59        FetchData(&MaximalAngleOfCorner,mxGetField(BAMGGEOMETRY,0,"MaximalAngleOfCorner"));
     60        bamggeom.MaximalAngleOfCorner=MaximalAngleOfCorner;
    5861        bamggeom.NumTangentAtEdges=0;
    5962        bamggeom.TangentAtEdges=NULL;
     
    8487        FetchData(&iso,mxGetField(BAMGOPTIONS,0,"iso"));
    8588        bamgargs.iso=iso;
     89        FetchData(&maxnbv,mxGetField(BAMGOPTIONS,0,"maxnbv"));
     90        bamgargs.maxnbv=maxnbv;
    8691        FetchData(&hmin,mxGetField(BAMGOPTIONS,0,"hmin"));
    8792        bamgargs.hmin=hmin;
     
    9297        FetchData(&cutoff,mxGetField(BAMGOPTIONS,0,"cutoff"));
    9398        bamgargs.cutoff=cutoff;
     99        FetchData(&verbose,mxGetField(BAMGOPTIONS,0,"verbose"));
     100        bamgargs.verbose=verbose;
     101        FetchData(&splitcorners,mxGetField(BAMGOPTIONS,0,"splitcorners"));
     102        bamgargs.splitcorners=splitcorners;
     103        FetchData(&metric,NULL,NULL,mxGetField(BAMGOPTIONS,0,"metric"));
     104        bamgargs.metric=metric;
    94105
    95106        /*!Generate internal degree of freedom numbers: */
Note: See TracChangeset for help on using the changeset viewer.