openfoam/tutorials/multiphase/compressibleInterFoam/laminar/waterCooler
2024-12-24 11:17:31 +00:00
..
fluid RELEASE: Updated headers to v2412 2024-12-24 11:17:31 +00:00
solid RELEASE: Updated headers to v2412 2024-12-24 11:17:31 +00:00
Allclean ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
Allrun TUT: adjust tutorials for test loop 2020-12-22 12:27:21 +01:00
mpirun.schema ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
mpirun.schema_parallel ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
README.txt ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
run_fluid_parallel.sh ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
run_fluid.sh ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
run_solid_parallel.sh ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00
run_solid.sh ENH: waterCooler: new tutorial. 2020-12-09 15:17:45 +00:00

Simple testcase to show multi-world explicit coupling. It uses 'solidFoam'
(the solid functionality from chtMultiRegionFoam) and 'compressibleInterFoam'
to demonstrate cooling a solid block with water. WIP.


World solid
-----------
This is running in a single directory 'solid'. Its local patch 'top'
communicates with the 'fluid' world, patch 'bottom'. It runs solidFoam
to simulate a heated solid block. Note that the physical settings probably
do not make much sense.


World fluid
-----------
This is running in the 'fluid' directory. The local patch 'bottom'
communicates with the 'top' patch of the solid world.

Changes to the original tutorial ('depthCharge2D'):
- changed to a fixed timestep.
- added the 'syncObjects' functionObject. This transfers the data from
one world to the other, once every timestep.
- changed the system/blockMeshDict to define the coupling on the patch:
    bottom
    {
        type mappedWall;

        // What to sample:
        sampleMode      nearestPatchFace;

        // Simulation world to sample
        sampleWorld     solid;

        // Region to sample
        sampleRegion    region0;

        // If sampleMode is nearestPatchFace : patch to find faces of
        samplePatch     top;

        // Use database to get data from (one-way or loose coupling in
        // combination with functionObject)
        sampleDatabase    true;

        faces
        (
            (1 5 4 0)
        );
    }


A similar blockMeshDict boundary definition was used on the solid side:
    top
    {
        type mappedWall;

        // What to sample:
        sampleMode      nearestPatchFace;

        // Simulation world to sample
        sampleWorld     fluid;

        // Region to sample
        sampleRegion    region0;

        // If sampleMode is nearestPatchFace : patch to find faces of
        samplePatch     bottom;

        // Use database to get data from (one-way or loose coupling in
        // combination with functionObject)
        sampleDatabase    true;
    }


Note that if the 'sampleDatabase' is not mentioned the coupling will be done
from boundary condition to boundary condition. This is a closer coupling but
does mean that both solvers have to run the same number of correctors.