Changeset 20047


Ignore:
Timestamp:
02/02/16 15:28:39 (9 years ago)
Author:
seroussi
Message:

NEW: finished mantle class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r20020 r20047  
    376376
    377377        /*Clean up and return*/
     378        xDelete<IssmDouble>(xyz_list);
    378379        delete gauss;
    379380        return divergence;
     
    15741575        IssmDouble  mantleconductivity,nusselt,dtbg,plumeradius,topplumedepth,bottomplumedepth,plumex,plumey;
    15751576        IssmDouble  crustthickness,uppercrustthickness,uppercrustheat,lowercrustheat;
    1576         //IssmDouble* base     = xNew<IssmDouble>(numvertices);
    1577         //IssmDouble* bed      = xNew<IssmDouble>(numvertices);
     1577        IssmDouble  crustheat,plumeheat,dt,middleplumedepth,a,e,eprime,A0,lambda,Alambda,dAlambda;
     1578        IssmDouble  x,y,z,c;
    15781579        IssmDouble* values   = xNew<IssmDouble>(numvertices);
     1580        IssmDouble *xyz_list = NULL;
    15791581
    15801582        parameters->FindParam(&mantleconductivity,BasalforcingsMantleconductivityEnum);
     
    15911593        parameters->FindParam(&lowercrustheat,BasalforcingsLowercrustheatEnum);
    15921594
    1593         //this->GetInputListOnVertices(base,BaseEnum);
    1594         //this->GetInputListOnVertices(bed,BedEnum);
     1595        this->GetVerticesCoordinates(&xyz_list);
     1596        c=plumeradius;
     1597        a=(bottomplumedepth-topplumedepth)/2.;
     1598        e=pow(a*a-c*c,1./2.)/a;
     1599        A0=(1-e*e)/(e*e*e)*(1/2*log((1+e)/(1-e))-e);
     1600        middleplumedepth=-topplumedepth-crustthickness-a;
    15951601        for(int i=0;i<numvertices;i++){
    1596                 values[i]=uppercrustheat*uppercrustthickness+ lowercrustheat*(crustthickness-uppercrustthickness);
     1602                y=xyz_list[i*3+0]-plumex;
     1603                z=xyz_list[i*3+1]-plumey;
     1604                x=(a+topplumedepth+crustthickness);
     1605                lambda=(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2)))))/2;
     1606                dAlambda=(-8*a*pow(c,2)*x*(-2*pow(a,2)+2*pow(c,2)+sqrt(2)*sqrt((a-c)*(a+c))*sqrt(pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2))))))*(pow(a,4)*(pow(y,2)+pow(z,2))+pow(c,4)*(pow(y,2)+pow(z,2))+pow(pow(x,2)+pow(y,2)+pow(z,2),2)*(pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2)))))+pow(c,2)*(pow(x,4)-pow(x,2)*(pow(y,2)+pow(z,2))-(pow(y,2)+pow(z,2))*(2*pow(y,2)+2*pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2))))))+pow(a,2)*(-pow(x,4)+pow(x,2)*(pow(y,2)+pow(z,2))+(pow(y,2)+pow(z,2))*(-2*pow(c,2)+2*(pow(y,2)+pow(z,2))+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2))))))))/(sqrt((a-c)*(a+c))*sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2))))*pow(pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2)))),3.5)*pow(-(sqrt(2)*sqrt((a-c)*(a+c)))+sqrt(pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2))))),2)*(sqrt(2)*sqrt((a-c)*(a+c))+sqrt(pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2)+sqrt(pow(-pow(a,2)-pow(c,2)+pow(x,2)+pow(y,2)+pow(z,2),2)+4*(pow(c,2)*pow(x,2)+pow(a,2)*(-pow(c,2)+pow(y,2)+pow(z,2)))))));
     1607                eprime=pow((a*a-plumeradius*plumeradius)/(a*a+lambda),1./2.);
     1608                Alambda=(1.-e*e)/(e*e*e)*(1./2.*log((1.+eprime)/(1.-eprime))-eprime);
     1609                dt=dtbg-(nusselt-1.)/(1.+A0*(nusselt-1.))*(Alambda*dtbg+middleplumedepth*dtbg*dAlambda);
     1610                plumeheat=mantleconductivity*dt;
     1611                crustheat=uppercrustheat*uppercrustthickness+lowercrustheat*(crustthickness-uppercrustthickness);
     1612                values[i]=crustheat+plumeheat;
    15971613        }
    15981614
    15991615        this->AddInput(BasalforcingsGeothermalfluxEnum,values,P1Enum);
    1600         //xDelete<IssmDouble>(base);
    1601         //xDelete<IssmDouble>(bed);
     1616        xDelete<IssmDouble>(xyz_list);
    16021617        xDelete<IssmDouble>(values);
    16031618
     
    26692684        /*Clean up and return*/
    26702685        xDelete<IssmDouble>(maxprincipal);
     2686        xDelete<IssmDouble>(xyz_list);
    26712687        delete gauss;
    26722688}
     
    30983114        /*Clean up and return*/
    30993115        xDelete<IssmDouble>(viscousheating);
     3116        xDelete<IssmDouble>(xyz_list);
    31003117        delete gauss;
    31013118}
Note: See TracChangeset for help on using the changeset viewer.