Changeset 25265
- Timestamp:
- 07/10/20 21:26:15 (5 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp ¶
r24335 r25265 62 62 /*Initialize Element vector and other vectors*/ 63 63 ElementMatrix* Ke = element->NewElementMatrix(); 64 IssmDouble* B = xNew<IssmDouble>(numnodes); 64 IssmDouble* basis = xNew<IssmDouble>(numnodes); 65 IssmDouble* dbasis = xNew<IssmDouble>(dim*numnodes); 65 66 66 67 /*Retrieve all inputs and parameters*/ … … 73 74 74 75 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 75 GetB(B,element,dim,xyz_list,gauss);76 D=gauss->weight*Jdet*dt;76 element->NodalFunctions(basis,gauss); 77 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 77 78 78 79 /*vertical diffusion*/ 79 TripleMultiply(B,1,numnodes,1, 80 &D,1,1,0, 81 B,1,numnodes,0, 82 &Ke->values[0],1); 80 D=gauss->weight*Jdet*dt; 81 for(int i=0;i<numnodes;i++){ 82 for(int j=0;j<numnodes;j++){ 83 Ke->values[i*numnodes+j] += D*dbasis[(dim-1)*numnodes+i]*dbasis[(dim-1)*numnodes+j]; 84 } 85 } 83 86 84 /*Next value */87 /*Next value (Transient)*/ 85 88 D=gauss->weight*Jdet; 86 element->NodalFunctions(B,gauss); 87 TripleMultiply(B,numnodes,1,0, 88 &D,1,1,0, 89 B,1,numnodes,0, 90 &Ke->values[0],1); 89 for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D*basis[j]*basis[i]; 91 90 } 92 91 93 92 /*Clean up and return*/ 94 93 xDelete<IssmDouble>(xyz_list); 95 xDelete<IssmDouble>(B); 94 xDelete<IssmDouble>(basis); 95 xDelete<IssmDouble>(dbasis); 96 96 delete gauss; 97 97 return Ke; … … 137 137 return pe; 138 138 }/*}}}*/ 139 void DepthAverageAnalysis::GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/140 /* Compute B matrix. B=[dh1/dz dh2/dz dh3/dz dh4/dz dh5/dz dh6/dz];141 where hi is the interpolation function for node i.*/142 143 /*Fetch number of nodes for this finite element*/144 int numnodes = element->GetNumberOfNodes();145 146 /*Get nodal functions derivatives*/147 IssmDouble* dbasis=xNew<IssmDouble>(dim*numnodes);148 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);149 150 /*Build B: */151 for(int i=0;i<numnodes;i++){152 B[i] = dbasis[(dim-1)*numnodes+i];153 }154 155 /*Clean-up*/156 xDelete<IssmDouble>(dbasis);157 }158 /*}}}*/159 139 void DepthAverageAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 160 140 _error_("not implemented yet"); -
TabularUnified issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h ¶
r24335 r25265 26 26 ElementMatrix* CreateKMatrix(Element* element); 27 27 ElementVector* CreatePVector(Element* element); 28 void GetB(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss);29 28 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 30 29 void GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index); -
TabularUnified issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp ¶
r25261 r25265 446 446 if(dt!=0.){ 447 447 D_scalar=gauss->weight*Jdet; 448 for(int i=0;i<numnodes;i++){ 449 for(int j=0;j<numnodes;j++){ 450 Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 451 } 452 } 448 for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 453 449 D_scalar=D_scalar*dt; 454 450 }
Note:
See TracChangeset
for help on using the changeset viewer.