From 73c2d15d82df00bcd3dba78f3952209a952cc479 Mon Sep 17 00:00:00 2001 From: goniva Date: Thu, 16 May 2013 07:06:53 +0200 Subject: [PATCH] release on 2013-05-16_07-06-53 --- README | 81 ------------ .../solvers/cfdemSolverIB/cfdemSolverIB.C | 2 +- .../cfdemSolverPimple/cfdemSolverPimple.C | 4 +- .../solvers/cfdemSolverPiso/cfdemSolverPiso.C | 4 +- .../cfdemSolverPisoScalar.C | 5 +- doc/CFDEMcoupling_Manual.html | 8 +- doc/CFDEMcoupling_Manual.pdf | Bin 496247 -> 501643 bytes doc/CFDEMcoupling_Manual.txt | 3 + doc/githubAccess_public.pdf | Bin 362471 -> 362471 bytes doc/smoothingModel.html | 34 +++++ doc/smoothingModel.txt | 30 +++++ doc/smoothingModel_constDiffSmoothing.html | 49 ++++++++ doc/smoothingModel_constDiffSmoothing.txt | 44 +++++++ doc/smoothingModel_noSmoothing.html | 32 +++++ doc/smoothingModel_noSmoothing.txt | 29 +++++ src/lagrangian/cfdemParticle/Make/files | 33 +++-- .../cfdemParticle/cfdTools/versionInfo.H | 2 +- .../cfdemParticle/cfdemCloud/cfdemCloud.C | 14 ++- .../cfdemParticle/cfdemCloud/cfdemCloud.H | 5 + .../cfdemParticle/cfdemCloud/cfdemCloudI.H | 5 + .../derived/cfdemCloudIB/cfdemCloudIB.H | 2 +- .../constDiffSmoothing/constDiffSmoothing.C | 107 ++++++++++++++++ .../constDiffSmoothing/constDiffSmoothing.H | 100 +++++++++++++++ .../smoothingModel/noSmoothing/noSmoothing.C | 87 +++++++++++++ .../smoothingModel/noSmoothing/noSmoothing.H | 93 ++++++++++++++ .../smoothingModel/newSmoothingModel.C | 84 +++++++++++++ .../smoothingModel/smoothingModel.C | 74 +++++++++++ .../smoothingModel/smoothingModel.H | 118 ++++++++++++++++++ .../CFD/constant/couplingProperties | 2 + .../CFD/constant/couplingProperties | 9 ++ .../ErgunTestMPI/CFD/system/fvSolution | 7 ++ .../ErgunTestMPI/DEM/post/dummy | 65 ++++++++++ .../ErgunTestMPI/parCFDDEMrun.sh | 2 +- .../CFD/constant/couplingProperties | 2 + .../CFD/constant/couplingProperties | 2 + .../CFD/constant/couplingProperties_init | 2 + .../CFD/constant/couplingProperties_restart | 2 + .../ErgunTestMPI_restart/DEM/post/dummy | 1 + .../CFD/constant/couplingProperties | 2 + .../CFD/constant/couplingProperties | 2 + 40 files changed, 1046 insertions(+), 101 deletions(-) delete mode 100644 README create mode 100644 doc/smoothingModel.html create mode 100644 doc/smoothingModel.txt create mode 100644 doc/smoothingModel_constDiffSmoothing.html create mode 100644 doc/smoothingModel_constDiffSmoothing.txt create mode 100644 doc/smoothingModel_noSmoothing.html create mode 100644 doc/smoothingModel_noSmoothing.txt create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.C create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.H create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/newSmoothingModel.C create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.C create mode 100644 src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.H diff --git a/README b/README deleted file mode 100644 index fd2ca756..00000000 --- a/README +++ /dev/null @@ -1,81 +0,0 @@ -/*---------------------------------------------------------------------------*\ - CFDEMcoupling - Open Source CFD-DEM coupling - - CFDEMcoupling is part of the CFDEMproject - www.cfdem.com - Christoph Goniva, christoph.goniva@cfdem.com - Copyright 2009-2012 JKU Linz - Copyright 2012- DCS Computing GmbH, Linz -------------------------------------------------------------------------------- -License - This file is part of CFDEMcoupling. - - CFDEMcoupling 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. - - CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS - and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER). -\*---------------------------------------------------------------------------*/ - - -CFDEM coupling provides an open source parallel coupled CFD-DEM framework -combining the strengths of LIGGGHTS DEM code and the Open Source -CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand -standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM -code LIGGGHTS. In this toolbox the particle representation within the -CFD solver is organized by "cloud" classes. Key functionalities are organised -in sub-models (e.g. force models, data exchange models, etc.) which can easily -be selected and combined by dictionary settings. - -The coupled solvers run fully parallel on distributed-memory clusters. - -Features are: - -- its modular approach allows users to easily implement new models -- its MPI parallelization enables to use it for large scale problems -- the "forum"_lws on CFD-DEM gives the possibility to exchange with other - users / developers -- the use of GIT allows to easily update to the latest version -- basic documentation is provided - -The file structure: - -- "src" directory including the source files of the coupling toolbox and models -- "applications" directory including the solver files for coupled CFD-DEM simulations -- "doc" directory including the documentation of CFDEMcoupling -- "tutorials" directory including basic tutorial cases showing the functionality - - - -Details on installation are given on the "www.cfdem.com" - -The functionality of this CFD-DEM framwork is described via "tutorial cases" showing -how to use different solvers and models. - -CFDEMcoupling stands for Computational Fluid Dynamics (CFD) - -Discrete Element Method (DEM) coupling. - -CFDEMcoupling is an open-source code, distributed freely under the terms of the -GNU Public License (GPL). - -Core development of CFDEMcoupling is done by -Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012 - - -\*---------------------------------------------------------------------------*/ -(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group. -This offering is not affiliated, approved or endorsed by ESI Group, -the producer of the OpenFOAMĀ® software and owner of the OpenFOAMĀ® trade mark. -\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C index f61f03dd..2a091c1b 100755 --- a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C +++ b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) fvScalarMatrix pEqn ( - fvm::laplacian(rUA, p) == fvc::div(phi) + fvc::ddt(voidfraction) + fvm::laplacian(rUA, p) == fvc::div(phi) + particleCloud.ddtVoidfraction() ); pEqn.setReference(pRefCell, pRefValue); diff --git a/applications/solvers/cfdemSolverPimple/cfdemSolverPimple.C b/applications/solvers/cfdemSolverPimple/cfdemSolverPimple.C index 7ae6f486..9dd4ff0b 100644 --- a/applications/solvers/cfdemSolverPimple/cfdemSolverPimple.C +++ b/applications/solvers/cfdemSolverPimple/cfdemSolverPimple.C @@ -43,6 +43,7 @@ Description #include "cfdemCloud.H" #include "implicitCouple.H" +#include "smoothingModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -80,7 +81,8 @@ int main(int argc, char *argv[]) particleCloud.evolve(voidfraction,Us,U); Info << "update Ksl.internalField()" << endl; - Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource(); + Ksl.oldTime().internalField() = particleCloud.momCoupleM(0).impMomSource(); + particleCloud.smoothingM().smoothen(Ksl); Ksl.correctBoundaryConditions(); // --- Pressure-velocity PIMPLE corrector loop diff --git a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C index c0e76d26..d5fb52de 100644 --- a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C +++ b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C @@ -41,6 +41,7 @@ Description #include "cfdemCloud.H" #include "implicitCouple.H" #include "clockModel.H" +#include "smoothingModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -74,7 +75,8 @@ int main(int argc, char *argv[]) particleCloud.evolve(voidfraction,Us,U); Info << "update Ksl.internalField()" << endl; - Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource(); + Ksl.oldTime().internalField() = particleCloud.momCoupleM(0).impMomSource(); + particleCloud.smoothingM().smoothen(Ksl); Ksl.correctBoundaryConditions(); #include "solverDebugInfo.H" diff --git a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C index 839be3ea..b238a080 100644 --- a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C +++ b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C @@ -41,6 +41,7 @@ Description #include "cfdemCloud.H" #include "implicitCouple.H" #include "forceModel.H" +#include "smoothingModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -74,9 +75,11 @@ int main(int argc, char *argv[]) Info << "- evolve()" << endl; particleCloud.evolve(voidfraction,Us,U); - Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource(); + Ksl.oldTime().internalField() = particleCloud.momCoupleM(0).impMomSource(); + particleCloud.smoothingM().smoothen(Ksl); Ksl.correctBoundaryConditions(); + #include "solverDebugInfo.H" // get scalar source from DEM diff --git a/doc/CFDEMcoupling_Manual.html b/doc/CFDEMcoupling_Manual.html index 7356aaeb..2e48e155 100644 --- a/doc/CFDEMcoupling_Manual.html +++ b/doc/CFDEMcoupling_Manual.html @@ -229,9 +229,11 @@ listing below of styles within certain commands. momCoupleModelmomCoupleModel_explicitCouple momCoupleModel_implicitCouplemomCoupleModel_noCouple regionModelregionModel_allRegion -voidfractionModelvoidfractionModel_GaussVoidFraction -voidfractionModel_IBVoidFractionvoidfractionModel_bigParticleVoidFraction -voidfractionModel_centreVoidFractionvoidfractionModel_dividedVoidFraction +smoothingModelsmoothingModel_constDiffSmoothing +smoothingModel_noSmoothingvoidfractionModel +voidfractionModel_GaussVoidFractionvoidfractionModel_IBVoidFraction +voidfractionModel_bigParticleVoidFractionvoidfractionModel_centreVoidFraction +voidfractionModel_dividedVoidFraction diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf index d5912db0f197c62b553d781369b33e120fde8aff..f064ddecd72dfc12acb9948f6ba2b05e07d69d8d 100644 GIT binary patch delta 36210 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 delta 31998 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 PU@za&)3aTV_Llzx@l-e; diff --git a/doc/CFDEMcoupling_Manual.txt b/doc/CFDEMcoupling_Manual.txt index 12081237..fa012636 100644 --- a/doc/CFDEMcoupling_Manual.txt +++ b/doc/CFDEMcoupling_Manual.txt @@ -260,6 +260,9 @@ listing below of styles within certain commands. "momCoupleModel_noCouple"_momCoupleModel_noCouple.html, "regionModel"_regionModel.html, "regionModel_allRegion"_regionModel_allRegion.html, +"smoothingModel"_smoothingModel.html, +"smoothingModel_constDiffSmoothing"_smoothingModel_constDiffSmoothing.html, +"smoothingModel_noSmoothing"_smoothingModel_noSmoothing.html, "voidfractionModel"_voidFractionModel.html, "voidfractionModel_GaussVoidFraction"_voidFractionModel_GaussVoidFraction.html, "voidfractionModel_IBVoidFraction"_voidFractionModel_IBVoidFraction.html, diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf index 124b660fcc1e364170ec281ee1d71c11b618776a..753f692a99bacb71925bae5f217eda8e4e8b4684 100644 GIT binary patch delta 109 zcmaFfFZR4&Y(hJysiB#Hxq+#PVdI3>35=~1m|7<=w@zT$I)U|Po0CbJNvff-iG{I| kS*oQ;Vw#z0VoI{5g=wN`N{V@kp^2RhAr;e4x3kIs0M`j3pa1{> delta 109 zcmaFfFZR4&Y(hJyiLrs9g^8JoY2$>}35=~1m|7<=w@zT$I)U|Po0EB}p^1fIiix46 iu~}-08IVpgHa0g*PD`{%H8oAMw6h_kV*2TJRv7@hej)Av diff --git a/doc/smoothingModel.html b/doc/smoothingModel.html new file mode 100644 index 00000000..2adb878a --- /dev/null +++ b/doc/smoothingModel.html @@ -0,0 +1,34 @@ + +
CFDEMproject WWW Site - CFDEM Commands +
+ + + + +
+ +

