From 1d949e5ffc81d2b6d6a3f5f301177abacb6c279b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Mon, 24 Jun 2024 16:10:07 +0200 Subject: [PATCH 01/18] It kind of runs --- channel-transport/transport-openfoam/0/T | 69 +++++++++ channel-transport/transport-openfoam/0/U | 39 +++++ channel-transport/transport-openfoam/clean.sh | 6 + .../constant/transportProperties | 9 ++ channel-transport/transport-openfoam/run.sh | 12 ++ .../transport-openfoam/system/blockMeshDict | 146 ++++++++++++++++++ .../transport-openfoam/system/controlDict | 44 ++++++ .../system/decomposeParDict | 16 ++ .../transport-openfoam/system/fvSchemes | 39 +++++ .../transport-openfoam/system/fvSolution | 25 +++ .../transport-openfoam/system/preciceDict | 37 +++++ 11 files changed, 442 insertions(+) create mode 100644 channel-transport/transport-openfoam/0/T create mode 100644 channel-transport/transport-openfoam/0/U create mode 100755 channel-transport/transport-openfoam/clean.sh create mode 100644 channel-transport/transport-openfoam/constant/transportProperties create mode 100755 channel-transport/transport-openfoam/run.sh create mode 100644 channel-transport/transport-openfoam/system/blockMeshDict create mode 100644 channel-transport/transport-openfoam/system/controlDict create mode 100644 channel-transport/transport-openfoam/system/decomposeParDict create mode 100644 channel-transport/transport-openfoam/system/fvSchemes create mode 100644 channel-transport/transport-openfoam/system/fvSolution create mode 100644 channel-transport/transport-openfoam/system/preciceDict diff --git a/channel-transport/transport-openfoam/0/T b/channel-transport/transport-openfoam/0/T new file mode 100644 index 000000000..a64055ab1 --- /dev/null +++ b/channel-transport/transport-openfoam/0/T @@ -0,0 +1,69 @@ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + inlet + { + type zeroGradient; + } + + outlet + { + type fixedValue; + value uniform 0; + } + + obstacle + { + type zeroGradient; + } + + upperWall + { + type zeroGradient; + } + + lowerWall + { + type zeroGradient; + } + + frontAndBack + { + type empty; + } + + blob + { + type codedFixedValue; + value uniform 0; + redirectType fixedValue; + code + #{ + const fvPatch& boundaryPatch = patch(); + scalarField& field = *this; + + // Blob parameters + vector xblob(1, 1, 0); // Center of the blob + scalar R = 0.5; // Characteristic length (radius) + scalar width = 0.1; // Smoothing factor + + forAll(boundaryPatch, faceI) + { + const point& faceCenter = boundaryPatch.faceCentres()[faceI]; + scalar distanceSquared = magSqr(faceCenter - xblob.xy()); + field[faceI] = 0.5 - 0.5 * tanh((distanceSquared - R*R) / width); + } + #}; + } +} diff --git a/channel-transport/transport-openfoam/0/U b/channel-transport/transport-openfoam/0/U new file mode 100644 index 000000000..2cf022003 --- /dev/null +++ b/channel-transport/transport-openfoam/0/U @@ -0,0 +1,39 @@ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} + +dimensions [0 1 -1 0 0 0 0]; +internalField uniform (10 0 0); + +boundaryField +{ + inlet + { + type fixedValue; + value $internalField; + } + outlet + { + type zeroGradient; + } + obstacle + { + type noSlip; + } + upperWall + { + type noSlip; + } + lowerWall + { + type noSlip; + } + frontAndBack + { + type empty; + } +} diff --git a/channel-transport/transport-openfoam/clean.sh b/channel-transport/transport-openfoam/clean.sh new file mode 100755 index 000000000..b64fc5101 --- /dev/null +++ b/channel-transport/transport-openfoam/clean.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +set -e -u + +. ../../tools/cleaning-tools.sh + +clean_openfoam . diff --git a/channel-transport/transport-openfoam/constant/transportProperties b/channel-transport/transport-openfoam/constant/transportProperties new file mode 100644 index 000000000..43d8644a6 --- /dev/null +++ b/channel-transport/transport-openfoam/constant/transportProperties @@ -0,0 +1,9 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object transportProperties; +} + +DT 0.01; diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh new file mode 100755 index 000000000..8f55fbfa5 --- /dev/null +++ b/channel-transport/transport-openfoam/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/channel-transport/transport-openfoam/system/blockMeshDict b/channel-transport/transport-openfoam/system/blockMeshDict new file mode 100644 index 000000000..bdb4fe67b --- /dev/null +++ b/channel-transport/transport-openfoam/system/blockMeshDict @@ -0,0 +1,146 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} + +x0 0.; +x1 2.; +x2 3.; +x3 6.; + +y0 0.; +y1 1.; +y2 2.; + +z0 0; +z1 1; + +vertices +( + ($x0 $y0 $z0 ) // 0 + ($x1 $y0 $z0 ) // 1 + ($x2 $y0 $z0 ) // 2 + ($x3 $y0 $z0 ) // 3 + ($x0 $y1 $z0 ) // 4 + ($x1 $y1 $z0 ) // 5 + ($x2 $y1 $z0 ) // 6 + ($x3 $y1 $z0 ) // 7 + ($x0 $y2 $z0 ) // 8 + ($x1 $y2 $z0 ) // 9 + ($x2 $y2 $z0 ) // 10 + ($x3 $y2 $z0 ) // 11 + + ($x0 $y0 $z1 ) // 12 + ($x1 $y0 $z1 ) // 13 + ($x2 $y0 $z1 ) // 14 + ($x3 $y0 $z1 ) // 15 + ($x0 $y1 $z1 ) // 16 + ($x1 $y1 $z1 ) // 17 + ($x2 $y1 $z1 ) // 18 + ($x3 $y1 $z1 ) // 19 + ($x0 $y2 $z1 ) // 20 + ($x1 $y2 $z1 ) // 21 + ($x2 $y2 $z1 ) // 22 + ($x3 $y2 $z1 ) // 23 +); + + +// Grading +h1 16; +h2 8; +h3 24; +v1 8; + +blocks +( + hex ( 0 1 5 4 12 13 17 16 ) + ($h1 $v1 1 ) + simpleGrading (1 1 1) + + hex ( 2 3 7 6 14 15 19 18 ) + ($h3 $v1 1) + simpleGrading (1 1 1) + + hex ( 4 5 9 8 16 17 21 20 ) + ($h1 $v1 1) + simpleGrading (1 1 1) + + hex ( 5 6 10 9 17 18 22 21 ) + ($h2 $v1 1) + simpleGrading (1 1 1) + + hex ( 6 7 11 10 18 19 23 22 ) + ($h3 $v1 1 ) + simpleGrading (1 1 1) +); + +boundary +( + inlet + { + type patch; + faces + ( + ( 0 4 16 12 ) + ( 4 8 20 16 ) + ); + } + outlet + { + type patch; + faces + ( + ( 3 7 19 15 ) + ( 7 11 23 19 ) + ); + } + obstacle + { + type wall; + faces + ( + ( 1 5 17 13 ) + ( 5 6 18 17 ) + ( 6 2 14 18 ) + ); + } + upperWall + { + type wall; + faces + ( + ( 8 9 21 20 ) + ( 9 10 22 21 ) + ( 10 11 23 22 ) + ); + } + lowerWall + { + type wall; + faces + ( + ( 0 1 13 12 ) + ( 2 3 15 14 ) + ); + } + frontAndBack + { + type empty; + faces + ( + ( 0 1 5 4 ) + ( 2 3 7 6 ) + ( 4 5 9 8 ) + ( 5 6 10 9 ) + ( 6 7 11 10 ) + ( 12 13 17 16 ) + ( 14 15 19 18 ) + ( 16 17 21 20 ) + ( 17 18 22 21 ) + ( 18 19 23 22 ) + ); + } +); \ No newline at end of file diff --git a/channel-transport/transport-openfoam/system/controlDict b/channel-transport/transport-openfoam/system/controlDict new file mode 100644 index 000000000..6211271cc --- /dev/null +++ b/channel-transport/transport-openfoam/system/controlDict @@ -0,0 +1,44 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} + +application scalarTransportFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1.0; + +deltaT 0.005; + +writeControl adjustableRunTime; + +writeInterval 0.005; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +functions +{ + preCICE_Adapter + { + type preciceAdapterFunctionObject; + libs ("libpreciceAdapterFunctionObject.so"); + } +} diff --git a/channel-transport/transport-openfoam/system/decomposeParDict b/channel-transport/transport-openfoam/system/decomposeParDict new file mode 100644 index 000000000..f9eae003a --- /dev/null +++ b/channel-transport/transport-openfoam/system/decomposeParDict @@ -0,0 +1,16 @@ +FoamFile { + version 2.0; + class dictionary; + object decomposeParDict; + format ascii; +} + +numberOfSubdomains 4; + +method simple; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} \ No newline at end of file diff --git a/channel-transport/transport-openfoam/system/fvSchemes b/channel-transport/transport-openfoam/system/fvSchemes new file mode 100644 index 000000000..7ffafdece --- /dev/null +++ b/channel-transport/transport-openfoam/system/fvSchemes @@ -0,0 +1,39 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,T) Gauss linearUpwind grad(T); +} + +laplacianSchemes +{ + default none; + laplacian(DT,T) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} diff --git a/channel-transport/transport-openfoam/system/fvSolution b/channel-transport/transport-openfoam/system/fvSolution new file mode 100644 index 000000000..df39d3595 --- /dev/null +++ b/channel-transport/transport-openfoam/system/fvSolution @@ -0,0 +1,25 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} + +solvers +{ + T + { + solver PBiCGStab; + preconditioner DILU; + tolerance 1e-6; + relTol 0; + norm default; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; +} diff --git a/channel-transport/transport-openfoam/system/preciceDict b/channel-transport/transport-openfoam/system/preciceDict new file mode 100644 index 000000000..aca923918 --- /dev/null +++ b/channel-transport/transport-openfoam/system/preciceDict @@ -0,0 +1,37 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object preciceDict; +} + +preciceConfig "../precice-config.xml"; + +participant Transport; + +modules (FF); + +interfaces +{ + Interface1 + { + mesh Transport-Mesh; + patches (); + locations volumeCenters; + + readData + ( + Velocity + ); + + writeData + ( + ); + }; +}; + +FF +{ + solverType incompressible; +} From ea64e381d460245850947b38207eb311411ceb72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Mon, 24 Jun 2024 16:52:14 +0200 Subject: [PATCH 02/18] remove blob --- channel-transport/transport-openfoam/0/T | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/channel-transport/transport-openfoam/0/T b/channel-transport/transport-openfoam/0/T index a64055ab1..d2d0bf23d 100644 --- a/channel-transport/transport-openfoam/0/T +++ b/channel-transport/transport-openfoam/0/T @@ -42,28 +42,4 @@ boundaryField { type empty; } - - blob - { - type codedFixedValue; - value uniform 0; - redirectType fixedValue; - code - #{ - const fvPatch& boundaryPatch = patch(); - scalarField& field = *this; - - // Blob parameters - vector xblob(1, 1, 0); // Center of the blob - scalar R = 0.5; // Characteristic length (radius) - scalar width = 0.1; // Smoothing factor - - forAll(boundaryPatch, faceI) - { - const point& faceCenter = boundaryPatch.faceCentres()[faceI]; - scalar distanceSquared = magSqr(faceCenter - xblob.xy()); - field[faceI] = 0.5 - 0.5 * tanh((distanceSquared - R*R) / width); - } - #}; - } } From a1c142cdb08f5a498c0bd7b69db7e5f60e509ed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Mon, 24 Jun 2024 16:53:09 +0200 Subject: [PATCH 03/18] Maybe right? --- channel-transport/transport-openfoam/0/U | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channel-transport/transport-openfoam/0/U b/channel-transport/transport-openfoam/0/U index 2cf022003..1f4cb2292 100644 --- a/channel-transport/transport-openfoam/0/U +++ b/channel-transport/transport-openfoam/0/U @@ -7,7 +7,7 @@ FoamFile } dimensions [0 1 -1 0 0 0 0]; -internalField uniform (10 0 0); +internalField uniform (0 0 0); boundaryField { From f2fb4f3fa23ec32566df4368d003025a22cb994a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Mon, 24 Jun 2024 17:00:46 +0200 Subject: [PATCH 04/18] setup setFields --- .../transport-openfoam/{0 => 0.orig}/T | 0 .../transport-openfoam/{0 => 0.orig}/U | 0 channel-transport/transport-openfoam/run.sh | 2 ++ .../transport-openfoam/system/setFieldsDict | 24 +++++++++++++++++++ 4 files changed, 26 insertions(+) rename channel-transport/transport-openfoam/{0 => 0.orig}/T (100%) rename channel-transport/transport-openfoam/{0 => 0.orig}/U (100%) create mode 100644 channel-transport/transport-openfoam/system/setFieldsDict diff --git a/channel-transport/transport-openfoam/0/T b/channel-transport/transport-openfoam/0.orig/T similarity index 100% rename from channel-transport/transport-openfoam/0/T rename to channel-transport/transport-openfoam/0.orig/T diff --git a/channel-transport/transport-openfoam/0/U b/channel-transport/transport-openfoam/0.orig/U similarity index 100% rename from channel-transport/transport-openfoam/0/U rename to channel-transport/transport-openfoam/0.orig/U diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh index 8f55fbfa5..3cbec2a56 100755 --- a/channel-transport/transport-openfoam/run.sh +++ b/channel-transport/transport-openfoam/run.sh @@ -5,6 +5,8 @@ set -e -u exec > >(tee --append "$LOGFILE") 2>&1 blockMesh +cp -r 0.orig 0 +setFields ../../tools/run-openfoam.sh "$@" . ../../tools/openfoam-remove-empty-dirs.sh && openfoam_remove_empty_dirs diff --git a/channel-transport/transport-openfoam/system/setFieldsDict b/channel-transport/transport-openfoam/system/setFieldsDict new file mode 100644 index 000000000..c0c2e35b3 --- /dev/null +++ b/channel-transport/transport-openfoam/system/setFieldsDict @@ -0,0 +1,24 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object setFieldsDict; +} + +defaultFieldValues +( + volScalarFieldValue T 0 +); + +regions +( + boxToCell + { + box (0.5 0.5 0) (1.5 1.5 1); + fieldValues + ( + volScalarFieldValue T 1 + ); + } +); From 9a1e7b90d6e57d8043596ec44417e8249eb70a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Tue, 25 Jun 2024 15:57:16 +0200 Subject: [PATCH 05/18] Set a cylinder, increase mesh cells, add U_vol workaround --- channel-transport/transport-openfoam/clean.sh | 1 + .../transport-openfoam/constant/fvOptions | 44 +++++++++++++++++++ .../constant/transportProperties | 2 +- channel-transport/transport-openfoam/run.sh | 1 + .../transport-openfoam/system/blockMeshDict | 20 ++++++--- .../transport-openfoam/system/fvSchemes | 4 +- .../transport-openfoam/system/fvSolution | 4 +- .../transport-openfoam/system/preciceDict | 1 + .../transport-openfoam/system/setFieldsDict | 8 +++- .../transport-openfoam/system/topoSetDict | 20 +++++++++ 10 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 channel-transport/transport-openfoam/constant/fvOptions create mode 100644 channel-transport/transport-openfoam/system/topoSetDict diff --git a/channel-transport/transport-openfoam/clean.sh b/channel-transport/transport-openfoam/clean.sh index b64fc5101..5120c1355 100755 --- a/channel-transport/transport-openfoam/clean.sh +++ b/channel-transport/transport-openfoam/clean.sh @@ -4,3 +4,4 @@ set -e -u . ../../tools/cleaning-tools.sh clean_openfoam . +rm -rf ./0/ diff --git a/channel-transport/transport-openfoam/constant/fvOptions b/channel-transport/transport-openfoam/constant/fvOptions new file mode 100644 index 000000000..8cea42d49 --- /dev/null +++ b/channel-transport/transport-openfoam/constant/fvOptions @@ -0,0 +1,44 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvOptions; +} + +codedSource +{ + type vectorCodedSource; + // selectionMode all; + selectionMode cellSet; + cellSet box1; + + fields (U); + name sourceTime; + + codeConstrain //constrain + #{ + return; + #}; + + codeCorrect //correct + #{ + const labelList& cells = this->cells(); + const volVectorField& U_vol = mesh_.lookupObject("U_vol"); + for(auto cell : cells) + { + fld[cell].x() = U_vol[cell].x(); + } + #}; + + codeAddSup // source term + #{ + return; + #}; + + codeAddSupRho + #{ + return; + #}; +} +// vim:ft=foam diff --git a/channel-transport/transport-openfoam/constant/transportProperties b/channel-transport/transport-openfoam/constant/transportProperties index 43d8644a6..8d841ddc5 100644 --- a/channel-transport/transport-openfoam/constant/transportProperties +++ b/channel-transport/transport-openfoam/constant/transportProperties @@ -6,4 +6,4 @@ FoamFile object transportProperties; } -DT 0.01; +DT 0.1; diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh index 3cbec2a56..20b10d2a4 100755 --- a/channel-transport/transport-openfoam/run.sh +++ b/channel-transport/transport-openfoam/run.sh @@ -5,6 +5,7 @@ set -e -u exec > >(tee --append "$LOGFILE") 2>&1 blockMesh +topoSet cp -r 0.orig 0 setFields diff --git a/channel-transport/transport-openfoam/system/blockMeshDict b/channel-transport/transport-openfoam/system/blockMeshDict index bdb4fe67b..19774348b 100644 --- a/channel-transport/transport-openfoam/system/blockMeshDict +++ b/channel-transport/transport-openfoam/system/blockMeshDict @@ -49,10 +49,20 @@ vertices // Grading -h1 16; -h2 8; -h3 24; -v1 8; +//h1 16; +//h2 8; +//h3 24; +//v1 8; + +//h1 40; +//h2 20; +//h3 60; +//v1 32; + +h1 20; +h2 10; +h3 30; +v1 16; blocks ( @@ -143,4 +153,4 @@ boundary ( 18 19 23 22 ) ); } -); \ No newline at end of file +); diff --git a/channel-transport/transport-openfoam/system/fvSchemes b/channel-transport/transport-openfoam/system/fvSchemes index 7ffafdece..6bb4d7d8c 100644 --- a/channel-transport/transport-openfoam/system/fvSchemes +++ b/channel-transport/transport-openfoam/system/fvSchemes @@ -19,12 +19,14 @@ gradSchemes divSchemes { default none; - div(phi,T) Gauss linearUpwind grad(T); + div(phi,U) Gauss linear; + div(phi,T) Gauss upwind; //linearUpwind grad(T); } laplacianSchemes { default none; + laplacian(DT,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; } diff --git a/channel-transport/transport-openfoam/system/fvSolution b/channel-transport/transport-openfoam/system/fvSolution index df39d3595..74640654b 100644 --- a/channel-transport/transport-openfoam/system/fvSolution +++ b/channel-transport/transport-openfoam/system/fvSolution @@ -11,11 +11,11 @@ solvers { T { - solver PBiCGStab; + solver PBiCGStab; preconditioner DILU; tolerance 1e-6; relTol 0; - norm default; + norm default; } } diff --git a/channel-transport/transport-openfoam/system/preciceDict b/channel-transport/transport-openfoam/system/preciceDict index aca923918..205148959 100644 --- a/channel-transport/transport-openfoam/system/preciceDict +++ b/channel-transport/transport-openfoam/system/preciceDict @@ -34,4 +34,5 @@ interfaces FF { solverType incompressible; + nameU U_vol; } diff --git a/channel-transport/transport-openfoam/system/setFieldsDict b/channel-transport/transport-openfoam/system/setFieldsDict index c0c2e35b3..245a5ca0e 100644 --- a/channel-transport/transport-openfoam/system/setFieldsDict +++ b/channel-transport/transport-openfoam/system/setFieldsDict @@ -13,12 +13,16 @@ defaultFieldValues regions ( - boxToCell + cylinderToCell { - box (0.5 0.5 0) (1.5 1.5 1); + p1 (1 1 0); + p2 (1 1 1); + radius 0.5; + fieldValues ( volScalarFieldValue T 1 + //TODO "0.5 - 0.5 * tanh(((x - 1)*(x - 1) + (y - 1)*(y - 1) - 0.5) / 0.1)" ); } ); diff --git a/channel-transport/transport-openfoam/system/topoSetDict b/channel-transport/transport-openfoam/system/topoSetDict new file mode 100644 index 000000000..0c557f640 --- /dev/null +++ b/channel-transport/transport-openfoam/system/topoSetDict @@ -0,0 +1,20 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object topoSetDict; +} + +actions +( + { + name box1; + type cellSet; + action new; + source boxToCell; + box (0 0 0) (2 2 1); + } +); + + From e3631451aa3caf842a0abc62a0d9db4dee59465c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 10:09:11 +0200 Subject: [PATCH 06/18] Add modified solver --- .../transport-openfoam/.gitignore | 2 + channel-transport/transport-openfoam/0.orig/T | 3 +- .../transport-openfoam/Make/files | 3 + .../transport-openfoam/Make/options | 10 ++ .../transport-openfoam/constant/fvOptions | 6 +- .../transport-openfoam/createFields.H | 43 +++++++ .../dynamicScalarTransportFoam.C | 113 ++++++++++++++++++ channel-transport/transport-openfoam/run.sh | 1 - .../transport-openfoam/system/controlDict | 2 +- .../transport-openfoam/system/topoSetDict | 20 ---- 10 files changed, 176 insertions(+), 27 deletions(-) create mode 100644 channel-transport/transport-openfoam/.gitignore create mode 100644 channel-transport/transport-openfoam/Make/files create mode 100644 channel-transport/transport-openfoam/Make/options create mode 100644 channel-transport/transport-openfoam/createFields.H create mode 100644 channel-transport/transport-openfoam/dynamicScalarTransportFoam.C delete mode 100644 channel-transport/transport-openfoam/system/topoSetDict diff --git a/channel-transport/transport-openfoam/.gitignore b/channel-transport/transport-openfoam/.gitignore new file mode 100644 index 000000000..52b9cb41a --- /dev/null +++ b/channel-transport/transport-openfoam/.gitignore @@ -0,0 +1,2 @@ +Make/ +0/ diff --git a/channel-transport/transport-openfoam/0.orig/T b/channel-transport/transport-openfoam/0.orig/T index d2d0bf23d..3125d4d34 100644 --- a/channel-transport/transport-openfoam/0.orig/T +++ b/channel-transport/transport-openfoam/0.orig/T @@ -19,8 +19,7 @@ boundaryField outlet { - type fixedValue; - value uniform 0; + type zeroGradient; } obstacle diff --git a/channel-transport/transport-openfoam/Make/files b/channel-transport/transport-openfoam/Make/files new file mode 100644 index 000000000..6a9053551 --- /dev/null +++ b/channel-transport/transport-openfoam/Make/files @@ -0,0 +1,3 @@ +dynamicScalarTransportFoam.C + +EXE = $(FOAM_USER_APPBIN)/dynamicScalarTransportFoam diff --git a/channel-transport/transport-openfoam/Make/options b/channel-transport/transport-openfoam/Make/options new file mode 100644 index 000000000..acbe7a647 --- /dev/null +++ b/channel-transport/transport-openfoam/Make/options @@ -0,0 +1,10 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lfvOptions \ + -lmeshTools \ + -lsampling diff --git a/channel-transport/transport-openfoam/constant/fvOptions b/channel-transport/transport-openfoam/constant/fvOptions index 8cea42d49..efde08222 100644 --- a/channel-transport/transport-openfoam/constant/fvOptions +++ b/channel-transport/transport-openfoam/constant/fvOptions @@ -9,9 +9,7 @@ FoamFile codedSource { type vectorCodedSource; - // selectionMode all; - selectionMode cellSet; - cellSet box1; + selectionMode all; fields (U); name sourceTime; @@ -28,6 +26,8 @@ codedSource for(auto cell : cells) { fld[cell].x() = U_vol[cell].x(); + fld[cell].y() = U_vol[cell].y(); + fld[cell].z() = U_vol[cell].z(); } #}; diff --git a/channel-transport/transport-openfoam/createFields.H b/channel-transport/transport-openfoam/createFields.H new file mode 100644 index 000000000..82417fbb0 --- /dev/null +++ b/channel-transport/transport-openfoam/createFields.H @@ -0,0 +1,43 @@ +Info << "Reading field T\n" + << endl; + +volScalarField T( + IOobject( + "T", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE), + mesh); + +Info << "Reading field U\n" + << endl; + +volVectorField U( + IOobject( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE), + mesh); + +Info << "Reading transportProperties\n" + << endl; + +IOdictionary transportProperties( + IOobject( + "transportProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::NO_WRITE)); + +Info << "Reading diffusivity DT\n" + << endl; + +dimensionedScalar DT("DT", dimViscosity, transportProperties); + +#include "createPhi.H" + +#include "createFvOptions.H" diff --git a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C new file mode 100644 index 000000000..f26165ffd --- /dev/null +++ b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2011-2017 OpenFOAM Foundation +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +Application + scalarTransportFoam + +Group + grpBasicSolvers + +Description + Passive scalar transport equation solver. + + \heading Solver details + The equation is given by: + + \f[ + \ddt{T} + \div \left(\vec{U} T\right) - \div \left(D_T \grad T \right) + = S_{T} + \f] + + Where: + \vartable + T | Passive scalar + D_T | Diffusion coefficient + S_T | Source + \endvartable + + \heading Required fields + \plaintable + T | Passive scalar + U | Velocity [m/s] + \endplaintable + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "fvOptions.H" +#include "simpleControl.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + argList::addNote( + "Passive scalar transport equation solver."); + +#include "addCheckCaseOptions.H" +#include "createMesh.H" +#include "createTime.H" +#include "setRootCaseLists.H" + + simpleControl simple(mesh); + +#include "createFields.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info << "\nCalculating scalar transport\n" + << endl; + +#include "CourantNo.H" + + while (simple.loop()) { + Info << "Time = " << runTime.timeName() << nl << endl; + + while (simple.correctNonOrthogonal()) { + // TODO directly read from U + fvOptions.correct(U); + phi = fvc::flux(U); + // fvOptions.correct(phi); + + fvScalarMatrix TEqn( + fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T) == + fvOptions(T)); + + TEqn.relax(); + fvOptions.constrain(TEqn); + TEqn.solve(); + fvOptions.correct(T); + } + + runTime.write(); + } + + Info << "End\n" + << endl; + + return 0; +} + +// ************************************************************************* // diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh index 20b10d2a4..3cbec2a56 100755 --- a/channel-transport/transport-openfoam/run.sh +++ b/channel-transport/transport-openfoam/run.sh @@ -5,7 +5,6 @@ set -e -u exec > >(tee --append "$LOGFILE") 2>&1 blockMesh -topoSet cp -r 0.orig 0 setFields diff --git a/channel-transport/transport-openfoam/system/controlDict b/channel-transport/transport-openfoam/system/controlDict index 6211271cc..ef74b7f99 100644 --- a/channel-transport/transport-openfoam/system/controlDict +++ b/channel-transport/transport-openfoam/system/controlDict @@ -6,7 +6,7 @@ FoamFile object controlDict; } -application scalarTransportFoam; +application dynamicScalarTransportFoam; startFrom startTime; diff --git a/channel-transport/transport-openfoam/system/topoSetDict b/channel-transport/transport-openfoam/system/topoSetDict deleted file mode 100644 index 0c557f640..000000000 --- a/channel-transport/transport-openfoam/system/topoSetDict +++ /dev/null @@ -1,20 +0,0 @@ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object topoSetDict; -} - -actions -( - { - name box1; - type cellSet; - action new; - source boxToCell; - box (0 0 0) (2 2 1); - } -); - - From e103c9a169c03501f1a75c4caa53865c1e28e135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 10:25:08 +0200 Subject: [PATCH 07/18] Remove U_vol and rename solver --- channel-transport/transport-openfoam/clean.sh | 1 + .../transport-openfoam/constant/fvOptions | 44 ------------ .../dynamicScalarTransportFoam.C | 70 ++++++++++--------- .../transport-openfoam/system/preciceDict | 1 - 4 files changed, 39 insertions(+), 77 deletions(-) delete mode 100644 channel-transport/transport-openfoam/constant/fvOptions diff --git a/channel-transport/transport-openfoam/clean.sh b/channel-transport/transport-openfoam/clean.sh index 5120c1355..6ab219250 100755 --- a/channel-transport/transport-openfoam/clean.sh +++ b/channel-transport/transport-openfoam/clean.sh @@ -5,3 +5,4 @@ set -e -u clean_openfoam . rm -rf ./0/ +rm -rf ./Make/linux* diff --git a/channel-transport/transport-openfoam/constant/fvOptions b/channel-transport/transport-openfoam/constant/fvOptions deleted file mode 100644 index efde08222..000000000 --- a/channel-transport/transport-openfoam/constant/fvOptions +++ /dev/null @@ -1,44 +0,0 @@ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object fvOptions; -} - -codedSource -{ - type vectorCodedSource; - selectionMode all; - - fields (U); - name sourceTime; - - codeConstrain //constrain - #{ - return; - #}; - - codeCorrect //correct - #{ - const labelList& cells = this->cells(); - const volVectorField& U_vol = mesh_.lookupObject("U_vol"); - for(auto cell : cells) - { - fld[cell].x() = U_vol[cell].x(); - fld[cell].y() = U_vol[cell].y(); - fld[cell].z() = U_vol[cell].z(); - } - #}; - - codeAddSup // source term - #{ - return; - #}; - - codeAddSupRho - #{ - return; - #}; -} -// vim:ft=foam diff --git a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C index f26165ffd..9ac8e7ba3 100644 --- a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C +++ b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C @@ -63,51 +63,57 @@ Description int main(int argc, char *argv[]) { - argList::addNote( - "Passive scalar transport equation solver."); + argList::addNote + ( + "Passive scalar transport equation solver." + ); -#include "addCheckCaseOptions.H" -#include "createMesh.H" -#include "createTime.H" -#include "setRootCaseLists.H" + #include "addCheckCaseOptions.H" + #include "setRootCaseLists.H" + #include "createTime.H" + #include "createMesh.H" - simpleControl simple(mesh); + simpleControl simple(mesh); -#include "createFields.H" + #include "createFields.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - Info << "\nCalculating scalar transport\n" - << endl; + Info<< "\nCalculating scalar transport\n" << endl; -#include "CourantNo.H" + #include "CourantNo.H" - while (simple.loop()) { - Info << "Time = " << runTime.timeName() << nl << endl; + while (simple.loop()) + { + Info << "Time = " << runTime.timeName() << nl << endl; - while (simple.correctNonOrthogonal()) { - // TODO directly read from U - fvOptions.correct(U); - phi = fvc::flux(U); - // fvOptions.correct(phi); + while (simple.correctNonOrthogonal()) + { + // Update phi as U changes + phi = fvc::flux(U); - fvScalarMatrix TEqn( - fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T) == - fvOptions(T)); + fvScalarMatrix TEqn + ( + fvm::ddt(T) + + fvm::div(phi, T) + - fvm::laplacian(DT, T) + == + fvOptions(T) + ); - TEqn.relax(); - fvOptions.constrain(TEqn); - TEqn.solve(); - fvOptions.correct(T); - } + TEqn.relax(); + fvOptions.constrain(TEqn); + TEqn.solve(); + fvOptions.correct(T); + } - runTime.write(); - } + runTime.write(); + } - Info << "End\n" - << endl; + Info<< "End\n" << endl; - return 0; + return 0; } + // ************************************************************************* // diff --git a/channel-transport/transport-openfoam/system/preciceDict b/channel-transport/transport-openfoam/system/preciceDict index 205148959..aca923918 100644 --- a/channel-transport/transport-openfoam/system/preciceDict +++ b/channel-transport/transport-openfoam/system/preciceDict @@ -34,5 +34,4 @@ interfaces FF { solverType incompressible; - nameU U_vol; } From 38f1424ede691a57fdf70db1b1e78088dbfbc773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 10:29:07 +0200 Subject: [PATCH 08/18] fix --- .../transport-openfoam/.clang-format | 175 ++++++++++++++++++ .../transport-openfoam/.gitignore | 4 +- 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 channel-transport/transport-openfoam/.clang-format diff --git a/channel-transport/transport-openfoam/.clang-format b/channel-transport/transport-openfoam/.clang-format new file mode 100644 index 000000000..00adea7a3 --- /dev/null +++ b/channel-transport/transport-openfoam/.clang-format @@ -0,0 +1,175 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +# +# Proposed clang-format-11 style for OpenFOAM, trying to follow the OpenFOAM style guide: +# https://develop.openfoam.com/Development/openfoam/-/wikis/coding/style/style +# Configuration developed for the OpenFOAM-preCICE adapter code: +# https://github.com/precice/openfoam-adapter +# Contribute to the discussion at the respective OpenFOAM issue: +# https://develop.openfoam.com/Development/openfoam/-/issues/1634 +# +# Keep `public:` at the first indentation level +AccessModifierOffset: -4 +# Undocumented guideline: align arguments after an open bracket. +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveBitFields: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +# Align operands after operators (+,*,<<) (see BreakBeforeBinaryOperators) +AlignOperands: AlignAfterOperator +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLoopsOnASingleLine: false +# Guideline: Splitting return type and function name +# (this guideline is apparently not strictly followed in OpenFOAM) +# AlwaysBreakAfterReturnType: All +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: false +BinPackParameters: false +# Covered by "BreakBeforeBraces" +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: Always + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: true + BeforeElse: true + BeforeLambdaBody: true + BeforeWhile: true + IndentBraces: true + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +# Guideline (almost): Splitting long lines at an = sign. Indent after split. +# Guideline (almost): Splitting formulae over several lines. +BreakBeforeBinaryOperators: NonAssignment +# Always break before braces: if, for, functions, classes, etc. +BreakBeforeBraces: Allman +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +# Guideline (almost): Splitting logical tests over several lines. +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +# Undocumented guideline (almost): Have the initializer : in a new line. +BreakConstructorInitializers: BeforeColon +BreakStringLiterals: true +# Here we could set the 80 charactes limit, but that would lead to more aggressive changes. +ColumnLimit: 0 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 0 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +# Undocumented guideline: add line after "public:" etc (since clang-format 12) +# EmptyLineAfterAccessModifier: Always +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +# Guideline: Macro loops are like for loops, but without a space. +ForEachMacros: + - forAllIters + - forAllConstIters + - forAllReverseIters + - forAllConstReverseIters + - forAll + - forAllReverse + - forAllIter + - forAllConstIter +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + - Regex: '.*' + Priority: 1 + SortPriority: 0 +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentCaseLabels: false +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: AfterExternBlock +# Guideline: The normal indentation is 4 spaces per logical level. +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +# Required to not change code following the guidelines +# "Leave two empty lines between sections" and +# "Use two empty lines between functions" +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: None +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +# Do not change the order of include statements (could be catastrophic for OpenFOAM) +SortIncludes: false +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +# No "template " (guideline already used, but not documented) +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +# No a{1} (no guideline) +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +# Guideline: Spaces in "if ()", "for ()", but not "forAll ()". +SpaceBeforeParens: ControlStatementsExceptForEachMacros +# Guideline: Range-based for should have a space surrounding the ':'. +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInConditionalStatement: false +# No "arr[3] = [ 1, 2, 3 ]" (no guideline). +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +# Treat the code as C++11 or later +Standard: Latest +StatementMacros: +TabWidth: 4 +UseCRLF: false +# Guideline: No tab characters - only use spaces for indentation. +UseTab: Never +WhitespaceSensitiveMacros: +... + diff --git a/channel-transport/transport-openfoam/.gitignore b/channel-transport/transport-openfoam/.gitignore index 52b9cb41a..1f7d5d93a 100644 --- a/channel-transport/transport-openfoam/.gitignore +++ b/channel-transport/transport-openfoam/.gitignore @@ -1,2 +1,4 @@ -Make/ +Make/* +!Make/files +!Make/options 0/ From 14db9a1a661779e201bf9c9efae0b6f2b396daa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 10:41:19 +0200 Subject: [PATCH 09/18] Revert to default schemes --- channel-transport/transport-openfoam/system/fvSchemes | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/channel-transport/transport-openfoam/system/fvSchemes b/channel-transport/transport-openfoam/system/fvSchemes index 6bb4d7d8c..7ffafdece 100644 --- a/channel-transport/transport-openfoam/system/fvSchemes +++ b/channel-transport/transport-openfoam/system/fvSchemes @@ -19,14 +19,12 @@ gradSchemes divSchemes { default none; - div(phi,U) Gauss linear; - div(phi,T) Gauss upwind; //linearUpwind grad(T); + div(phi,T) Gauss linearUpwind grad(T); } laplacianSchemes { default none; - laplacian(DT,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; } From a4d0899d04166b23bfce5954ce2f47d224869552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 11:42:37 +0200 Subject: [PATCH 10/18] Fix dimensions of T --- channel-transport/transport-openfoam/0.orig/T | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channel-transport/transport-openfoam/0.orig/T b/channel-transport/transport-openfoam/0.orig/T index 3125d4d34..d7a18ffa1 100644 --- a/channel-transport/transport-openfoam/0.orig/T +++ b/channel-transport/transport-openfoam/0.orig/T @@ -6,7 +6,7 @@ FoamFile object T; } -dimensions [0 2 -2 0 0 0 0]; +dimensions [0 0 0 1 0 0 0]; internalField uniform 0; From 900eef567361a9014917e2bb2d0b20bfb3bfb57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 11:43:02 +0200 Subject: [PATCH 11/18] Revert to tutorial files --- .../transport-openfoam/system/fvSchemes | 11 ++++++++ .../transport-openfoam/system/fvSolution | 28 +++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/channel-transport/transport-openfoam/system/fvSchemes b/channel-transport/transport-openfoam/system/fvSchemes index 7ffafdece..f3a636050 100644 --- a/channel-transport/transport-openfoam/system/fvSchemes +++ b/channel-transport/transport-openfoam/system/fvSchemes @@ -1,3 +1,10 @@ +/*--------------------------------*- 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; @@ -5,6 +12,7 @@ FoamFile class dictionary; object fvSchemes; } +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes { @@ -37,3 +45,6 @@ snGradSchemes { default corrected; } + + +// ************************************************************************* // diff --git a/channel-transport/transport-openfoam/system/fvSolution b/channel-transport/transport-openfoam/system/fvSolution index 74640654b..b258c9b1b 100644 --- a/channel-transport/transport-openfoam/system/fvSolution +++ b/channel-transport/transport-openfoam/system/fvSolution @@ -1,25 +1,35 @@ +/*--------------------------------*- 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; - location "system"; object fvSolution; } +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers { - T - { - solver PBiCGStab; - preconditioner DILU; - tolerance 1e-6; - relTol 0; - norm default; - } + T + { + solver PBiCGStab; + preconditioner DILU; + tolerance 1e-6; + relTol 0; + norm default; + } } SIMPLE { nNonOrthogonalCorrectors 0; } + + +// ************************************************************************* // From 759e9e50d7e764f2ff08a1c51b5a260f8058cfe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 12:45:11 +0200 Subject: [PATCH 12/18] Recompute phi after the preCICE adapter --- .../transport-openfoam/dynamicScalarTransportFoam.C | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C index 9ac8e7ba3..f880dd720 100644 --- a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C +++ b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C @@ -81,17 +81,17 @@ int main(int argc, char *argv[]) Info<< "\nCalculating scalar transport\n" << endl; - #include "CourantNo.H" - while (simple.loop()) { Info << "Time = " << runTime.timeName() << nl << endl; + Info<< "Recompute phi" << endl; + fvOptions.correct(U); + phi = fvc::flux(U); + #include "CourantNo.H" + while (simple.correctNonOrthogonal()) { - // Update phi as U changes - phi = fvc::flux(U); - fvScalarMatrix TEqn ( fvm::ddt(T) From 78e47697a821b7e726d339534c61c7c64384ba8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 13:40:30 +0200 Subject: [PATCH 13/18] Correctly set blob --- channel-transport/transport-openfoam/run.sh | 2 +- .../system/setExprFieldsDict | 29 +++++++++++++++++++ .../transport-openfoam/system/setFieldsDict | 28 ------------------ 3 files changed, 30 insertions(+), 29 deletions(-) create mode 100644 channel-transport/transport-openfoam/system/setExprFieldsDict delete mode 100644 channel-transport/transport-openfoam/system/setFieldsDict diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh index 3cbec2a56..bf6db3941 100755 --- a/channel-transport/transport-openfoam/run.sh +++ b/channel-transport/transport-openfoam/run.sh @@ -6,7 +6,7 @@ exec > >(tee --append "$LOGFILE") 2>&1 blockMesh cp -r 0.orig 0 -setFields +setExprFields ../../tools/run-openfoam.sh "$@" . ../../tools/openfoam-remove-empty-dirs.sh && openfoam_remove_empty_dirs diff --git a/channel-transport/transport-openfoam/system/setExprFieldsDict b/channel-transport/transport-openfoam/system/setExprFieldsDict new file mode 100644 index 000000000..69f06ed75 --- /dev/null +++ b/channel-transport/transport-openfoam/system/setExprFieldsDict @@ -0,0 +1,29 @@ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object setExprFieldsDict; +} + +expressions +( + T + { + field T; + + variables + ( + "x = pos().x()" + "y = pos().y()" + "r = 0.5" + "bx = 1" + "by = 1" + ); + + expression + #{ + r - r * tanh(((x - bx)*(x - bx) + (y - by)*(y - by) - r) / 0.1) + #}; + } +); diff --git a/channel-transport/transport-openfoam/system/setFieldsDict b/channel-transport/transport-openfoam/system/setFieldsDict deleted file mode 100644 index 245a5ca0e..000000000 --- a/channel-transport/transport-openfoam/system/setFieldsDict +++ /dev/null @@ -1,28 +0,0 @@ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object setFieldsDict; -} - -defaultFieldValues -( - volScalarFieldValue T 0 -); - -regions -( - cylinderToCell - { - p1 (1 1 0); - p2 (1 1 1); - radius 0.5; - - fieldValues - ( - volScalarFieldValue T 1 - //TODO "0.5 - 0.5 * tanh(((x - 1)*(x - 1) + (y - 1)*(y - 1) - 0.5) / 0.1)" - ); - } -); From 3b001ee1b46940aaef0d9839b254593151b3fd42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Wed, 26 Jun 2024 13:47:56 +0200 Subject: [PATCH 14/18] Add OpenFOAM transport to README --- channel-transport/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channel-transport/README.md b/channel-transport/README.md index 267a70550..da8367ad6 100644 --- a/channel-transport/README.md +++ b/channel-transport/README.md @@ -41,6 +41,8 @@ Transport participant: * Nutils. For more information, have a look at the [Nutils adapter documentation](https://precice.org/adapter-nutils.html). This Nutils solver requires at least Nutils v7.0. +* OpenFOAM. This case uses a modified version of scalarTransportFoam, which recomputes `phi` after the preCICE adapter reads the velocity field. Build it with `wmake`. Read more details in the [OpenFOAM adapter](https://precice.org/adapter-openfoam-overview.html). + ## Running the simulation Open two separate terminals and start one fluid and one transport participant by calling the respective run scripts `run.sh` located in each of the participants' directory. For example: From c711cce87b5d1a23ba868c8fc2993a6a11e5cdfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Thu, 11 Jul 2024 13:09:40 +0200 Subject: [PATCH 15/18] Only set initial condition --- channel-transport/transport-openfoam/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channel-transport/transport-openfoam/run.sh b/channel-transport/transport-openfoam/run.sh index bf6db3941..9a8884f2c 100755 --- a/channel-transport/transport-openfoam/run.sh +++ b/channel-transport/transport-openfoam/run.sh @@ -6,7 +6,7 @@ exec > >(tee --append "$LOGFILE") 2>&1 blockMesh cp -r 0.orig 0 -setExprFields +setExprFields -time 0 ../../tools/run-openfoam.sh "$@" . ../../tools/openfoam-remove-empty-dirs.sh && openfoam_remove_empty_dirs From 5602cfd397d5ad6ad6c2e2bf41ca0e640cf1fb5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Thu, 11 Jul 2024 13:13:11 +0200 Subject: [PATCH 16/18] Add note about openfoam conserving T --- channel-transport/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channel-transport/README.md b/channel-transport/README.md index da8367ad6..497bed369 100644 --- a/channel-transport/README.md +++ b/channel-transport/README.md @@ -41,7 +41,7 @@ Transport participant: * Nutils. For more information, have a look at the [Nutils adapter documentation](https://precice.org/adapter-nutils.html). This Nutils solver requires at least Nutils v7.0. -* OpenFOAM. This case uses a modified version of scalarTransportFoam, which recomputes `phi` after the preCICE adapter reads the velocity field. Build it with `wmake`. Read more details in the [OpenFOAM adapter](https://precice.org/adapter-openfoam-overview.html). +* OpenFOAM. This case uses a modified version of scalarTransportFoam, which recomputes `phi` after the preCICE adapter reads the velocity field. Build it with `wmake`. Read more details in the [OpenFOAM adapter](https://precice.org/adapter-openfoam-overview.html). Note that T accumulates in front of the outlet as this case conserves overall T. ## Running the simulation From 9d7249849169963830b61d4423592caca7731a33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Thu, 11 Jul 2024 13:15:08 +0200 Subject: [PATCH 17/18] Fix application name --- .../transport-openfoam/dynamicScalarTransportFoam.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C index f880dd720..0a3e787ca 100644 --- a/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C +++ b/channel-transport/transport-openfoam/dynamicScalarTransportFoam.C @@ -24,7 +24,7 @@ License along with OpenFOAM. If not, see . Application - scalarTransportFoam + dynamicScalarTransportFoam Group grpBasicSolvers From 7e6502ba4d3dd93bce81ad1db685a3b2091e16f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Simonis?= Date: Thu, 11 Jul 2024 13:25:55 +0200 Subject: [PATCH 18/18] Add changelog --- changelog-entries/551.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog-entries/551.md diff --git a/changelog-entries/551.md b/changelog-entries/551.md new file mode 100644 index 000000000..86ff9b8ac --- /dev/null +++ b/changelog-entries/551.md @@ -0,0 +1 @@ +- Added OpenFOAM variant of the transport participant to the channel-transport tutorial.