From d462aff704f8d7a137aaa8460a52a06f1b42efb5 Mon Sep 17 00:00:00 2001 From: mtree22 Date: Fri, 12 Jun 2026 15:30:29 -0400 Subject: [PATCH 1/6] add flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud tutorial case to show verification of implicit coupling of Lagrangian particles --- .../0/H2O | 20 +++ .../0/T | 49 ++++++ .../0/U | 44 +++++ .../0/alphat | 49 ++++++ .../0/epsilon | 49 ++++++ .../0/k | 49 ++++++ .../0/nut | 49 ++++++ .../0/p | 54 ++++++ .../0/p_rgh | 44 +++++ .../clean.sh | 6 + .../constant/chemistryProperties | 15 ++ .../constant/combustionProperties | 11 ++ .../constant/foam.inp | 11 ++ .../constant/g | 10 ++ .../constant/radiationProperties | 12 ++ .../constant/reactingCloud1Properties | 161 ++++++++++++++++++ .../constant/thermophysicalProperties | 47 +++++ .../constant/turbulenceProperties | 9 + .../run.sh | 12 ++ .../system/blockMeshDict | 101 +++++++++++ .../system/controlDict | 53 ++++++ .../system/decomposeParDict | 16 ++ .../system/fvSchemes | 49 ++++++ .../system/fvSolution | 55 ++++++ .../system/preciceDict | 33 ++++ 25 files changed, 1008 insertions(+) create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh create mode 100755 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties create mode 100755 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/run.sh create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/blockMeshDict create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/decomposeParDict create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSchemes create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSolution create mode 100644 flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/preciceDict diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O new file mode 100644 index 000000000..308a9b29d --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O @@ -0,0 +1,20 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} + +dimensions [ 0 0 0 0 0 0 0 ]; + +internalField uniform 1.0; + +boundaryField +{ + ".*" + { + type fixedValue; + value uniform 1.0; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T new file mode 100644 index 000000000..abf1bce54 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} + +dimensions [ 0 0 0 1 0 0 0 ]; + +internalField uniform 300; + +boundaryField +{ + interface + { + type fixedGradient; + gradient uniform 0; + } + inlet + { + type fixedValue; + value $internalField; + } + outlet + { + type zeroGradient; + } + top + { + type zeroGradient; + } + bottom + { + type zeroGradient; + } + slip-bottom + { + type zeroGradient; + } + outerWall + { + type zeroGradient; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U new file mode 100644 index 000000000..cfe775cf3 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U @@ -0,0 +1,44 @@ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} + +dimensions [ 0 1 -1 0 0 0 0 ]; + +internalField uniform ( 0.1 0 0 ); + +boundaryField +{ + interface + { + type noSlip; + } + inlet + { + type fixedValue; + value $internalField; + } + outlet + { + type zeroGradient; + } + top + { + type slip; + } + bottom + { + type noSlip; + } + slip-bottom + { + type slip; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat new file mode 100644 index 000000000..1d3ac72d0 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alphat; +} + +dimensions [ 1 -1 -1 0 0 0 0 ]; + +internalField uniform 0; + +boundaryField +{ + interface + { + type compressible::alphatWallFunction; + value uniform 0; + } + inlet + { + type compressible::alphatWallFunction; + value uniform 0; + } + outlet + { + type compressible::alphatWallFunction; + value uniform 0; + } + top + { + type compressible::alphatWallFunction; + value uniform 0; + } + bottom + { + type compressible::alphatWallFunction; + value uniform 0; + } + slip-bottom + { + type compressible::alphatWallFunction; + value uniform 0; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon new file mode 100644 index 000000000..c419576fc --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object epsilon; +} + +dimensions [ 0 2 -3 0 0 0 0 ]; + +internalField uniform 0.01; + +boundaryField +{ + interface + { + type epsilonWallFunction; + value uniform 0.01; + } + inlet + { + type epsilonWallFunction; + value uniform 0.01; + } + outlet + { + type epsilonWallFunction; + value uniform 0.01; + } + top + { + type epsilonWallFunction; + value uniform 0.01; + } + bottom + { + type epsilonWallFunction; + value uniform 0.01; + } + slip-bottom + { + type epsilonWallFunction; + value uniform 0.01; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k new file mode 100644 index 000000000..a09c9617c --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object k; +} + +dimensions [ 0 2 -2 0 0 0 0 ]; + +internalField uniform 0.1; + +boundaryField +{ + interface + { + type kqRWallFunction; + value uniform 0.1; + } + inlet + { + type kqRWallFunction; + value uniform 0.1; + } + outlet + { + type kqRWallFunction; + value uniform 0.1; + } + top + { + type kqRWallFunction; + value uniform 0.1; + } + slip-bottom + { + type kqRWallFunction; + value uniform 0.1; + } + bottom + { + type kqRWallFunction; + value uniform 0.1; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut new file mode 100644 index 000000000..580e908d7 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object nut; +} + +dimensions [ 0 2 -1 0 0 0 0 ]; + +internalField uniform 0; + +boundaryField +{ + interface + { + type nutkWallFunction; + value uniform 0; + } + inlet + { + type nutkWallFunction; + value uniform 0; + } + outlet + { + type nutkWallFunction; + value uniform 0; + } + top + { + type nutkWallFunction; + value uniform 0; + } + bottom + { + type nutkWallFunction; + value uniform 0; + } + slip-bottom + { + type nutkWallFunction; + value uniform 0; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p new file mode 100644 index 000000000..654bb4023 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p @@ -0,0 +1,54 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} + +dimensions [ 1 -1 -2 0 0 0 0 ]; + +internalField uniform 103500; + +boundaryField +{ + interface + { + type calculated; + value $internalField; + } + inlet + { + type calculated; + value $internalField; + } + outlet + { + type calculated; + value $internalField; + } + outerWall + { + type calculated; + value $internalField; + } + top + { + type calculated; + value $internalField; + } + bottom + { + type calculated; + value $internalField; + } + slip-bottom + { + type calculated; + value $internalField; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh new file mode 100644 index 000000000..c5eebe883 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh @@ -0,0 +1,44 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p_rgh; +} + +dimensions [ 1 -1 -2 0 0 0 0 ]; + +internalField uniform 103500; + +boundaryField +{ + interface + { + type zeroGradient; + } + inlet + { + type zeroGradient; + } + outlet + { + type fixedValue; + value $internalField; + } + top + { + type zeroGradient; + } + slip-bottom + { + type zeroGradient; + } + bottom + { + type zeroGradient; + } + defaultFaces + { + type empty; + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh new file mode 100755 index 000000000..b64fc5101 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +set -e -u + +. ../../tools/cleaning-tools.sh + +clean_openfoam . diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties new file mode 100644 index 000000000..5abe8feba --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties @@ -0,0 +1,15 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object chemistryProperties; +} + +chemistryType +{ + solver noChemistrySolver; +} + +chemistry off; + diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties new file mode 100644 index 000000000..840ed7664 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties @@ -0,0 +1,11 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object combustionProperties; +} + +combustionModel none; +active false; + diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp new file mode 100644 index 000000000..72f8618bd --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp @@ -0,0 +1,11 @@ +elements +( +); + +species +( + H2O +); + +reactions +{} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g new file mode 100644 index 000000000..ca544e1f1 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g @@ -0,0 +1,10 @@ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + object g; +} + +dimensions [0 1 -2 0 0 0 0]; +value (0 -9.81 0); diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties new file mode 100644 index 000000000..8c98c1b86 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties @@ -0,0 +1,12 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object radiationProperties; +} + +radiation off; + +radiationModel none; + diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties new file mode 100644 index 000000000..98d7d0410 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties @@ -0,0 +1,161 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object reactingCloud1Properties; +} + +cloudType basicReactingCloud; + +solution +{ + active yes; + coupled true; + transient yes; + + maxCo 0.3; + cellValueSourceCorrection off; + + sourceTerms + { + resetOnStartup false; + schemes + { + rho explicit 1; + U explicit 1; + Yi explicit 1; + h explicit 1; + radiation explicit 1; + } + } + + interpolationSchemes + { + rho cell; + U cellPoint; + thermo:mu cell; + T cell; + Cp cell; + kappa cell; + p cell; + } + + integrationSchemes + { + U Euler; + T analytical; + } +} + + +constantProperties +{ + rho0 1; + Cp0 5000; + T0 300; + hRetentionCoeff 0; + volumeUpdateMethod constantRho; +} + + +subModels +{ + particleForces + { + sphereDrag; + gravity; + } + + injectionModels + { + model1 + { + type implicitPatchInjection; + patch inlet; + U0 (0.4 0 0); + T0 300; + + parcelBasisType fixed; + nParticle 1; + parcelsPerSecond 200; + + SOI 0; + duration 0.5; + massTotal 9999999; + + flowRateProfile constant 1; + + sizeDistribution + { + type fixedValue; + fixedValueDistribution + { + value 0.001; + } + } + } + } + + dispersionModel none; + + patchInteractionModel standardWallInteraction; + + standardWallInteractionCoeffs + { + type rebound; + e 0.9; + mu 0.9; + } + + heatTransferModel RanzMarshall; + + RanzMarshallCoeffs + { + BirdCorrection off; + } + + compositionModel singleMixtureFraction; + + singleMixtureFractionCoeffs + { + phases + ( + gas + { + } + liquid + { + H2O 1; + } + solid + { + tutorialParticle 1; + } + ); + YGasTot0 0; + YLiquidTot0 0.0; + YSolidTot0 1; + } + + phaseChangeModel none; + + devolatilisationModel none; + + surfaceReactionModel none; + + stochasticCollisionModel none; + + surfaceFilmModel none; + + radiation off; + + heterogeneousReactingModel none; + +} + + +cloudFunctions +{ +} + diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties new file mode 100644 index 000000000..8cbbd5076 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties @@ -0,0 +1,47 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} + +thermoType +{ + type heRhoThermo; + mixture reactingMixture; + transport const; + thermo hConst; + equationOfState perfectGas; + specie specie; + energy sensibleEnthalpy; +} + +chemistryReader foamChemistryReader; + +foamChemistryFile "/foam.inp"; + +foamChemistryThermoFile "/foam.dat"; + +inertSpecie H2O; + +liquids +{ + H2O; +} + +solids +{ + tutorialParticle + { + defaultCoeffs no; + rho 1; + Cp 5000; + kappa 0.04; + Hf 0; + emissivity 1.0; + W 58; + } +} + diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties new file mode 100644 index 000000000..b75c49530 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties @@ -0,0 +1,9 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object turbulenceProperties; +} + +simulationType laminar; diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/run.sh b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/run.sh new file mode 100755 index 000000000..8f55fbfa5 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/run.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -e -u + +. ../../tools/log.sh +exec > >(tee --append "$LOGFILE") 2>&1 + +blockMesh + +../../tools/run-openfoam.sh "$@" +. ../../tools/openfoam-remove-empty-dirs.sh && openfoam_remove_empty_dirs + +close_log diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/blockMeshDict b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/blockMeshDict new file mode 100644 index 000000000..de95b0ace --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/blockMeshDict @@ -0,0 +1,101 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} + +vertices +( + (0 0 0) + (1 0 0) + (1 .5 0) + (0 .5 0) + + (0 0 .4) + (1 0 .4) + (1 .5 .4) + (0 .5 .4) + + (3 0 0) + (3 .5 0) + + (3 0 .4) + (3 .5 .4) + + (-.5 0 0) + (-.5 .5 0) + + (-.5 .5 .4) + (-.5 0 .4) + +); + +blocks +( + hex (12 0 3 13 15 4 7 14) (81 41 1) simpleGrading (.2 15 1) + hex (0 1 2 3 4 5 6 7) (161 41 1) simpleGrading (5 15 1) + hex (1 8 9 2 5 10 11 6) (51 41 1) simpleGrading (1 15 1) +); + +boundary +( + + inlet + { + type wall; + faces + ( + (13 12 15 14) + ); + } + + outlet + { + type wall; + faces + ( + (8 9 11 10) + ); + } + + top + { + type wall; + faces + ( + (7 6 2 3) + (9 2 6 11) + (13 3 7 14) + ); + } + + slip-bottom + { + type wall; + faces + ( + (15 12 0 4) + ); + } + + bottom + { + type wall; + faces + ( + (1 8 10 5) + ); + } + + interface + { + type wall; + faces + ( + (4 0 1 5) + ); + } + +); diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict new file mode 100644 index 000000000..61206862b --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict @@ -0,0 +1,53 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} + +application reactingParcelFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 20; + +deltaT 0.01; + +writeControl runTime; + +writeInterval 0.2; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable false; + +libs +( + "libpreciceAdapterFunctionObject.so" + "libimplicitPatchInjection.so" +); + +functions +{ + preCICE_Adapter + { + type preciceAdapterFunctionObject; + libs ("libpreciceAdapterFunctionObject.so"); + errors strict; // Available since OpenFOAM v2012 + } +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/decomposeParDict b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/decomposeParDict new file mode 100644 index 000000000..0d1859e14 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/decomposeParDict @@ -0,0 +1,16 @@ +FoamFile { + version 2.0; + class dictionary; + object decomposeParDict; + format ascii; +} + +numberOfSubdomains 2; + +method simple; + +simpleCoeffs +{ + n (2 1 1); + delta 0.001; +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSchemes b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSchemes new file mode 100644 index 000000000..fe217d056 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSchemes @@ -0,0 +1,49 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,h) Gauss upwind; + div(phi,e) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,Yi_h) Gauss upwind; + div(phi,R) Gauss upwind; + div(phi,K) Gauss linear; + div(phi,Ekp) Gauss linear; + div(R) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSolution b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSolution new file mode 100644 index 000000000..e7047fa96 --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/fvSolution @@ -0,0 +1,55 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} + +solvers +{ + "rho.*" + { + solver PCG; + preconditioner DIC; + tolerance 0; + relTol 0; + } + + p_rgh + { + solver PCG; + preconditioner DIC; + tolerance 1e-8; + relTol 0.01; + } + + p_rghFinal + { + $p_rgh; + relTol 0; + } + + "(U|h|e|k|epsilon|R)" + { + solver PBiCGStab; + preconditioner DILU; + tolerance 1e-6; + relTol 0.1; + } + + "(U|h|e|k|epsilon|R)Final" + { + $U; + relTol 0; + } +} + +PIMPLE +{ + momentumPredictor yes; + nOuterCorrectors 1; + nCorrectors 2; + nNonOrthogonalCorrectors 0; +} diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/preciceDict b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/preciceDict new file mode 100644 index 000000000..be3dc807c --- /dev/null +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/preciceDict @@ -0,0 +1,33 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object preciceDict; +} + +preciceConfig "../precice-config.xml"; + +participant Fluid; + +modules (CHT); + +interfaces +{ + Interface1 + { + mesh Fluid-Mesh; + patches (interface); + + readData + ( + Heat-Flux + ); + + writeData + ( + Temperature + ); + }; +}; From d0ff8daa6470cfa7bcbfe82125f4682b9faf3d12 Mon Sep 17 00:00:00 2001 From: mtree22 Date: Sun, 14 Jun 2026 21:43:26 -0400 Subject: [PATCH 2/6] change controlDict to use refactored lib file "libimplicitInjectors.so" instead of explicit lib for patch injection --- .../system/controlDict | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict index 61206862b..a8c904611 100644 --- a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict +++ b/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/system/controlDict @@ -39,7 +39,7 @@ runTimeModifiable false; libs ( "libpreciceAdapterFunctionObject.so" - "libimplicitPatchInjection.so" + "libimplicitInjectors.so" ); functions From 942f9cde4cc1e0d5aed5a688a9eb2547166750f7 Mon Sep 17 00:00:00 2001 From: mtree22 Date: Tue, 7 Jul 2026 13:27:31 -0400 Subject: [PATCH 3/6] reformat flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud as its own tutorial flow-over-heated-plate-particles --- flow-over-heated-plate-particles/README.md | 81 + .../clean-tutorial.sh | 1 + .../fluid-openfoam}/0/H2O | 0 .../fluid-openfoam}/0/T | 0 .../fluid-openfoam}/0/U | 0 .../fluid-openfoam}/0/alphat | 0 .../fluid-openfoam}/0/epsilon | 0 .../fluid-openfoam}/0/k | 0 .../fluid-openfoam}/0/nut | 0 .../fluid-openfoam}/0/p | 0 .../fluid-openfoam}/0/p_rgh | 0 .../fluid-openfoam}/clean.sh | 0 .../constant/chemistryProperties | 0 .../constant/combustionProperties | 0 .../fluid-openfoam}/constant/foam.inp | 0 .../fluid-openfoam}/constant/g | 0 .../constant/radiationProperties | 0 .../constant/reactingCloud1Properties | 0 .../constant/thermophysicalProperties | 0 .../constant/turbulenceProperties | 0 .../temperature_with_particles.gif | Bin 0 -> 3801204 bytes .../paraview/temperature_with_particles.pvsm | 26627 ++++++++++++++++ .../fluid-openfoam}/run.sh | 0 .../fluid-openfoam}/system/blockMeshDict | 0 .../fluid-openfoam}/system/controlDict | 0 .../fluid-openfoam}/system/decomposeParDict | 0 .../fluid-openfoam}/system/fvSchemes | 0 .../fluid-openfoam}/system/fvSolution | 0 .../fluid-openfoam}/system/preciceDict | 0 .../precice-config.xml | 65 + .../solid-openfoam/0/T | 47 + .../solid-openfoam/clean.sh | 6 + .../constant/transportProperties | 21 + .../solid-openfoam/run.sh | 12 + .../solid-openfoam/system/blockMeshDict | 87 + .../solid-openfoam/system/controlDict | 60 + .../solid-openfoam/system/decomposeParDict | 16 + .../solid-openfoam/system/fvSchemes | 51 + .../solid-openfoam/system/fvSolution | 35 + .../solid-openfoam/system/preciceDict | 39 + 40 files changed, 27148 insertions(+) create mode 100644 flow-over-heated-plate-particles/README.md create mode 120000 flow-over-heated-plate-particles/clean-tutorial.sh rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/H2O (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/T (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/U (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/alphat (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/epsilon (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/k (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/nut (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/p (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/0/p_rgh (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/clean.sh (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/chemistryProperties (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/combustionProperties (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/foam.inp (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/g (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/radiationProperties (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/reactingCloud1Properties (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/thermophysicalProperties (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/constant/turbulenceProperties (100%) create mode 100644 flow-over-heated-plate-particles/fluid-openfoam/paraview/images/temperature_with_particles/temperature_with_particles.gif create mode 100644 flow-over-heated-plate-particles/fluid-openfoam/paraview/temperature_with_particles.pvsm rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/run.sh (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/blockMeshDict (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/controlDict (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/decomposeParDict (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/fvSchemes (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/fvSolution (100%) rename {flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud => flow-over-heated-plate-particles/fluid-openfoam}/system/preciceDict (100%) create mode 100644 flow-over-heated-plate-particles/precice-config.xml create mode 100644 flow-over-heated-plate-particles/solid-openfoam/0/T create mode 100755 flow-over-heated-plate-particles/solid-openfoam/clean.sh create mode 100644 flow-over-heated-plate-particles/solid-openfoam/constant/transportProperties create mode 100755 flow-over-heated-plate-particles/solid-openfoam/run.sh create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/blockMeshDict create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/controlDict create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/decomposeParDict create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/fvSchemes create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/fvSolution create mode 100644 flow-over-heated-plate-particles/solid-openfoam/system/preciceDict diff --git a/flow-over-heated-plate-particles/README.md b/flow-over-heated-plate-particles/README.md new file mode 100644 index 000000000..3da73cedf --- /dev/null +++ b/flow-over-heated-plate-particles/README.md @@ -0,0 +1,81 @@ +--- +title: Flow over heated plate with particles +permalink: tutorials-flow-over-heated-plate-particles.html +keywords: tutorial, CHT, conjugate-heat transfer, OpenFOAM, Lagrangian particles, implicit coupling +summary: This tutorial describes how to run a conjugate heat transfer coupled simulation including Lagrangian particles using preCICE. This tutorial acts as verification for adding support for implicit coupling of Lagrangian particles to the OpenFOAM preCICE adapter. OpenFOAM is used as both the fluid (including particles) and solid solver. +--- + +{% note %} +Get the [case files of this tutorial](https://github.com/precice/tutorials/tree/develop/flow-over-heated-plate-particles), as continuously rendered here, or see the [latest released version](https://github.com/precice/tutorials/tree/master/flow-over-heated-plate-particles) (if there is already one). Read how in the [tutorials introduction](https://precice.org/tutorials.html). +{% endnote %} + +## Setup + +This scenario consists of one fluid and one solid participant and it is inspired by Vynnycky et al. [1]. A fluid enters a channel with temperature $$ T_\infty $$, where it comes in contact with a solid plate. The plate is heated at its bottom and has a constant temperature of $$ T_{hot} $$. The scenario differs from the flow-over-heated-plate tutorial by adding a basicReactingCloud of particles to the fluid (OpenFOAM) participant. + +![img](images/tutorials-flow-over-heated-plate-example.png) + +The test case is two-dimensional and a serial-implicit coupling with Aitken underrelaxation is used for the coupling. + +Proper implicit coupling of Lagrangian particles involves not only accounting for existing particles in the domain during checkpointing, but also adjusting the particle injection logic for implicit coupling loops within time-windows as well. Particle injection is handled in OpenFOAM via injectionModels. injectionModels lie outside the OpenFOAM solver objectRegistry, so they cannot be directly modified by the existing OpenFOAM preCICE adapter functionObject. Therefore, the OpenFOAM preCICE adapter source code was modified to build an additional library, `libImplicitInjectors.so`. `libImplicitInjectors.so` contains "implicit" versions of the following existing OpenFOAM-native injectionModel types: patchInjection, coneNozzleInjection, and manualInjection. In practice, the user simply needs to make sure they have the `libImplicitInjectors.so` library loaded in their `system/ControlDict` file (alongside `libpreciceAdapterFunctionObject.so`) and then swap a native OpenFOAM injectionModel type (like patchInjection) for an "implicit" version (implicitPatchInjection) in the injectionModels sub-dictionary of their particle cloud file. The following table maps native OpenFOAM injectionModels to their corresponding "implicit" version: + +| Native OpenFOAM | "implicit" verison | +| --------------- | ------------------ | +| patchInjection | implicitPatchInjection | +| coneNozzleInjection | implicitConeNozzleInjection | +| manualInjection | implicitManualInjection | + +The inlet velocity is $$ u_{\infty} = 0.1 m/s $$, the inlet temperature is $$ T_{\infty} = 300K $$. The fluid and solid have the same thermal conductivities $$ k_S = k_F = 100 W/m/K $$. Further material properties of the fluid are its viscosity $$ \mu = 0.0002 kg/m/s $$ and specific heat capacity $$ c_p = 5000 J/kg/K $$. The Prandtl number $$ Pr = 0.01 $$ follows from thermal conductivity, viscosity and specific heat capacity. The solid has the thermal diffusivity $$ \alpha = 1 m^2/s $$. The gravitational acceleration is $$ g = 9.81 m/s^2 $$. + +Particle properties were set to match the fluid: $$ rho = 1.0 kg/m^3 $$, $$ c_p = 5000 J/kg/K $$, $$ T_0 = 300 K $$, $$ U_0 = (0.4 0 0) m/s $$. + +## Configuration + +preCICE configuration (image generated using the [precice-config-visualizer](https://precice.org/tooling-config-visualization.html)): + +![preCICE configuration visualization](images/tutorials-flow-over-heated-plate-particles-precice-config.png) + +## Available solvers + +By default, the fluid participant reads heat-flux values and the solid participant reads temperature values for the coupled simulation. The following participants are available: + +Fluid participant: + +* OpenFOAM (buoyantPimpleFoam). For more information, have a look at the [OpenFOAM adapter documentation](https://precice.org/adapter-openfoam-overview.html). + +Solid participant: + +* OpenFOAM (laplacianFoam). For more information, have a look at the [OpenFOAM adapter documentation](https://precice.org/adapter-openfoam-overview.html). + +## Running the Simulation + +All listed solvers can be used in order to run the simulation. Open two separate terminals and start the desired fluid and solid participant by calling the respective run script `run.sh` located in the participant directory. For example: + +```bash +cd fluid-openfoam +./run.sh +``` + +and + +```bash +cd solid-openfoam +./run.sh +``` + +## Post-processing + +How to visualize the simulation results depends on the selected solvers. Most of the solvers generate VTK files which can visualized using ParaView or similar tools. +In case of OpenFOAM, you can open the `.foam` file with ParaView, or create VTK files with `foamToVTK`. + +An example of the visualized expected results looks as follows: + +![result](fluid-openfoam/paraview/images/temperature_with_particles/temperature_with_particles.gif) + +## References + +[1] M. Vynnycky, S. Kimura, K. Kanev, and I. Pop. Forced convection heat transfer from a flat plate: the conjugate problem. International Journal of Heat and Mass Transfer, 41(1):45 – 59, 1998. + +{% disclaimer %} +This offering is not approved or endorsed by OpenCFD Limited, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM® and OpenCFD® trade marks. +{% enddisclaimer %} diff --git a/flow-over-heated-plate-particles/clean-tutorial.sh b/flow-over-heated-plate-particles/clean-tutorial.sh new file mode 120000 index 000000000..4713f5092 --- /dev/null +++ b/flow-over-heated-plate-particles/clean-tutorial.sh @@ -0,0 +1 @@ +../tools/clean-tutorial-base.sh \ No newline at end of file diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O b/flow-over-heated-plate-particles/fluid-openfoam/0/H2O similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/H2O rename to flow-over-heated-plate-particles/fluid-openfoam/0/H2O diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T b/flow-over-heated-plate-particles/fluid-openfoam/0/T similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/T rename to flow-over-heated-plate-particles/fluid-openfoam/0/T diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U b/flow-over-heated-plate-particles/fluid-openfoam/0/U similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/U rename to flow-over-heated-plate-particles/fluid-openfoam/0/U diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat b/flow-over-heated-plate-particles/fluid-openfoam/0/alphat similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/alphat rename to flow-over-heated-plate-particles/fluid-openfoam/0/alphat diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon b/flow-over-heated-plate-particles/fluid-openfoam/0/epsilon similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/epsilon rename to flow-over-heated-plate-particles/fluid-openfoam/0/epsilon diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k b/flow-over-heated-plate-particles/fluid-openfoam/0/k similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/k rename to flow-over-heated-plate-particles/fluid-openfoam/0/k diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut b/flow-over-heated-plate-particles/fluid-openfoam/0/nut similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/nut rename to flow-over-heated-plate-particles/fluid-openfoam/0/nut diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p b/flow-over-heated-plate-particles/fluid-openfoam/0/p similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p rename to flow-over-heated-plate-particles/fluid-openfoam/0/p diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh b/flow-over-heated-plate-particles/fluid-openfoam/0/p_rgh similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/0/p_rgh rename to flow-over-heated-plate-particles/fluid-openfoam/0/p_rgh diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh b/flow-over-heated-plate-particles/fluid-openfoam/clean.sh similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/clean.sh rename to flow-over-heated-plate-particles/fluid-openfoam/clean.sh diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties b/flow-over-heated-plate-particles/fluid-openfoam/constant/chemistryProperties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/chemistryProperties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/chemistryProperties diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties b/flow-over-heated-plate-particles/fluid-openfoam/constant/combustionProperties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/combustionProperties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/combustionProperties diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp b/flow-over-heated-plate-particles/fluid-openfoam/constant/foam.inp similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/foam.inp rename to flow-over-heated-plate-particles/fluid-openfoam/constant/foam.inp diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g b/flow-over-heated-plate-particles/fluid-openfoam/constant/g similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/g rename to flow-over-heated-plate-particles/fluid-openfoam/constant/g diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties b/flow-over-heated-plate-particles/fluid-openfoam/constant/radiationProperties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/radiationProperties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/radiationProperties diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties b/flow-over-heated-plate-particles/fluid-openfoam/constant/reactingCloud1Properties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/reactingCloud1Properties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/reactingCloud1Properties diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties b/flow-over-heated-plate-particles/fluid-openfoam/constant/thermophysicalProperties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/thermophysicalProperties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/thermophysicalProperties diff --git a/flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties b/flow-over-heated-plate-particles/fluid-openfoam/constant/turbulenceProperties similarity index 100% rename from flow-over-heated-plate/fluid-openfoam-basicReactingMultiphaseCloud/constant/turbulenceProperties rename to flow-over-heated-plate-particles/fluid-openfoam/constant/turbulenceProperties diff --git a/flow-over-heated-plate-particles/fluid-openfoam/paraview/images/temperature_with_particles/temperature_with_particles.gif b/flow-over-heated-plate-particles/fluid-openfoam/paraview/images/temperature_with_particles/temperature_with_particles.gif new file mode 100644 index 0000000000000000000000000000000000000000..61509766118f90af99d2c6deabc29e8e28385055 GIT binary patch literal 3801204 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 z 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