Changeset 16780
- Timestamp:
- 11/15/13 10:20:45 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r16778 r16780 1060 1060 void StressbalanceAnalysis::InputUpdateFromSolutionHO(IssmDouble* solution,Element* element){/*{{{*/ 1061 1061 1062 int i,meshtype; 1063 IssmDouble rho_ice,g; 1062 int i; 1064 1063 int* doflist=NULL; 1065 1064 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); 1066 1078 1067 1079 /*Fetch number of nodes and dof for this finite element*/ … … 1076 1088 IssmDouble* vz = xNew<IssmDouble>(numnodes); 1077 1089 IssmDouble* vel = xNew<IssmDouble>(numnodes); 1078 IssmDouble* pressure = xNew<IssmDouble>(numnodes);1079 IssmDouble* surface = xNew<IssmDouble>(numnodes);1080 1090 1081 1091 /*Use the dof list to index into the solution vector: */ … … 1084 1094 /*Transform solution in Cartesian Space*/ 1085 1095 element->TransformSolutionCoord(&values[0],XYEnum); 1086 element->FindParam(&meshtype,MeshTypeEnum);1087 1096 1088 1097 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ … … 1099 1108 element->GetInputListOnNodes(&vz[0],VzEnum,0.); 1100 1109 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]);1109 1110 1110 1111 /*Now, we have to move the previous Vx and Vy inputs to old … … 1118 1119 element->AddInput(VyEnum,vy,P1Enum); 1119 1120 element->AddBasalInput(VelEnum,vel,P1Enum); 1120 element->AddBasalInput(PressureEnum,pressure,P1Enum);1121 1121 1122 1122 /*Free ressources:*/ 1123 xDelete<IssmDouble>(surface);1124 xDelete<IssmDouble>(pressure);1125 1123 xDelete<IssmDouble>(vel); 1126 1124 xDelete<IssmDouble>(vz);
Note:
See TracChangeset
for help on using the changeset viewer.