void EpsilonL1L2<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) { epsilonXX(cell,qp) = Ugrad(cell,qp,0,0); epsilonYY(cell,qp) = Ugrad(cell,qp,1,1); epsilonXY(cell,qp) = 0.5*(Ugrad(cell,qp,0,1) + Ugrad(cell,qp,1,0)); epsilonB(cell,qp) = epsilonXX(cell,qp)*epsilonXX(cell,qp) + epsilonYY(cell,qp)*epsilonYY(cell,qp) + epsilonXX(cell,qp)*epsilonYY(cell,qp) + epsilonXY(cell,qp)*epsilonXY(cell,qp); } } }
void ViscosityL1L2<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 (n == 1.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/A; } } } else if (n == 3.0) { if (surf_type == BOX) { 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) = pow(A, -1.0/3.0); } } } 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) { mu(cell,qp) = epsilonB(cell,qp) + ff; mu(cell,qp) = sqrt(mu(cell,qp)); mu(cell,qp) = pow(A, -1.0/3.0)*pow(mu(cell,qp), -2.0/3.0); } } } } else if (surf_type == TESTA) { //ISMIP-HOM Test A PHX::MDField<ScalarT,Cell,QuadPoint> q; PHX::MDField<ScalarT,Cell,QuadPoint> w; PHX::MDField<ScalarT,Cell,QuadPoint> tauPar2; PHX::MDField<ScalarT,Cell,QuadPoint> Int; for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t qp=0; qp < numQPs; ++qp) { MeshScalarT x = coordVec(cell,qp,0); MeshScalarT y = coordVec(cell,qp,1); MeshScalarT s = -x*tan(alpha); MeshScalarT b = s - 1.0 + 0.5*sin(2.0*pi*x/L)*sin(2.0*pi*y/L); MeshScalarT dsdx = -tan(alpha); MeshScalarT dsdy = 0.0; Int(cell,qp) = 0.0; q(cell,qp) = 1.0/(2.0*A)*sqrt(epsilonB(cell,qp)); //TO DO: need to put in continuation here for (std::size_t qpZ = 0; qp<numQPsZ; ++qpZ) { //apply Trapezoidal rule to compute integral in z MeshScalarT zQP = qpZ*(s-b)/(2.0*numQPsZ); MeshScalarT tauPerp2 = rho*rho*g*g*(s-zQP)*(s-zQP)*(dsdx*dsdx + dsdy*dsdy); MeshScalarT p = 1.0/3.0*tauPerp2; w(cell,qp) = pow(q(cell,qp) + sqrt(q(cell,qp)*q(cell,qp) + p*p*p), 1.0/3.0); tauPar2(cell,qp) = (w(cell,qp)-p/(3.0*w(cell,qp)))*(w(cell,qp)-p/(3.0*w(cell,qp))); Int(cell,qp) += 1.0/(tauPerp2 + tauPar2(cell,qp)); } mu(cell,qp) = 1.0/A*Int(cell,qp); } } } } } }