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 XZHydrostatic_VelResid<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { #ifndef ALBANY_KOKKOS_UNDER_DEVELOPMENT for (int cell=0; cell < workset.numCells; ++cell) { for (int node=0; node < numNodes; ++node) { for (int level=0; level < numLevels; ++level) { for (int dim=0; dim < numDims; ++dim) { int qp = node; Residual(cell,node,level,dim) = ( keGrad(cell,qp,level,dim) + PhiGrad(cell,qp,level,dim) )*wBF(cell,node,qp) + ( pGrad (cell,qp,level,dim)/density(cell,qp,level) ) *wBF(cell,node,qp) + etadotdVelx(cell,qp,level,dim) *wBF(cell,node,qp) + uDot(cell,qp,level,dim) *wBF(cell,node,qp); for (int qp=0; qp < numQPs; ++qp) { Residual(cell,node,level,dim) += viscosity * DVelx(cell,qp,level,dim) * wGradBF(cell,node,qp,dim); } } } } } #else Kokkos::parallel_for(XZHydrostatic_VelResid_Policy(0,workset.numCells),*this); #endif }
void StokesRm<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) { Rm(cell,qp,i) = 0; Rm(cell,qp,i) += pGrad(cell,qp,i)+force(cell,qp,i); } } } }
KOKKOS_INLINE_FUNCTION void XZHydrostatic_VelResid<EvalT, Traits>:: operator() (const XZHydrostatic_VelResid_Tag& tag, const int& cell) const{ for (int node=0; node < numNodes; ++node) { for (int level=0; level < numLevels; ++level) { for (int dim=0; dim < numDims; ++dim) { int qp = node; Residual(cell,node,level,dim) = ( keGrad(cell,qp,level,dim) + PhiGrad(cell,qp,level,dim) )*wBF(cell,node,qp) + ( pGrad (cell,qp,level,dim)/density(cell,qp,level) ) *wBF(cell,node,qp) + etadotdVelx(cell,qp,level,dim) *wBF(cell,node,qp) + uDot(cell,qp,level,dim) *wBF(cell,node,qp); for (int qp=0; qp < numQPs; ++qp) { Residual(cell,node,level,dim) += viscosity * DVelx(cell,qp,level,dim) * wGradBF(cell,node,qp,dim); } } } } }
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); } } } } } } }