Changeset 16936
- Timestamp:
- 11/25/13 14:38:24 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r16926 r16936 71 71 void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element); 72 72 /*Coupling*/ 73 ElementMatrix* CreateKMatrixHOFS(Element* element); 73 74 ElementMatrix* CreateKMatrixSSAHO(Element* element); 75 ElementMatrix* CreateKMatrixCouplingHOFS(Element* element); 74 76 ElementMatrix* CreateKMatrixCouplingSSAHO(Element* element); 75 77 ElementMatrix* CreateKMatrixCouplingSSAHOFriction(Element* element); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r16926 r16936 296 296 for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i]; 297 297 }/*}}}*/ 298 void Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/ 299 ::TransformInvStiffnessMatrixCoord(Ke,this->nodes,this->GetNumberOfNodes(),transformenum); 300 }/*}}}*/ 301 void Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes_list,int numnodes,int* transformenum_list){/*{{{*/ 302 ::TransformInvStiffnessMatrixCoord(Ke,nodes_list,numnodes,transformenum_list); 303 }/*}}}*/ 298 304 void Element::TransformLoadVectorCoord(ElementVector* pe,int transformenum){/*{{{*/ 299 305 ::TransformLoadVectorCoord(pe,this->nodes,this->GetNumberOfNodes(),transformenum); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16926 r16936 73 73 void ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 74 74 void ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 75 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum); 76 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes_list,int numnodes,int* transformenum_list); 75 77 void TransformLoadVectorCoord(ElementVector* pe,int transformenum); 76 78 void TransformLoadVectorCoord(ElementVector* pe,int* transformenum_list); -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16932 r16936 7054 7054 /*Compute HO Matrix with P1 element type\n");*/ 7055 7055 this->element_type=P1Enum; 7056 Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1, this->nodes,NUMVERTICES,XYEnum);7056 Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1,XYEnum); 7057 7057 this->element_type=init; 7058 7058 /*Compute FS Matrix and condense it \n");*/ 7059 Ke2=CreateKMatrixStressbalanceFS(); TransformInvStiffnessMatrixCoord(Ke2, this->nodes,2*NUMVERTICES+1,cs_list2);7059 Ke2=CreateKMatrixStressbalanceFS(); TransformInvStiffnessMatrixCoord(Ke2,node_list,2*NUMVERTICES+1,cs_list2); 7060 7060 int indices[3]={18,19,20}; 7061 7061 Ke2->StaticCondensation(3,&indices[0]);
Note:
See TracChangeset
for help on using the changeset viewer.