From c78101a9ae210a360d9238763e799e5857e24a27 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 14 Apr 2022 15:47:39 +0100 Subject: [PATCH] ENH: chtMultiRegionFoam: support for -dry-run. Fixes #2446 --- .../chtMultiRegionFoam/chtMultiRegionFoam.C | 3 +- .../chtMultiRegionSimpleFoam.C | 3 +- .../fluid/createFluidMeshes.H | 66 +++++++++++++--- .../chtMultiRegionTwoPhaseEulerFoam.C | 1 + .../fluid/createFluidMeshes.H | 66 +++++++++++++--- .../solid/createSolidMeshes.H | 79 ++++++++++++++----- 6 files changed, 171 insertions(+), 47 deletions(-) diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index ac160d30e2..ea6760482a 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017-2019 OpenCFD Ltd. + Copyright (C) 2017-2019,2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -70,6 +70,7 @@ int main(int argc, char *argv[]) #define CREATE_MESH createMeshesPostProcess.H #include "postProcess.H" + #include "addCheckCaseOptions.H" #include "setRootCaseLists.H" #include "createTime.H" #include "createMeshes.H" diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index d9d85ab46a..21a452df9f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2017-2019 OpenCFD Ltd. + Copyright (C) 2017-2019,2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -62,6 +62,7 @@ int main(int argc, char *argv[]) #define CREATE_MESH createMeshesPostProcess.H #include "postProcess.H" + #include "addCheckCaseOptions.H" #include "setRootCaseLists.H" #include "createTime.H" #include "createMeshes.H" diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H index 9ded78bb7a..ec6f57d87d 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H @@ -4,21 +4,61 @@ forAll(fluidNames, i) { - Info<< "Create fluid mesh for region " << fluidNames[i] - << " for time = " << runTime.timeName() << nl << endl; + if (args.dryRun() || args.found("dry-run-write")) + { + Info + << "Operating in 'dry-run' mode:" + << " case will run for 1 time step. " + << "All checks assumed OK on a clean exit" << endl; - fluidRegions.set - ( - i, - new fvMesh + FieldBase::allowConstructFromLargerSize = true; + + // Create a simplified 1D mesh and attempt to re-create boundary + // conditions + fluidRegions.set ( - IOobject + i, + new simplifiedMeshes::columnFvMesh(runTime, fluidNames[i]) + ); + + // Stop after 1 iteration of the simplified mesh + + if (args.found("dry-run-write")) + { + // Using saWriteNow triggers function objects execute(), write() + runTime.stopAt(Time::saWriteNow); + + // Make sure mesh gets output to the current time (since + // instance no longer constant) + fluidRegions[i].setInstance(runTime.timeName()); + } + else + { + // Using saNoWriteNow triggers function objects execute(), + // but not write() + runTime.stopAt(Time::saNoWriteNow); + } + + functionObject::outputPrefix = "postProcessing-dry-run"; + } + else + { + Info<< "Create fluid mesh for region " << fluidNames[i] + << " for time = " << runTime.timeName() << nl << endl; + + fluidRegions.set + ( + i, + new fvMesh ( - fluidNames[i], - runTime.timeName(), - runTime, - IOobject::MUST_READ + IOobject + ( + fluidNames[i], + runTime.timeName(), + runTime, + IOobject::MUST_READ + ) ) - ) - ); + ); + } } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C index 7da6d8f650..0da321d188 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C @@ -67,6 +67,7 @@ int main(int argc, char *argv[]) #define CREATE_MESH createMeshesPostProcess.H #include "postProcess.H" + #include "addCheckCaseOptions.H" #include "setRootCase.H" #include "createTime.H" #include "createMeshes.H" diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidMeshes.H index 9ded78bb7a..ec6f57d87d 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidMeshes.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidMeshes.H @@ -4,21 +4,61 @@ forAll(fluidNames, i) { - Info<< "Create fluid mesh for region " << fluidNames[i] - << " for time = " << runTime.timeName() << nl << endl; + if (args.dryRun() || args.found("dry-run-write")) + { + Info + << "Operating in 'dry-run' mode:" + << " case will run for 1 time step. " + << "All checks assumed OK on a clean exit" << endl; - fluidRegions.set - ( - i, - new fvMesh + FieldBase::allowConstructFromLargerSize = true; + + // Create a simplified 1D mesh and attempt to re-create boundary + // conditions + fluidRegions.set ( - IOobject + i, + new simplifiedMeshes::columnFvMesh(runTime, fluidNames[i]) + ); + + // Stop after 1 iteration of the simplified mesh + + if (args.found("dry-run-write")) + { + // Using saWriteNow triggers function objects execute(), write() + runTime.stopAt(Time::saWriteNow); + + // Make sure mesh gets output to the current time (since + // instance no longer constant) + fluidRegions[i].setInstance(runTime.timeName()); + } + else + { + // Using saNoWriteNow triggers function objects execute(), + // but not write() + runTime.stopAt(Time::saNoWriteNow); + } + + functionObject::outputPrefix = "postProcessing-dry-run"; + } + else + { + Info<< "Create fluid mesh for region " << fluidNames[i] + << " for time = " << runTime.timeName() << nl << endl; + + fluidRegions.set + ( + i, + new fvMesh ( - fluidNames[i], - runTime.timeName(), - runTime, - IOobject::MUST_READ + IOobject + ( + fluidNames[i], + runTime.timeName(), + runTime, + IOobject::MUST_READ + ) ) - ) - ); + ); + } } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidMeshes.H index 39644ceee7..fe99536c4c 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidMeshes.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidMeshes.H @@ -4,26 +4,67 @@ forAll(solidNames, i) { - Info<< "Create solid mesh for region " << solidNames[i] - << " for time = " << runTime.timeName() << nl << endl; + if (args.dryRun() || args.found("dry-run-write")) + { + Info + << "Operating in 'dry-run' mode:" + << " case will run for 1 time step. " + << "All checks assumed OK on a clean exit" << endl; - solidRegions.set - ( - i, - new fvMesh + FieldBase::allowConstructFromLargerSize = true; + + // Create a simplified 1D mesh and attempt to re-create boundary + // conditions + solidRegions.set ( - IOobject - ( - solidNames[i], - runTime.timeName(), - runTime, - IOobject::MUST_READ - ) - ) - ); + i, + new simplifiedMeshes::columnFvMesh(runTime, solidNames[i]) + ); - // Force calculation of geometric properties to prevent it being done - // later in e.g. some boundary evaluation - //(void)solidRegions[i].weights(); - //(void)solidRegions[i].deltaCoeffs(); + // Stop after 1 iteration of the simplified mesh + + if (args.found("dry-run-write")) + { + // Using saWriteNow triggers function objects execute(), write() + runTime.stopAt(Time::saWriteNow); + + // Make sure mesh gets output to the current time (since + // instance no longer constant) + solidRegions[i].setInstance(runTime.timeName()); + } + else + { + // Using saNoWriteNow triggers function objects execute(), + // but not write() + runTime.stopAt(Time::saNoWriteNow); + } + + functionObject::outputPrefix = "postProcessing-dry-run"; + } + else + { + Info<< "Create solid mesh for region " << solidNames[i] + << " for time = " << runTime.timeName() << nl << endl; + + solidRegions.set + ( + i, + new fvMesh + ( + IOobject + ( + solidNames[i], + runTime.timeName(), + runTime, + IOobject::MUST_READ + ) + ) + ); + + // Force calculation of geometric properties to prevent it being + // done + // later in e.g. some boundary evaluation + //(void)solidRegions[i].weights(); + //(void)solidRegions[i].deltaCoeffs(); + } }