Changeset 2938


Ignore:
Timestamp:
01/29/10 16:31:16 (15 years ago)
Author:
Mathieu Morlighem
Message:

revamped metric computation

Location:
issm/trunk/src
Files:
5 edited

Legend:

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

    r2937 r2938  
    912912                /*Get and process fields*/
    913913                s=bamgopts->field;
    914                 nbsol=1;       //for now, only one field
     914                nbsol=bamgopts->numfields;
    915915                typsols=(int*)xmalloc(1*sizeof(int));
    916916                typsols[0]=0; // only one dof per node
     
    12461246                /*Get and process fields*/
    12471247                s=bamgopts->field;
    1248                 nbsol=1;       //for now, only one field
     1248                nbsol=bamgopts->numfields;
    12491249                typsols=(int*)xmalloc(1*sizeof(int));
    12501250                typsols[0]=0; // only one dof per node
     
    16501650                /*Get and process fields*/
    16511651                s=bamgopts->field;
    1652                 nbsol=1;       //for now, only one field
     1652                nbsol=bamgopts->numfields;
    16531653                typsols=(int*)xmalloc(1*sizeof(int));
    16541654                typsols[0]=0; // only one dof per node
  • issm/trunk/src/c/Bamgx/objects/Vertex.cpp

    r2937 r2938  
    139139                double coef=bamgopts->coef;
    140140                int    Metrictype=(bamgopts->Metrictype);
    141                 int    Rescaling=(bamgopts->Rescaling);
    142141
    143142                /*Intermediary*/
     
    153152                 */
    154153                if (Metrictype==0){
    155                         if (Rescaling){
    156                                 ci= 1/(bamgopts->err*coef*coef) * 1/(smax-smin);
    157                         }
    158                         else{
    159                                 ci=1/(bamgopts->err*coef*coef);
    160                         }
     154                        ci= 2.0/9.0 * 1/(bamgopts->err*coef*coef);
    161155                }
    162156
     
    169163                 */
    170164                else if (Metrictype==1){
    171                         ci=1/(bamgopts->err*coef*coef) * 1/Max( Abs(s), CutOff*(Max(Abs(smin),Abs(smax))));
    172                 }
    173 
    174                 //Interpolation Error
     165                        ci= 2.0/9.0 * 1/(bamgopts->err*coef*coef) * 1/Max( Abs(s), CutOff*(Max(Abs(smin),Abs(smax))));
     166                }
     167
     168                //Rescaled absolute error
    175169                /*
    176                  *            2         1       
    177                  *Metric M = ---  ------------   Abs(Hessian)
    178                  *            9   err * coeff^2 
     170                 *            2         1            Abs(Hessian)
     171                 *Metric M = ---  ------------  ----------------------
     172                 *            9   err * coeff^2       (smax-smin)
    179173                 */
    180174                else if (Metrictype==2){
    181                         ci=(2.0/9.0)*(1.0/(bamgopts->err));
     175                        ci= 2.0/9.0 * 1/(bamgopts->err*coef*coef) * 1/(smax-smin);
    182176                }
    183177                else{
  • issm/trunk/src/c/objects/BamgOpts.h

    r2937 r2938  
    1515        double  anisomax;
    1616        int     NbSmooth;
    17         int     Rescaling;
    1817        int     Metrictype;
    1918        int     nbjacobi;
     
    3130        double* metric;
    3231        double* field;
     32        int     numfields;
    3333
    3434};
  • issm/trunk/src/m/classes/public/bamg.m

    r2937 r2938  
    8181bamg_options.coef=getfieldvalue(options,'coef',1);
    8282bamg_options.power=getfieldvalue(options,'power',1);
    83 bamg_options.Rescaling=getfieldvalue(options,'Rescaling',1);
    8483bamg_options.nbjacobi=getfieldvalue(options,'nbjacobi',1);
    8584bamg_options.AbsError=getfieldvalue(options,'AbsError',0);
    8685bamg_options.Hessiantype=getfieldvalue(options,'Hessiantype',2);
    87 bamg_options.Metrictype=getfieldvalue(options,'Metrictype',2);
     86bamg_options.Metrictype=getfieldvalue(options,'Metrictype',0);
    8887bamg_options.NbSmooth=getfieldvalue(options,'NbSmooth',3);
    8988bamg_options.omega=getfieldvalue(options,'omega',1.8);
  • issm/trunk/src/mex/Bamg/Bamg.cpp

    r2937 r2938  
    3737        double power;
    3838        int    Hessiantype,Metrictype,NbSmooth;
    39         int    Rescaling,nbjacobi,AbsError;
     39        int    nbjacobi,AbsError;
    4040        double omega;
    4141        double gradation;
     
    4343        double* metric=NULL;
    4444        double* field=NULL;
     45        int     numfields=0;
    4546
    4647        /*Boot module: */
     
    121122        FetchData(&power,mxGetField(BAMGOPTIONS,0,"power"));
    122123        bamgopts.power=power;
    123         FetchData(&Rescaling,mxGetField(BAMGOPTIONS,0,"Rescaling"));
    124         bamgopts.Rescaling=Rescaling;
    125124        FetchData(&nbjacobi,mxGetField(BAMGOPTIONS,0,"nbjacobi"));
    126125        bamgopts.nbjacobi=nbjacobi;
     
    151150        FetchData(&metric,NULL,NULL,mxGetField(BAMGOPTIONS,0,"metric"));
    152151        bamgopts.metric=metric;
    153         FetchData(&field,NULL,NULL,mxGetField(BAMGOPTIONS,0,"field"));
     152        FetchData(&field,NULL,&numfields,mxGetField(BAMGOPTIONS,0,"field"));
     153        bamgopts.numfields=numfields;
     154        printf("numfields = %i\n",numfields);
    154155        bamgopts.field=field;
    155156
Note: See TracChangeset for help on using the changeset viewer.