Changeset 15714
- Timestamp:
- 08/05/13 16:29:35 (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
r15712 r15714 4803 4803 const int numdof=NDOF1*NUMVERTICES; 4804 4804 4805 int i; 4806 int* doflist=NULL; 4807 IssmDouble values[numdof]; 4808 IssmDouble enthalpy; 4809 GaussPenta *gauss=NULL; 4805 int* doflist=NULL; 4806 IssmDouble values[numdof]; 4807 IssmDouble enthalpy; 4808 GaussPenta *gauss=NULL; 4810 4809 4811 4810 /*Get dof list: */ … … 4814 4813 4815 4814 gauss=new GaussPenta(); 4816 for(i =0;i<NUMVERTICES;i++){4815 for(int i=0;i<NUMVERTICES;i++){ 4817 4816 /*Recover temperature*/ 4818 4817 gauss->GaussVertex(i); … … 5320 5319 int vnumnodes = this->NumberofNodesVelocity(); 5321 5320 int pnumnodes = this->NumberofNodesPressure(); 5322 int vnumdof = vnumnodes*NDOF3;5323 5321 5324 5322 /*Prepare coordinate system list*/ … … 5329 5327 /*Initialize Element matrix and vectors*/ 5330 5328 ElementVector* pe = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum); 5331 IssmDouble* vbasis = xNew<IssmDouble>(vnum dof);5329 IssmDouble* vbasis = xNew<IssmDouble>(vnumnodes); 5332 5330 5333 5331 /*Retrieve all inputs and parameters*/ … … 7795 7793 ElementMatrix* Penta::CreateKMatrixDiagnosticVertVolume(void){ 7796 7794 7797 /*Constants*/7798 const int numdof=NDOF1*NUMVERTICES;7799 7800 7795 /*Intermediaries */ 7801 7796 IssmDouble Jdet; … … 7898 7893 /*FUNCTION Penta::CreatePVectorCouplingSSAFSViscous {{{*/ 7899 7894 ElementVector* Penta::CreatePVectorCouplingSSAFSViscous(void){ 7900 7901 /*Constants*/7902 const int numdof=NUMVERTICES*NDOF4;7903 7895 7904 7896 /*Intermediaries */ … … 7960 7952 /*FUNCTION Penta::CreatePVectorCouplingSSAFSFriction{{{*/ 7961 7953 ElementVector* Penta::CreatePVectorCouplingSSAFSFriction(void){ 7962 7963 /*Constants*/7964 const int numdof=NUMVERTICES*NDOF4;7965 7954 7966 7955 /*Intermediaries*/ … … 8050 8039 ElementVector* Penta::CreatePVectorCouplingHOFSViscous(void){ 8051 8040 8052 /*Constants*/8053 const int numdof=NUMVERTICES*NDOF4;8054 8055 8041 /*Intermediaries */ 8056 8042 int i; … … 8111 8097 /*FUNCTION Penta::CreatePVectorCouplingHOFSFriction{{{*/ 8112 8098 ElementVector* Penta::CreatePVectorCouplingHOFSFriction(void){ 8113 8114 /*Constants*/8115 const int numdof=NUMVERTICES*NDOF4;8116 8099 8117 8100 /*Intermediaries*/ … … 8279 8262 /*Fetch number of nodes and dof for this finite element*/ 8280 8263 int numnodes = this->NumberofNodes(); _assert_(numnodes==6); 8281 int numdof = numnodes*NDOF2;8282 8264 8283 8265 /*Initialize Element vector*/ … … 8406 8388 /*Fetch number of nodes and dof for this finite element*/ 8407 8389 int numnodes = this->NumberofNodes(); 8408 int numdof = numnodes*NDOF2;8409 8390 8410 8391 /*Initialize vector*/ … … 8479 8460 /*Fetch number of nodes and dof for this finite element*/ 8480 8461 int numnodes = this->NumberofNodes(); 8481 int numdof = numnodes*NDOF2;8482 8462 8483 8463 /*Initialize Element vector and other vectors*/ … … 8586 8566 int vnumnodes = this->NumberofNodesVelocity(); 8587 8567 int pnumnodes = this->NumberofNodesPressure(); 8588 int vnumdof = vnumnodes*NDOF3;8589 8568 8590 8569 /*Prepare coordinate system list*/ … … 8595 8574 /*Initialize Element matrix and vectors*/ 8596 8575 ElementVector* pe = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum); 8597 IssmDouble* vbasis = xNew<IssmDouble>(vnum dof);8576 IssmDouble* vbasis = xNew<IssmDouble>(vnumnodes); 8598 8577 8599 8578 /*Retrieve all inputs and parameters*/ … … 8642 8621 /*FUNCTION Penta::PVectorGLSstabilization{{{*/ 8643 8622 void Penta::PVectorGLSstabilization(ElementVector* pe){ 8644 8645 /*Constants*/8646 const int numdof=NDOF4*NUMVERTICES;8647 8623 8648 8624 /*Intermediaries*/ … … 8753 8729 int vnumnodes = this->NumberofNodesVelocity(); 8754 8730 int pnumnodes = this->NumberofNodesPressure(); 8755 int vnumdof = vnumnodes*NDOF3;8756 8731 8757 8732 /*Prepare coordinate system list*/ … … 8762 8737 /*Initialize Element matrix and vectors*/ 8763 8738 ElementVector* pe = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum); 8764 IssmDouble* vbasis = xNew<IssmDouble>(vnum dof);8739 IssmDouble* vbasis = xNew<IssmDouble>(vnumnodes); 8765 8740 8766 8741 /*Retrieve all inputs and parameters*/ … … 8826 8801 int vnumnodes = this->NumberofNodesVelocity(); 8827 8802 int pnumnodes = this->NumberofNodesPressure(); 8828 int vnumdof = vnumnodes*NDOF3;8829 8803 8830 8804 /*Prepare coordinate system list*/ … … 8835 8809 /*Initialize Element matrix and vectors*/ 8836 8810 ElementVector* pe = new ElementVector(nodes,vnumnodes+pnumnodes,this->parameters,FSApproximationEnum); 8837 IssmDouble* vbasis = xNew<IssmDouble>(vnum dof);8811 IssmDouble* vbasis = xNew<IssmDouble>(vnumnodes); 8838 8812 8839 8813 /*Retrieve all inputs and parameters*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r15713 r15714 5004 5004 ElementVector* Tria::CreatePVectorAdjointHoriz(void){ 5005 5005 5006 /*Constants*/5007 const int numdof=NDOF2*NUMVERTICES;5008 5009 5006 /*Intermediaries */ 5010 int 5011 int 5012 int 5007 int i,resp; 5008 int *responses=NULL; 5009 int num_responses; 5013 5010 IssmDouble Jdet; 5014 5011 IssmDouble obs_velocity_mag,velocity_mag; … … 5016 5013 IssmDouble epsvel=2.220446049250313e-16; 5017 5014 IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/ 5018 IssmDouble scalex=0 ,scaley=0,scale=0,S=0;5015 IssmDouble scalex=0.,scaley=0.,scale=0.,S=0.; 5019 5016 IssmDouble vx,vy,vxobs,vyobs,weight; 5020 5017 IssmDouble xyz_list[NUMVERTICES][3]; 5021 IssmDouble basis[3]; 5022 GaussTria* gauss=NULL; 5018 5019 /*Fetch number of nodes and dof for this finite element*/ 5020 int numnodes = this->NumberofNodes(); 5021 int numdof = numnodes*NDOF2; 5023 5022 5024 5023 /*Initialize Element vector*/ 5025 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters); 5024 ElementVector* pe = new ElementVector(nodes,numnodes,this->parameters); 5025 IssmDouble* basis = xNew<IssmDouble>(numnodes); 5026 5026 5027 5027 /*Retrieve all inputs and parameters*/ … … 5043 5043 5044 5044 /* Start looping on the number of gaussian points: */ 5045 gauss=new GaussTria(4);5045 GaussTria* gauss=new GaussTria(4); 5046 5046 for(int ig=gauss->begin();ig<gauss->end();ig++){ 5047 5047 … … 5074 5074 * du obs 5075 5075 */ 5076 for (i=0;i<NUMVERTICES;i++){5076 for(i=0;i<numnodes;i++){ 5077 5077 dux=vxobs-vx; 5078 5078 duy=vyobs-vy; … … 5093 5093 * obs 5094 5094 */ 5095 for (i=0;i<NUMVERTICES;i++){5095 for(i=0;i<numnodes;i++){ 5096 5096 scalex=pow(meanvel/(vxobs+epsvel),2); if(vxobs==0)scalex=0; 5097 5097 scaley=pow(meanvel/(vyobs+epsvel),2); if(vyobs==0)scaley=0; … … 5114 5114 * 5115 5115 */ 5116 for (i=0;i<NUMVERTICES;i++){5116 for(i=0;i<numnodes;i++){ 5117 5117 velocity_mag =sqrt(pow(vx, 2)+pow(vy, 2))+epsvel; 5118 5118 obs_velocity_mag=sqrt(pow(vxobs,2)+pow(vyobs,2))+epsvel; … … 5134 5134 * du S 2 sqrt(...) obs 5135 5135 */ 5136 for (i=0;i<NUMVERTICES;i++){5136 for(i=0;i<numnodes;i++){ 5137 5137 scale=1./(S*2*sqrt(pow(vx-vxobs,2)+pow(vy-vyobs,2))+epsvel); 5138 5138 dux=scale*(vxobs-vx); … … 5152 5152 * du |u| + eps |u| u + eps 5153 5153 */ 5154 for (i=0;i<NUMVERTICES;i++){5154 for(i=0;i<numnodes;i++){ 5155 5155 dux = - meanvel*meanvel * log((fabs(vx)+epsvel)/(fabs(vxobs)+epsvel)) / (vx+epsvel); 5156 5156 duy = - meanvel*meanvel * log((fabs(vy)+epsvel)/(fabs(vyobs)+epsvel)) / (vy+epsvel); … … 5181 5181 5182 5182 /*Clean up and return*/ 5183 xDelete<IssmDouble>(basis); 5184 xDelete<int>(responses); 5183 5185 delete gauss; 5184 xDelete<int>(responses);5185 5186 return pe; 5186 5187 } … … 6494 6495 IssmDouble xyz_list[NUMVERTICES][3]; 6495 6496 6496 /*Fetch number of nodes and doffor this finite element*/6497 /*Fetch number of nodes for this finite element*/ 6497 6498 int numnodes = this->NumberofNodes(); 6498 int numdof = numnodes*NDOF1;6499 6499 6500 6500 /*Initialize Element matrix and vectors*/ 6501 6501 ElementMatrix* Ke = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum); 6502 6502 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6503 IssmDouble* B = xNew<IssmDouble>(2*num dof);6504 IssmDouble* Bprime = xNew<IssmDouble>(2*num dof);6503 IssmDouble* B = xNew<IssmDouble>(2*numnodes); 6504 IssmDouble* Bprime = xNew<IssmDouble>(2*numnodes); 6505 6505 IssmDouble D[2][2]; 6506 6506 … … 6538 6538 D_scalar=gauss->weight*Jdettria; 6539 6539 6540 TripleMultiply(basis,1,num dof,1,6540 TripleMultiply(basis,1,numnodes,1, 6541 6541 &D_scalar,1,1,0, 6542 basis,1,num dof,0,6542 basis,1,numnodes,0, 6543 6543 &Ke->values[0],1); 6544 6544 … … 6554 6554 D[1][1]=D_scalar*dvydy; 6555 6555 D[1][0]=0.; 6556 TripleMultiply(B,2,num dof,1,6556 TripleMultiply(B,2,numnodes,1, 6557 6557 &D[0][0],2,2,0, 6558 B,2,num dof,0,6558 B,2,numnodes,0, 6559 6559 &Ke->values[0],1); 6560 6560 6561 6561 D[0][0]=D_scalar*vx; 6562 6562 D[1][1]=D_scalar*vy; 6563 TripleMultiply(B,2,num dof,1,6563 TripleMultiply(B,2,numnodes,1, 6564 6564 &D[0][0],2,2,0, 6565 Bprime,2,num dof,0,6565 Bprime,2,numnodes,0, 6566 6566 &Ke->values[0],1); 6567 6567 … … 6588 6588 D[0][1]=D_scalar*D[0][1]; 6589 6589 D[1][1]=D_scalar*D[1][1]; 6590 TripleMultiply(Bprime,2,num dof,1,6590 TripleMultiply(Bprime,2,numnodes,1, 6591 6591 &D[0][0],2,2,0, 6592 Bprime,2,num dof,0,6592 Bprime,2,numnodes,0, 6593 6593 &Ke->values[0],1); 6594 6594 } … … 6607 6607 6608 6608 /*Constants*/ 6609 const int num dof=NDOF1*NUMVERTICES;6609 const int numnodes=NUMVERTICES; 6610 6610 6611 6611 /*Intermediaries */ … … 6653 6653 DL_scalar=gauss->weight*Jdettria; 6654 6654 6655 TripleMultiply(&basis[0],1,num dof,1,6655 TripleMultiply(&basis[0],1,numnodes,1, 6656 6656 &DL_scalar,1,1,0, 6657 &basis[0],1,num dof,0,6657 &basis[0],1,numnodes,0, 6658 6658 &Ke->values[0],1); 6659 6659 … … 6667 6667 DLprime[1][1]=DL_scalar*vy; 6668 6668 6669 TripleMultiply( &B[0][0],2,num dof,1,6669 TripleMultiply( &B[0][0],2,numnodes,1, 6670 6670 &DLprime[0][0],2,2,0, 6671 &Bprime[0][0],2,num dof,0,6671 &Bprime[0][0],2,numnodes,0, 6672 6672 &Ke->values[0],1); 6673 6673 } … … 6701 6701 /*Fetch number of nodes and dof for this finite element*/ 6702 6702 int numnodes = this->NumberofNodes(); 6703 int numdof = numnodes*NDOF1;6704 6703 6705 6704 /*Initialize Element vector and other vectors*/ … … 6733 6732 basal_melting_correction_g=0.; 6734 6733 6735 for(int i=0;i<num dof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*basis[i];6734 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*basis[i]; 6736 6735 } 6737 6736 … … 6746 6745 6747 6746 /*Constants*/ 6748 const int num dof=NDOF1*NUMVERTICES;6747 const int numnodes=NUMVERTICES; 6749 6748 6750 6749 /*Intermediaries */ … … 6778 6777 thickness_input->GetInputValue(&thickness_g,gauss); 6779 6778 6780 for(int i=0;i<num dof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*basis[i];6779 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*basis[i]; 6781 6780 } 6782 6781 … … 6957 6956 /*Fetch number of nodes and dof for this finite element*/ 6958 6957 int numnodes = this->NumberofNodes(); 6959 int numdof = numnodes*NDOF1;6960 6958 6961 6959 /*Initialize Element matrix and vectors*/ 6962 6960 ElementMatrix* Ke = new ElementMatrix(nodes,numnodes,this->parameters,NoneApproximationEnum); 6963 6961 IssmDouble* basis = xNew<IssmDouble>(numnodes); 6964 IssmDouble* B = xNew<IssmDouble>(2*num dof);6965 IssmDouble* Bprime = xNew<IssmDouble>(2*num dof);6962 IssmDouble* B = xNew<IssmDouble>(2*numnodes); 6963 IssmDouble* Bprime = xNew<IssmDouble>(2*numnodes); 6966 6964 IssmDouble D[2][2]; 6967 6965 … … 7005 7003 D[1][1]=D_scalar*dvydy; 7006 7004 D[1][1]=0.; 7007 TripleMultiply(B,2,num dof,1,7005 TripleMultiply(B,2,numnodes,1, 7008 7006 &D[0][0],2,2,0, 7009 B,2,num dof,0,7007 B,2,numnodes,0, 7010 7008 &Ke->values[0],1); 7011 7009 7012 7010 D[0][0]=D_scalar*vx; 7013 7011 D[1][1]=D_scalar*vy; 7014 TripleMultiply(B,2,num dof,1,7012 TripleMultiply(B,2,numnodes,1, 7015 7013 &D[0][0],2,2,0, 7016 Bprime,2,num dof,0,7014 Bprime,2,numnodes,0, 7017 7015 &Ke->values[0],1); 7018 7016 … … 7039 7037 D[0][1]=D_scalar*D[0][1]; 7040 7038 D[1][1]=D_scalar*D[1][1]; 7041 TripleMultiply(Bprime,2,num dof,1,7039 TripleMultiply(Bprime,2,numnodes,1, 7042 7040 &D[0][0],2,2,0, 7043 Bprime,2,num dof,0,7041 Bprime,2,numnodes,0, 7044 7042 &Ke->values[0],1); 7045 7043 } … … 7058 7056 7059 7057 /*Constants*/ 7060 const int num dof=NDOF1*NUMVERTICES;7058 const int numnodes=NUMVERTICES; 7061 7059 7062 7060 /*Intermediaries*/ … … 7097 7095 DL[1][1]=DL_scalar*vy; 7098 7096 7099 TripleMultiply( &B[0][0],2,num dof,1,7097 TripleMultiply( &B[0][0],2,numnodes,1, 7100 7098 &DL[0][0],2,2,0, 7101 &Bprime[0][0],2,num dof,0,7099 &Bprime[0][0],2,numnodes,0, 7102 7100 &Ke->values[0],1); 7103 7101 } … … 7131 7129 /*Fetch number of nodes and dof for this finite element*/ 7132 7130 int numnodes = this->NumberofNodes(); 7133 int numdof = numnodes*NDOF1;7134 7131 7135 7132 /*Initialize Element vector and other vectors*/ … … 7156 7153 GetNodalFunctions(basis,gauss); 7157 7154 7158 for(int i=0;i<num dof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];7155 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i]; 7159 7156 } 7160 7157 … … 7169 7166 7170 7167 /*Constants*/ 7171 const int num dof=NDOF1*NUMVERTICES;7168 const int numnodes=NUMVERTICES; 7172 7169 7173 7170 /*Intermediaries */ … … 7200 7197 GetNodalFunctions(&basis[0],gauss); 7201 7198 7202 for(i=0;i<num dof;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i];7199 for(i=0;i<numnodes;i++) pe->values[i]+=Jdettria*gauss->weight*(surface_mass_balance_g-basal_melting_g-dhdt_g)*basis[i]; 7203 7200 } 7204 7201
Note:
See TracChangeset
for help on using the changeset viewer.