Changeset 20047
- Timestamp:
- 02/02/16 15:28:39 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r20020 r20047 376 376 377 377 /*Clean up and return*/ 378 xDelete<IssmDouble>(xyz_list); 378 379 delete gauss; 379 380 return divergence; … … 1574 1575 IssmDouble mantleconductivity,nusselt,dtbg,plumeradius,topplumedepth,bottomplumedepth,plumex,plumey; 1575 1576 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; 1578 1579 IssmDouble* values = xNew<IssmDouble>(numvertices); 1580 IssmDouble *xyz_list = NULL; 1579 1581 1580 1582 parameters->FindParam(&mantleconductivity,BasalforcingsMantleconductivityEnum); … … 1591 1593 parameters->FindParam(&lowercrustheat,BasalforcingsLowercrustheatEnum); 1592 1594 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; 1595 1601 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; 1597 1613 } 1598 1614 1599 1615 this->AddInput(BasalforcingsGeothermalfluxEnum,values,P1Enum); 1600 //xDelete<IssmDouble>(base); 1601 //xDelete<IssmDouble>(bed); 1616 xDelete<IssmDouble>(xyz_list); 1602 1617 xDelete<IssmDouble>(values); 1603 1618 … … 2669 2684 /*Clean up and return*/ 2670 2685 xDelete<IssmDouble>(maxprincipal); 2686 xDelete<IssmDouble>(xyz_list); 2671 2687 delete gauss; 2672 2688 } … … 3098 3114 /*Clean up and return*/ 3099 3115 xDelete<IssmDouble>(viscousheating); 3116 xDelete<IssmDouble>(xyz_list); 3100 3117 delete gauss; 3101 3118 }
Note:
See TracChangeset
for help on using the changeset viewer.