Changeset 16715
- Timestamp:
- 11/12/13 12:09:40 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
r16684 r16715 59 59 }/*}}}*/ 60 60 void L2ProjectionBaseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 61 _error_("not implemented yet"); 61 62 int inputenum; 63 64 element->FindParam(&inputenum,InputToL2ProjectEnum); 65 element->InputUpdateFromSolutionOneDofCollapsed(solution,inputenum); 62 66 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r16698 r16715 935 935 switch(approximation){ 936 936 case FSApproximationEnum: case NoneApproximationEnum: 937 //InputUpdateFromSolutionFS(solution,element);937 InputUpdateFromSolutionFS(solution,element); 938 938 return; 939 939 case SSAApproximationEnum: case HOApproximationEnum: case SIAApproximationEnum: … … 1035 1035 1036 1036 }/*}}}*/ 1037 void StressbalanceAnalysis::InputUpdateFromSolutionFS(IssmDouble* solution,Element* element){/*{{{*/ 1038 1039 int i; 1040 int* vdoflist=NULL; 1041 int* pdoflist=NULL; 1042 IssmDouble FSreconditioning; 1043 1044 /*Fetch number of nodes and dof for this finite element*/ 1045 int vnumnodes = element->GetNumberOfNodesVelocity(); 1046 int pnumnodes = element->GetNumberOfNodesPressure(); 1047 int vnumdof = vnumnodes*3; 1048 int pnumdof = pnumnodes*1; 1049 1050 /*Initialize values*/ 1051 IssmDouble* values = xNew<IssmDouble>(vnumdof+pnumdof); 1052 IssmDouble* vx = xNew<IssmDouble>(vnumnodes); 1053 IssmDouble* vy = xNew<IssmDouble>(vnumnodes); 1054 IssmDouble* vz = xNew<IssmDouble>(vnumnodes); 1055 IssmDouble* vel = xNew<IssmDouble>(vnumnodes); 1056 IssmDouble* pressure = xNew<IssmDouble>(pnumnodes); 1057 1058 /*Prepare coordinate system list*/ 1059 int* cs_list = xNew<int>(vnumnodes+pnumnodes); 1060 for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 1061 for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum; 1062 1063 /*Get dof list: */ 1064 element->GetDofListVelocity(&vdoflist,GsetEnum); 1065 element->GetDofListPressure(&pdoflist,GsetEnum); 1066 1067 /*Use the dof list to index into the solution vector: */ 1068 for(i=0;i<vnumdof;i++) values[i] =solution[vdoflist[i]]; 1069 for(i=0;i<pnumdof;i++) values[vnumdof+i]=solution[pdoflist[i]]; 1070 1071 /*Transform solution in Cartesian Space*/ 1072 element->TransformSolutionCoord(&values[0],&cs_list[0]); 1073 1074 /*Ok, we have vx and vy in values, fill in all arrays: */ 1075 for(i=0;i<vnumnodes;i++){ 1076 vx[i] = values[i*NDOF3+0]; 1077 vy[i] = values[i*NDOF3+1]; 1078 vz[i] = values[i*NDOF3+2]; 1079 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 1080 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 1081 if(xIsNan<IssmDouble>(vz[i])) _error_("NaN found in solution vector"); 1082 } 1083 for(i=0;i<pnumnodes;i++){ 1084 pressure[i] = values[vnumdof+i]; 1085 if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector"); 1086 } 1087 1088 /*Recondition pressure and compute vel: */ 1089 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 1090 for(i = 0;i<pnumnodes;i++) pressure[i] = pressure[i]*FSreconditioning; 1091 for(i = 0;i<vnumnodes;i++) vel[i] = sqrt(vx[i]*vx[i] + vy[i]*vy[i] + vz[i]*vz[i]); 1092 1093 /*Now, we have to move the previous inputs to old 1094 * status, otherwise, we'll wipe them off: */ 1095 element->InputChangeName(VxEnum,VxPicardEnum); 1096 element->InputChangeName(VyEnum,VyPicardEnum); 1097 element->InputChangeName(VzEnum,VzPicardEnum); 1098 element->InputChangeName(PressureEnum,PressurePicardEnum); 1099 1100 /*Add vx and vy as inputs to the tria element: */ 1101 element->AddInput(VxEnum,vx,P1Enum); 1102 element->AddInput(VyEnum,vy,P1Enum); 1103 element->AddInput(VzEnum,vz,P1Enum); 1104 element->AddInput(VelEnum,vel,P1Enum); 1105 element->AddInput(PressureEnum,pressure,P1Enum); 1106 1107 /*Free ressources:*/ 1108 xDelete<IssmDouble>(pressure); 1109 xDelete<IssmDouble>(vel); 1110 xDelete<IssmDouble>(vz); 1111 xDelete<IssmDouble>(vy); 1112 xDelete<IssmDouble>(vx); 1113 xDelete<IssmDouble>(values); 1114 xDelete<int>(vdoflist); 1115 xDelete<int>(pdoflist); 1116 xDelete<int>(cs_list); 1117 1118 1119 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r16693 r16715 21 21 void GetSolutionFromInputsFS(Vector<IssmDouble>* solution,Element* element); 22 22 void GetSolutionFromInputsHoriz(Vector<IssmDouble>* solution,Element* element); 23 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 24 void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element); 23 25 void InputUpdateFromSolutionHoriz(IssmDouble* solution,Element* element); 24 void InputUpdateFromSolution(IssmDouble* solution,Element* element);25 26 }; 26 27 #endif -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16699 r16715 50 50 virtual IssmDouble GetMaterialParameter(int enum_in)=0; 51 51 virtual void TransformSolutionCoord(IssmDouble* values,int transformenum)=0; 52 virtual void TransformSolutionCoord(IssmDouble* values,int* transformenum_list)=0; 52 53 virtual void GetDofList(int** pdoflist,int approximation_enum,int setenum)=0; 53 54 virtual void GetDofListVelocity(int** pdoflist,int setenum)=0; … … 56 57 virtual int GetNodeIndex(Node* node)=0; 57 58 virtual int GetNumberOfNodes(void)=0; 59 virtual int GetNumberOfNodesVelocity(void)=0; 60 virtual int GetNumberOfNodesPressure(void)=0; 58 61 virtual void GetNodesSidList(int* sidlist)=0; 59 62 virtual void GetNodesLidList(int* sidlist)=0; … … 85 88 virtual void InputDuplicate(int original_enum,int new_enum)=0; 86 89 virtual void InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0; 90 virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0; 87 91 88 92 virtual int NodalValue(IssmDouble* pvalue, int index, int natureofdataenum)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16702 r16715 1359 1359 } 1360 1360 /*}}}*/ 1361 /*FUNCTION Penta::GetNumberOfNodesPressure;{{{*/ 1362 int Penta::GetNumberOfNodesPressure(void){ 1363 return this->NumberofNodesPressure(); 1364 } 1365 /*}}}*/ 1366 /*FUNCTION Penta::GetNumberOfNodesVelocity;{{{*/ 1367 int Penta::GetNumberOfNodesVelocity(void){ 1368 return this->NumberofNodesVelocity(); 1369 } 1370 /*}}}*/ 1361 1371 /*FUNCTION Penta::GetInput(int inputenum) {{{*/ 1362 1372 Input* Penta::GetInput(int inputenum){ … … 3278 3288 3279 3289 ::TransformSolutionCoord(values,this->nodes,this->NumberofNodes(),transformenum); 3290 3291 } 3292 /*}}}*/ 3293 /*FUNCTION Penta::TransformSolutionCoord{{{*/ 3294 void Penta::TransformSolutionCoord(IssmDouble* values,int* transformenum_list){ 3295 3296 ::TransformSolutionCoord(values,this->nodes,this->NumberofNodes(),transformenum_list); 3280 3297 3281 3298 } -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16699 r16715 91 91 void GetNodesLidList(int* lidlist); 92 92 int GetNumberOfNodes(void); 93 int GetNumberOfNodesPressure(void); 94 int GetNumberOfNodesVelocity(void); 93 95 IssmDouble GetMaterialParameter(int enum_in); 94 96 void GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type); … … 242 244 void SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]); 243 245 void TransformSolutionCoord(IssmDouble* values,int transformenum); 246 void TransformSolutionCoord(IssmDouble* values,int* transformenum_list); 244 247 245 248 #ifdef _HAVE_STRESSBALANCE_ -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16699 r16715 54 54 /*}}}*/ 55 55 /*Update virtual functions resolution: {{{*/ 56 void InputUpdateFromSolution(IssmDouble* solutiong){_error_("not implemented yet");}; 56 void InputUpdateFromSolution(IssmDouble* solution){_error_("not implemented yet");}; 57 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum){_error_("not implemented yet");}; 57 58 void InputUpdateFromVector(IssmDouble* vector, int name, int type){_error_("not implemented yet");}; 58 59 #ifdef _HAVE_DAKOTA_ … … 93 94 void GetNodesLidList(int* lidlist){_error_("not implemented yet");}; 94 95 int GetNumberOfNodes(void){_error_("not implemented yet");}; 96 int GetNumberOfNodesVelocity(void){_error_("not implemented yet");}; 97 int GetNumberOfNodesPressure(void){_error_("not implemented yet");}; 95 98 void GetVerticesCoordinates(IssmDouble** pxyz_list){_error_("not implemented yet");}; 96 99 int Sid(){_error_("not implemented yet");}; … … 143 146 IssmDouble TimeAdapt(){_error_("not implemented yet");}; 144 147 void TransformSolutionCoord(IssmDouble* values,int transformenum){_error_("not implemented yet");}; 148 void TransformSolutionCoord(IssmDouble* values,int* transformenum_list){_error_("not implemented yet");}; 145 149 void UpdateConstraintsExtrudeFromBase(){_error_("not implemented");}; 146 150 void UpdateConstraintsExtrudeFromTop(){_error_("not implemented");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16699 r16715 89 89 void GetNodesLidList(int* lidlist); 90 90 int GetNumberOfNodes(void); 91 int GetNumberOfNodesPressure(void){_error_("not implemented yet");}; 92 int GetNumberOfNodesVelocity(void){_error_("not implemented yet");}; 91 93 int Sid(); 92 94 bool IsOnBed(); … … 257 259 void InputChangeName(int enum_type,int enum_type_old); 258 260 void InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type); 261 void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int enum_type){_error_("not implemented yet");}; 259 262 void InputUpdateFromSolutionMasstransport(IssmDouble* solution); 260 263 bool IsInput(int name); … … 264 267 void SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]); 265 268 void TransformSolutionCoord(IssmDouble* values,int transformenum); 269 void TransformSolutionCoord(IssmDouble* values,int* transformenum_list){_error_("not implemented yet");}; 266 270 #ifdef _HAVE_STRESSBALANCE_ 267 271 ElementMatrix* CreateKMatrixStressbalanceSSA(void);
Note:
See TracChangeset
for help on using the changeset viewer.