Index: ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp =================================================================== --- ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp (revision 24917) +++ ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp (revision 24918) @@ -590,7 +590,6 @@ ElementMatrix* Ke = element->NewElementMatrix(); IssmDouble* basis = xNew(numnodes); IssmDouble* dbasis = xNew(3*numnodes); - IssmDouble* Bprime = xNew(3*numnodes); IssmDouble K[3][3]; /*Retrieve all inputs and parameters*/ @@ -666,11 +665,15 @@ K[2][0]=h/(2.*vel)*fabs(vz*vx); K[2][1]=h/(2.*vel)*fabs(vz*vy); K[2][2]=h/(2.*vel)*fabs(vz*vz); for(int i=0;i<3;i++) for(int j=0;j<3;j++) K[i][j] = D_scalar*K[i][j]; - GetBAdvecprime(Bprime,element,xyz_list,gauss); - TripleMultiply(Bprime,3,numnodes,1, - &K[0][0],3,3,0, - Bprime,3,numnodes,0, - &Ke->values[0],1); + for(int i=0;ivalues[i*numnodes+j] += ( + dbasis[0*numnodes+i] *(K[0][0]*dbasis[0*numnodes+j] + K[0][1]*dbasis[1*numnodes+j]+ K[0][2]*dbasis[2*numnodes+j]) + + dbasis[1*numnodes+i] *(K[1][0]*dbasis[0*numnodes+j] + K[1][1]*dbasis[1*numnodes+j]+ K[1][2]*dbasis[2*numnodes+j]) + + dbasis[2*numnodes+i] *(K[2][0]*dbasis[0*numnodes+j] + K[2][1]*dbasis[1*numnodes+j]+ K[2][2]*dbasis[2*numnodes+j]) + ); + } + } } /*SUPG*/ else if(stabilization==2){ @@ -714,7 +717,6 @@ xDelete(xyz_list); xDelete(basis); xDelete(dbasis); - xDelete(Bprime); delete gauss; return Ke; }/*}}}*/ @@ -757,11 +759,7 @@ D=gauss->weight*Jdet*rho_water*mixed_layer_capacity*thermal_exchange_vel/(heatcapacity*rho_ice); if(reCast(dt)) D=dt*D; - TripleMultiply(basis,numnodes,1,0, - &D,1,1,0, - basis,1,numnodes,0, - &Ke->values[0],1); - + for(int i=0;ivalues[i*numnodes+j] += D*basis[i]*basis[j]; } /*Clean up and return*/