pEqn.H 1.24 KB
Newer Older
shunbo's avatar
shunbo committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
    surfaceScalarField faceMask(localMin<scalar>(mesh).interpolate(cellMask));

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

    volVectorField HbyA("HbyA", U);
    HbyA = constrainHbyA(cellMask*rAU*UEqn.H(), U, p);

    //mesh.interpolate(HbyA);
    if (massFluxInterpolation)
    {
        #include "interpolatedFaces.H"
    }

    tUEqn.clear();

    surfaceScalarField phiHbyA("phiHbyA", fvc::flux(HbyA));

    adjustPhi(phiHbyA, U, p);

    if (adjustFringe)
    {
        oversetAdjustPhi(phiHbyA, U);
    }

    // Non-orthogonal pressure corrector loop
    while (simple.correctNonOrthogonal())
    {
        fvScalarMatrix pEqn
        (
            fvm::laplacian(rAUf, p) == fvc::div(phiHbyA)
        );

        pEqn.setReference(pRefCell, pRefValue);

        pEqn.solve();

        if (simple.finalNonOrthogonalIter())
        {
            phi = phiHbyA - pEqn.flux();
        }
    }

    #include "continuityErrs.H"

    // Explicitly relax pressure for momentum corrector
    p.relax();

    // Momentum corrector
    volVectorField gradP(fvc::grad(p));
    //mesh.interpolate(gradP);

    U = HbyA - rAU*cellMask*gradP;
    U.correctBoundaryConditions();
    fvOptions.correct(U);
}