if(turbulence)
{
    if (mesh.moving())
    {
        y.correct();
    }

    dimensionedScalar k0("k0", k.dimensions(), SMALL);
    dimensionedScalar epsilon0("epsilon0", epsilon.dimensions(), SMALL);

    volScalarField divU = fvc::div(phi/fvc::interpolate(rho));

    tmp<volTensorField> tgradU = fvc::grad(U);
    volScalarField G = 2*mut*(tgradU() && dev(symm(tgradU())));
    tgradU.clear();

    volScalarField Gcoef =
        alphak*Cmu*k*(g & fvc::grad(rho))/(epsilon + epsilon0);

#   include "wallFunctions.H"

    // Dissipation equation
    fvScalarMatrix epsEqn
    (
        fvm::ddt(rho, epsilon)
      + fvm::div(phi, epsilon)
      - fvm::laplacian
        (
            alphaEps*mut + mul, epsilon, 
            "laplacian(DepsilonEff,epsilon)"
        )
     ==
        C1*G*epsilon/k
      - fvm::SuSp(C1*(1.0 - C3)*Gcoef + (2.0/3.0*C1)*rho*divU, epsilon)
      - fvm::Sp(C2*rho*epsilon/k, epsilon)
    );

#   include "wallDissipation.H"

    epsEqn.relax();
    epsEqn.solve();

    bound(epsilon, epsilon0);


    // Turbulent kinetic energy equation

    solve
    (
        fvm::ddt(rho, k)
      + fvm::div(phi, k)
      - fvm::laplacian(alphak*mut + mul, k, "laplacian(DkEff,k)")
     ==
        G
      - fvm::SuSp(Gcoef + 2.0/3.0*rho*divU, k)
      - fvm::Sp(rho*epsilon/k, k)
    );

    bound(k, k0);


    //- Re-calculate viscosity
    mut = rho*Cmu*sqr(k)/(epsilon + epsilon0);

#   include "wallViscosity.H"
}

mu = mut + mul;
