    fvVectorMatrix UEqn
    (
        fvm::ddt(alphac, rho, U)
      + fvm::div(alphacPhi, U)
      - fvm::laplacian(alphac*turbulence->muEff(),U)
      - fvc::div(alphac*turbulence->muEff()*dev2(fvc::grad(U)().T()))
      - fvm::Sp(fvc::ddt(alphac,rho) + fvc::div(alphacPhi), U)
     ==
      cloudSU
      + fvOptions(alphac,rho, U)
    );

    UEqn.relax();

    volScalarField rAU(1.0/UEqn.A());
    surfaceScalarField rAUf("rAUf", fvc::interpolate(rAU));

    surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rho*rAU));

    surfaceScalarField phicForces
    (
        (fvc::interpolate(rAU*cloudVolSUSu) & mesh.Sf())
        + alphacf*rhorAUf*(g & mesh.Sf())
    );

    fvOptions.constrain(UEqn);

    if (pimple.momentumPredictor())
    {
        solve
        (
            UEqn
         ==
            fvc::reconstruct
            (
                phicForces/rAUf
            )
          - fvc::grad(p)
        );

        fvOptions.correct(U);
        K = 0.5*magSqr(U);
    }
