Changeset 16756
- Timestamp:
- 11/14/13 09:43:52 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r16727 r16756 1130 1130 void StressbalanceAnalysis::InputUpdateFromSolutionFS(IssmDouble* solution,Element* element){/*{{{*/ 1131 1131 1132 int i ;1132 int i,dim,meshtype; 1133 1133 int* vdoflist=NULL; 1134 1134 int* pdoflist=NULL; 1135 1135 IssmDouble FSreconditioning; 1136 1136 1137 element->FindParam(&meshtype,MeshTypeEnum); 1138 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 1139 switch(meshtype){ 1140 case Mesh2DverticalEnum: dim = 2; break; 1141 case Mesh3DEnum: dim = 3; break; 1142 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 1143 } 1144 1137 1145 /*Fetch number of nodes and dof for this finite element*/ 1138 1146 int vnumnodes = element->GetNumberOfNodesVelocity(); 1139 1147 int pnumnodes = element->GetNumberOfNodesPressure(); 1140 int vnumdof = vnumnodes* 3;1148 int vnumdof = vnumnodes*dim; 1141 1149 int pnumdof = pnumnodes*1; 1142 1150 … … 1151 1159 /*Prepare coordinate system list*/ 1152 1160 int* cs_list = xNew<int>(vnumnodes+pnumnodes); 1153 for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 1161 if(dim==2){ 1162 for(i=0;i<vnumnodes;i++) cs_list[i] = XYEnum; 1163 } 1164 else{ 1165 for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 1166 } 1154 1167 for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum; 1155 1168 … … 1167 1180 /*Ok, we have vx and vy in values, fill in all arrays: */ 1168 1181 for(i=0;i<vnumnodes;i++){ 1169 vx[i] = values[i*NDOF3+0]; 1170 vy[i] = values[i*NDOF3+1]; 1171 vz[i] = values[i*NDOF3+2]; 1182 vx[i] = values[i*dim+0]; 1183 vy[i] = values[i*dim+1]; 1172 1184 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 1173 1185 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 1174 if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector"); 1186 1187 if(dim==3){ 1188 vz[i] = values[i*dim+2]; 1189 if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector"); 1190 } 1175 1191 } 1176 1192 for(i=0;i<pnumnodes;i++){ … … 1180 1196 1181 1197 /*Recondition pressure and compute vel: */ 1182 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);1183 for(i = 0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning;1184 for(i = 0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]);1198 for(i=0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning; 1199 if(dim==3) for(i=0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]); 1200 else for(i=0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i]); 1185 1201 1186 1202 /*Now, we have to move the previous inputs to old … … 1188 1204 element->InputChangeName(VxEnum,VxPicardEnum); 1189 1205 element->InputChangeName(VyEnum,VyPicardEnum); 1190 element->InputChangeName(VzEnum,VzPicardEnum);1191 1206 element->InputChangeName(PressureEnum,PressurePicardEnum); 1207 if(dim==3) element->InputChangeName(VzEnum,VzPicardEnum); 1192 1208 1193 1209 /*Add vx and vy as inputs to the tria element: */ 1194 1210 element->AddInput(VxEnum,vx,P1Enum); 1195 1211 element->AddInput(VyEnum,vy,P1Enum); 1196 element->AddInput(VzEnum,vz,P1Enum);1197 1212 element->AddInput(VelEnum,vel,P1Enum); 1198 1213 element->AddInput(PressureEnum,pressure,P1Enum); 1214 if(dim==3) element->AddInput(VzEnum,vz,P1Enum); 1199 1215 1200 1216 /*Free ressources:*/ … … 1208 1224 xDelete<int>(pdoflist); 1209 1225 xDelete<int>(cs_list); 1210 1211 1212 1226 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16754 r16756 2847 2847 2848 2848 ::TransformSolutionCoord(values,this->nodes,this->NumberofNodes(),transformenum); 2849 2850 } 2851 /*}}}*/ 2852 /*FUNCTION Tria::TransformSolutionCoord{{{*/ 2853 void Tria::TransformSolutionCoord(IssmDouble* values,int* transformenum_list){ 2854 2855 ::TransformSolutionCoord(values,this->nodes,this->NumberofNodes(),transformenum_list); 2849 2856 2850 2857 } -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16754 r16756 271 271 void SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]); 272 272 void TransformSolutionCoord(IssmDouble* values,int transformenum); 273 void TransformSolutionCoord(IssmDouble* values,int* transformenum_list) {_error_("not implemented yet");};273 void TransformSolutionCoord(IssmDouble* values,int* transformenum_list); 274 274 #ifdef _HAVE_STRESSBALANCE_ 275 275 ElementMatrix* CreateKMatrixStressbalanceSSA(void); -
issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
r16696 r16756 28 28 for(int i=0;i<femmodel->elements->Size();i++){ 29 29 Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 30 //analysis->InputUpdateFromSolution(solution,element);31 element->InputUpdateFromSolution(solution);30 analysis->InputUpdateFromSolution(solution,element); 31 //element->InputUpdateFromSolution(solution); 32 32 } 33 33 delete analysis;
Note:
See TracChangeset
for help on using the changeset viewer.