Changeset 15757
- Timestamp:
- 08/08/13 15:53:27 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r15753 r15757 6876 6876 6877 6877 /*Constants*/ 6878 const int num nodes = 2 *NUMVERTICES;6879 const int numdof m = NDOF2 *NUMVERTICES2D;6880 const int numdofs = NDOF4 *NUMVERTICES;6881 const int numdoftotal = 2 *numdofm+numdofs;6878 const int numdofm = NDOF2 *NUMVERTICES2D; 6879 const int numdofs = NDOF4 *NUMVERTICES; 6880 const int numdofstotal = NDOF4 *NUMVERTICES + NDOF3; 6881 const int numdoftotal = 2 *numdofm+numdofstotal; 6882 6882 6883 6883 /*Intermediaries */ 6884 int 6884 int i,j; 6885 6885 IssmDouble Jdet; 6886 6886 IssmDouble viscosity,FSreconditioning; //viscosity 6887 6887 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/ 6888 6888 IssmDouble xyz_list[NUMVERTICES][3]; 6889 IssmDouble B[4][numdofs +3];6889 IssmDouble B[4][numdofstotal]; 6890 6890 IssmDouble Bprime[4][numdofm]; 6891 6891 IssmDouble B2[3][numdofm]; 6892 IssmDouble Bprime2[3][numdofs +3];6892 IssmDouble Bprime2[3][numdofstotal]; 6893 6893 IssmDouble D[4][4]={0.0}; // material matrix, simple scalar matrix. 6894 6894 IssmDouble D2[3][3]={0.0}; // material matrix, simple scalar matrix. … … 6896 6896 IssmDouble Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 6897 6897 IssmDouble Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 6898 IssmDouble Ke_gg_gaussian[numdofs +3][numdofm]; //stiffness matrix evaluated at the gaussian point.6899 IssmDouble Ke_gg_gaussian2[numdofm][numdofs +3]; //stiffness matrix evaluated at the gaussian point.6898 IssmDouble Ke_gg_gaussian[numdofstotal][numdofm]; //stiffness matrix evaluated at the gaussian point. 6899 IssmDouble Ke_gg_gaussian2[numdofm][numdofstotal]; //stiffness matrix evaluated at the gaussian point. 6900 6900 GaussPenta *gauss=NULL; 6901 6901 GaussTria *gauss_tria=NULL; 6902 Node *node_list[numnodes]; 6903 int cs_list[numnodes]; 6902 Node *node_list[20]; 6904 6903 6905 6904 /*Find penta on bed as FS must be coupled to the dofs on the bed: */ … … 6907 6906 Tria* tria=pentabase->SpawnTria(0); //lower face is 0, upper face is 1. 6908 6907 6908 int vnumnodes = this->NumberofNodesVelocity(); 6909 int pnumnodes = this->NumberofNodesPressure(); 6910 int numnodes = 2*vnumnodes-1+pnumnodes; 6911 6909 6912 /*Prepare node list*/ 6910 for(i=0;i<NUMVERTICES;i++){ 6911 node_list[i+0*NUMVERTICES] = pentabase->nodes[i]; 6912 node_list[i+1*NUMVERTICES] = this->nodes[i]; 6913 cs_list[i+0*NUMVERTICES] = XYEnum; 6914 cs_list[i+1*NUMVERTICES] = XYZEnum; 6915 } 6913 int* cs_list = xNew<int>(2*vnumnodes+pnumnodes); 6914 for(i=0;i<vnumnodes-1;i++){ 6915 node_list[i] = pentabase->nodes[i]; 6916 cs_list[i] = XYEnum; 6917 } 6918 for(i=0;i<vnumnodes;i++){ 6919 node_list[i+vnumnodes-1] = this->nodes[i]; 6920 cs_list[i+vnumnodes-1] = XYZEnum; 6921 } 6922 for(i=0;i<pnumnodes;i++){ 6923 node_list[2*vnumnodes-1+i] = this->nodes[vnumnodes+i]; 6924 cs_list[2*vnumnodes-1+i] = PressureEnum; 6925 } 6926 6916 6927 6917 6928 /*Initialize Element matrix and return if necessary*/ 6918 ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES, this->parameters,SSAApproximationEnum);6919 ElementMatrix* Ke2=new ElementMatrix(this->nodes , NUMVERTICES,this->parameters,FSvelocityEnum);6920 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);6929 ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES, this->parameters,SSAApproximationEnum); 6930 ElementMatrix* Ke2=new ElementMatrix(this->nodes ,2*NUMVERTICES+1,this->parameters,FSvelocityEnum); 6931 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 6921 6932 delete Ke1; delete Ke2; 6922 6933 … … 6950 6961 for (i=0;i<3;i++) D2[i][i]=D_scalar; 6951 6962 6952 TripleMultiply( &B[0][0],4,numdofs +3,1,6963 TripleMultiply( &B[0][0],4,numdofstotal,1, 6953 6964 &D[0][0],4,4,0, 6954 6965 &Bprime[0][0],4,numdofm,0, … … 6957 6968 TripleMultiply( &B2[0][0],3,numdofm,1, 6958 6969 &D2[0][0],3,3,0, 6959 &Bprime2[0][0],3,numdofs +3,0,6970 &Bprime2[0][0],3,numdofstotal,0, 6960 6971 &Ke_gg_gaussian2[0][0],0); 6961 6972 6962 for( i=0; i<numdofs ; i++) for(j=0;j<numdofm; j++)Ke_gg[i][j]+=Ke_gg_gaussian[i][j];6963 for( i=0; i<numdofm; i++) for(j=0;j<numdofs; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j];6973 for( i=0; i<numdofstotal; i++) for(j=0;j<numdofm; j++) Ke_gg[i][j]+=Ke_gg_gaussian[i][j]; 6974 for( i=0; i<numdofm; i++) for(j=0;j<numdofstotal; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j]; 6964 6975 } 6965 6976 for(i=0;i<numdofs;i++) for(j=0;j<numdofm;j++) Ke->values[(i+2*numdofm)*numdoftotal+j]+=Ke_gg[i][j]; … … 7111 7122 ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum); 7112 7123 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 7113 delete Ke1; 7114 delete Ke2; 7124 delete Ke1; delete Ke2; 7115 7125 7116 7126 /*Compute HO Matrix with P1 element type\n");*/ … … 7132 7142 } 7133 7143 7134 /*Transform Coordinate System*/ //Do not transform, already sone in the matrices7144 /*Transform Coordinate System*/ //Do not transform, already done in the matrices 7135 7145 //TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list); 7136 7146 … … 8116 8126 inputs->GetInputValue(&approximation,ApproximationEnum); 8117 8127 if(approximation!=SSAFSApproximationEnum) return NULL; 8118 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum); 8128 int vnumnodes = this->NumberofNodesVelocity(); 8129 int pnumnodes = this->NumberofNodesPressure(); 8130 8131 /*Prepare coordinate system list*/ 8132 int* cs_list = xNew<int>(vnumnodes+pnumnodes); 8133 for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 8134 for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum; 8135 ElementVector* pe=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum); 8119 8136 8120 8137 /*Retrieve all inputs and parameters*/ … … 8142 8159 8143 8160 for(i=0;i<NUMVERTICES;i++){ 8144 pe->values[i*NDOF 4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];8145 pe->values[i*NDOF 4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];8146 pe->values[i*NDOF 4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);8147 pe->values[ i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];8161 pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i]; 8162 pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 8163 pe->values[i*NDOF3+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]); 8164 pe->values[NDOF3*vnumnodes+i]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i]; 8148 8165 } 8149 8166 } 8150 8167 8151 8168 /*Transform coordinate system*/ 8152 TransformLoadVectorCoord(pe,nodes, NUMVERTICES,XYZEnum);8169 TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list); 8153 8170 8154 8171 /*Clean up and return*/ 8172 xDelete<int>(cs_list); 8155 8173 delete gauss; 8156 8174 return pe; -
issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
r15741 r15757 107 107 108 108 /*Build B: */ 109 for(i=0;i<NUMNODESP1b;i++){ 110 B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dbasismini[0][i]; 111 B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.; 112 B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.; 113 B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.; 114 B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dbasismini[1][i]; 115 B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.; 116 B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.5*dbasismini[1][i]; 117 B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.5*dbasismini[0][i]; 118 B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.; 119 B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = 0.; 120 B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = 0.; 121 B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.; 109 for(i=0;i<NUMNODESP1;i++){ 110 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+0] = dbasismini[0][i]; 111 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+1] = 0.; 112 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+2] = 0.; 113 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+0] = 0.; 114 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+1] = dbasismini[1][i]; 115 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+2] = 0.; 116 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+0] = 0.5*dbasismini[1][i]; 117 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+1] = 0.5*dbasismini[0][i]; 118 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+2] = 0.; 119 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+0] = 0.; 120 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+1] = 0.; 121 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*i+2] = 0.; 122 } 123 for(i=0;i<1;i++){ 124 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+0] = 0.; 125 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+1] = 0.; 126 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+2] = 0.; 127 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+0] = 0.; 128 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+1] = 0.; 129 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+2] = 0.; 130 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+0] = 0.; 131 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+1] = 0.; 132 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+2] = 0.; 133 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+0] = 0.; 134 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+1] = 0.; 135 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NDOF3*(NUMNODESP1+i)+2] = 0.; 122 136 } 123 137 124 138 for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function 125 B[(NDOF 4*NUMNODESP1+3)*0+NDOF4*i+3] = 0;126 B[(NDOF 4*NUMNODESP1+3)*1+NDOF4*i+3] = 0;127 B[(NDOF 4*NUMNODESP1+3)*2+NDOF4*i+3] = 0;128 B[(NDOF 4*NUMNODESP1+3)*3+NDOF4*i+3] = basis[i];139 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NUMNODESP1b*NDOF3+i] = 0; 140 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NUMNODESP1b*NDOF3+i] = 0; 141 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NUMNODESP1b*NDOF3+i] = 0; 142 B[(NDOF3*NUMNODESP1b+NUMNODESP1)*3+NUMNODESP1b*NDOF3+i] = basis[i]; 129 143 } 130 144 } … … 230 244 231 245 /*Build Bprime: */ 232 for(i=0;i<NUMNODESP1b;i++){ 233 Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = 2.*dbasismini[0][i]; 234 Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = dbasismini[1][i]; 235 Bprime[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.; 236 Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = dbasismini[0][i]; 237 Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = 2.*dbasismini[1][i]; 238 Bprime[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.; 239 Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = dbasismini[1][i]; 240 Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = dbasismini[0][i]; 241 Bprime[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = 0.; 246 for(i=0;i<NUMNODESP1;i++){ 247 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+0] = 2.*dbasismini[0][i]; 248 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+1] = dbasismini[1][i]; 249 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*i+2] = 0.; 250 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+0] = dbasismini[0][i]; 251 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+1] = 2.*dbasismini[1][i]; 252 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*i+2] = 0.; 253 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+0] = dbasismini[1][i]; 254 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+1] = dbasismini[0][i]; 255 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*i+2] = 0.; 256 } 257 258 for(i=0;i<1;i++){ //Add zeros for the bubble function 259 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+0] = 0.; 260 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+1] = 0.; 261 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NDOF3*(NUMNODESP1+i)+2] = 0.; 262 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+0] = 0.; 263 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+1] = 0.; 264 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NDOF3*(NUMNODESP1+i)+2] = 0.; 265 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+0] = 0.; 266 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+1] = 0.; 267 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NDOF3*(NUMNODESP1+i)+2] = 0.; 242 268 } 243 269 244 270 for(i=0;i<NUMNODESP1;i++){ //last column not for the bubble function 245 Bprime[(NDOF 4*NUMNODESP1+3)*0+NDOF4*i+3] = 0.;246 Bprime[(NDOF 4*NUMNODESP1+3)*1+NDOF4*i+3] = 0.;247 Bprime[(NDOF 4*NUMNODESP1+3)*2+NDOF4*i+3] = 0.;271 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*0+NUMNODESP1b*NDOF3+i] = 0.; 272 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*1+NUMNODESP1b*NDOF3+i] = 0.; 273 Bprime[(NDOF3*NUMNODESP1b+NUMNODESP1)*2+NUMNODESP1b*NDOF3+i] = 0.; 248 274 } 249 275
Note:
See TracChangeset
for help on using the changeset viewer.