Changeset 16936 for issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
- Timestamp:
- 11/25/13 14:38:24 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp ¶
r16932 r16936 828 828 case SSAHOApproximationEnum: 829 829 return CreateKMatrixSSAHO(element); 830 case HOFSApproximationEnum: 831 return CreateKMatrixHOFS(element); 830 832 case NoneApproximationEnum: 831 833 return NULL; … … 3065 3067 3066 3068 /*Coupling (Tiling)*/ 3069 ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOFS(Element* element){/*{{{*/ 3070 3071 /*compute all stiffness matrices for this element*/ 3072 ElementMatrix* Ke1=CreateKMatrixFS(element); 3073 int indices[3]={18,19,20}; 3074 Ke1->StaticCondensation(3,&indices[0]); 3075 int init = element->FiniteElement(); 3076 element->SetTemporaryElementType(P1Enum); // P1 needed for HO 3077 ElementMatrix* Ke2=CreateKMatrixHO(element); 3078 element->SetTemporaryElementType(init); // P1 needed for HO 3079 ElementMatrix* Ke3=CreateKMatrixCouplingHOFS(element); 3080 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 3081 3082 /*clean-up and return*/ 3083 delete Ke1; 3084 delete Ke2; 3085 delete Ke3; 3086 return Ke; 3087 }/*}}}*/ 3067 3088 ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSAHO(Element* element){/*{{{*/ 3068 3089 … … 3077 3098 delete Ke2; 3078 3099 delete Ke3; 3100 return Ke; 3101 }/*}}}*/ 3102 ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingHOFS(Element* element){/*{{{*/ 3103 3104 /*Constants*/ 3105 int numnodes = 3*6+1; 3106 int numdofp = 2*6; 3107 int numdofs = 4*6 + 3; 3108 int numdoftotal = (2+4)*6+ 3; 3109 3110 /*Intermediaries*/ 3111 int i,j,init; 3112 int* cs_list = xNew<int>(6*3+1); 3113 int* cs_list2 = xNew<int>(6*2+1); 3114 Node **node_list = xNew<Node*>(6*3+1); 3115 3116 /*Some parameters needed*/ 3117 init = element->FiniteElement(); 3118 3119 /*prepare node list*/ 3120 for(i=0;i<6+1;i++){ 3121 node_list[i+6] = element->GetNode(i); 3122 cs_list[i+6] = XYZEnum; 3123 cs_list2[i] = XYZEnum; 3124 } 3125 for(i=0;i<6;i++){ 3126 node_list[i] = element->GetNode(i); 3127 node_list[i+2*6+1] = element->GetNode(i+6*1); 3128 cs_list[i] = XYEnum; 3129 cs_list[i+2*6+1] = PressureEnum; 3130 cs_list2[i+6+1] = PressureEnum; 3131 } 3132 3133 /*compute all stiffness matrices for this element*/ 3134 ElementMatrix* Ke1=element->NewElementMatrix(FSvelocityEnum); 3135 ElementMatrix* Ke2=element->NewElementMatrix(HOApproximationEnum); 3136 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 3137 delete Ke1; delete Ke2; 3138 3139 /*Compute HO Matrix with P1 element type\n");*/ 3140 Ke1=CreateKMatrixFS(element); element->TransformInvStiffnessMatrixCoord(Ke1,node_list,2*6+1,cs_list2); 3141 int indices[3]={18,19,20}; 3142 Ke1->StaticCondensation(3,&indices[0]); 3143 element->SetTemporaryElementType(P1Enum); // P1 needed for HO 3144 Ke2=CreateKMatrixHO(element); element->TransformInvStiffnessMatrixCoord(Ke2,XYEnum); 3145 element->SetTemporaryElementType(init); // P1 needed for HO 3146 /*Compute FS Matrix and condense it \n");*/ 3147 3148 for(i=0;i<numdofs;i++) for(j=0;j<6;j++){ 3149 Ke->values[i*numdoftotal+numdofs+2*j+0]+=Ke1->values[i*numdofs+3*j+0]; 3150 Ke->values[i*numdoftotal+numdofs+2*j+1]+=Ke1->values[i*numdofs+3*j+1]; 3151 } 3152 for(i=0;i<numdofp;i++) for(j=0;j<6;j++){ 3153 Ke->values[(i+numdofs)*numdoftotal+3*j+0]+=Ke2->values[i*numdofp+2*j+0]; 3154 Ke->values[(i+numdofs)*numdoftotal+3*j+1]+=Ke2->values[i*numdofp+2*j+1]; 3155 } 3156 3157 /*Transform Coordinate System*/ //Do not transform, already done in the matrices 3158 element->TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list); 3159 3160 /*clean-up and return*/ 3161 xDelete<int>(cs_list); 3162 xDelete<int>(cs_list2); 3163 xDelete<Node*>(node_list); 3164 delete Ke1; 3165 delete Ke2; 3079 3166 return Ke; 3080 3167 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.