Changeset 5489


Ignore:
Timestamp:
08/23/10 07:54:04 (15 years ago)
Author:
Mathieu Morlighem
Message:

As usual

Location:
issm/trunk/src/c/objects/Bamg
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Bamg/GeometricalEdge.cpp

    r5447 r5489  
    3131                ISSMASSERT(theta>-1e-12 && theta<1+1e-12);
    3232
    33                 if (TgA())
    34                  if (TgB()) // interpolation d'hermite
    35                         { cb =  theta*theta*(3-2*theta);
    36                          ca =  1-cb;     
    37                          cta = (1-theta)*(1-theta)*theta;
    38                          ctb = (theta-1)*theta*theta ;
     33                if (TgA()){
     34                        if (TgB()){ //Hermite interpolation
     35                                cb =  theta*theta*(3-2*theta);
     36                                ca =  1-cb;     
     37                                cta = (1-theta)*(1-theta)*theta;
     38                                ctb = (theta-1)*theta*theta ;
    3939                        }
    40                  else { // 1-t*t, t-t*t, t*t
    41                          double t = theta;
    42                          cb = t*t;
    43                          ca = 1-cb;
    44                          cta= t-cb;
    45                          ctb=0;   
    46                  }   
    47                 else
    48                  if (TgB()){
    49                          double t = 1-theta;
    50                          ca = t*t;
    51                          cb = 1-ca;
    52                          ctb= -t+ca;
    53                          cta=0;   
    54                  }
    55                  else {
    56                          ca =(1-theta),cb = theta,cta=ctb=0; // lagrange P1
    57                  }
    58                 return A*ca + B*cb + tg[0]* cta + tg[1] * ctb;
     40                        else {
     41                                double t = theta;
     42                                cb = t*t;
     43                                ca = 1-cb;
     44                                cta= t-cb;
     45                                ctb=0;   
     46                        }
     47                }
     48                else{
     49                        if (TgB()){
     50                                double t = 1-theta;
     51                                ca = t*t;
     52                                cb = 1-ca;
     53                                ctb= -t+ca;
     54                                cta=0;   
     55                        }
     56                        else { // lagrange P1
     57                                ca =(1-theta);
     58                                cb = theta;
     59                                cta=ctb=0;
     60                        }
     61                }
     62                return A*ca + B*cb + tg[0]*cta + tg[1]*ctb;
    5963          }
    6064        /*}}}1*/
  • issm/trunk/src/c/objects/Bamg/Mesh.cpp

    r5461 r5489  
    50475047                                                                                        x += xstep;
    50485048                                                                                        B =  e->F(k ? x : 1-x);
    5049                                                                                         MBs= background ? BTh.MetricAt(B) : Metric(1-x, MA, x ,MB);
     5049                                                                                        MBs= background ? BTh.MetricAt(B) : Metric(1-x,MA,x,MB);
    50505050                                                                                        AB = A-B;
    5051                                                                                         lSubEdge[kk]= (ledge += (MAs(AB)+MBs(AB))/2);
     5051                                                                                        lSubEdge[kk]= (ledge+=(MAs(AB)+MBs(AB))/2);
    50525052                                                                                }
    50535053                                                                        }
    50545054
    5055                                                                         double lcurveb = lcurve+ ledge ;
    5056 
    5057                                                                         //Now, create corresponding points
    5058                                                                         while (lcurve<=s && s <= lcurveb && nbv < nbvend){
     5055                                                                        double lcurveb = lcurve+ledge;
     5056
     5057                                                                        /*Now, create corresponding points*/
     5058                                                                        while (lcurve<=s && s<=lcurveb && nbv<nbvend){
    50595059
    50605060                                                                                double ss = s-lcurve;
    50615061
    50625062                                                                                /*Find the SubEdge containing ss using Dichotomy*/
    5063 
    50645063                                                                                int kk0=-1,kk1=NbSubEdge-1,kkk;
    50655064                                                                                double ll0=0,ll1=ledge,llk;
  • issm/trunk/src/c/objects/Bamg/Metric.cpp

    r5400 r5489  
    5151                /*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, Metric.cpp/EigenMetric)*/
    5252
     53                /*Compute metric (linear combination of ma and mb)*/
    5354                Metric mab(a*ma.a11+b*mb.a11,a*ma.a21+b*mb.a21,a*ma.a22+b*mb.a22);
     55
     56                /*Get Eigen values and vectors*/
    5457                EigenMetric vab(mab);
    55 
    5658                R2 v1(vab.v.x,vab.v.y);
    5759                R2 v2(-v1.y,v1.x);
    5860
    59 
    60                 double h1 = a / ma(v1) + b / mb(v1);
    61                 double h2 = a / ma(v2) + b / mb(v2);
    62                 vab.lambda1 =  1 / (h1*h1);
    63                 vab.lambda2 =  1 / (h2*h2);
    64                 *this = vab;
     61                /*Modify eigen values (a+b=1)*/
     62                double h1 = a/ma(v1) + b/mb(v1);
     63                double h2 = a/ma(v2) + b/mb(v2);
     64                vab.lambda1 =  1/(h1*h1);
     65                vab.lambda2 =  1/(h2*h2);
     66                *this=vab;
    6567        }
    6668        /*}}}1*/
  • issm/trunk/src/c/objects/Bamg/Metric.h

    r5400 r5489  
    4646                        Metric operator/(double c) const {double c2=1/(c*c);return  Metric(a11*c2,a21*c2,a22*c2);}
    4747                        operator D2xD2(){ return D2xD2(a11,a21,a21,a22);}
    48                         double  operator()(R2 x) const { return sqrt(x.x*x.x*a11+2*x.x*x.y*a21+x.y*x.y*a22);};
     48                        double  operator()(R2 x) const { return sqrt(x.x*x.x*a11+2*x.x*x.y*a21+x.y*x.y*a22);};        // length of x in metric sqrt(<Mx,x>)
    4949                        double  operator()(R2 x,R2 y) const { return x.x*y.x*a11+(x.x*x.y+x.y*y.x)*a21+x.y*y.y*a22;};
    5050
Note: See TracChangeset for help on using the changeset viewer.