From 89fa69ab8df7e7bf3637b81f601efa3ea9e30c50 Mon Sep 17 00:00:00 2001
From: goniva
Date: Fri, 4 Jul 2014 08:57:38 +0200
Subject: [PATCH] release on 2014-07-04_08-57-37
---
README | 81 ++++++++
.../solvers/cfdemSolverPiso/cfdemSolverPiso.C | 8 +-
doc/CFDEMcoupling_Manual.pdf | Bin 513023 -> 513338 bytes
doc/githubAccess_public.pdf | Bin 362748 -> 362748 bytes
doc/momCoupleModel.html | 3 +-
doc/momCoupleModel.txt | 1 +
src/lagrangian/cfdemParticle/Make/files | 49 ++++-
src/lagrangian/cfdemParticle/Make/options | 11 +-
.../cfdemParticle/cfdemCloud/cfdemCloud.C | 10 +-
.../cfdemParticle/cfdemCloud/cfdemCloud.H | 11 ++
.../cfdemParticle/cfdemCloud/cfdemCloudI.H | 5 +
.../derived/cfdemCloudMS/cfdemCloudMS.C | 185 +++++-------------
.../derived/cfdemCloudMS/cfdemCloudMS.H | 32 ++-
.../derived/cfdemCloudMS/cfdemCloudMSI.H | 24 +--
.../cfdemParticle/etc/OFversion/OFversion.H | 2 +-
src/lagrangian/cfdemParticle/etc/functions.sh | 12 +-
.../cfdemParticle/etc/library-list.txt | 10 +
.../cfdemParticle/etc/solver-list.txt | 12 +-
.../cfdemParticle/etc/tutorial-list.txt | 46 ++++-
.../dataExchangeModel/dataExchangeModel.C | 15 +-
.../dataExchangeModel/dataExchangeModel.H | 6 +-
.../twoWayM2M/library/libcouple.a | Bin 4296966 -> 4296822 bytes
.../dataExchangeModel/twoWayMPI/twoWayMPI.C | 23 ++-
.../dataExchangeModel/twoWayMPI/twoWayMPI.H | 2 +
.../forceModel/GidaspowDrag/GidaspowDrag.C | 71 +++++--
.../forceModel/GidaspowDrag/GidaspowDrag.H | 10 +
.../forceModel/KochHillDrag/KochHillDrag.C | 3 +-
.../forceModel/forceModel/forceModel.C | 22 ++-
.../forceModel/forceModel/forceModel.H | 7 +-
.../DiFeliceDragMS/DiFeliceDragMS.C | 2 +-
.../writeLiggghts/writeLiggghts.C | 5 +
.../cfdemSolverPiso/ErgunTestMPI/Allrun.sh | 32 ++-
.../cfdemSolverPiso/ErgunTestMPI/CFD/0/p | 4 +-
.../ErgunTestMPI/DEM/liggghts.restart | Bin 2481193 -> 3928117 bytes
.../CFD/constant/couplingProperties | 2 +-
.../settlingTestMPI/DEM/in.liggghts_init | 16 +-
.../cfdemSolverPisoMS/ErgunTestMPI/CFD/0/p | 10 +-
.../CFD/constant/couplingProperties | 81 ++------
.../ErgunTestMPI/CFD/system/fvSchemes | 3 +-
.../ErgunTestMPI/DEM/liggghts.restart | Bin 8661352 -> 9168036 bytes
.../ErgunTestMPI/parCFDDEMrun.sh | 2 +-
.../packedBedTemp/Allrun.sh | 32 ++-
.../CFD/constant/couplingProperties | 2 +-
.../packedBedTemp/DEM/in.liggghts_init | 64 +++---
.../packedBedTemp/DEM/liggghts.restart | Bin 543941 -> 539749 bytes
.../packedBedTemp/DEM/post/dummy | 1 -
.../packedBedTemp/parCFDDEMrun.sh | 26 +--
47 files changed, 572 insertions(+), 371 deletions(-)
create mode 100755 README
diff --git a/README b/README
new file mode 100755
index 00000000..fd2ca756
--- /dev/null
+++ b/README
@@ -0,0 +1,81 @@
+/*---------------------------------------------------------------------------*\
+ 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/cfdemSolverPiso/cfdemSolverPiso.C b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
index c07ca22d..87d83393 100644
--- a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
+++ b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
@@ -76,9 +76,15 @@ int main(int argc, char *argv[])
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
- particleCloud.smoothingM().smoothen(Ksl);
Ksl.correctBoundaryConditions();
+ //Force Checks
+ vector fTotal(0,0,0);
+ vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField()));
+ reduce(fImpTotal, sumOp());
+ Info << "TotalForceExp: " << fTotal << endl;
+ Info << "TotalForceImp: " << fImpTotal << endl;
+
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf
index 925a599ef866633bbd237228a88288feff19e075..9eeb45196d83df183b8e4d8617370057d17b50ee 100644
GIT binary patch
delta 3577
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
diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf
index 8c95f255536f3c9d1b64874cf0826ffe0c9117d4..a12c932e5d536b7ea527798734b370ad3d6ea30f 100644
GIT binary patch
delta 109
zcmew}QS8q|u?g**<_0DP7N+LL#*GtNCor~7U}~Mf+&Y0}>jYN54yUA41Ct~ZizHJE
kleA=uRLit9<5cssM6)!D#MGp;BnvwmLMo;|=wOur002oOSpWb4
delta 109
zcmew}QS8q|u?g**W`;&ahQ{Wmri~L?Cor~7U}~Mf+&Y0}>jYN54kuHiWCIfuV-s`J
kL`$P2vlJtvG-Cq;v$P}=lQcu4R7*P>LMo;|=wOur0Cd+NumAu6
diff --git a/doc/momCoupleModel.html b/doc/momCoupleModel.html
index 2acae6a2..3a37c23a 100644
--- a/doc/momCoupleModel.html
+++ b/doc/momCoupleModel.html
@@ -33,7 +33,8 @@
Note that the variable "imExSplitFactor" can be set in the couplingProperties in order to treat implicitly defined forces (in the implementation of the force model) as explicit ones. "imExSplitFactor 1.0;" is set by default, meaning that all implicit forces will be considered implicitly, whereas "imExSplitFactor 0.0;" would mean that implicitly defined forces will be treated in an explicit fashion.
-Description:
+
Note that the switch "treatVoidCellsAsExplicitForce true;" can be set in the couplingProperties in order to change the treatment of cells which are void of particles. This is only relevant if (i) smoothing is used, and (ii) implicit force coupling is performed. By default, the particle veloctiy field (Us) will be smoothed to obtain a meaningful reference quantity for the implicit force coupling. In case "treatVoidCellsAsExplicitForce true;" is set, however, Us will not be smoothed and implicit forces (after the smoothing has been performed) in cells void of particles be treated as explicit ones. This avoids the problem of defining Us in cells that are void of particles, but for which an implicit coupling force is obtained in the smoothing process.
+Description:
The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.
diff --git a/doc/momCoupleModel.txt b/doc/momCoupleModel.txt
index 05db72eb..0a7dbf2f 100644
--- a/doc/momCoupleModel.txt
+++ b/doc/momCoupleModel.txt
@@ -31,6 +31,7 @@ Forces can be coupled in an implicit way to the fluid solver (i.e., when solving
Note that the variable "imExSplitFactor" can be set in the couplingProperties in order to treat implicitly defined forces (in the implementation of the force model) as explicit ones. "imExSplitFactor 1.0;" is set by default, meaning that all implicit forces will be considered implicitly, whereas "imExSplitFactor 0.0;" would mean that implicitly defined forces will be treated in an explicit fashion.
+Note that the switch "treatVoidCellsAsExplicitForce true;" can be set in the couplingProperties in order to change the treatment of cells which are void of particles. This is only relevant if (i) smoothing is used, and (ii) implicit force coupling is performed. By default, the particle veloctiy field (Us) will be smoothed to obtain a meaningful reference quantity for the implicit force coupling. In case "treatVoidCellsAsExplicitForce true;" is set, however, Us will not be smoothed and implicit forces (after the smoothing has been performed) in cells void of particles be treated as explicit ones. This avoids the problem of defining Us in cells that are void of particles, but for which an implicit coupling force is obtained in the smoothing process.
[Description:]
The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.
diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files
index e8798d13..3ce050bb 100644
--- a/src/lagrangian/cfdemParticle/Make/files
+++ b/src/lagrangian/cfdemParticle/Make/files
@@ -3,10 +3,10 @@ forceModels = subModels/forceModel
forceModelsMS = subModels/forceModelMS
IOModels = subModels/IOModel
voidFractionModels = subModels/voidFractionModel
+voidFractionModelsMS = subModels/voidFractionModelMS
locateModels = subModels/locateModel
meshMotionModels = subModels/meshMotionModel
momCoupleModels = subModels/momCoupleModel
-regionModels = subModels/regionModel
dataExchangeModels = subModels/dataExchangeModel
averagingModels = subModels/averagingModel
clockModels = subModels/clockModel
@@ -15,6 +15,7 @@ smoothingModels = subModels/smoothingModel
probeModels = subModels/probeModel
$(cfdemCloud)/cfdemCloud.C
+derived/cfdemCloudBiDisperse/cfdemCloudBiDisperse.C
derived/cfdemCloudIB/cfdemCloudIB.C
derived/cfdemCloudMS/cfdemCloudMS.C
@@ -23,36 +24,59 @@ $(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)/interfaceParticleProbe/interfaceParticleProbe.C
+$(forceModels)/fieldStore/fieldStore.C
+$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
+$(forceModels)/fieldBound/fieldBound.C
+$(forceModels)/volWeightedAverage/volWeightedAverage.C
+$(forceModels)/totalMomentumExchange/totalMomentumExchange.C
$(forceModels)/KochHillDrag/KochHillDrag.C
$(forceModels)/KochHillRWDrag/KochHillRWDrag.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)/HollowayDrag/HollowayDrag.C
$(forceModels)/viscForce/viscForce.C
$(forceModels)/MeiLift/MeiLift.C
+$(forceModels)/melting/melting.C
+$(forceModels)/KochHillDragNLift/KochHillDragNLift.C
+/*$(forceModels)/stokesSpheroidDrag/stokesSpheroidDrag.C*/
+$(forceModels)/solidsPressureForce/solidsPressureForce.C
+$(forceModels)/periodicPressure/periodicPressure.C
+$(forceModels)/periodicPressureControl/periodicPressureControl.C
+$(forceModels)/averageSlipVel/averageSlipVel.C
$(forceModels)/particleCellVolume/particleCellVolume.C
-$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
-$(forceModels)/volWeightedAverage/volWeightedAverage.C
$(forceModelsMS)/forceModelMS/forceModelMS.C
$(forceModelsMS)/forceModelMS/newForceModelMS.C
$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C
+$(forceModelsMS)/GidaspowDragMS/GidaspowDragMS.C
+$(forceModelsMS)/noDragMS/noDragMS.C
$(probeModels)/probeModel/probeModel.C
$(probeModels)/probeModel/newProbeModel.C
$(probeModels)/noProbe/noProbe.C
$(probeModels)/particleProbe/particleProbe.C
+/*$(probeModels)/interfaceParticleProbe/interfaceParticleProbe.C*/
$(IOModels)/IOModel/IOModel.C
$(IOModels)/IOModel/newIOModel.C
$(IOModels)/noIO/noIO.C
$(IOModels)/basicIO/basicIO.C
+$(IOModels)/tempIO/tempIO.C
+$(IOModels)/colorIO/colorIO.C
$(IOModels)/trackIO/trackIO.C
$(IOModels)/sophIO/sophIO.C
@@ -60,34 +84,39 @@ $(voidFractionModels)/voidFractionModel/voidFractionModel.C
$(voidFractionModels)/voidFractionModel/newVoidFractionModel.C
$(voidFractionModels)/centreVoidFraction/centreVoidFraction.C
$(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C
+$(voidFractionModels)/dividedVoidFractionBiDi/dividedVoidFractionBiDi.C
$(voidFractionModels)/dividedVoidFractionMS/dividedVoidFractionMS.C
$(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C
$(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C
$(voidFractionModels)/IBVoidFraction/IBVoidFraction.C
+$(voidFractionModels)/weightedNeigbhorsVoidFraction/weightedNeigbhorsVoidFraction.C
+
+$(voidFractionModelsMS)/voidFractionModelMS/voidFractionModelMS.C
+$(voidFractionModelsMS)/voidFractionModelMS/newVoidFractionModelMS.C
$(locateModels)/locateModel/locateModel.C
$(locateModels)/locateModel/newLocateModel.C
$(locateModels)/standardSearch/standardSearch.C
$(locateModels)/engineSearch/engineSearch.C
+$(locateModels)/engineSearchMany2Many/engineSearchMany2Many.C
$(locateModels)/turboEngineSearch/turboEngineSearch.C
$(locateModels)/turboEngineSearchM2M/turboEngineSearchM2M.C
$(locateModels)/engineSearchIB/engineSearchIB.C
-
+$(locateModels)/hyperEngineSearch/hyperEngineSearch.C
+$(locateModels)/ijkSearch/ijkSearch.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
@@ -95,11 +124,13 @@ $(dataExchangeModels)/twoWayFiles/twoWayFiles.C
$(dataExchangeModels)/noDataExchange/noDataExchange.C
$(dataExchangeModels)/twoWayMPI/twoWayMPI.C
$(dataExchangeModels)/twoWayM2M/twoWayM2M.C
+$(dataExchangeModels)/twoWayMany2Many/twoWayMany2Many.C
$(averagingModels)/averagingModel/averagingModel.C
$(averagingModels)/averagingModel/newAveragingModel.C
$(averagingModels)/dilute/dilute.C
$(averagingModels)/dense/dense.C
+$(averagingModels)/denseBiDi/denseBiDi.C
$(clockModels)/clockModel/clockModel.C
$(clockModels)/clockModel/newClockModel.C
@@ -108,6 +139,7 @@ $(clockModels)/noClock/noClock.C
$(liggghtsCommandModels)/liggghtsCommandModel/liggghtsCommandModel.C
$(liggghtsCommandModels)/liggghtsCommandModel/newLiggghtsCommandModel.C
+$(liggghtsCommandModels)/colorParticles/colorParticles.C
$(liggghtsCommandModels)/execute/execute.C
$(liggghtsCommandModels)/runLiggghts/runLiggghts.C
$(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C
@@ -117,5 +149,6 @@ $(smoothingModels)/smoothingModel/smoothingModel.C
$(smoothingModels)/smoothingModel/newSmoothingModel.C
$(smoothingModels)/noSmoothing/noSmoothing.C
$(smoothingModels)/constDiffSmoothing/constDiffSmoothing.C
+$(smoothingModels)/localPSizeDiffSmoothing/localPSizeDiffSmoothing.C
LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME)
diff --git a/src/lagrangian/cfdemParticle/Make/options b/src/lagrangian/cfdemParticle/Make/options
index e3ef2b01..4d01d3d8 100644
--- a/src/lagrangian/cfdemParticle/Make/options
+++ b/src/lagrangian/cfdemParticle/Make/options
@@ -14,11 +14,12 @@ EXE_INC = \
-I$(LIB_SRC)/OpenFOAM/containers/HashTables/labelHashSet \
-I$(CFDEM_LIGGGHTS_SRC_DIR) \
-I$(CFDEM_M2MLIB_PATH) \
+ -I$(CFDEM_Many2ManyLIB_PATH) \
-I$(CFDEM_SRC_DIR)/cfdTools \
LIB_LIBS = \
$(PLIBS) \
- -L$(CFDEM_LIB_DIR) \
+ -L$(FOAM_USER_LIBBIN) \
-lfiniteVolume \
-lincompressibleRASModels \
-lincompressibleLESModels \
@@ -28,4 +29,10 @@ LIB_LIBS = \
-L$(CFDEM_LIGGGHTS_SRC_DIR) \
-Wl,--whole-archive -l$(CFDEM_LIGGGHTS_LIB_NAME) -Wl,--no-whole-archive \
-L$(CFDEM_M2MLIB_PATH) \
- -lcouple
+ -lcouple \
+ -L$(CFDEM_Many2ManyLIB_PATH) \
+ -lcoupleMany2Many \
+
+/* add -I$(CFDEM_POEMSLIB_PATH) \ to EXE_INC */
+/* -L$(CFDEM_POEMSLIB_PATH) \ */
+/* -lpoems */
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
index a56df915..58e57813 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
@@ -100,6 +100,7 @@ Foam::cfdemCloud::cfdemCloud
cgOK_(true),
impDEMdrag_(false),
imExSplitFactor_(1.0),
+ treatVoidCellsAsExplicitForce_(false),
useDDTvoidfraction_(false),
ddtVoidfraction_
(
@@ -219,6 +220,8 @@ Foam::cfdemCloud::cfdemCloud
solveFlow_=Switch(couplingProperties_.lookup("solveFlow"));
if (couplingProperties_.found("imExSplitFactor"))
imExSplitFactor_ = readScalar(couplingProperties_.lookup("imExSplitFactor"));
+ if (couplingProperties_.found("treatVoidCellsAsExplicitForce"))
+ treatVoidCellsAsExplicitForce_ = readBool(couplingProperties_.lookup("treatVoidCellsAsExplicitForce"));
if (couplingProperties_.found("verbose")) verbose_=true;
if (couplingProperties_.found("ignore")) ignore_=true;
if (turbulenceModelType_=="LESProperties")
@@ -508,7 +511,12 @@ bool Foam::cfdemCloud::evolve
//Smoothen "next" fields
smoothingM().dSmoothing();
smoothingM().smoothen(voidFractionM().voidFractionNext());
- smoothingM().smoothenReferenceField(averagingM().UsNext());
+
+ //only smoothen if we use implicit force coupling in cells void of particles
+ //because we need unsmoothened Us field to detect cells for explicit
+ //force coupling
+ if(!treatVoidCellsAsExplicitForce())
+ smoothingM().smoothenReferenceField(averagingM().UsNext());
clockM().stop("setVectorAverage");
}
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
index 31b98f1f..e658f99e 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
@@ -142,6 +142,8 @@ protected:
mutable scalar imExSplitFactor_;
+ mutable bool treatVoidCellsAsExplicitForce_; //will treat the coupling force in cells with no Us data explicitly
+
bool useDDTvoidfraction_;
mutable volScalarField ddtVoidfraction_;
@@ -245,6 +247,8 @@ public:
inline const scalar& imExSplitFactor() const;
+ inline const bool& treatVoidCellsAsExplicitForce() const;
+
inline const bool& ignore() const;
inline const fvMesh& mesh() const;
@@ -298,6 +302,13 @@ public:
virtual inline double ** particleDensity() const {return NULL;};
virtual inline int ** particleTypes() const {return NULL;};
virtual label particleType(label index) const {return -1;};
+
+ //access to the particle's rotation and torque data
+ virtual inline double ** DEMTorques() const {return NULL;};
+ virtual inline double ** omegaArray() const {return NULL;};
+ virtual vector omega(int) const {return Foam::vector(0,0,0);};
+
+ //access to the particles' orientation information
virtual inline double ** exArray() const {return NULL;};
virtual vector ex(int) const {return Foam::vector(0,0,0);};
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
index 91b7b10a..3993ec17 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
@@ -60,6 +60,11 @@ inline const scalar& cfdemCloud::imExSplitFactor() const
return imExSplitFactor_;
};
+inline const bool& cfdemCloud::treatVoidCellsAsExplicitForce() const
+{
+ return treatVoidCellsAsExplicitForce_;
+}
+
inline const scalar& cfdemCloud::cg() const
{
return cg_;
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C
index 5c209a09..2fe8810c 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C
@@ -56,14 +56,14 @@ cfdemCloudMS::cfdemCloudMS
cellIDsCM_(NULL),
bodies_(NULL),
nrigids_(NULL),
- exCM_(NULL),
- eyCM_(NULL),
- ezCM_(NULL),
- typeCM_(NULL),
- typeVolCM_(NULL),
- VclumpCM_(NULL),
- particleWeightsCM_(NULL),
- dHCM_(NULL),
+ nClumpTypes_(1),
+ clumpType_(NULL),
+ clumpVol_(NULL),
+ clumpDH_(NULL),
+ clumpWeights_(NULL),
+ //exCM_(NULL),
+ //eyCM_(NULL),
+ //ezCM_(NULL),
//SclumpCM_(NULL),
//scalingCM_(NULL),
//Cclump_ex_(NULL),
@@ -72,8 +72,6 @@ cfdemCloudMS::cfdemCloudMS
expForcesCM_(NULL),
DEMForcesCM_(NULL),
numberOfClumps_(-1),
- overlapCorr_(readScalar(couplingProperties_.lookup("overlapCorr"))),
- monoMS_(Switch(couplingProperties_.lookup("monoMS"))),
numberOfClumpsChanged_(false),
useforcePerClump_(false),
forceModels_(couplingProperties_.lookup("forceModelsMS"))
@@ -88,9 +86,6 @@ cfdemCloudMS::cfdemCloudMS
forceModels_[i]
);
}
-
- if(overlapCorr_>1.0) FatalError << "overlapCorr_ must be <= 1."<< abort(FatalError);
- Info << "overlapCorr_=" << overlapCorr_ << endl;
}
@@ -103,14 +98,13 @@ cfdemCloudMS::~cfdemCloudMS()
delete cellIDsCM_;
delete bodies_;
delete nrigids_;
- delete exCM_;
- delete eyCM_;
- delete ezCM_;
- delete typeCM_;
- delete typeVolCM_;
- delete VclumpCM_;
- delete particleWeightsCM_;
- delete dHCM_;
+ delete clumpType_;
+ delete clumpVol_;
+ delete clumpDH_;
+ delete clumpWeights_;
+ //delete exCM_;
+ //delete eyCM_;
+ //delete ezCM_;
//delete SclumpCM_;
//delete scalingCM_;
//delete Cclump_ex_;
@@ -126,34 +120,43 @@ cfdemCloudMS::~cfdemCloudMS()
void cfdemCloudMS::getDEMdata()
{
cfdemCloud::getDEMdata();
- // update NClumpTypes in data exch. model
- //dataExchangeM().checkNClumpTypes();
dataExchangeM().getData("xcm","vector-multisphere",positionsCM_); // position of the centre of mass
dataExchangeM().getData("vcm","vector-multisphere",velocitiesCM_); // velocity of the centre of mass
dataExchangeM().getData("body","scalar-atom",bodies_); // clump-particle connex
-
dataExchangeM().getData("nrigid","scalar-multisphere",nrigids_); // # particles in clump
- dataExchangeM().getData("ex_space","vector-multisphere",exCM_); // axis of inertia
- dataExchangeM().getData("ey_space","vector-multisphere",eyCM_); // axis of inertia
- dataExchangeM().getData("ez_space","vector-multisphere",ezCM_); // axis of inertia
+ dataExchangeM().getData("clumptype","scalar-multisphere",clumpType_); // type of the clump
-// dataExchangeM().getData("typeCM","scalar-multisphere",typeCM_); // type of the clump
-// dataExchangeM().getData("nTypes","scalar-global",nTypes_); // nr of clump types
-// dataExchangeM().getData("Vclump","vector-global",typeVolCM_); // Volume of the clump type
- setClumpVolume(); // can be replaced once volume is communicated!!!
- setdHCM(); // calc and store dHCM
+ nClumpTypes_=dataExchangeM().getNumberOfTypes(); // nr of clump types
+ double* typeVol_=dataExchangeM().getTypeVol(); // volume of the clump
-// dataExchangeM().getScalarData("Sclump",SclumpCM_); // surface area of the clump
-// dataExchangeM().getScalarData("scaling",scalingCM_); // scaling of the clump
-// dataExchangeM().getScalarData("Cclump_ex",Cclump_ex_); // cross section of the clump in ex normal direction
-// dataExchangeM().getScalarData("Cclump_ey",Cclump_ey_); // cross section of the clump in ey normal direction
+ //- save clump volume and mass
+ double **typeDH(NULL);
+ dataExchangeM().allocateArray(typeDH,-1,1,nClumpTypes()+1);
+ for(int k = 1;k <= nClumpTypes(); k++)
+ typeDH[k][0]=pow(typeVol_[k]*1.9099,1./3.); // 6/pi=1.9099 // calc a hydraulic diameter as d of vol equal sphere
- // calc Saequi, surface area of the vol aequivalent sphere
- // Saequi=pi*pow(6*VclumpCM_/pi,2./3.);
+ int ct(0);
+ double dh(0);
+ for(int ind = 0;ind < numberOfClumps(); ind++)
+ {
+ ct=clumpType()[0][ind];
+ clumpVol_[ind][0] = typeVol_[ct];
+ clumpDH_[ind][0]=typeDH[ct][0];
+ //Info << "ct=" << ct << endl;
+ //Info << "clumpVol()[ind][0]=" << clumpVol()[ind][0] << endl;
+ //Info << "clumpDH()[ind][0]=" << clumpDH()[ind][0] << endl;
+ }
+ delete typeDH;
+ // --
- // calc Caequi, cross section of the vol aequivalent sphere
- // Caequi=Saequi/4;
+ //dataExchangeM().getData("ex_space","vector-multisphere",exCM_); // axis of inertia
+ //dataExchangeM().getData("ey_space","vector-multisphere",eyCM_); // axis of inertia
+ //dataExchangeM().getData("ez_space","vector-multisphere",ezCM_); // axis of inertia
+ //dataExchangeM().getScalarData("Sclump",SclumpCM_); // surface area of the clump
+ //dataExchangeM().getScalarData("scaling",scalingCM_); // scaling of the clump
+ //dataExchangeM().getScalarData("Cclump_ex",Cclump_ex_); // cross section of the clump in ex normal direction
+ //dataExchangeM().getScalarData("Cclump_ey",Cclump_ey_); // cross section of the clump in ey normal direction
}
void Foam::cfdemCloudMS::giveDEMdata()
@@ -185,22 +188,19 @@ bool cfdemCloudMS::reAllocArrays() const
{
if(cfdemCloud::reAllocArrays())
{
- int nClumpTypes = dataExchangeM().nClumpTypes();
-
// get arrays of new length
dataExchangeM().allocateArray(positionsCM_,0,3,"nbodies");
dataExchangeM().allocateArray(velocitiesCM_,0,3,"nbodies");
dataExchangeM().allocateArray(cellIDsCM_,-1,1,"nbodies");
dataExchangeM().allocateArray(bodies_,0,1);
- dataExchangeM().allocateArray(nrigids_,0,1,"nbodies");
- dataExchangeM().allocateArray(exCM_,0,3,"nbodies");
- dataExchangeM().allocateArray(eyCM_,0,3,"nbodies");
- dataExchangeM().allocateArray(ezCM_,0,3,"nbodies");
- dataExchangeM().allocateArray(typeCM_,0,1,"nbodies");
- dataExchangeM().allocateArray(typeVolCM_,0,1,nClumpTypes);
- dataExchangeM().allocateArray(VclumpCM_,0,1,"nbodies");
- dataExchangeM().allocateArray(particleWeightsCM_,1,1,"nbodies");
- dataExchangeM().allocateArray(dHCM_,1.,1,"nbodies");
+ dataExchangeM().allocateArray(nrigids_,0,1,"nbodies");
+ dataExchangeM().allocateArray(clumpType_,0,3,"nbodies");
+ dataExchangeM().allocateArray(clumpVol_,0,1,"nbodies");
+ dataExchangeM().allocateArray(clumpDH_,1.,1,"nbodies");
+ dataExchangeM().allocateArray(clumpWeights_,1,1,"nbodies");
+ //dataExchangeM().allocateArray(exCM_,0,3,"nbodies");
+ //dataExchangeM().allocateArray(eyCM_,0,3,"nbodies");
+ //dataExchangeM().allocateArray(ezCM_,0,3,"nbodies");
//dataExchangeM().allocateArray(SclumpCM_,0,3,nClumpTypes);
//dataExchangeM().allocateArray(scalingCM_,0,3,"nbodies");
//dataExchangeM().allocateArray(Cclump_ex_,0,3,nClumpTypes);
@@ -259,98 +259,19 @@ void Foam::cfdemCloudMS::setParticleForceField()
(
forceM(0).impParticleForces(),
impForcesCM_,
- particleWeightsCM_,
+ clumpWeights_,
numberOfClumps()
);
averagingM().setVectorSumSimple
(
forceM(0).expParticleForces(),
expForcesCM_,
- particleWeightsCM_,
+ clumpWeights_,
numberOfClumps()
);
}
}
-void Foam::cfdemCloudMS::setClumpVolume()
-{
- //============================================
- // final version if vol is transferred
- //label type;
- //for(int ind = 0;ind < numberOfClumps(); ind++)
- //{
- // type = typeCM()[ind][0];
- // VclumpCM()[ind][0] = typeVolCM()[type][0];
- //}
- //============================================
-
-
- //============================================
- // prelim version
- scalar r(0);
- int nrigidC(-1);
- label ind(-1);
- label prevInd(-2);
-
- // loop all particles
- // NOTE: this approach is inefficient and
- // assumes same overlap for all clumps
- for(int index = 0;index < numberOfParticles(); index++)
- {
- ind=body(index);
- // clump not found
- if (ind < 0) Warning <<"clump was deleted??? ind = "<< ind << endl;
- //else
- {
- //if(verbose_) Pout <<"clump :"<< ind << " found on this proc, cellIDCM(ind)=" << cellIDCM(ind) << endl;
-
- // particles of clump have same size
- // Note: does this work in parallel???
- if(monoMS_)
- {
- if(prevInd!=ind)
- {
- prevInd=ind;
- nrigidC=nrigid(ind);
-
- if (nrigidC <= 0)
- {
- Warning <<"A BUG occurred in Foam::cfdemCloudMS::setClumpVolume() nrigidC = "
- << nrigidC <<", ind = " << ind <<", index=" << index <<"\n" << endl;
- nrigidC = 1;
- }
- r=radius(index);
- VclumpCM_[ind][0]=nrigidC*r*r*r*0.52360*overlapCorr_; // pi/6=0.52360
- //if(verbose_) Pout << "ind=" << ind << " ,VclumpCM_[ind][0]" << VclumpCM_[ind][0] << endl;
- }
- }
- // particles of clump can have different size
- else
- {
- r=radius(index);
- VclumpCM_[ind][0]+=r*r*r*0.52360*overlapCorr_; // pi/6=0.52360
- //if(verbose_) Pout << "summing up volume: " << "ind=" << ind << " ,VclumpCM_[ind][0]" << VclumpCM_[ind][0] << endl;
- }
- }
- //else
- //if(verbose_) Pout <<"clump :"<< ind << " not found on this proc." << endl;
- }
- if(verbose_)
- {
- for(int ind = 0;ind < numberOfClumps(); ind++)
- Pout << "clumpVolume: " << "ind=" << ind << " ,VclumpCM_[ind][0]" << VclumpCM_[ind][0] << endl;
- }
- //============================================
-}
-
-void Foam::cfdemCloudMS::setdHCM()
-{
- // calc a hydraulic diameter as d of vol equal sphere
- for(int ind = 0;ind < numberOfClumps(); ind++)
- dHCM_[ind][0]=pow(VclumpCM_[ind][0]*1.9099,1./3.); // 6/pi=1.9099
-
-}
-
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// PUBLIC MEMBER FUNCTIONS
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.H b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.H
index 0948818a..0d1fa40f 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.H
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.H
@@ -66,17 +66,15 @@ private:
mutable int **bodies_;
mutable int **nrigids_;
- mutable double **exCM_;
- mutable double **eyCM_;
- mutable double **ezCM_;
-
- mutable double **typeCM_;
- mutable double **typeVolCM_;
- mutable double **VclumpCM_;
- mutable double **particleWeightsCM_;
-
- mutable double **dHCM_;
+ mutable int **clumpType_;
+ mutable int nClumpTypes_;
+ mutable double **clumpVol_;
+ mutable double **clumpDH_;
+ mutable double **clumpWeights_;
+ //mutable double **exCM_;
+ //mutable double **eyCM_;
+ //mutable double **ezCM_;
//mutable double **SclumpCM_;
//mutable double **scalingCM_;
//mutable double **Cclump_ex_;
@@ -87,8 +85,6 @@ private:
mutable double **DEMForcesCM_;
int numberOfClumps_;
- scalar overlapCorr_; // ratio between clump vol and sum(particle vol)
- Switch monoMS_;
bool numberOfClumpsChanged_;
bool useforcePerClump_;
@@ -104,8 +100,6 @@ private:
void findCells();
void setForces();
void setParticleForceField();
- void setClumpVolume(); // can be replaced once volume is communicated!!!
- void setdHCM();
public:
@@ -128,8 +122,6 @@ public:
inline double particleVolume(int);
- //inline double d(int);
-
inline vector positionCM(int);
inline vector velocityCM(int);
@@ -144,13 +136,13 @@ public:
inline double **& velocitiesCM() const;
- inline double **& typeCM() const;
+ inline int **& clumpType() const;
- inline double **& typeVolCM() const;
+ inline int nClumpTypes() const;
- inline double **& VclumpCM() const;
+ inline double **& clumpVol() const;
- inline double **& dHCM() const;
+ inline double **& clumpDH() const;
inline double **& impForcesCM() const;
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMSI.H b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMSI.H
index ce5b0794..53f5a88d 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMSI.H
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMSI.H
@@ -42,18 +42,12 @@ inline label Foam::cfdemCloudMS::body(int index)
inline double cfdemCloudMS::particleVolume(int index)
{
int ind = body(index); // particle to clump ID
- double Vp(VclumpCM_[ind][0]);
+ double Vp(clumpVol_[ind][0]);
int nR(nrigid(ind));
if(nR>0) Vp/=nR;
return Vp;
}
-/*inline double cfdemCloudMS::d(int index)
-{
- int ind = body(index); // particle to clump ID
- return dHCM_[ind][0];
-}*/
-
inline vector Foam::cfdemCloudMS::positionCM(int index)
{
vector pos;
@@ -93,24 +87,24 @@ inline double **& cfdemCloudMS::velocitiesCM() const
return velocitiesCM_;
}
-inline double **& cfdemCloudMS::typeCM() const
+inline int cfdemCloudMS::nClumpTypes() const
{
- return typeCM_;
+ return nClumpTypes_;
}
-inline double **& cfdemCloudMS::typeVolCM() const
+inline int **& cfdemCloudMS::clumpType() const
{
- return typeVolCM_;
+ return clumpType_;
}
-inline double **& cfdemCloudMS::VclumpCM() const
+inline double **& cfdemCloudMS::clumpVol() const
{
- return VclumpCM_;
+ return clumpVol_;
}
-inline double **& cfdemCloudMS::dHCM() const
+inline double **& cfdemCloudMS::clumpDH() const
{
- return dHCM_;
+ return clumpDH_;
}
inline double **& cfdemCloudMS::impForcesCM() const
diff --git a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
index 233ee974..aa7bbb96 100644
--- a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
+++ b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
@@ -8,7 +8,7 @@
//#define comp // if comp is on - you must use Make/options_comp!
//define multi sphere
-//#define multisphere
+#define multisphere
// features of 2.1 work also in 2.3
#if defined(version23)
diff --git a/src/lagrangian/cfdemParticle/etc/functions.sh b/src/lagrangian/cfdemParticle/etc/functions.sh
index c0286cce..45e91aae 100755
--- a/src/lagrangian/cfdemParticle/etc/functions.sh
+++ b/src/lagrangian/cfdemParticle/etc/functions.sh
@@ -139,6 +139,7 @@ compileLIGGGHTS()
logpath="$1"
logfileName="$2"
headerText="$3"
+ clean="$4"
#--------------------------------------------------------------------------------#
#- clean up old log file
@@ -157,9 +158,14 @@ compileLIGGGHTS()
echo 2>&1 | tee -a $logpath/$logfileName
#- wclean and wmake
- rm $CFDEM_LIGGGHTS_SRC_DIR/"lmp_"$CFDEM_LIGGGHTS_MAKEFILE_NAME
- rm $CFDEM_LIGGGHTS_SRC_DIR/"lib"$CFDEM_LIGGGHTS_LIB_NAME".a"
- make clean-all 2>&1 | tee -a $logpath/$logfileName
+ if [[ $clean == "false" ]]; then
+ echo "not cleaning LIGGGHTS"
+ else
+ rm $CFDEM_LIGGGHTS_SRC_DIR/"lmp_"$CFDEM_LIGGGHTS_MAKEFILE_NAME
+ rm $CFDEM_LIGGGHTS_SRC_DIR/"lib"$CFDEM_LIGGGHTS_LIB_NAME".a"
+ make clean-all 2>&1 | tee -a $logpath/$logfileName
+ echo "cleaning LIGGGHTS"
+ fi
if [[ $WM_NCOMPPROCS == "" ]]; then
echo "compiling LIGGGHTS on one CPU"
make $CFDEM_LIGGGHTS_MAKEFILE_NAME 2>&1 | tee -a $logpath/$logfileName
diff --git a/src/lagrangian/cfdemParticle/etc/library-list.txt b/src/lagrangian/cfdemParticle/etc/library-list.txt
index 27e798d4..e34c2541 100644
--- a/src/lagrangian/cfdemParticle/etc/library-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/library-list.txt
@@ -1 +1,11 @@
lagrangian/cfdemParticle/dir
+
+#====================================================='
+#- RADL
+fvOptions/dir
+cylPorousMedia/dir
+
+#====================================================='
+#- other
+finiteVolume/dir
+
diff --git a/src/lagrangian/cfdemParticle/etc/solver-list.txt b/src/lagrangian/cfdemParticle/etc/solver-list.txt
index 925e9976..960eff2f 100644
--- a/src/lagrangian/cfdemParticle/etc/solver-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/solver-list.txt
@@ -1,4 +1,14 @@
-cfdemSolverPisoMS/dir
cfdemSolverPiso/dir
cfdemSolverIB/dir
cfdemSolverPisoScalar/dir
+cfdemSolverPimpleImEx/dir
+cfdemSolverIBInterLubrication/dir
+cfdemSolverIBScalar/dir
+cfdemSolverInterDyM/dir
+cfdemSolverInterDyMPC/dir
+cfdemSolverBubble/dir
+cfdemSolverPisoMS/dir
+cfdemSolverPimpleDyM_22x/dir
+cfdemSolverPimpleDyMMS_22x/dir
+cfdemSolverPimpleDyMScalar_22x/dir
+myPimpleDyMFoam/dir
diff --git a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
index d893faf1..92456e25 100644
--- a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
@@ -7,15 +7,51 @@
#===================================================================#
cfdemSolverPiso/settlingTestMPI/dir
-
cfdemSolverPiso/ErgunTestMPI/dir
-
cfdemSolverPiso/ErgunTestMPI_cgs/dir
-
cfdemSolverPiso/ErgunTestMPI_restart/dir
-
cfdemSolverIB/twoSpheresGlowinskiMPI/dir
-
cfdemSolverPisoScalar/packedBedTemp/dir
+#===================================================================#
+# RADL
+cfdemSolverPimpleImEx/settlingTestMPI/dir
+cfdemSolverPimpleImEx/ErgunTestMPI/dir
+#cfdemSolverPimpleImEx/crossFlow/dir
+#cfdemSolverIB/periodicCase/dir
+#cfdemSolverIB/cfdemIBPeriodicCubicalBox_fullyPeriodic/dir
+#cfdemSolverIBInterLubrication/twoCoatedParticlesRelMotion_smallTest/dir
+#cfdemSolverIBScalar/cfdemIBPeriodicCubicalBoxScalar/dir
+
+#===================================================================#
+# NesteJacobs
+#Projects/Neste/cfdemSolverBubble/3pFBreactor/dir
+#Projects/Neste/cfdemSolverInterDyM/3pFBreactor/dir
+
+#===================================================================#
+# not in release:
+
+#cfdemSolverPiso/settlingTestBigParticleMPI/dir
cfdemSolverPiso/ErgunTestCG/dir
+cfdemSolverPiso/ErgunTestM2M/dir
+#cfdemSolverPiso/HopperEmptying/dir
+
+cfdemSolverPimpleDyM/ErgunTestMPI/dir
+
+#cfdemSolverPisoMS/settlingTestMPI/dir
+#cfdemSolverPisoMS/ErgunTestMPI/dir
+
+#cfdemSolverInterDyM/twoPhaseSettlingTest/dir
+#cfdemSolverInterDyM/ErgunTestMPI/dir
+#cfdemSolverInterDyM/granularPiston/dir
+#cfdemSolverInterDyM/sugarNcoffee/dir
+
+#cfdemSolverBubble/ErgunTestMPI_pureLiquid/dir
+
+#- these examples are already designed for 2.3.x
+#cfdemSolverInterDyMPC/sugarNcoffee/dir
+#cfdemSolverInterDyMPC/granularPiston/dir
+#cfdemSolverInterDyMPC/meltingPot/dir
+
+
+
diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C
index c932fdaa..100d2bcd 100755
--- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C
+++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.C
@@ -137,7 +137,7 @@ void Foam::dataExchangeModel::allocateArray
{
int len=0;
if(strcmp(length,"nparticles")==0) len = particleCloud_.numberOfParticles();
- else if (strcmp(length,"nbodies")==0) len = nClumpTypes_;
+ else if (strcmp(length,"nbodies")==0) len = particleCloud_.numberOfClumps();
else FatalError<<"call allocateArray with length, nparticles or nbodies!\n" << abort(FatalError);
allocateArray(array,initVal,width,len);
}
@@ -226,7 +226,7 @@ scalar Foam::dataExchangeModel::timeStepFraction() const
}
int Foam::dataExchangeModel::getNumberOfParticles() const
{
- Warning << "ask for nr of clumps - which is not supported for this dataExchange model" << endl;
+ Warning << "ask for nr of particles - which is not supported for this dataExchange model" << endl;
return -1;
}
@@ -235,7 +235,17 @@ int Foam::dataExchangeModel::getNumberOfClumps() const
Warning << "ask for nr of clumps - which is not supported for this dataExchange model" << endl;
return -1;
}
+int Foam::dataExchangeModel::getNumberOfTypes() const
+{
+ Warning << "ask for nr of types - which is not supported for this dataExchange model" << endl;
+ return -1;
+}
+double* Foam::dataExchangeModel::getTypeVol() const
+{
+ Warning << "ask for type volume - which is not supported for this dataExchange model" << endl;
+ return NULL;
+}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
@@ -248,7 +258,6 @@ dataExchangeModel::dataExchangeModel
dict_(dict),
particleCloud_(sm),
maxNumberOfParticles_(0),
- nClumpTypes_(1),
couplingStep_(0),
DEMts_(-1.),
couplingInterval_(readScalar(dict_.lookup("couplingInterval")))
diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.H b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.H
index db14e440..879d7fa3 100755
--- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.H
+++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/dataExchangeModel/dataExchangeModel.H
@@ -62,8 +62,6 @@ protected:
int maxNumberOfParticles_;
- int nClumpTypes_;
-
mutable int couplingStep_;
scalar DEMts_;
@@ -120,8 +118,6 @@ public:
// Member Function
inline const int& maxNumberOfParticles() const {return maxNumberOfParticles_;};
- inline int nClumpTypes() const {return nClumpTypes_;};
-
template
void getData
(
@@ -240,6 +236,8 @@ public:
virtual int getNumberOfParticles() const;
virtual int getNumberOfClumps() const;
+ virtual int getNumberOfTypes() const;
+ virtual double* getTypeVol() const;
inline void setPositions(label n,double* pos) const
{
diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayM2M/library/libcouple.a b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayM2M/library/libcouple.a
index 9de3cb01476c65d1a87b35d67ea49acbd8d8979a..545482fbe14d327c25ce2fd2292c2c8cb2690cfa 100644
GIT binary patch
delta 108546
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