smoothingModel command +

+

Syntax: +

+

Defined in couplingProperties dictionary. +

+
smoothingModel model; 
+
+
  • model = name of the smoothingModel to be applied +
+

Examples: +

+
smoothingModel off; 
+
+

Note: This examples list might not be complete - please look for other models (smoothingModel_XY) in this documentation. +

+

Description: +

+

The smoothingModel is the base class for models smoothen the exchange fields. +

+

Restrictions: none. +

+

Default: none. +

+ diff --git a/doc/smoothingModel.txt b/doc/smoothingModel.txt new file mode 100644 index 00000000..13133406 --- /dev/null +++ b/doc/smoothingModel.txt @@ -0,0 +1,30 @@ +"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c + +:link(lws,http://www.cfdem.com) +:link(lc,CFDEMcoupling_Manual.html#comm) + +:line + +smoothingModel command :h3 + +[Syntax:] + +Defined in couplingProperties dictionary. + +smoothingModel model; :pre + +model = name of the smoothingModel to be applied :ul + +[Examples:] + +smoothingModel off; :pre + +Note: This examples list might not be complete - please look for other models (smoothingModel_XY) in this documentation. + +[Description:] + +The smoothingModel is the base class for models smoothen the exchange fields. + +[Restrictions:] none. + +[Default:] none. diff --git a/doc/smoothingModel_constDiffSmoothing.html b/doc/smoothingModel_constDiffSmoothing.html new file mode 100644 index 00000000..48456c29 --- /dev/null +++ b/doc/smoothingModel_constDiffSmoothing.html @@ -0,0 +1,49 @@ + +
CFDEMproject WWW Site - CFDEM Commands +
+ + + + +
+ +

