/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2312                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

libs            (overset fvMotionSolvers);

DebugSwitches
{
    overset                 0;
    dynamicOversetFvMesh    0;
    cellVolumeWeight        0;
}

application     overRhoPimpleDyMFoam;

startFrom       latestTime;

//startTime       0.02;

stopAt          endTime;

endTime         0.02;

deltaT          1e-4;

writeControl    adjustable;

writeInterval   0.0001;

purgeWrite      0;

writeFormat     ascii;

writePrecision  6;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable true;

adjustTimeStep  no;

maxCo          0.95;

maxDeltaT 1e-1;
minDeltaT 5e-7;

functions
{
    probes
    {
        type            probes;
        libs            (sampling);

        // Name of the directory for probe data
        name            probes;

        // Write at same frequency as fields
        writeControl    timeStep;
        writeInterval   1;

        // Fields to be probed
        fields          (p U);

        // Optional: interpolation scheme to use (default is cell)
        interpolationScheme cell;

        probeLocations
        (
            (0.015 0.005 0.005)
        );
    }

    mass
    {
        type            volFieldValue;
        libs            (fieldFunctionObjects);

        writeControl    timeStep;
        writeInterval   1;
        writeFields     false;
        log             true;

        operation       volIntegrate;
        // postOperation   mag;

        fields
        (
            rho
        );
    }

    rhoVol
    {
        libs            (utilityFunctionObjects);
        type            coded;
        name            rhoVolume;
        writeControl    timeStep;
        writeInterval   1;

        codeWrite
        #{
            const auto& rho = mesh().lookupObject<volScalarField>("rho");

            Info<< "rho volume = " << rho.weightedAverage(mesh().Vsc()) << endl;
        #};
    }
    massBalance
    {
        type            flowRatePatch;
        libs            ("libfieldFunctionObjects.so");
        patches         (piston topWall);
        writeControl    timeStep;
        writeFields     false;
    }


    energyBalance
    {
        type            volFieldValue;
        libs            ("libfieldFunctionObjects.so");
        operation       volIntegrate;
        fields          (rho e);
        writeControl    timeStep;
        writeFields     false;
    }
    
    residuals
    {
        type            solverInfo;
        libs            (utilityFunctionObjects);
        fields          (".*");
    }
}




// ************************************************************************* //
