Changeset 15744
- Timestamp:
- 08/07/13 15:17:22 (12 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r15741 r15744 401 401 402 402 if(Ke){ 403 /*Condense if requested*/ 404 if(this->element_type==MINIcondensedEnum){ 405 int indices[3]={18,19,20}; 406 Ke->StaticCondensation(3,&indices[0]); 407 } 408 else if(this->element_type==P1bubblecondensedEnum){ 409 int size = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 410 int offset = 0; 411 for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 412 int* indices=xNew<int>(size); 413 for(int i=0;i<size;i++) indices[i] = offset+i; 414 Ke->StaticCondensation(size,indices); 415 xDelete<int>(indices); 403 int approximation; 404 inputs->GetInputValue(&approximation,ApproximationEnum); 405 if(approximation==HOFSApproximationEnum){ 406 //Do nothing condensatino already done for Stokes part 407 } 408 else{ 409 /*Condense if requested*/ 410 if(this->element_type==MINIcondensedEnum){ 411 int indices[3]={18,19,20}; 412 Ke->StaticCondensation(3,&indices[0]); 413 } 414 else if(this->element_type==P1bubblecondensedEnum){ 415 int size = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 416 int offset = 0; 417 for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 418 int* indices=xNew<int>(size); 419 for(int i=0;i<size;i++) indices[i] = offset+i; 420 Ke->StaticCondensation(size,indices); 421 xDelete<int>(indices); 422 } 416 423 } 417 424 … … 565 572 /*StaticCondensation if requested*/ 566 573 if(this->element_type==MINIcondensedEnum){ 567 int indices[3]={18,19,20}; 568 569 this->element_type=MINIEnum; 570 ElementMatrix* Ke = CreateKMatrixDiagnosticFS(); 571 this->element_type=MINIcondensedEnum; 572 573 pe->StaticCondensation(Ke,3,&indices[0]); 574 delete Ke; 574 int approximation; 575 inputs->GetInputValue(&approximation,ApproximationEnum); 576 if(approximation==HOFSApproximationEnum){ 577 //Do nothing, condensation already done in PVectorCoupling 578 } 579 else{ 580 int indices[3]={18,19,20}; 581 582 this->element_type=MINIEnum; 583 ElementMatrix* Ke = CreateKMatrixDiagnosticFS(); 584 this->element_type=MINIcondensedEnum; 585 586 pe->StaticCondensation(Ke,3,&indices[0]); 587 delete Ke; 588 } 589 575 590 } 576 591 else if(this->element_type==P1bubblecondensedEnum){ … … 6624 6639 int pnumnodes = this->NumberofNodesPressure(); 6625 6640 6626 De=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FS ApproximationEnum);6641 De=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum); 6627 6642 6628 6643 for(int i=0;i<vnumnodes;i++){ … … 7068 7083 7069 7084 /*Constants*/ 7070 const int numnodes = 2 *NUMVERTICES;7071 const int numdofp = NDOF2 *NUMVERTICES;7072 const int numdofs = NDOF4 *NUMVERTICES;7073 const int numdoftotal = (NDOF2+NDOF4) *NUMVERTICES;7085 const int numnodes = 2 *NUMVERTICES; 7086 const int numdofp = NDOF2 *NUMVERTICES; 7087 const int numdofs = NDOF4 * 6 + NDOF3; 7088 const int numdoftotal = (NDOF2+NDOF4) *NUMVERTICES + NDOF3; 7074 7089 7075 7090 /*Intermediaries*/ 7076 Node *node_list[numnodes]; 7077 int cs_list[numnodes]; 7078 int i,j; 7079 int init; 7080 7081 /*Prepare node list*/ 7082 for(i=0;i<NUMVERTICES;i++){ 7083 node_list[i+0*NUMVERTICES] = this->nodes[i]; 7084 node_list[i+1*NUMVERTICES] = this->nodes[i]; 7085 cs_list[i+0*NUMVERTICES] = XYEnum; 7086 cs_list[i+1*NUMVERTICES] = XYZEnum; 7087 } 7091 int i,j,init; 7088 7092 7089 7093 /*Some parameters needed*/ … … 7092 7096 /*compute all stiffness matrices for this element*/ 7093 7097 ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 7094 ElementMatrix* Ke2=new ElementMatrix(this->nodes, NUMVERTICES,this->parameters,FSvelocityEnum);7098 ElementMatrix* Ke2=new ElementMatrix(this->nodes,2*NUMVERTICES+1,this->parameters,FSvelocityEnum); 7095 7099 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 7096 7100 delete Ke1; 7097 7101 delete Ke2; 7098 7102 7103 /*Compute HO Matrix with P1 element type\n");*/ 7099 7104 this->element_type=P1Enum; 7100 Ke1=CreateKMatrixDiagnosticHO(); 7105 Ke1=CreateKMatrixDiagnosticHO(); 7101 7106 this->element_type=init; 7107 /*Compute FS Matrix and condense it \n");*/ 7102 7108 Ke2=CreateKMatrixDiagnosticFS(); 7109 int indices[3]={18,19,20}; 7110 Ke2->StaticCondensation(3,&indices[0]); 7103 7111 7104 7112 for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){ 7105 Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF 4*j+0];7106 Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+1]+=Ke2->values[i*numdofs+NDOF 4*j+1];7113 Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+0]+=Ke2->values[i*numdofs+NDOF3*j+0]; 7114 Ke->values[(i+numdofp)*numdoftotal+NDOF2*j+1]+=Ke2->values[i*numdofs+NDOF3*j+1]; 7107 7115 } 7108 7116 for(i=0;i<numdofp;i++) for(j=0;j<NUMVERTICES;j++){ 7109 Ke->values[i*numdoftotal+numdofp+NDOF 4*j+0]+=Ke1->values[i*numdofp+NDOF2*j+0];7110 Ke->values[i*numdoftotal+numdofp+NDOF 4*j+1]+=Ke1->values[i*numdofp+NDOF2*j+1];7111 } 7112 7113 /*Transform Coordinate System*/ 7114 TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);7117 Ke->values[i*numdoftotal+numdofp+NDOF3*j+0]+=Ke1->values[i*numdofp+NDOF2*j+0]; 7118 Ke->values[i*numdoftotal+numdofp+NDOF3*j+1]+=Ke1->values[i*numdofp+NDOF2*j+1]; 7119 } 7120 7121 /*Transform Coordinate System*/ //Do not transform, already sone in the matrices 7122 //TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list); 7115 7123 7116 7124 /*clean-up and return*/ … … 7119 7127 return Ke; 7120 7128 } 7121 / *}}}*/7129 //*}}}*/ 7122 7130 /*FUNCTION Penta::CreateKMatrixDiagnosticHoriz {{{*/ 7123 7131 ElementMatrix* Penta::CreateKMatrixDiagnosticHoriz(void){ … … 7657 7665 7658 7666 /*compute all stiffness matrices for this element*/ 7667 ElementMatrix* Ke1=CreateKMatrixDiagnosticFS(); 7659 7668 int init = this->element_type; 7660 this->element_type=P1Enum; 7661 ElementMatrix* Ke 1=CreateKMatrixDiagnosticHO();7669 this->element_type=P1Enum; //P1 needed for HO 7670 ElementMatrix* Ke2=CreateKMatrixDiagnosticHO(); 7662 7671 this->element_type=init; 7663 ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();7664 7672 ElementMatrix* Ke3=CreateKMatrixCouplingHOFS(); 7665 7673 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); … … 8230 8238 inputs->GetInputValue(&approximation,ApproximationEnum); 8231 8239 if(approximation!=HOFSApproximationEnum) return NULL; 8232 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSvelocityEnum); 8240 int vnumnodes = this->NumberofNodesVelocity(); 8241 int pnumnodes = this->NumberofNodesPressure(); 8242 8243 /*Prepare coordinate system list*/ 8244 int* cs_list = xNew<int>(vnumnodes+pnumnodes); 8245 for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 8246 for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum; 8247 8248 /*Initialize Element matrix and vectors*/ 8249 ElementVector* pe=new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum); 8233 8250 8234 8251 /*Retrieve all inputs and parameters*/ 8235 8252 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 8236 8253 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 8237 Input* vx_input=inputs->GetInput(VxEnum); 8238 Input* vy_input=inputs->GetInput(VyEnum); 8239 Input* vz_input=inputs->GetInput(VzEnum); 8254 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 8255 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 8256 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 8240 8257 Input* vzHO_input=inputs->GetInput(VzHOEnum); _assert_(vzHO_input); 8241 8258 … … 8256 8273 8257 8274 for(i=0;i<NUMVERTICES;i++){ 8258 pe->values[i*NDOF 4+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i];8259 pe->values[i*NDOF 4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];8260 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]);8261 pe->values[ i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];8275 pe->values[i*NDOF3+0]+=-Jdet*gauss->weight*viscosity*dw[0]*dbasis[2][i]; 8276 pe->values[i*NDOF3+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 8277 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]); 8278 pe->values[NDOF3*vnumnodes+i]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i]; 8262 8279 } 8263 8280 } 8264 8281 8265 8282 /*Transform coordinate system*/ 8266 TransformLoadVectorCoord(pe,nodes, NUMVERTICES,XYZEnum);8283 TransformLoadVectorCoord(pe,nodes,vnumnodes+pnumnodes,cs_list); 8267 8284 8268 8285 /*Clean up and return*/ 8286 xDelete<int>(cs_list); 8269 8287 delete gauss; 8270 8288 return pe; … … 8407 8425 8408 8426 /*compute all load vectors for this element*/ 8427 int init = this->element_type; 8428 this->element_type=P1Enum; 8409 8429 ElementVector* pe1=CreatePVectorDiagnosticHO(); 8430 this->element_type=init; 8410 8431 ElementVector* pe2=CreatePVectorDiagnosticFS(); 8432 int indices[3]={18,19,20}; 8433 this->element_type=MINIcondensedEnum; 8434 ElementMatrix* Ke = CreateKMatrixDiagnosticFS(); 8435 this->element_type=init; 8436 pe2->StaticCondensation(Ke,3,&indices[0]); 8437 delete Ke; 8411 8438 ElementVector* pe3=CreatePVectorCouplingHOFS(); 8412 ElementVector* pe =new ElementVector(pe1,pe2 ,pe3);8439 ElementVector* pe =new ElementVector(pe1,pe2); 8413 8440 8414 8441 /*clean-up and return*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
r15696 r15744 100 100 for(int i=0;i<iomodel->numberofelements;i++){ 101 101 if(iomodel->my_elements[i]){ 102 nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum)); 102 Node* node = new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,0,iomodel,DiagnosticHorizAnalysisEnum,FSvelocityEnum); 103 node->Deactivate(); 104 nodes->AddObject(node); 103 105 } 104 106 }
Note:
See TracChangeset
for help on using the changeset viewer.