source:
issm/oecreview/Archive/16554-17801/ISSM-16779-16780.diff@
17802
Last change on this file since 17802 was 17802, checked in by , 11 years ago | |
---|---|
File size: 3.1 KB |
-
../trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
1059 1059 }/*}}}*/ 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; 1066 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); 1078 1067 1079 /*Fetch number of nodes and dof for this finite element*/ 1068 1080 int numnodes = element->GetNumberOfNodes(); 1069 1081 int numdof = numnodes*2; … … 1075 1087 IssmDouble* vy = xNew<IssmDouble>(numnodes); 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: */ 1082 1092 for(i=0;i<numdof;i++) values[i]=solution[doflist[i]]; 1083 1093 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: */ 1089 1098 for(i=0;i<numnodes;i++){ … … 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 1110 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 1111 /*Now, we have to move the previous Vx and Vy inputs to old 1111 1112 * status, otherwise, we'll wipe them off: */ 1112 1113 element->InputChangeName(VxEnum,VxPicardEnum); … … 1117 1118 element->AddInput(VxEnum,vx,P1Enum); 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); 1127 1125 xDelete<IssmDouble>(vy);
Note:
See TracBrowser
for help on using the repository browser.