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 NSForchheimerTerm<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) { normV(cell,qp) = 0.0; for (std::size_t i=0; i < numDims; ++i) { normV(cell,qp) += V(cell,qp,i)*V(cell,qp,i); } if (normV(cell,qp) > 0) normV(cell,qp) = std::sqrt(normV(cell,qp)); else normV(cell,qp) = 0.0; for (std::size_t i=0; i < numDims; ++i) { ForchTerm(cell,qp,i) = phi(cell,qp)*rho(cell,qp)*F(cell,qp)*normV(cell,qp)*V(cell,qp,i)/std::sqrt(K(cell,qp)); } } } }