smoothingModel_constDiffSmoothing command +

+

Syntax: +

+

Defined in couplingProperties dictionary. +

+
smoothingModel constDiffSmoothing;
+constDiffSmoothingProps
+{
+    lowerLimit number1;
+    upperLimit number2;
+    DT number3;
+} 
+
+
  • number1 = scalar fields will be bound to this lower value + +
  • number2 = scalar fields will be bound to this upper value + +
  • number3 = diffusion constant + +

    Examples: +

    +
    constDiffSmoothingProps
    +{
    +    lowerLimit 0.1;
    +    upperLimit 1e10;
    +    DT 1e-3;
    +} 
    +
    +

    Description: +

    +

    The "constDiffSmoothing" model is a basic smoothingModel model which reads a diffusion coefficient being used for smoothening the exchange fields (voidfraction, Ksl, f if present). +

    +

    Restrictions: none. +

    +

    Related commands: +

    +

    smoothingModel +

    + diff --git a/doc/smoothingModel_constDiffSmoothing.txt b/doc/smoothingModel_constDiffSmoothing.txt new file mode 100644 index 00000000..68ab56bb --- /dev/null +++ b/doc/smoothingModel_constDiffSmoothing.txt @@ -0,0 +1,44 @@ +"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c + +:link(lws,http://www.cfdem.com) +:link(lc,CFDEMcoupling_Manual.html#comm) + +:line + +smoothingModel_constDiffSmoothing command :h3 + +[Syntax:] + +Defined in couplingProperties dictionary. + +smoothingModel constDiffSmoothing; +constDiffSmoothingProps +\{ + lowerLimit number1; + upperLimit number2; + DT number3; +\} :pre + +{number1} = scalar fields will be bound to this lower value :ulb,l +{number2} = scalar fields will be bound to this upper value :l +{number3} = diffusion constant :l + +[Examples:] + +constDiffSmoothingProps +\{ + lowerLimit 0.1; + upperLimit 1e10; + DT 1e-3; +\} :pre + +[Description:] + +The "constDiffSmoothing" model is a basic smoothingModel model which reads a diffusion coefficient being used for smoothening the exchange fields (voidfraction, Ksl, f if present). + +[Restrictions:] none. + +[Related commands:] + +"smoothingModel"_smoothingModel.html + diff --git a/doc/smoothingModel_noSmoothing.html b/doc/smoothingModel_noSmoothing.html new file mode 100644 index 00000000..40081ed7 --- /dev/null +++ b/doc/smoothingModel_noSmoothing.html @@ -0,0 +1,32 @@ + +
    CFDEMproject WWW Site - CFDEM Commands +
    + + + + +
    + +

    smoothingModel_noSmoothing command +

    +

    Syntax: +

    +

    Defined in couplingProperties dictionary. +

    +
    smoothingModel off; 
    +
    +

    Examples: +

    +
    smoothingModel off; 
    +
    +

    Description: +

    +

    The "noSmoothing" model is a dummy smoothingModel model which does no smoothing. +

    +

    Restrictions: none. +

    +

    Related commands: +

    +

    smoothingModel +

    + diff --git a/doc/smoothingModel_noSmoothing.txt b/doc/smoothingModel_noSmoothing.txt new file mode 100644 index 00000000..827748e2 --- /dev/null +++ b/doc/smoothingModel_noSmoothing.txt @@ -0,0 +1,29 @@ +"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c + +:link(lws,http://www.cfdem.com) +:link(lc,CFDEMcoupling_Manual.html#comm) + +:line + +smoothingModel_noSmoothing command :h3 + +[Syntax:] + +Defined in couplingProperties dictionary. + +smoothingModel off; :pre + +[Examples:] + +smoothingModel off; :pre + +[Description:] + +The "noSmoothing" model is a dummy smoothingModel model which does no smoothing. + +[Restrictions:] none. + +[Related commands:] + +"smoothingModel"_smoothingModel.html + diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files index c212c7d9..49170aa4 100644 --- a/src/lagrangian/cfdemParticle/Make/files +++ b/src/lagrangian/cfdemParticle/Make/files @@ -6,11 +6,11 @@ voidFractionModels = subModels/voidFractionModel locateModels = subModels/locateModel meshMotionModels = subModels/meshMotionModel momCoupleModels = subModels/momCoupleModel -regionModels = subModels/regionModel dataExchangeModels = subModels/dataExchangeModel averagingModels = subModels/averagingModel clockModels = subModels/clockModel liggghtsCommandModels = subModels/liggghtsCommandModel +smoothingModels = subModels/smoothingModel $(cfdemCloud)/cfdemCloud.C derived/cfdemCloudIB/cfdemCloudIB.C @@ -21,20 +21,33 @@ $(forceModels)/forceModel/newForceModel.C $(forceModels)/noDrag/noDrag.C $(forceModels)/checkCouplingInterval/checkCouplingInterval.C $(forceModels)/DiFeliceDrag/DiFeliceDrag.C +$(forceModels)/DiFeliceDragNLift/DiFeliceDragNLift.C $(forceModels)/GidaspowDrag/GidaspowDrag.C $(forceModels)/SchillerNaumannDrag/SchillerNaumannDrag.C $(forceModels)/Archimedes/Archimedes.C $(forceModels)/ArchimedesIB/ArchimedesIB.C $(forceModels)/interface/interface.C $(forceModels)/ShirgaonkarIB/ShirgaonkarIB.C +$(forceModels)/fieldTimeAverage/fieldTimeAverage.C +$(forceModels)/fieldBound/fieldBound.C +$(forceModels)/volWeightedAverage/volWeightedAverage.C +$(forceModels)/totalMomentumExchange/totalMomentumExchange.C $(forceModels)/KochHillDrag/KochHillDrag.C +$(forceModels)/BeetstraDrag/multiphaseFlowBasic/multiphaseFlowBasic.C +$(forceModels)/BeetstraDrag/BeetstraDrag.C +$(forceModels)/LaEuScalarLiquid/LaEuScalarLiquid.C $(forceModels)/LaEuScalarTemp/LaEuScalarTemp.C +$(forceModels)/LaEuScalarDust/LaEuScalarDust.C $(forceModels)/virtualMassForce/virtualMassForce.C $(forceModels)/gradPForce/gradPForce.C +$(forceModels)/gradULiftForce/gradULiftForce.C $(forceModels)/viscForce/viscForce.C $(forceModels)/MeiLift/MeiLift.C -$(forceModels)/fieldTimeAverage/fieldTimeAverage.C -$(forceModels)/volWeightedAverage/volWeightedAverage.C +$(forceModels)/KochHillDragNLift/KochHillDragNLift.C +$(forceModels)/solidsPressureForce/solidsPressureForce.C +$(forceModels)/periodicPressure/periodicPressure.C +$(forceModels)/periodicPressureControl/periodicPressureControl.C +$(forceModels)/averageSlipVel/averageSlipVel.C $(forceModelsMS)/forceModelMS/forceModelMS.C $(forceModelsMS)/forceModelMS/newForceModelMS.C @@ -64,21 +77,18 @@ $(locateModels)/turboEngineSearch/turboEngineSearch.C $(locateModels)/turboEngineSearchM2M/turboEngineSearchM2M.C $(locateModels)/engineSearchIB/engineSearchIB.C - $(meshMotionModels)/meshMotionModel/meshMotionModel.C $(meshMotionModels)/meshMotionModel/newMeshMotionModel.C $(meshMotionModels)/noMeshMotion/noMeshMotion.C +$(meshMotionModels)/DEMdrivenMeshMotion/DEMdrivenMeshMotion.C $(momCoupleModels)/momCoupleModel/momCoupleModel.C $(momCoupleModels)/momCoupleModel/newMomCoupleModel.C $(momCoupleModels)/explicitCouple/explicitCouple.C +$(momCoupleModels)/explicitCoupleSource/explicitCoupleSource.C $(momCoupleModels)/implicitCouple/implicitCouple.C $(momCoupleModels)/noCouple/noCouple.C -$(regionModels)/regionModel/regionModel.C -$(regionModels)/regionModel/newRegionModel.C -$(regionModels)/allRegion/allRegion.C - $(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C $(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C $(dataExchangeModels)/oneWayVTK/oneWayVTK.C @@ -104,4 +114,9 @@ $(liggghtsCommandModels)/runLiggghts/runLiggghts.C $(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C $(liggghtsCommandModels)/readLiggghtsData/readLiggghtsData.C -LIB = $(FOAM_USER_LIBBIN)/lib$(CFDEM_LIB_NAME) +$(smoothingModels)/smoothingModel/smoothingModel.C +$(smoothingModels)/smoothingModel/newSmoothingModel.C +$(smoothingModels)/noSmoothing/noSmoothing.C +$(smoothingModels)/constDiffSmoothing/constDiffSmoothing.C + +LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME) diff --git a/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H index a6ea6b7f..82651c7a 100755 --- a/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H +++ b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H @@ -1,4 +1,4 @@ -word CFDEMversion="cfdem-2.5.3"; +word CFDEMversion="cfdem-2.5.4"; word compatibleLIGGGHTSversion="2.3.2"; Info << "\nCFDEMcoupling version: " << CFDEMversion << "\n" << endl; diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C index a4a1bf58..2903d310 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C @@ -40,6 +40,7 @@ Description #include "IOModel.H" #include "averagingModel.H" #include "clockModel.H" +#include "smoothingModel.H" #include "liggghtsCommandModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -180,6 +181,14 @@ Foam::cfdemCloud::cfdemCloud *this ) ), + smoothingModel_ + ( + smoothingModel::New + ( + couplingProperties_, + *this + ) + ), meshMotionModel_ ( meshMotionModel::New @@ -503,7 +512,10 @@ bool Foam::cfdemCloud::evolve clockM().start(24,"interpolateEulerFields"); // update voidFractionField - alpha.internalField() = voidFractionM().voidFractionInterp(); + alpha.oldTime().internalField() = voidFractionM().voidFractionInterp(); + + // smoothing exchange field + smoothingM().smoothen(alpha); alpha.correctBoundaryConditions(); // calc ddt(voidfraction) diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H index 5c235753..4635df63 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H @@ -67,6 +67,7 @@ class dataExchangeModel; class IOModel; class averagingModel; class clockModel; +class smoothingModel; class momCoupleModel; class meshMotionModel; class liggghtsCommandModel; @@ -164,6 +165,8 @@ protected: autoPtr clockModel_; + autoPtr smoothingModel_; + autoPtr meshMotionModel_; autoPtr* liggghtsCommand_; @@ -285,6 +288,8 @@ public: inline const clockModel& clockM() const; + inline const smoothingModel& smoothingM() const; + inline const meshMotionModel& meshMotionM() const; inline const wordList& liggghtsCommandModelList() const; diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H index e3ccd832..77ea4bf0 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H @@ -192,6 +192,11 @@ inline const clockModel& cfdemCloud::clockM() const return clockModel_; } +inline const smoothingModel& cfdemCloud::smoothingM() const +{ + return smoothingModel_; +} + inline const meshMotionModel& cfdemCloud::meshMotionM() const { return meshMotionModel_; diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H index 46d4ad7f..8492a62c 100644 --- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H +++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H @@ -54,7 +54,7 @@ namespace Foam class cfdemCloudIB : - private cfdemCloud + public cfdemCloud { protected: diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C new file mode 100644 index 00000000..097b0eac --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C @@ -0,0 +1,107 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). +\*---------------------------------------------------------------------------*/ + +#include "error.H" + +#include "constDiffSmoothing.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(constDiffSmoothing, 0); + +addToRunTimeSelectionTable +( + smoothingModel, + constDiffSmoothing, + dictionary +); + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +constDiffSmoothing::constDiffSmoothing +( + const dictionary& dict, + cfdemCloud& sm +) +: + smoothingModel(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + lowerLimit_(readScalar(propsDict_.lookup("lowerLimit"))), + upperLimit_(readScalar(propsDict_.lookup("upperLimit"))), + DT_(dimensionedScalar("DT",dimensionSet(0,2,-1,0,0,0,0),readScalar(propsDict_.lookup("DT")))) +{} + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +constDiffSmoothing::~constDiffSmoothing() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::constDiffSmoothing::smoothen(volScalarField& field) const +{ + // do smoothing + solve + ( + fvm::ddt(field) + -fvm::laplacian(DT_, field) + ); + + // bound field + forAll(field,cellI) + { + field[cellI]=max(lowerLimit_,min(upperLimit_,field[cellI])); + } +} + +void Foam::constDiffSmoothing::smoothen(volVectorField& field) const +{ + // do smoothing + solve + ( + fvm::ddt(field) + -fvm::laplacian(DT_, field) + ); +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H new file mode 100644 index 00000000..5b34ca33 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). + +Class + constDiffSmoothing + +SourceFiles + constDiffSmoothing.C + +\*---------------------------------------------------------------------------*/ + +#ifndef constDiffSmoothing_H +#define constDiffSmoothing_H + +#include "smoothingModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class constDiffSmoothing Declaration +\*---------------------------------------------------------------------------*/ + +class constDiffSmoothing +: + public smoothingModel +{ + +private: + + dictionary propsDict_; + scalar lowerLimit_; + scalar upperLimit_; + dimensionedScalar DT_; + +public: + + //- Runtime type information + TypeName("constDiffSmoothing"); + + + // Constructors + + //- Construct from components + constDiffSmoothing + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + ~constDiffSmoothing(); + + + // Member Functions + void smoothen(volScalarField&) const; + + void smoothen(volVectorField&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.C new file mode 100644 index 00000000..9b8cab15 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.C @@ -0,0 +1,87 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). +\*---------------------------------------------------------------------------*/ + +#include "error.H" + +#include "noSmoothing.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(noSmoothing, 0); + +addToRunTimeSelectionTable +( + smoothingModel, + noSmoothing, + dictionary +); + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +noSmoothing::noSmoothing +( + const dictionary& dict, + cfdemCloud& sm +) +: + smoothingModel(dict,sm) +{} + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +noSmoothing::~noSmoothing() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::noSmoothing::smoothen(volScalarField& field) const +{ + field=field.oldTime(); +} + +void Foam::noSmoothing::smoothen(volVectorField& field) const +{ + field=field.oldTime(); +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.H b/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.H new file mode 100644 index 00000000..f092b235 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/noSmoothing/noSmoothing.H @@ -0,0 +1,93 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). + +Class + noSmoothing + +SourceFiles + noSmoothing.C + +\*---------------------------------------------------------------------------*/ + +#ifndef noSmoothing_H +#define noSmoothing_H + +#include "smoothingModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class noSmoothing Declaration +\*---------------------------------------------------------------------------*/ + +class noSmoothing +: + public smoothingModel +{ + +public: + + //- Runtime type information + TypeName("off"); + + + // Constructors + + //- Construct from components + noSmoothing + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + ~noSmoothing(); + + + // Member Functions + void smoothen(volScalarField&) const; + + void smoothen(volVectorField&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/newSmoothingModel.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/newSmoothingModel.C new file mode 100644 index 00000000..36bdb124 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/newSmoothingModel.C @@ -0,0 +1,84 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). +\*---------------------------------------------------------------------------*/ + +#include "error.H" + +#include "smoothingModel.H" +#include "standardSearch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +autoPtr smoothingModel::New +( + const dictionary& dict, + cfdemCloud& sm +) +{ + word smoothingModelType + ( + dict.lookup("smoothingModel") + ); + + Info<< "Selecting smoothingModel " + << smoothingModelType << endl; + + + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(smoothingModelType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalError + << "smoothingModel::New(const dictionary&, const spray&) : " + << endl + << " unknown smoothingModelType type " + << smoothingModelType + << ", constructor not in hash table" << endl << endl + << " Valid smoothingModel types are :" + << endl; + Info<< dictionaryConstructorTablePtr_->toc() + << abort(FatalError); + } + + return autoPtr(cstrIter()(dict,sm)); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.C new file mode 100644 index 00000000..bd2770a2 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.C @@ -0,0 +1,74 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). +\*---------------------------------------------------------------------------*/ + +#include "error.H" +#include "smoothingModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(smoothingModel, 0); + +defineRunTimeSelectionTable(smoothingModel, dictionary); + +// * * * * * * * * * * * * * public Member Functions * * * * * * * * * * * * // + +// * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +Foam::smoothingModel::smoothingModel +( + const dictionary& dict, + cfdemCloud& sm +) +: + dict_(dict), + particleCloud_(sm) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::smoothingModel::~smoothingModel() +{} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.H b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.H new file mode 100644 index 00000000..4ec77beb --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/smoothingModel/smoothingModel.H @@ -0,0 +1,118 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling - Open Source CFD-DEM coupling + + CFDEMcoupling is part of the CFDEMproject + www.cfdem.com + Christoph Goniva, christoph.goniva@cfdem.com + Copyright 2009-2012 JKU Linz + Copyright 2012- DCS Computing GmbH, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling. + + CFDEMcoupling 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. + + CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS + and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER). + +Class + smoothingModel + +SourceFiles + smoothingModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef smoothingModel_H +#define smoothingModel_H + +#include "fvCFD.H" +#include "cfdemCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class smoothingModel Declaration +\*---------------------------------------------------------------------------*/ + +class smoothingModel +{ +protected: + + // Protected data + const dictionary& dict_; + cfdemCloud& particleCloud_; + +public: + + //- Runtime type information + TypeName("smoothingModel"); + + // Declare runtime constructor selection table + + declareRunTimeSelectionTable + ( + autoPtr, + smoothingModel, + dictionary, + ( + const dictionary& dict, + cfdemCloud& sm + ), + (dict,sm) + ); + + // Constructors + + //- Construct from components + smoothingModel + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + virtual ~smoothingModel(); + + // Selector + + static autoPtr New + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Member Functions + + virtual void smoothen(volScalarField&) const=0; + + virtual void smoothen(volVectorField&) const=0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/CFD/constant/couplingProperties index 85f409cb..d90088e1 100644 --- a/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/CFD/constant/couplingProperties @@ -48,6 +48,8 @@ averagingModel dilute; clockModel off; +smoothingModel off; + forceModels ( ShirgaonkarIB diff --git a/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/constant/couplingProperties index acfc9385..6733b10c 100644 --- a/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/constant/couplingProperties @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel off; +smoothingModel constDiffSmoothing; + forceModels ( //GidaspowDrag @@ -68,6 +70,13 @@ turbulenceModelType RASProperties;//LESProperties;// //===========================================================================// // sub-model properties +constDiffSmoothingProps +{ + lowerLimit 0.1; + upperLimit 1e10; + DT 1e-3; +} + implicitCoupleProps { velFieldName "U"; diff --git a/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/system/fvSolution b/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/system/fvSolution index 4e41582a..619de9da 100644 --- a/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/system/fvSolution +++ b/tutorials/cfdemSolverPimple/ErgunTestMPI/CFD/system/fvSolution @@ -54,6 +54,13 @@ solvers tolerance 1e-05; relTol 0; } + "(voidfraction|Ksl|f)" + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + } } PIMPLE diff --git a/tutorials/cfdemSolverPimple/ErgunTestMPI/DEM/post/dummy b/tutorials/cfdemSolverPimple/ErgunTestMPI/DEM/post/dummy index 9ca241b3..46d51480 100644 --- a/tutorials/cfdemSolverPimple/ErgunTestMPI/DEM/post/dummy +++ b/tutorials/cfdemSolverPimple/ErgunTestMPI/DEM/post/dummy @@ -1,3 +1,68 @@ dummyfile dummyfile dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile +dummyfile diff --git a/tutorials/cfdemSolverPimple/ErgunTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPimple/ErgunTestMPI/parCFDDEMrun.sh index b50e1da2..29607417 100644 --- a/tutorials/cfdemSolverPimple/ErgunTestMPI/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverPimple/ErgunTestMPI/parCFDDEMrun.sh @@ -18,7 +18,7 @@ casePath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" logpath=$casePath headerText="run_parallel_cfdemSolverPimple_ErgunTestMPI_CFDDEM" logfileName="log_$headerText" -solverName="cfdemSolverPimple" +solverName="cfdemSolverPimpleSmooth" nrProcs="2" machineFileName="none" # yourMachinefileName | none debugMode="off" # on | off diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties index 6e27db55..2214e6dd 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel standardClock;//off; +smoothingModel off; + forceModels ( //GidaspowDrag diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties index b3bf7964..bbbcbbe6 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel standardClock;//off; +smoothingModel off; + forceModels ( //GidaspowDrag diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init index 9f176ebd..632833a9 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel off; +smoothingModel off; + forceModels ( //GidaspowDrag diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart index b4ad38d0..fb5b3286 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel off; +smoothingModel off; + forceModels ( //GidaspowDrag diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy index ba551b98..1c248b53 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy @@ -43,3 +43,4 @@ dummyfile dummyfile dummyfile dummyfile +dummyfile diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties index 56342556..e247ee53 100755 --- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel standardClock;//off; // +smoothingModel off; + forceModels ( DiFeliceDrag diff --git a/tutorials/cfdemSolverPisoScalar/packedBedTemp/CFD/constant/couplingProperties b/tutorials/cfdemSolverPisoScalar/packedBedTemp/CFD/constant/couplingProperties index f7055010..1212d264 100644 --- a/tutorials/cfdemSolverPisoScalar/packedBedTemp/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPisoScalar/packedBedTemp/CFD/constant/couplingProperties @@ -46,6 +46,8 @@ averagingModel dense;//dilute;// clockModel off;//standardClock;// +smoothingModel off; + forceModels ( KochHillDrag