Changeset 2790


Ignore:
Timestamp:
01/08/10 17:31:18 (15 years ago)
Author:
Mathieu Morlighem
Message:

passed MaxAngle into options and renamed BamgArgs BamgOpts

Location:
issm/trunk/src
Files:
1 added
1 deleted
9 edited

Legend:

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

    r2789 r2790  
    2929using namespace std;
    3030
    31 int Bamgx(BamgMesh* bamgmesh,BamgGeom* bamggeom,BamgArgs* bamgargs){
     31int Bamgx(BamgMesh* bamgmesh,BamgGeom* bamggeom,BamgOpts* bamgopts){
    3232       
    3333        int noerr=1;
     
    4343        int    maxnbv;
    4444        double hmin,hmax;
    45         double gradation;
    4645        double cutoff;
    4746        int    verbosity;
    48         int    splitcorners;
    4947
    5048        /*Bamg variables: */
    5149        int i,j,num;
    52         hinterpole=1; // by def interpolation a h
    53         int fileout=0;
    5450        int AbsError=0,nbjacoby=1,allquad=0;
    55         int Rescaling = 1;
    5651        double costheta=2;
    57         Real8 cutoffradian=-1;
    5852        double anisomax = 1e6;
    5953        double err=0.01,errg=0.1,coef=1;
     
    6458        double omega=1.8;
    6559        int NbSmooth=3;
    66         double *solMbb =0,*solMBB=0;
    67         int  *typesolsBB =0;
    68         Int4 nbsolbb=0,lsolbb=0;
    69         Int4 nbsolBB=0,lsolBB=0;
    70         int rbbeqMbb=0,rBBeqMBB=0;
    71         int ChoiseHessien = 0;
    72         double power=1;
    73         Triangles *Thr=0,*Thb=0;
    74         char *fmeshback=0,*fmeshout=0,*fmeshr=0,*fmetrix=0,*famfmt=0,*fmsh=0,
    75                  *fnopo=0,*fftq=0,*fam=0,*famdba=0,*rbb=0,*rBB=0,*wbb=0,*wBB=0,
    76                  *fMbb=0,*foM=0,*fMBB=0;
    77         char *datargv[128] ;
    78         int datargc=1;
    79         datargv[0]= datargv[1]=0;// for create a error if no parameter
     60        Triangles* Thr=NULL;
     61        Triangles* Thb=NULL;
    8062
    8163        /*Bamg options*/
    82         iso=bamgargs->iso;
    83         maxnbv=bamgargs->maxnbv;
    84         hmin=bamgargs->hmin;
    85         hmax=bamgargs->hmax;
    86         gradation=bamgargs->gradation;
    87         cutoff=bamgargs->cutoff;
    88         verbosity=bamgargs->verbose;
    89         splitcorners=bamgargs->splitcorners;
     64        iso=bamgopts->iso;
     65        maxnbv=bamgopts->maxnbv;
     66        hmin=bamgopts->hmin;
     67        hmax=bamgopts->hmax;
     68        cutoff=bamgopts->cutoff;
     69        verbosity=bamgopts->verbose;
    9070
    9171        // some verification
    92         if ( maxsubdiv > boundmaxsubdiv || maxsubdiv <= 1.0)
    93         {
     72        if ( maxsubdiv > boundmaxsubdiv || maxsubdiv <= 1.0){
    9473                cerr << " -maxsubdiv " << maxsubdiv << " is not in ]1,"<< boundmaxsubdiv << "]" << endl;
    9574                exit(3);
    9675        }
    9776        if (iso) anisomax=1;
    98         if (!(fmetrix||fMbb))
    99                 NbSmooth=0; // no metric -> no smoothing
    100         if( ! rbb) // to set the rbb filename by default
    101                 rbb=fMbb;
    102         if( ! rBB) // to set the rbb filename by default
    103                 rBB=fMBB;
    104 
    105         if (fMbb && rbb)
    106                 rbbeqMbb = !strcmp(rbb,fMbb);
    107         if (fMBB && rBB)
    108                 rBBeqMBB = !strcmp(rBB,fMBB);
     77        // no metric -> no smoothing
     78        if (bamgopts->metric==NULL){
     79                NbSmooth=0;
     80        }
    10981
    11082        if(bamgmesh->NumTriangles==0){
     
    11385                if (verbosity>0) printf("Construction of a mesh from a given geometry\n");
    11486                if (verbosity>1) printf("   Processing geometry...\n");
    115                 Geometry Gh(bamggeom,bamgargs);
     87                Geometry Gh(bamggeom,bamgopts);
    11688                hmin = Max(hmin,Gh.MinimalHmin());
    11789                hmax = Min(hmax,Gh.MaximalHmax());
     
    131103                if (verbosity>1) printf("   Generating Mesh...\n");
    132104                Triangles Th(maxnbv,Gh);
    133                 if(splitcorners) Th.SplitInternalEdgeWithBorderVertices();
     105                if(bamgopts->splitcorners) Th.SplitInternalEdgeWithBorderVertices();
    134106                Th.ReNumberingTheTriangleBySubDomain();
    135107                //if(NbSmooth>0) Th.SmoothingVertex(NbSmooth,omega);
     
    169141                if (verbosity>0) printf("Anisotropic mesh adaptation\n");
    170142                if (verbosity>1) printf("   Processing initial mesh and geometry...\n");
    171                 Triangles BTh(bamgmesh,bamgargs);
     143                Triangles BTh(bamgmesh,bamgopts);
    172144                hmin = Max(hmin,BTh.MinimalHmin());
    173145                hmax = Min(hmax,BTh.MaximalHmax());
     
    178150                //build metric if not given in input
    179151                if (verbosity>1) printf("   Processing Metric...\n");
    180                 if (bamgargs->metric){
    181                         BTh.ReadMetric(bamgargs,hmin,hmax,coef);
     152                if (bamgopts->metric){
     153                        BTh.ReadMetric(bamgopts,hmin,hmax,coef);
    182154                }
    183155                else { // init with hmax
     
    188160
    189161                BTh.IntersectGeomMetric(errg,iso);
    190                 if(gradation) BTh.SmoothMetric(gradation);
     162                if(bamgopts->gradation) BTh.SmoothMetric(bamgopts->gradation);
    191163                BTh.MaxSubDivision(maxsubdiv);
    192164                BTh.BoundAnisotropy(anisomax,hminaniso);
     
    196168                Triangles & Th( *(0 ?  new Triangles(*Thr,&Thr->Gh,Thb,maxnbv) :  new Triangles(maxnbv,BTh,KeepBackVertices)));
    197169                if (Thr != &BTh) delete Thr;
    198 
    199                 if(costheta<=1.0){
    200                         Th.MakeQuadrangles(costheta);
    201                 }
    202                 if (allquad){
    203                         Th.SplitElement(allquad==2);
    204                 }
    205                 if(splitcorners){
    206                         Th.SplitInternalEdgeWithBorderVertices();
    207                 }
     170                if(costheta<=1.0) Th.MakeQuadrangles(costheta);
     171                if (allquad) Th.SplitElement(allquad==2);
     172                if(bamgopts->splitcorners) Th.SplitInternalEdgeWithBorderVertices();
    208173                Th.ReNumberingTheTriangleBySubDomain();
    209 
    210174                if(NbSmooth>0) Th.SmoothingVertex(NbSmooth,omega);
    211 
    212175                Th.BTh.ReMakeTriangleContainingTheVertex();
    213176
    214                 //info
     177                //display info
    215178                if(verbosity>0) {
    216179                        if (Th.nbt-Th.NbOutT-Th.NbOfQuad*2){
     
    247210
    248211                /*clean up*/
    249                 //delete &Th;
     212                delete &Th; //TEST crash
    250213                /*}}}*/
    251214        }
  • issm/trunk/src/c/Bamgx/Bamgx.h

    r2771 r2790  
    99
    1010/* local prototypes: */
    11 int     Bamgx(BamgMesh* bamgmesh,BamgGeom* bamggeom,BamgArgs* bamgargs);
     11int     Bamgx(BamgMesh* bamgmesh,BamgGeom* bamggeom,BamgOpts* bamgopts);
    1212
    1313#endif  /* _BAMGX_H */
  • issm/trunk/src/c/Bamgx/Mesh2.h

    r2789 r2790  
    802802  ~Triangles();
    803803  Triangles(const char * ,Real8=-1) ;
    804   Triangles(BamgMesh* bamgmesh,BamgArgs* bamgargs);
     804  Triangles(BamgMesh* bamgmesh,BamgOpts* bamgopts);
    805805 
    806806  Triangles(Int4 nbvx,Triangles & BT,int keepBackVertices=1)
     
    898898
    899899  void Read(MeshIstream &,int version,Real8 cutoffradian);
    900   void ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgArgs* bamgargs);
     900  void ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts);
    901901  void Read_am_fmt(MeshIstream &);
    902902  void Read_amdba(MeshIstream &);
     
    906906  void Read_msh(MeshIstream &);
    907907
    908   void ReadMetric(BamgArgs* bamgargs,const Real8 hmin,const Real8 hmax,const Real8 coef);
     908  void ReadMetric(BamgOpts* bamgopts,const Real8 hmin,const Real8 hmax,const Real8 coef);
    909909  void IntersectConsMetric(const double * s,const Int4 nbsol,const int * typsols,
    910910                           const  Real8 hmin,const Real8 hmax, const Real8 coef,
     
    984984  Real8 MaximalHmax() {return Max(pmax.x-pmin.x,pmax.y-pmin.y);}
    985985  void ReadGeometry(const char * ) ;
    986   void ReadGeometry(BamgGeom* bamggeom, BamgArgs* bamgargs);
     986  void ReadGeometry(BamgGeom* bamggeom, BamgOpts* bamgopts);
    987987  void ReadGeometry(MeshIstream & ,const char *)  ;
    988988
     
    990990  Geometry() {EmptyGeometry();}// empty Geometry
    991991  void AfterRead();
    992   Geometry(BamgGeom* bamggeom, BamgArgs* bamgargs) {EmptyGeometry();OnDisk=1;ReadGeometry(bamggeom,bamgargs);AfterRead();}
     992  Geometry(BamgGeom* bamggeom, BamgOpts* bamgopts) {EmptyGeometry();OnDisk=1;ReadGeometry(bamggeom,bamgopts);AfterRead();}
    993993  Geometry(const char * filename) {EmptyGeometry();OnDisk=1;ReadGeometry(filename);AfterRead();}
    994994
  • issm/trunk/src/c/Bamgx/MeshRead.cpp

    r2789 r2790  
    3939static const  Direction NoDirOfSearch=Direction();
    4040
    41 void Triangles::ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgArgs* bamgargs){
     41void Triangles::ReadFromMatlabMesh(BamgMesh* bamgmesh, BamgOpts* bamgopts){
    4242
    4343        int verbose;
     
    5050        int Version=1,dim=2;
    5151
    52         verbose=bamgargs->verbose;
     52        verbose=bamgopts->verbose;
    5353
    5454        nbv=bamgmesh->NumVertices;
     
    264264                printf("Warning: mesh present but no geometry found. Reconstructing...\n");
    265265                /*Recreate geometry: */
    266                 ConsGeometry(-1);       //TESTTESTTESTTEST MaximalAngleOfCorner is actually in BamgGeom...
     266                ConsGeometry(bamgopts->MaximalAngleOfCorner*Pi/180);
    267267                Gh.AfterRead();
    268268        }
     
    11411141}
    11421142
    1143 Triangles::Triangles(BamgMesh* bamgmesh, BamgArgs* bamgargs):Gh(*(new Geometry())),BTh(*this){
     1143Triangles::Triangles(BamgMesh* bamgmesh, BamgOpts* bamgopts):Gh(*(new Geometry())),BTh(*this){
    11441144
    11451145  PreInit(0,"none");
    11461146  OnDisk = 1;
    11471147
    1148   ReadFromMatlabMesh(bamgmesh,bamgargs);
     1148  ReadFromMatlabMesh(bamgmesh,bamgopts);
    11491149  SetIntCoor();
    11501150  FillHoleInMesh();
     
    11611161}
    11621162
    1163 void Geometry::ReadGeometry(BamgGeom* bamggeom,BamgArgs* bamgargs){
     1163void Geometry::ReadGeometry(BamgGeom* bamggeom,BamgOpts* bamgopts){
    11641164
    11651165        int verbose;
     
    11781178        nbvx = nbv;
    11791179        nbiv = nbv;
    1180         verbose=bamgargs->verbose;
     1180        verbose=bamgopts->verbose;
    11811181
    11821182        //some checks
     
    13141314
    13151315        //MaximalAngleOfCorner
    1316         if (bamggeom->MaximalAngleOfCorner){
     1316        if (bamgopts->MaximalAngleOfCorner){
    13171317                if(verbose>3) printf("      processing MaximalAngleOfCorner\n");
    1318                 MaximalAngleOfCorner=bamggeom->MaximalAngleOfCorner*Pi/180;
     1318                MaximalAngleOfCorner=bamgopts->MaximalAngleOfCorner*Pi/180;
    13191319        }
    13201320        else{
  • issm/trunk/src/c/Bamgx/Metric.cpp

    r2789 r2790  
    805805
    806806
    807 void Triangles::ReadMetric(BamgArgs* bamgargs,const Real8 hmin1=1.0e-30,const Real8 hmax1=1.0e30,const Real8 coef=1)
     807void Triangles::ReadMetric(BamgOpts* bamgopts,const Real8 hmin1=1.0e-30,const Real8 hmax1=1.0e30,const Real8 coef=1)
    808808{
    809809        int  i,j;
    810810
    811         if(bamgargs->verbose>3) printf("      processing metric\n");
     811        if(bamgopts->verbose>3) printf("      processing metric\n");
    812812
    813813        Real8 hmin = Max(hmin1,MinimalHmin());
     
    820820                Real8 h;
    821821                if (j == 1){
    822                         h=bamgargs->metric[i];
     822                        h=bamgopts->metric[i];
    823823                        vertices[i].m=Metric(Max(hmin,Min(hmax, h*coef)));
    824824                }
    825825                else if (j==3){
    826826                        Real8 a,b,c;         
    827                         a=bamgargs->metric[i*3+0];
    828                         b=bamgargs->metric[i*3+1];
    829                         c=bamgargs->metric[i*3+2];
     827                        a=bamgopts->metric[i*3+0];
     828                        b=bamgopts->metric[i*3+1];
     829                        c=bamgopts->metric[i*3+2];
    830830                        MetricAnIso M(a,b,c);
    831831                        MatVVP2x2 Vp(M/coef);
  • issm/trunk/src/c/objects/BamgGeom.h

    r2772 r2790  
    1818        double* h1h2VpVertices;
    1919
    20         double  MaximalAngleOfCorner;
    21 
    2220        int     NumTangentAtEdges;
    2321        double* TangentAtEdges;
  • issm/trunk/src/c/objects/objects.h

    r2771 r2790  
    4141#include "./BamgGeom.h"
    4242#include "./BamgMesh.h"
    43 #include "./BamgArgs.h"
    44 
     43#include "./BamgOpts.h"
    4544
    4645#endif
  • issm/trunk/src/m/classes/public/bamg.m

    r2789 r2790  
    1919bamg_geometry.Edges=zeros(0,3);
    2020bamg_geometry.hVertices=zeros(0,1);
    21 bamg_geometry.MaximalAngleOfCorner=getfieldvalue(options,'MaximalAngleOfCorner',10);
    2221bamg_geometry.NumSubDomain=0;
    2322bamg_geometry.SubDomain=zeros(0,3);
     
    6766bamg_options.iso=getfieldvalue(options,'iso',0);
    6867bamg_options.maxnbv=getfieldvalue(options,'maxnbv',10^6);
     68bamg_options.MaximalAngleOfCorner=getfieldvalue(options,'MaximalAngleOfCorner',10);
    6969bamg_options.hmin=getfieldvalue(options,'hmin',10^-100);
    7070bamg_options.hmax=getfieldvalue(options,'hmax',10^100);
  • issm/trunk/src/mex/Bamg/Bamg.cpp

    r2789 r2790  
    99        int   noerr=1;
    1010        int   i;
    11         BamgArgs bamgargs;
     11        BamgOpts bamgopts;
    1212        BamgMesh bamgmesh;
    1313        BamgGeom bamggeom;
     
    5555        bamggeom.MetricVertices=NULL;
    5656        bamggeom.h1h2VpVertices=NULL;
    57         FetchData(&MaximalAngleOfCorner,mxGetField(BAMGGEOMETRY,0,"MaximalAngleOfCorner"));
    58         bamggeom.MaximalAngleOfCorner=MaximalAngleOfCorner;
    5957        bamggeom.NumTangentAtEdges=0;
    6058        bamggeom.TangentAtEdges=NULL;
     
    9391        /*create bamg options input*/
    9492        FetchData(&iso,mxGetField(BAMGOPTIONS,0,"iso"));
    95         bamgargs.iso=iso;
     93        bamgopts.iso=iso;
    9694        FetchData(&maxnbv,mxGetField(BAMGOPTIONS,0,"maxnbv"));
    97         bamgargs.maxnbv=maxnbv;
     95        bamgopts.maxnbv=maxnbv;
    9896        FetchData(&hmin,mxGetField(BAMGOPTIONS,0,"hmin"));
    99         bamgargs.hmin=hmin;
     97        bamgopts.hmin=hmin;
    10098        FetchData(&hmax,mxGetField(BAMGOPTIONS,0,"hmax"));
    101         bamgargs.hmax=hmax;
     99        bamgopts.hmax=hmax;
    102100        FetchData(&gradation,mxGetField(BAMGOPTIONS,0,"gradation"));
    103         bamgargs.gradation=gradation;
     101        bamgopts.gradation=gradation;
    104102        FetchData(&cutoff,mxGetField(BAMGOPTIONS,0,"cutoff"));
    105         bamgargs.cutoff=cutoff;
     103        bamgopts.cutoff=cutoff;
    106104        FetchData(&verbose,mxGetField(BAMGOPTIONS,0,"verbose"));
    107         bamgargs.verbose=verbose;
     105        bamgopts.verbose=verbose;
    108106        FetchData(&splitcorners,mxGetField(BAMGOPTIONS,0,"splitcorners"));
    109         bamgargs.splitcorners=splitcorners;
     107        bamgopts.splitcorners=splitcorners;
     108        FetchData(&MaximalAngleOfCorner,mxGetField(BAMGOPTIONS,0,"MaximalAngleOfCorner"));
     109        bamgopts.MaximalAngleOfCorner=MaximalAngleOfCorner;
    110110        FetchData(&metric,NULL,NULL,mxGetField(BAMGOPTIONS,0,"metric"));
    111         bamgargs.metric=metric;
     111        bamgopts.metric=metric;
    112112
    113113        /*!Generate internal degree of freedom numbers: */
    114         Bamgx(&bamgmesh,&bamggeom,&bamgargs);
     114        Bamgx(&bamgmesh,&bamggeom,&bamgopts);
    115115
    116116        /*write output datasets: */
Note: See TracChangeset for help on using the changeset viewer.