void NSRm<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { for (std::size_t i=0; i < numDims; ++i) { if (workset.transientTerms && enableTransient) Rm(cell,qp,i) = rho(cell,qp)*V_Dot(cell,qp,i); else Rm(cell,qp,i) = 0; if (!porousMedia) // Navier-Stokes Rm(cell,qp,i) += pGrad(cell,qp,i)+force(cell,qp,i); else // Porous Media Rm(cell,qp,i) += phi(cell,qp)*pGrad(cell,qp,i)+phi(cell,qp)*force(cell,qp,i); if (porousMedia) { //permeability and Forchheimer terms Rm(cell,qp,i) += -permTerm(cell,qp,i)+ForchTerm(cell,qp,i); } for (std::size_t j=0; j < numDims; ++j) { if (!porousMedia) // Navier-Stokes Rm(cell,qp,i) += rho(cell,qp)*V(cell,qp,j)*VGrad(cell,qp,i,j); else // Porous Media Rm(cell,qp,i) += rho(cell,qp)*V(cell,qp,j)*VGrad(cell,qp,i,j)/phi(cell,qp); } } } } }
void StokesContinuityResid<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { typedef Intrepid::FunctionSpaceTools FST; for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { divergence(cell,qp) = 0.0; for (std::size_t i=0; i < numDims; ++i) { divergence(cell,qp) += VGrad(cell,qp,i,i); } } } FST::integrate<ScalarT>(CResidual, divergence, wBF, Intrepid::COMP_CPP, false); // "false" overwrites contractDataFieldScalar<ScalarT>(CResidual, divergence, wBF,false); // "false" overwrites if (havePSPG) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < numNodes; ++node) { for (std::size_t qp=0; qp < numQPs; ++qp) { for (std::size_t j=0; j < numDims; ++j) { CResidual(cell,node) += TauM(cell,qp)*Rm(cell,qp,j)*wGradBF(cell,node,qp,j); } } } } } }
void NSMomentumResid<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < numNodes; ++node) { for (std::size_t i=0; i<numDims; i++) { MResidual(cell,node,i) = 0.0; for (std::size_t qp=0; qp < numQPs; ++qp) { MResidual(cell,node,i) += (Rm(cell, qp, i)-pGrad(cell,qp,i))*wBF(cell,node,qp) - P(cell,qp)*wGradBF(cell,node,qp,i); for (std::size_t j=0; j < numDims; ++j) { MResidual(cell,node,i) += mu(cell,qp)*(VGrad(cell,qp,i,j)+VGrad(cell,qp,j,i))*wGradBF(cell,node,qp,j); // mu(cell,qp)*VGrad(cell,qp,i,j)*wGradBF(cell,node,qp,j); } } } } } if (haveSUPG) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < numNodes; ++node) { for (std::size_t i=0; i<numDims; i++) { for (std::size_t qp=0; qp < numQPs; ++qp) { for (std::size_t j=0; j < numDims; ++j) { MResidual(cell,node,i) += rho(cell,qp)*TauM(cell,qp)*Rm(cell,qp,j)*V(cell,qp,j)*wGradBF(cell,node,qp,j); } } } } } } }
void Viscosity<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { if (visc_type == CONSTANT){ for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { mu(cell,qp) = 1.0; } } } else if (visc_type == GLENSLAW) { if (homotopyParam == 0.0) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { mu(cell,qp) = 1.0/2.0*pow(A, -1.0/n); } } } else { ScalarT ff = pow(10.0, -10.0*homotopyParam); for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { //evaluate non-linear viscosity, given by Glen's law, at quadrature points ScalarT epsilonEqp = 0.0; //used to define the viscosity in non-linear Stokes for (std::size_t k=0; k<numDims; k++) { for (std::size_t l=0; l<numDims; l++) { epsilonEqp += 1.0/8.0*(VGrad(cell,qp,k,l) + VGrad(cell,qp,l,k))*(VGrad(cell,qp,k,l) + VGrad(cell,qp,l,k)); } } epsilonEqp += ff; epsilonEqp = sqrt(epsilonEqp); mu(cell,qp) = 1.0/2.0*pow(A, -1.0/n)*pow(epsilonEqp, 1.0/n-1.0); //non-linear viscosity, given by Glen's law //end non-linear viscosity evaluation } } } } }
void StokesMomentumResid<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < numNodes; ++node) { for (std::size_t i=0; i<numDims; i++) { MResidual(cell,node,i) = 0.0; for (std::size_t qp=0; qp < numQPs; ++qp) { MResidual(cell,node,i) += force(cell,qp,i)*wBF(cell,node,qp) - P(cell,qp)*wGradBF(cell,node,qp,i); for (std::size_t j=0; j < numDims; ++j) { MResidual(cell,node,i) += muFELIX(cell,qp)*(VGrad(cell,qp,i,j)+VGrad(cell,qp,j,i))*wGradBF(cell,node,qp,j); // muFELIX(cell,qp)*VGrad(cell,qp,i,j)*wGradBF(cell,node,qp,j); } } } } } }