Index: ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp =================================================================== --- ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp (revision 16779) +++ ../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp (revision 16780) @@ -1059,11 +1059,23 @@ }/*}}}*/ void StressbalanceAnalysis::InputUpdateFromSolutionHO(IssmDouble* solution,Element* element){/*{{{*/ - int i,meshtype; - IssmDouble rho_ice,g; + int i; int* doflist=NULL; IssmDouble* xyz_list=NULL; + /*Deal with pressure first*/ + int numvertices = element->GetNumberOfVertices(); + IssmDouble* pressure = xNew(numvertices); + IssmDouble* surface = xNew(numvertices); + IssmDouble rho_ice = element->GetMaterialParameter(MaterialsRhoIceEnum); + IssmDouble g = element->GetMaterialParameter(ConstantsGEnum); + element->GetVerticesCoordinates(&xyz_list); + element->GetInputListOnVertices(surface,SurfaceEnum); + for(i=0;iAddInput(PressureEnum,pressure,P1Enum); + xDelete(pressure); + xDelete(surface); + /*Fetch number of nodes and dof for this finite element*/ int numnodes = element->GetNumberOfNodes(); int numdof = numnodes*2; @@ -1075,15 +1087,12 @@ IssmDouble* vy = xNew(numnodes); IssmDouble* vz = xNew(numnodes); IssmDouble* vel = xNew(numnodes); - IssmDouble* pressure = xNew(numnodes); - IssmDouble* surface = xNew(numnodes); /*Use the dof list to index into the solution vector: */ for(i=0;iTransformSolutionCoord(&values[0],XYEnum); - element->FindParam(&meshtype,MeshTypeEnum); /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ for(i=0;iGetInputListOnNodes(&vz[0],VzEnum,0.); for(i=0;iGetMaterialParameter(MaterialsRhoIceEnum); - g = element->GetMaterialParameter(ConstantsGEnum); - element->GetVerticesCoordinates(&xyz_list); - element->GetInputListOnNodes(&surface[0],SurfaceEnum); - for(i=0;iInputChangeName(VxEnum,VxPicardEnum); @@ -1117,11 +1118,8 @@ element->AddInput(VxEnum,vx,P1Enum); element->AddInput(VyEnum,vy,P1Enum); element->AddBasalInput(VelEnum,vel,P1Enum); - element->AddBasalInput(PressureEnum,pressure,P1Enum); /*Free ressources:*/ - xDelete(surface); - xDelete(pressure); xDelete(vel); xDelete(vz); xDelete(vy);