Changeset 16780


Ignore:
Timestamp:
11/15/13 10:20:45 (11 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed pressure HO issue for higher order element (need to be on vertices and not nodes)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r16778 r16780  
    10601060void StressbalanceAnalysis::InputUpdateFromSolutionHO(IssmDouble* solution,Element* element){/*{{{*/
    10611061
    1062         int         i,meshtype;
    1063         IssmDouble  rho_ice,g;
     1062        int         i;
    10641063        int*        doflist=NULL;
    10651064        IssmDouble* xyz_list=NULL;
     1065
     1066        /*Deal with pressure first*/
     1067        int numvertices = element->GetNumberOfVertices();
     1068        IssmDouble* pressure  = xNew<IssmDouble>(numvertices);
     1069        IssmDouble* surface   = xNew<IssmDouble>(numvertices);
     1070        IssmDouble  rho_ice   = element->GetMaterialParameter(MaterialsRhoIceEnum);
     1071        IssmDouble  g         = element->GetMaterialParameter(ConstantsGEnum);
     1072        element->GetVerticesCoordinates(&xyz_list);
     1073        element->GetInputListOnVertices(surface,SurfaceEnum);
     1074        for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
     1075        element->AddInput(PressureEnum,pressure,P1Enum);
     1076        xDelete<IssmDouble>(pressure);
     1077        xDelete<IssmDouble>(surface);
    10661078
    10671079        /*Fetch number of nodes and dof for this finite element*/
     
    10761088        IssmDouble* vz        = xNew<IssmDouble>(numnodes);
    10771089        IssmDouble* vel       = xNew<IssmDouble>(numnodes);
    1078         IssmDouble* pressure  = xNew<IssmDouble>(numnodes);
    1079         IssmDouble* surface   = xNew<IssmDouble>(numnodes);
    10801090
    10811091        /*Use the dof list to index into the solution vector: */
     
    10841094        /*Transform solution in Cartesian Space*/
    10851095        element->TransformSolutionCoord(&values[0],XYEnum);
    1086         element->FindParam(&meshtype,MeshTypeEnum);
    10871096
    10881097        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
     
    10991108        element->GetInputListOnNodes(&vz[0],VzEnum,0.);
    11001109        for(i=0;i<numnodes;i++) vel[i]=sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);
    1101 
    1102         /*For pressure: we have not computed pressure in this analysis, for this element. We are in 2D,
    1103          *so the pressure is just the pressure at the bedrock: */
    1104         rho_ice = element->GetMaterialParameter(MaterialsRhoIceEnum);
    1105         g       = element->GetMaterialParameter(ConstantsGEnum);
    1106         element->GetVerticesCoordinates(&xyz_list);
    1107         element->GetInputListOnNodes(&surface[0],SurfaceEnum);
    1108         for(i=0;i<numnodes;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
    11091110
    11101111        /*Now, we have to move the previous Vx and Vy inputs  to old
     
    11181119        element->AddInput(VyEnum,vy,P1Enum);
    11191120        element->AddBasalInput(VelEnum,vel,P1Enum);
    1120         element->AddBasalInput(PressureEnum,pressure,P1Enum);
    11211121
    11221122        /*Free ressources:*/
    1123         xDelete<IssmDouble>(surface);
    1124         xDelete<IssmDouble>(pressure);
    11251123        xDelete<IssmDouble>(vel);
    11261124        xDelete<IssmDouble>(vz);
Note: See TracChangeset for help on using the changeset viewer.