136 Commits
2.6.4 ... 2.8.2

Author SHA1 Message Date
ee44d40c0e update utilities-list.txt 2015-01-05 13:56:45 +01:00
57d121a073 add finiteVolume/Make/files 2015-01-05 13:56:45 +01:00
fd44270f96 update Make/files 2015-01-05 13:56:45 +01:00
88743b79fd release on 2015-01-05_13-56-45 2015-01-05 13:56:45 +01:00
7fa304d58b Removed the '../DEM' reference from the liggghts init file 2014-12-12 10:34:35 +01:00
b4949ebd52 Solved merge conflict 2014-12-11 18:35:06 +01:00
fb3e8011d1 Cleanup + update for TH files 2014-12-11 18:33:49 +01:00
6d8e15561a update library-list.txt 2014-11-10 08:39:14 +01:00
30ad85f165 update solver-list.txt 2014-11-10 08:39:14 +01:00
8f38e3323c update tutorial-list.txt 2014-11-10 08:39:14 +01:00
5472fe1365 update Make/files 2014-11-10 08:39:14 +01:00
add7ade558 release on 2014-11-10_08-39-14 2014-11-10 08:39:14 +01:00
e1f10f705f Merge branch 'master' of github.com:CFDEMproject/CFDEMcoupling-PFM 2014-11-10 08:38:33 +01:00
270d1a9c51 update library-liggghts-list.txt 2014-11-10 08:33:26 +01:00
6b9b8c123e update library-list.txt 2014-11-10 08:33:26 +01:00
610cf500d3 update solver-list.txt 2014-11-10 08:33:26 +01:00
ded954c64b update tutorial-list.txt 2014-11-10 08:33:26 +01:00
c1f45f8477 update Make/files 2014-11-10 08:33:26 +01:00
ddb19070c5 release on 2014-11-10_08-33-26 2014-11-10 08:33:26 +01:00
f3e1d1428b update library-list.txt 2014-11-10 08:32:06 +01:00
aaaec21646 update solver-list.txt 2014-11-10 08:32:06 +01:00
dfea70fa96 update tutorial-list.txt 2014-11-10 08:32:06 +01:00
81282bbbc6 update Make/files 2014-11-10 08:32:06 +01:00
4426ba4085 release on 2014-11-10_08-32-06 2014-11-10 08:32:06 +01:00
c490123018 update library-liggghts-list.txt 2014-11-10 08:22:06 +01:00
7d43b2a63e update library-list.txt 2014-11-10 08:22:06 +01:00
87c12986cd update solver-list.txt 2014-11-10 08:22:06 +01:00
cabf5a36f9 update tutorial-list.txt 2014-11-10 08:22:06 +01:00
48f4f7508b update Make/files 2014-11-10 08:22:06 +01:00
c562f96f4a release on 2014-11-10_08-22-06 2014-11-10 08:22:06 +01:00
011ab2d3e2 update library-list.txt 2014-11-10 07:57:16 +01:00
fe05da2f16 update solver-list.txt 2014-11-10 07:57:16 +01:00
1c3d9b093c update tutorial-list.txt 2014-11-10 07:57:16 +01:00
a349923c3a update Make/files 2014-11-10 07:57:16 +01:00
409283acc3 release on 2014-11-10_07-57-15 2014-11-10 07:57:15 +01:00
eb6d45dd7b Fixes Compilation
Added missing object files back to lagrangian library. Otherwise solvers
won't compile. If this removal was intentional, it was not complete.
Reverting the change for now.
2014-11-09 18:53:26 +01:00
a8c8955d53 update library-liggghts-list.txt 2014-07-25 13:42:42 +02:00
43f460dc93 update library-list.txt 2014-07-25 13:42:42 +02:00
b4de650ed5 update solver-list.txt 2014-07-25 13:42:42 +02:00
8fb60fd045 update tutorial-list.txt 2014-07-25 13:42:41 +02:00
80030014a2 update Make/files 2014-07-25 13:42:41 +02:00
791bf252aa release on 2014-07-25_13-42-41 2014-07-25 13:42:41 +02:00
b16fb689e1 update library-list.txt 2014-07-17 16:27:28 +02:00
9e5a37168b update solver-list.txt 2014-07-17 16:27:28 +02:00
a2202729bc update tutorial-list.txt 2014-07-17 16:27:28 +02:00
bfafc1ec3b update Make/files 2014-07-17 16:27:28 +02:00
527be9e524 release on 2014-07-17_16-27-27 2014-07-17 16:27:28 +02:00
affb9e9720 update library-liggghts-list.txt 2014-07-17 15:58:49 +02:00
ff02919c99 update library-list.txt 2014-07-17 15:58:49 +02:00
83f8c89120 update solver-list.txt 2014-07-17 15:58:49 +02:00
e746c83f7d update tutorial-list.txt 2014-07-17 15:58:49 +02:00
70e274eb6c update Make/files 2014-07-17 15:58:49 +02:00
bcf54bf223 release on 2014-07-17_15-58-48 2014-07-17 15:58:49 +02:00
f035592c8e update library-list.txt 2014-07-17 11:24:53 +02:00
275bbed043 update solver-list.txt 2014-07-17 11:24:53 +02:00
6bb5e40c45 update tutorial-list.txt 2014-07-17 11:24:53 +02:00
5546d49a3f update Make/files 2014-07-17 11:24:53 +02:00
b0c9a14b8d release on 2014-07-17_11-24-52 2014-07-17 11:24:53 +02:00
8409a90179 update library-liggghts-list.txt 2014-07-17 10:14:56 +02:00
11fb74ce69 update library-list.txt 2014-07-17 10:14:56 +02:00
857f4499ca update solver-list.txt 2014-07-17 10:14:56 +02:00
db33ebfef4 update tutorial-list.txt 2014-07-17 10:14:56 +02:00
b20ea25fd4 update Make/files 2014-07-17 10:14:56 +02:00
cd4b4be8a2 release on 2014-07-17_10-14-56 2014-07-17 10:14:56 +02:00
32d614e017 update 2014-07-17 10:14:11 +02:00
867a60c965 update library-list.txt 2014-07-17 10:09:13 +02:00
9e5549b609 update solver-list.txt 2014-07-17 10:09:13 +02:00
3a1f1c1d9b update tutorial-list.txt 2014-07-17 10:09:13 +02:00
3fa5a83898 update Make/files 2014-07-17 10:09:13 +02:00
b969132b10 release on 2014-07-17_10-09-13 2014-07-17 10:09:13 +02:00
892ba4fef1 update library-liggghts-list.txt 2014-07-17 09:51:23 +02:00
dbec0a7a2c update library-list.txt 2014-07-17 09:51:23 +02:00
3bba346156 update solver-list.txt 2014-07-17 09:51:23 +02:00
b9bc51fca2 update tutorial-list.txt 2014-07-17 09:51:23 +02:00
cd1657e412 update Make/files 2014-07-17 09:51:23 +02:00
1d04b8c164 release on 2014-07-17_09-51-22 2014-07-17 09:51:22 +02:00
3b2dedf0fd update library-list.txt 2014-07-04 12:02:15 +02:00
a36d316891 update solver-list.txt 2014-07-04 12:02:15 +02:00
32ff1d83af update tutorial-list.txt 2014-07-04 12:02:15 +02:00
b378a79102 update Make/files 2014-07-04 12:02:15 +02:00
444b6f763e release on 2014-07-04_12-02-15 2014-07-04 12:02:15 +02:00
6888d13c52 update library-liggghts-list.txt 2014-07-04 11:58:55 +02:00
9ad186dabc update library-list.txt 2014-07-04 11:58:55 +02:00
6e48baf6bc update solver-list.txt 2014-07-04 11:58:55 +02:00
21fbdc17fc update tutorial-list.txt 2014-07-04 11:58:54 +02:00
92dbaab2c4 update Make/files 2014-07-04 11:58:54 +02:00
a26009c9b7 release on 2014-07-04_11-58-54 2014-07-04 11:58:54 +02:00
910adb37d0 update library-list.txt 2014-07-04 09:56:56 +02:00
cf56709426 update solver-list.txt 2014-07-04 09:56:56 +02:00
02ad97b3ed update tutorial-list.txt 2014-07-04 09:56:56 +02:00
27fbdf50f3 update Make/files 2014-07-04 09:56:56 +02:00
e3e93ccfd4 release on 2014-07-04_09-56-56 2014-07-04 09:56:56 +02:00
0460c28694 update library-liggghts-list.txt 2014-07-04 09:53:14 +02:00
db5984d24a update library-list.txt 2014-07-04 09:53:14 +02:00
d794e8cac0 update solver-list.txt 2014-07-04 09:53:14 +02:00
6bae5b44d6 update tutorial-list.txt 2014-07-04 09:53:14 +02:00
6d9b556231 update Make/files 2014-07-04 09:53:14 +02:00
e8514b10bc release on 2014-07-04_09-53-14 2014-07-04 09:53:14 +02:00
ef9d5ebff9 update library-list.txt 2014-07-04 09:43:11 +02:00
628368e97b update solver-list.txt 2014-07-04 09:43:11 +02:00
d3af4fd13a update tutorial-list.txt 2014-07-04 09:43:11 +02:00
2df88af289 update Make/files 2014-07-04 09:43:11 +02:00
b20860e826 release on 2014-07-04_09-43-11 2014-07-04 09:43:11 +02:00
09aa5c1efc update library-liggghts-list.txt 2014-07-04 09:37:38 +02:00
e9e45a2815 update library-list.txt 2014-07-04 09:37:38 +02:00
65b9902d8f update solver-list.txt 2014-07-04 09:37:38 +02:00
d23a5d4972 update tutorial-list.txt 2014-07-04 09:37:38 +02:00
b6550307f4 update Make/files 2014-07-04 09:37:38 +02:00
f891594815 release on 2014-07-04_09-37-38 2014-07-04 09:37:38 +02:00
2950eeed6f update library-list.txt 2014-07-04 08:57:39 +02:00
f20357eff5 update solver-list.txt 2014-07-04 08:57:39 +02:00
c09782151b update tutorial-list.txt 2014-07-04 08:57:39 +02:00
e1862dbbde update Make/files 2014-07-04 08:57:39 +02:00
89fa69ab8d release on 2014-07-04_08-57-37 2014-07-04 08:57:38 +02:00
46601ef6be update library-liggghts-list.txt 2014-06-12 21:37:57 +02:00
22e1d9d1cc update library-list.txt 2014-06-12 21:37:57 +02:00
286b03e644 update solver-list.txt 2014-06-12 21:37:57 +02:00
779dc76694 update tutorial-list.txt 2014-06-12 21:37:57 +02:00
806e505ae3 update Make/files 2014-06-12 21:37:57 +02:00
2eb3439691 release on 2014-06-12_21-37-56 2014-06-12 21:37:57 +02:00
eafb8c413f update library-list.txt 2014-06-02 18:53:40 +02:00
2558225dc1 update solver-list.txt 2014-06-02 18:53:40 +02:00
ff6189d1ad update tutorial-list.txt 2014-06-02 18:53:40 +02:00
9f07eafcda update Make/files 2014-06-02 18:53:40 +02:00
2a4845872c release on 2014-06-02_18-53-39 2014-06-02 18:53:40 +02:00
586cbb4b88 update library-liggghts-list.txt 2014-06-02 18:34:53 +02:00
fa70af51b5 update library-list.txt 2014-06-02 18:34:53 +02:00
ee26baa5bb update solver-list.txt 2014-06-02 18:34:53 +02:00
099d914425 update tutorial-list.txt 2014-06-02 18:34:53 +02:00
ee7034701b update Make/files 2014-06-02 18:34:53 +02:00
9c78ca97f7 release on 2014-06-02_18-34-52 2014-06-02 18:34:53 +02:00
c3bfe130c6 added gitignore file 2014-05-26 19:21:56 +02:00
5c9178ce4d update library-list.txt 2014-05-13 08:58:59 +02:00
64019057ee update solver-list.txt 2014-05-13 08:58:59 +02:00
fe57fac365 update tutorial-list.txt 2014-05-13 08:58:59 +02:00
bc7361faf4 update Make/files 2014-05-13 08:58:59 +02:00
326 changed files with 5849 additions and 3558 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~

26
README
View File

@ -25,16 +25,17 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Description Description
This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS This code provides models and solvers to realize coupled CFD-DEM simulations
and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER). 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 CFDEM(R) coupling provides an open source parallel coupled CFD-DEM framework
combining the strengths of LIGGGHTS DEM code and the Open Source combining the strengths of LIGGGHTS(R) DEM code and the Open Source
CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand CFD package OpenFOAM(R)(*). The CFDEM(R)coupling toolbox allows to expand
standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM
code LIGGGHTS. In this toolbox the particle representation within the code LIGGGHTS(R). In this toolbox the particle representation within the
CFD solver is organized by "cloud" classes. Key functionalities are organised 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 in sub-models (e.g. force models, data exchange models, etc.) which can easily
be selected and combined by dictionary settings. be selected and combined by dictionary settings.
@ -54,7 +55,7 @@ The file structure:
- "src" directory including the source files of the coupling toolbox and models - "src" directory including the source files of the coupling toolbox and models
- "applications" directory including the solver files for coupled CFD-DEM simulations - "applications" directory including the solver files for coupled CFD-DEM simulations
- "doc" directory including the documentation of CFDEMcoupling - "doc" directory including the documentation of CFDEM(R)coupling
- "tutorials" directory including basic tutorial cases showing the functionality - "tutorials" directory including basic tutorial cases showing the functionality
@ -64,18 +65,17 @@ Details on installation are given on the "www.cfdem.com"
The functionality of this CFD-DEM framwork is described via "tutorial cases" showing The functionality of this CFD-DEM framwork is described via "tutorial cases" showing
how to use different solvers and models. how to use different solvers and models.
CFDEMcoupling stands for Computational Fluid Dynamics (CFD) - CFDEM(R)coupling stands for Computational Fluid Dynamics (CFD) -
Discrete Element Method (DEM) coupling. Discrete Element Method (DEM) coupling.
CFDEMcoupling is an open-source code, distributed freely under the terms of the CFDEM(R)coupling is an open-source code, distributed freely under the terms of the
GNU Public License (GPL). GNU Public License (GPL).
Core development of CFDEMcoupling is done by Core development of CFDEM(R)coupling is done by
Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012 Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group. (*) "OpenFOAM(R)"_of is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.
This offering is not affiliated, approved or endorsed by ESI Group, This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks.
the producer of the OpenFOAM® software and owner of the OpenFOAM® trade mark.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

7
applications/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~

View File

@ -11,9 +11,8 @@ EXE_INC = \
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
-I$(LIB_SRC)/fvOptions/lnInclude -I$(LIB_SRC)/fvOptions/lnInclude
EXE_LIBS = \ EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\ -L$(CFDEM_LIB_DIR)\
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
-lincompressibleTransportModels \ -lincompressibleTransportModels \
@ -22,3 +21,4 @@ EXE_LIBS = \
-ldynamicMesh \ -ldynamicMesh \
-lfvOptions \ -lfvOptions \
-l$(CFDEM_LIB_NAME) -l$(CFDEM_LIB_NAME)

View File

@ -72,7 +72,7 @@ int main(int argc, char *argv[])
#include "initContinuityErrs.H" #include "initContinuityErrs.H"
#if defined(version22) #if defined(version22)
#include "createFvOptions.H" #include "createFvOptions.H"
#endif #endif
// create cfdemCloud // create cfdemCloud
@ -128,10 +128,12 @@ int main(int argc, char *argv[])
for (int corr=0; corr<nCorr; corr++) for (int corr=0; corr<nCorr; corr++)
{ {
volScalarField rUA = 1.0/UEqn.A(); volScalarField rUA = 1.0/UEqn.A();
surfaceScalarField rUAf(fvc::interpolate(rUA));
U = rUA*UEqn.H(); U = rUA*UEqn.H();
#ifdef version23 #ifdef version23
phi = (fvc::interpolate(U) & mesh.Sf()); // there is a new version in 23x phi = (fvc::interpolate(U) & mesh.Sf())
+ rUAf*fvc::ddtCorr(U, phi);
#else #else
phi = (fvc::interpolate(U) & mesh.Sf()) phi = (fvc::interpolate(U) & mesh.Sf())
+ fvc::ddtPhiCorr(rUA, U, phi); + fvc::ddtPhiCorr(rUA, U, phi);

View File

@ -7,7 +7,7 @@ EXE_INC = \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \ -I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \ EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\ -L$(CFDEM_LIB_DIR)\
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
-lincompressibleTransportModels \ -lincompressibleTransportModels \

View File

@ -42,6 +42,7 @@ Description
#include "implicitCouple.H" #include "implicitCouple.H"
#include "clockModel.H" #include "clockModel.H"
#include "smoothingModel.H" #include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -59,11 +60,10 @@ int main(int argc, char *argv[])
#include "checkModelType.H" #include "checkModelType.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.loop()) while (runTime.loop())
{ {
Info<< "\nStarting time loop\n" << endl; particleCloud.clockM().start(1,"Global");
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
@ -72,13 +72,24 @@ int main(int argc, char *argv[])
// do particle stuff // do particle stuff
particleCloud.clockM().start(2,"Coupling"); particleCloud.clockM().start(2,"Coupling");
particleCloud.evolve(voidfraction,Us,U); bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl; Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource(); Ksl = particleCloud.momCoupleM(0).impMomSource();
particleCloud.smoothingM().smoothen(Ksl);
Ksl.correctBoundaryConditions(); Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField()));
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H" #include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling"); particleCloud.clockM().stop("Coupling");
@ -91,23 +102,19 @@ int main(int argc, char *argv[])
// Momentum predictor // Momentum predictor
fvVectorMatrix UEqn fvVectorMatrix UEqn
( (
fvm::ddt(voidfraction,U) + fvm::Sp(fvc::ddt(voidfraction),U) fvm::ddt(voidfraction,U) - fvm::Sp(fvc::ddt(voidfraction),U)
+ fvm::div(phi,U) + fvm::Sp(fvc::div(phi),U) + fvm::div(phi,U) - fvm::Sp(fvc::div(phi),U)
// + turbulence->divDevReff(U) // + turbulence->divDevReff(U)
+ particleCloud.divVoidfractionTau(U, voidfraction) + particleCloud.divVoidfractionTau(U, voidfraction)
== ==
- fvm::Sp(Ksl/rho,U) - fvm::Sp(Ksl/rho,U)
); );
if (modelType=="B")
UEqn == - fvc::grad(p) + Ksl/rho*Us;
else
UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us;
UEqn.relax(); UEqn.relax();
if (momentumPredictor && (modelType=="B" || modelType=="Bfull"))
if (momentumPredictor) solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
solve(UEqn); else if (momentumPredictor)
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
// --- PISO loop // --- PISO loop
@ -120,11 +127,17 @@ int main(int argc, char *argv[])
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA)); surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction); volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction);
surfaceScalarField rUAfvoidfraction("(voidfraction2|A(U)F)", fvc::interpolate(rUAvoidfraction));
U = rUA*UEqn.H(); U = rUA*UEqn.H();
phi = (fvc::interpolate(U*voidfraction) & mesh.Sf() ); #ifdef version23
//+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi); phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ rUAfvoidfraction*fvc::ddtCorr(U, phi);
#else
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi);
#endif
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf()); surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS); surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
@ -157,13 +170,14 @@ int main(int argc, char *argv[])
if (nonOrth == nNonOrthCorr) if (nonOrth == nNonOrthCorr)
{ {
phiGes -= pEqn.flux(); phiGes -= pEqn.flux();
phi = phiGes;
} }
} // end non-orthogonal corrector loop } // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H" #include "continuityErrorPhiPU.H"
if (modelType=="B") if (modelType=="B" || modelType=="Bfull")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA; U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA; U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
@ -191,7 +205,7 @@ int main(int argc, char *argv[])
} }
Info<< "End\n" << endl; Info<< "End\n" << endl;
return 0; return 0;
} }

View File

@ -8,7 +8,7 @@ EXE_INC = \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \ -I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \ EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\ -L$(CFDEM_LIB_DIR)\
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
-lincompressibleTransportModels \ -lincompressibleTransportModels \

View File

@ -7,7 +7,7 @@ EXE_INC = \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \ -I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \ EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\ -L$(CFDEM_LIB_DIR)\
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
-lincompressibleTransportModels \ -lincompressibleTransportModels \

View File

@ -30,7 +30,7 @@ Application
Description Description
Transient solver for incompressible flow. Transient solver for incompressible flow.
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected. Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
The code is an evolution of the solver pisoFoam in OpenFOAM(R) 1.6, The code is an evolution of the solver pisoFoam in OpenFOAM(R) 1.6,
where additional functionality for CFD-DEM coupling is added. where additional functionality for CFD-DEM coupling is added.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -40,30 +40,26 @@ Description
#include "cfdemCloud.H" #include "cfdemCloud.H"
#include "implicitCouple.H" #include "implicitCouple.H"
#include "forceModel.H"
#include "smoothingModel.H" #include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createMesh.H" #include "createMesh.H"
#include "createFields.H" #include "createFields.H"
#include "initContinuityErrs.H" #include "initContinuityErrs.H"
// create cfdemCloud // create cfdemCloud
#include "readGravitationalAcceleration.H" #include "readGravitationalAcceleration.H"
cfdemCloud particleCloud(mesh); cfdemCloud particleCloud(mesh);
#include "checkModelType.H" #include "checkModelType.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl; Info<< "\nStarting time loop\n" << endl;
while (runTime.loop()) while (runTime.loop())
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
@ -72,11 +68,15 @@ int main(int argc, char *argv[])
#include "CourantNo.H" #include "CourantNo.H"
// do particle stuff // do particle stuff
Info << "- evolve()" << endl; bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
particleCloud.evolve(voidfraction,Us,U);
Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource(); if(hasEvolved)
particleCloud.smoothingM().smoothen(Ksl); {
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions(); Ksl.correctBoundaryConditions();
@ -87,107 +87,116 @@ int main(int argc, char *argv[])
Tsource.correctBoundaryConditions(); Tsource.correctBoundaryConditions();
// solve scalar transport equation // solve scalar transport equation
phi = fvc::interpolate(U*voidfraction) & mesh.Sf(); fvScalarMatrix TEqn
solve
( (
fvm::ddt(voidfraction,T) fvm::ddt(voidfraction,T) - fvm::Sp(fvc::ddt(voidfraction),T)
+ fvm::div(phi, T) + fvm::div(phi, T) - fvm::Sp(fvc::div(phi),T)
- fvm::laplacian(DT*voidfraction, T) - fvm::laplacian(DT*voidfraction, T)
== ==
Tsource Tsource
); );
TEqn.relax();
TEqn.solve();
// Pressure-velocity PISO corrector if(particleCloud.solveFlow())
{ {
// Momentum predictor // Pressure-velocity PISO corrector
fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U)
+ fvm::div(phi, U)
+ turbulence->divDevReff(U)
==
- fvm::Sp(Ksl/rho,U)
);
UEqn.relax();
if (momentumPredictor)
{ {
//solve UEqn // Momentum predictor
if (modelType=="B") fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U) - fvm::Sp(fvc::ddt(voidfraction),U)
+ fvm::div(phi,U) - fvm::Sp(fvc::div(phi),U)
// + turbulence->divDevReff(U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
==
- fvm::Sp(Ksl/rho,U)
);
UEqn.relax();
if (momentumPredictor && (modelType=="B" || modelType=="Bfull"))
solve(UEqn == - fvc::grad(p) + Ksl/rho*Us); solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
else else if (momentumPredictor)
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us); solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
// --- PISO loop
//for (int corr=0; corr<nCorr; corr++)
int nCorrSoph = nCorr + 5 * pow((1-particleCloud.dataExchangeM().timeStepFraction()),1);
for (int corr=0; corr<nCorrSoph; corr++)
{
volScalarField rUA = 1.0/UEqn.A();
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction);
surfaceScalarField rUAfvoidfraction("(voidfraction2|A(U)F)", fvc::interpolate(rUAvoidfraction));
U = rUA*UEqn.H();
#ifdef version23
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ rUAfvoidfraction*fvc::ddtCorr(U, phi);
#else
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi);
#endif
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
if (modelType=="A")
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
if (nonOrth == nNonOrthCorr)
{
phiGes -= pEqn.flux();
phi = phiGes;
}
} // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H"
if (modelType=="B" || modelType=="Bfull")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
U.correctBoundaryConditions();
} // end piso loop
} }
// --- PISO loop turbulence->correct();
}// end solveFlow
//for (int corr=0; corr<nCorr; corr++) else
int nCorrSoph = nCorr + 5 * pow((1-particleCloud.dataExchangeM().timeStepFraction()),1); {
for (int corr=0; corr<nCorrSoph; corr++) Info << "skipping flow solution." << endl;
{
volScalarField rUA = 1.0/UEqn.A();
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction);
U = rUA*UEqn.H();
#ifdef version23
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() );
#else
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi);
#endif
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
if (modelType=="A")
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
if (nonOrth == nNonOrthCorr)
{
phiGes -= pEqn.flux();
}
} // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H"
if (modelType=="B")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
U.correctBoundaryConditions();
} // end piso loop
} }
turbulence->correct();
runTime.write(); runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"

View File

@ -8,7 +8,7 @@ EXE_INC = \
EXE_LIBS = \ EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\ -L$(CFDEM_LIB_DIR)\
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
-lincompressibleTransportModels \ -lincompressibleTransportModels \

View File

@ -71,6 +71,7 @@ int main(int argc, char *argv[])
double **voidfractions_; double **voidfractions_;
double **particleWeights_; double **particleWeights_;
double **particleVolumes_; double **particleVolumes_;
double **particleV_;
double **cellIDs_; double **cellIDs_;
particleCloud.dataExchangeM().allocateArray(positions_,0.,3); particleCloud.dataExchangeM().allocateArray(positions_,0.,3);
@ -80,6 +81,7 @@ int main(int argc, char *argv[])
particleCloud.dataExchangeM().allocateArray(voidfractions_,0.,1); particleCloud.dataExchangeM().allocateArray(voidfractions_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleWeights_,0.,1); particleCloud.dataExchangeM().allocateArray(particleWeights_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleVolumes_,0.,1); particleCloud.dataExchangeM().allocateArray(particleVolumes_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleV_,0.,1);
particleCloud.get_cellIDs(cellIDs_); // get ref to cellIDs particleCloud.get_cellIDs(cellIDs_); // get ref to cellIDs
//particleCloud.dataExchangeM().allocateArray(cellIDs_,0.,1); //particleCloud.dataExchangeM().allocateArray(cellIDs_,0.,1);
@ -105,7 +107,7 @@ int main(int argc, char *argv[])
particleCloud.locateM().findCell(NULL,positions_,cellIDs_,particleCloud.numberOfParticles()); particleCloud.locateM().findCell(NULL,positions_,cellIDs_,particleCloud.numberOfParticles());
particleCloud.setPos(positions_); particleCloud.setPos(positions_);
particleCloud.voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_); particleCloud.voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_,particleV_);
voidfraction.internalField() = particleCloud.voidFractionM().voidFractionInterp(); voidfraction.internalField() = particleCloud.voidFractionM().voidFractionInterp();
voidfraction.correctBoundaryConditions(); voidfraction.correctBoundaryConditions();
@ -135,6 +137,7 @@ int main(int argc, char *argv[])
particleCloud.dataExchangeM().destroy(voidfractions_,1); particleCloud.dataExchangeM().destroy(voidfractions_,1);
particleCloud.dataExchangeM().destroy(particleWeights_,1); particleCloud.dataExchangeM().destroy(particleWeights_,1);
particleCloud.dataExchangeM().destroy(particleVolumes_,1); particleCloud.dataExchangeM().destroy(particleVolumes_,1);
particleCloud.dataExchangeM().destroy(particleV_,1);
//particleCloud.dataExchangeM().destroy(cellIDs_); // destroyed in cloud //particleCloud.dataExchangeM().destroy(cellIDs_); // destroyed in cloud
Info<< "End\n" << endl; Info<< "End\n" << endl;

7
doc/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~

View File

@ -164,7 +164,7 @@ In order to get the latest code version, please use the git repository at http:/
</P> </P>
<PRE>modelType <PRE>modelType
</PRE> </PRE>
<P>"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". <P>"modelType" refers to the formulation of the equations to be solved. Choose "A", "B" or "Bfull", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". "Bfull" refers to model type I.
</P> </P>
<PRE>couplingInterval <PRE>couplingInterval
</PRE> </PRE>
@ -212,30 +212,31 @@ listing below of styles within certain commands.
<TR ALIGN="center"><TD ><A HREF = "clockModel_noClock.html">clockModel_noClock</A></TD><TD ><A HREF = "clockModel_standardClock.html">clockModel_standardClock</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "clockModel_noClock.html">clockModel_noClock</A></TD><TD ><A HREF = "clockModel_standardClock.html">clockModel_standardClock</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel.html">dataExchangeModel</A></TD><TD ><A HREF = "dataExchangeModel_noDataExchange.html">dataExchangeModel_noDataExchange</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "dataExchangeModel.html">dataExchangeModel</A></TD><TD ><A HREF = "dataExchangeModel_noDataExchange.html">dataExchangeModel_noDataExchange</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_oneWayVTK.html">dataExchangeModel_oneWayVTK</A></TD><TD ><A HREF = "dataExchangeModel_twoWayFiles.html">dataExchangeModel_twoWayFiles</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_oneWayVTK.html">dataExchangeModel_oneWayVTK</A></TD><TD ><A HREF = "dataExchangeModel_twoWayFiles.html">dataExchangeModel_twoWayFiles</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_twoWayM2M.html">dataExchangeModel_twoWayM2M</A></TD><TD ><A HREF = "dataExchangeModel_twoWayMPI.html">dataExchangeModel_twoWayMPI</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_twoWayMPI.html">dataExchangeModel_twoWayMPI</A></TD><TD ><A HREF = "dataExchangeModel_twoWayMany2Many.html">dataExchangeModel_twoWayMany2Many</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel.html">forceModel</A></TD><TD ><A HREF = "forceModel_Archimedes.html">forceModel_Archimedes</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel.html">forceModel</A></TD><TD ><A HREF = "forceModel_Archimedes.html">forceModel_Archimedes</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_ArchimedesIB.html">forceModel_ArchimedesIB</A></TD><TD ><A HREF = "forceModel_DiFeliceDrag.html">forceModel_DiFeliceDrag</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_ArchimedesIB.html">forceModel_ArchimedesIB</A></TD><TD ><A HREF = "forceModel_DiFeliceDrag.html">forceModel_DiFeliceDrag</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_GidaspowDrag.html">forceModel_GidaspowDrag</A></TD><TD ><A HREF = "forceModel_KochHillDrag.html">forceModel_KochHillDrag</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_GidaspowDrag.html">forceModel_GidaspowDrag</A></TD><TD ><A HREF = "forceModel_KochHillDrag.html">forceModel_KochHillDrag</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_LaEuScalarTemp.html">forceModel_LaEuScalarTemp</A></TD><TD ><A HREF = "forceModel_MeiLift.html">forceModel_MeiLift</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_LaEuScalarTemp.html">forceModel_LaEuScalarTemp</A></TD><TD ><A HREF = "forceModel_MeiLift.html">forceModel_MeiLift</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_SchillerNaumannDrag.html">forceModel_SchillerNaumannDrag</A></TD><TD ><A HREF = "forceModel_ShirgaonkarIB.html">forceModel_ShirgaonkarIB</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_SchillerNaumannDrag.html">forceModel_SchillerNaumannDrag</A></TD><TD ><A HREF = "forceModel_ShirgaonkarIB.html">forceModel_ShirgaonkarIB</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_gradPForce.html">forceModel_gradPForce</A></TD><TD ><A HREF = "forceModel_noDrag.html">forceModel_noDrag</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_fieldStore.html">forceModel_fieldStore</A></TD><TD ><A HREF = "forceModel_gradPForce.html">forceModel_gradPForce</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_particleCellVolume.html">forceModel_particleCellVolume</A></TD><TD ><A HREF = "forceModel_virtualMassForce.html">forceModel_virtualMassForce</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_noDrag.html">forceModel_noDrag</A></TD><TD ><A HREF = "forceModel_particleCellVolume.html">forceModel_particleCellVolume</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_viscForce.html">forceModel_viscForce</A></TD><TD ><A HREF = "liggghtsCommandModel.html">liggghtsCommandModel</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "forceModel_virtualMassForce.html">forceModel_virtualMassForce</A></TD><TD ><A HREF = "forceModel_viscForce.html">forceModel_viscForce</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceSubModel.html">forceSubModel</A></TD><TD ><A HREF = "forceSubModel_ImEx.html">forceSubModel_ImEx</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceSubModel_ImExCorr.html">forceSubModel_ImExCorr</A></TD><TD ><A HREF = "liggghtsCommandModel.html">liggghtsCommandModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_execute.html">liggghtsCommandModel_execute</A></TD><TD ><A HREF = "liggghtsCommandModel_readLiggghtsData.html">liggghtsCommandModel_readLiggghtsData</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_execute.html">liggghtsCommandModel_execute</A></TD><TD ><A HREF = "liggghtsCommandModel_readLiggghtsData.html">liggghtsCommandModel_readLiggghtsData</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_runLiggghts.html">liggghtsCommandModel_runLiggghts</A></TD><TD ><A HREF = "liggghtsCommandModel_writeLiggghts.html">liggghtsCommandModel_writeLiggghts</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_runLiggghts.html">liggghtsCommandModel_runLiggghts</A></TD><TD ><A HREF = "liggghtsCommandModel_writeLiggghts.html">liggghtsCommandModel_writeLiggghts</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel.html">locateModel</A></TD><TD ><A HREF = "locateModel_engineSearch.html">locateModel_engineSearch</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "locateModel.html">locateModel</A></TD><TD ><A HREF = "locateModel_engineSearch.html">locateModel_engineSearch</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel_engineSearchIB.html">locateModel_engineSearchIB</A></TD><TD ><A HREF = "locateModel_standardSearch.html">locateModel_standardSearch</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "locateModel_engineSearchIB.html">locateModel_engineSearchIB</A></TD><TD ><A HREF = "locateModel_standardSearch.html">locateModel_standardSearch</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel_turboEngineSearchM2M.html">locateModel_turboEngineM2MSearch</A></TD><TD ><A HREF = "locateModel_turboEngineSearch.html">locateModel_turboEngineSearch</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "locateModel_turboEngineSearch.html">locateModel_turboEngineSearch</A></TD><TD ><A HREF = "meshMotionModel.html">meshMotionModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "meshMotionModel.html">meshMotionModel</A></TD><TD ><A HREF = "meshMotionModel_noMeshMotion.html">meshMotionModel_noMeshMotion</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "meshMotionModel_noMeshMotion.html">meshMotionModel_noMeshMotion</A></TD><TD ><A HREF = "momCoupleModel.html">momCoupleModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel.html">momCoupleModel</A></TD><TD ><A HREF = "momCoupleModel_explicitCouple.html">momCoupleModel_explicitCouple</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "momCoupleModel_explicitCouple.html">momCoupleModel_explicitCouple</A></TD><TD ><A HREF = "momCoupleModel_implicitCouple.html">momCoupleModel_implicitCouple</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel_implicitCouple.html">momCoupleModel_implicitCouple</A></TD><TD ><A HREF = "momCoupleModel_noCouple.html">momCoupleModel_noCouple</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "momCoupleModel_noCouple.html">momCoupleModel_noCouple</A></TD><TD ><A HREF = "probeModel.html">probeModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "probeModel.html">probeModel</A></TD><TD ><A HREF = "probeModel_noProbe.html">probeModel_noProbe</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "probeModel_noProbe.html">probeModel_noProbe</A></TD><TD ><A HREF = "regionModel.html">regionModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "regionModel.html">regionModel</A></TD><TD ><A HREF = "regionModel_allRegion.html">regionModel_allRegion</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "regionModel_allRegion.html">regionModel_allRegion</A></TD><TD ><A HREF = "smoothingModel.html">smoothingModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "smoothingModel.html">smoothingModel</A></TD><TD ><A HREF = "smoothingModel_constDiffSmoothing.html">smoothingModel_constDiffSmoothing</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "smoothingModel_constDiffSmoothing.html">smoothingModel_constDiffSmoothing</A></TD><TD ><A HREF = "smoothingModel_noSmoothing.html">smoothingModel_noSmoothing</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "smoothingModel_noSmoothing.html">smoothingModel_noSmoothing</A></TD><TD ><A HREF = "voidFractionModel.html">voidfractionModel</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "voidFractionModel.html">voidfractionModel</A></TD><TD ><A HREF = "voidFractionModel_GaussVoidFraction.html">voidfractionModel_GaussVoidFraction</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_GaussVoidFraction.html">voidfractionModel_GaussVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_IBVoidFraction.html">voidfractionModel_IBVoidFraction</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "voidFractionModel_IBVoidFraction.html">voidfractionModel_IBVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_bigParticleVoidFraction.html">voidfractionModel_bigParticleVoidFraction</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_bigParticleVoidFraction.html">voidfractionModel_bigParticleVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_centreVoidFraction.html">voidfractionModel_centreVoidFraction</A></TD></TR> <TR ALIGN="center"><TD ><A HREF = "voidFractionModel_centreVoidFraction.html">voidfractionModel_centreVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_dividedVoidFraction.html">voidfractionModel_dividedVoidFraction</A>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_dividedVoidFraction.html">voidfractionModel_dividedVoidFraction</A>
</TD></TR></TABLE></DIV> </TD></TR></TABLE></DIV>
</HTML> </HTML>

Binary file not shown.

View File

@ -133,7 +133,7 @@ Reasonable example settings for the "couplingProperties" dictionary are given in
modelType :pre modelType :pre
"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". "modelType" refers to the formulation of the equations to be solved. Choose "A", "B" or "Bfull", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". "Bfull" refers to model type I.
couplingInterval :pre couplingInterval :pre
@ -221,6 +221,10 @@ Reasonable example settings for the "liggghtsCommands" dictionary are given in t
@ -250,8 +254,8 @@ listing below of styles within certain commands.
"dataExchangeModel_noDataExchange"_dataExchangeModel_noDataExchange.html, "dataExchangeModel_noDataExchange"_dataExchangeModel_noDataExchange.html,
"dataExchangeModel_oneWayVTK"_dataExchangeModel_oneWayVTK.html, "dataExchangeModel_oneWayVTK"_dataExchangeModel_oneWayVTK.html,
"dataExchangeModel_twoWayFiles"_dataExchangeModel_twoWayFiles.html, "dataExchangeModel_twoWayFiles"_dataExchangeModel_twoWayFiles.html,
"dataExchangeModel_twoWayM2M"_dataExchangeModel_twoWayM2M.html,
"dataExchangeModel_twoWayMPI"_dataExchangeModel_twoWayMPI.html, "dataExchangeModel_twoWayMPI"_dataExchangeModel_twoWayMPI.html,
"dataExchangeModel_twoWayMany2Many"_dataExchangeModel_twoWayMany2Many.html,
"forceModel"_forceModel.html, "forceModel"_forceModel.html,
"forceModel_Archimedes"_forceModel_Archimedes.html, "forceModel_Archimedes"_forceModel_Archimedes.html,
"forceModel_ArchimedesIB"_forceModel_ArchimedesIB.html, "forceModel_ArchimedesIB"_forceModel_ArchimedesIB.html,
@ -262,11 +266,15 @@ listing below of styles within certain commands.
"forceModel_MeiLift"_forceModel_MeiLift.html, "forceModel_MeiLift"_forceModel_MeiLift.html,
"forceModel_SchillerNaumannDrag"_forceModel_SchillerNaumannDrag.html, "forceModel_SchillerNaumannDrag"_forceModel_SchillerNaumannDrag.html,
"forceModel_ShirgaonkarIB"_forceModel_ShirgaonkarIB.html, "forceModel_ShirgaonkarIB"_forceModel_ShirgaonkarIB.html,
"forceModel_fieldStore"_forceModel_fieldStore.html,
"forceModel_gradPForce"_forceModel_gradPForce.html, "forceModel_gradPForce"_forceModel_gradPForce.html,
"forceModel_noDrag"_forceModel_noDrag.html, "forceModel_noDrag"_forceModel_noDrag.html,
"forceModel_particleCellVolume"_forceModel_particleCellVolume.html, "forceModel_particleCellVolume"_forceModel_particleCellVolume.html,
"forceModel_virtualMassForce"_forceModel_virtualMassForce.html, "forceModel_virtualMassForce"_forceModel_virtualMassForce.html,
"forceModel_viscForce"_forceModel_viscForce.html, "forceModel_viscForce"_forceModel_viscForce.html,
"forceSubModel"_forceSubModel.html,
"forceSubModel_ImEx"_forceSubModel_ImEx.html,
"forceSubModel_ImExCorr"_forceSubModel_ImExCorr.html,
"liggghtsCommandModel"_liggghtsCommandModel.html, "liggghtsCommandModel"_liggghtsCommandModel.html,
"liggghtsCommandModel_execute"_liggghtsCommandModel_execute.html, "liggghtsCommandModel_execute"_liggghtsCommandModel_execute.html,
"liggghtsCommandModel_readLiggghtsData"_liggghtsCommandModel_readLiggghtsData.html, "liggghtsCommandModel_readLiggghtsData"_liggghtsCommandModel_readLiggghtsData.html,
@ -276,7 +284,6 @@ listing below of styles within certain commands.
"locateModel_engineSearch"_locateModel_engineSearch.html, "locateModel_engineSearch"_locateModel_engineSearch.html,
"locateModel_engineSearchIB"_locateModel_engineSearchIB.html, "locateModel_engineSearchIB"_locateModel_engineSearchIB.html,
"locateModel_standardSearch"_locateModel_standardSearch.html, "locateModel_standardSearch"_locateModel_standardSearch.html,
"locateModel_turboEngineM2MSearch"_locateModel_turboEngineSearchM2M.html,
"locateModel_turboEngineSearch"_locateModel_turboEngineSearch.html, "locateModel_turboEngineSearch"_locateModel_turboEngineSearch.html,
"meshMotionModel"_meshMotionModel.html, "meshMotionModel"_meshMotionModel.html,
"meshMotionModel_noMeshMotion"_meshMotionModel_noMeshMotion.html, "meshMotionModel_noMeshMotion"_meshMotionModel_noMeshMotion.html,

View File

@ -11,12 +11,14 @@
</H3> </H3>
<P><B>Description:</B> <P><B>Description:</B>
</P> </P>
<P>"cfdemSolverPisoScalar" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPisoScalar" has additional functionality for a coupling to the DEM code "LIGGGHTS" as well as a scalar transport equation. The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS. The scalar transport equation is coupled to scalar properties of the particle phase, thus convective heat transfer in a fluid granular system can be modeled with "cfdemSolverPisoScalar". <P>"cfdemSolverPisoScalar" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPisoScalar" has additional functionality for a coupling to the DEM code "LIGGGHTS" as well as a scalar transport equation. The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles, whose trajectories are calculated in the DEM code LIGGGHTS. The scalar transport equation is coupled to scalar properties of the particle phase, thus convective heat transfer in a fluid granular system can be modeled with "cfdemSolverPisoScalar".
</P> </P>
<P>see: <P>see:
</P> </P>
<P>GONIVA, C., KLOSS, C., HAGER,A. and PIRKER, S. (2010): "An Open Source CFD-DEM Perspective", Proc. of OpenFOAM Workshop, Göteborg, June 22.-24. <P>GONIVA, C., KLOSS, C., HAGER,A. and PIRKER, S. (2010): "An Open Source CFD-DEM Perspective", Proc. of OpenFOAM Workshop, Göteborg, June 22.-24.
</P> </P>
<P>The heat transfer equation is implemented according to Nield & Bejan (2013), Convection in Porous Media, DOI 10.1007/978-1-4614-5541-7_2, Springer
</P>
<HR> <HR>
<P>(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group. <P>(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.

View File

@ -9,12 +9,15 @@ cfdemSolverPisoScalar command :h3
[Description:] [Description:]
"cfdemSolverPisoScalar" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPisoScalar" has additional functionality for a coupling to the DEM code "LIGGGHTS" as well as a scalar transport equation. The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS. The scalar transport equation is coupled to scalar properties of the particle phase, thus convective heat transfer in a fluid granular system can be modeled with "cfdemSolverPisoScalar". "cfdemSolverPisoScalar" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPisoScalar" has additional functionality for a coupling to the DEM code "LIGGGHTS" as well as a scalar transport equation. The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles, whose trajectories are calculated in the DEM code LIGGGHTS. The scalar transport equation is coupled to scalar properties of the particle phase, thus convective heat transfer in a fluid granular system can be modeled with "cfdemSolverPisoScalar".
see: see:
GONIVA, C., KLOSS, C., HAGER,A. and PIRKER, S. (2010): "An Open Source CFD-DEM Perspective", Proc. of OpenFOAM Workshop, Göteborg, June 22.-24. GONIVA, C., KLOSS, C., HAGER,A. and PIRKER, S. (2010): "An Open Source CFD-DEM Perspective", Proc. of OpenFOAM Workshop, Göteborg, June 22.-24.
The heat transfer equation is implemented according to Nield & Bejan (2013), Convection in Porous Media, DOI 10.1007/978-1-4614-5541-7_2, Springer
:line :line
(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group. (*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.

View File

@ -23,7 +23,7 @@
</P> </P>
<P>The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt . <P>The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt .
Since the measurements are stored in an array, it is necessary to put a variable <I>arrayPos</I> (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If <I>arrayPos</I> is out of bounds, the array size will be doubled. The stop command does not need <I>arrayPos</I>, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information. Since the measurements are stored in an array, it is necessary to put a variable <I>arrayPos</I> (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If <I>arrayPos</I> is out of bounds, the array size will be doubled. The stop command does not need <I>arrayPos</I>, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes. After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes. There is an alias called "vizClock" to run this python routine for visualizing the data.
</P> </P>
<P><B>Restrictions:</B> none. <P><B>Restrictions:</B> none.
</P> </P>

View File

@ -21,7 +21,7 @@ clockModel standardClock; :pre
The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt . The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt .
Since the measurements are stored in an array, it is necessary to put a variable {arrayPos} (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If {arrayPos} is out of bounds, the array size will be doubled. The stop command does not need {arrayPos}, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information. Since the measurements are stored in an array, it is necessary to put a variable {arrayPos} (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If {arrayPos} is out of bounds, the array size will be doubled. The stop command does not need {arrayPos}, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes. After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes. There is an alias called "vizClock" to run this python routine for visualizing the data.
[Restrictions:] none. [Restrictions:] none.

View File

@ -1,42 +0,0 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
dataExchangeModel_twoWayM2M command :h3
[Syntax:]
Defined in couplingProperties dictionary.
dataExchangeModel twoWayM2M;
twoWayM2MProps
\{
liggghtsPath "path";
\}; :pre
{path} = path to the DEM simulation input file :ulb,l
:ule
[Examples:]
dataExchangeModel twoWayM2M;
twoWayM2MProps
\{
liggghtsPath "../DEM/in.liggghts_init";
\} :pre
[Description:]
The data exchange model performs the data exchange between the DEM code and the CFD code. The twoWayM2M model is a model that can exchange particle properties from DEM to CFD and from CFD to DEM. Data is exchanged via MPI technique using the many to many mapping scheme. The DEM run is executed by the coupling model, via a liggghtsCommandModel object.
[Restrictions:]
Should be used in combination with the turboEngineSearchM2M locate model to achieve best performance!
[Related commands:]
"dataExchangeModel"_dataExchangeModel.html

View File

@ -7,14 +7,14 @@
<HR> <HR>
<H3>dataExchangeModel_twoWayM2M command <H3>dataExchangeModel_twoWayMany2Many command
</H3> </H3>
<P><B>Syntax:</B> <P><B>Syntax:</B>
</P> </P>
<P>Defined in couplingProperties dictionary. <P>Defined in couplingProperties dictionary.
</P> </P>
<PRE>dataExchangeModel twoWayM2M; <PRE>dataExchangeModel twoWayMany2Many;
twoWayM2MProps twoWayMany2ManyProps
{ {
liggghtsPath "path"; liggghtsPath "path";
}; };
@ -25,19 +25,19 @@ twoWayM2MProps
</UL> </UL>
<P><B>Examples:</B> <P><B>Examples:</B>
</P> </P>
<PRE>dataExchangeModel twoWayM2M; <PRE>dataExchangeModel twoWayMany2Many;
twoWayM2MProps twoWayMany2ManyProps
{ {
liggghtsPath "../DEM/in.liggghts_init"; liggghtsPath "../DEM/in.liggghts_init";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>
</P> </P>
<P>The data exchange model performs the data exchange between the DEM code and the CFD code. The twoWayM2M model is a model that can exchange particle properties from DEM to CFD and from CFD to DEM. Data is exchanged via MPI technique using the many to many mapping scheme. The DEM run is executed by the coupling model, via a liggghtsCommandModel object. <P>The data exchange model performs the data exchange between the DEM code and the CFD code. The twoWayMany2Many model is a model that can exchange particle properties from DEM to CFD and from CFD to DEM. Data is exchanged via MPI technique using the many to many mapping scheme. The DEM run is executed by the coupling model, via a liggghtsCommandModel object.
</P> </P>
<P><B>Restrictions:</B> <P><B>Restrictions:</B>
</P> </P>
<P>Should be used in combination with the turboEngineSearchM2M locate model to achieve best performance! <P>Must be used in combination with the engineSearchMany2Many locate model!
</P> </P>
<P><B>Related commands:</B> <P><B>Related commands:</B>
</P> </P>

View File

@ -0,0 +1,42 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
dataExchangeModel_twoWayMany2Many command :h3
[Syntax:]
Defined in couplingProperties dictionary.
dataExchangeModel twoWayMany2Many;
twoWayMany2ManyProps
\{
liggghtsPath "path";
\}; :pre
{path} = path to the DEM simulation input file :ulb,l
:ule
[Examples:]
dataExchangeModel twoWayMany2Many;
twoWayMany2ManyProps
\{
liggghtsPath "../DEM/in.liggghts_init";
\} :pre
[Description:]
The data exchange model performs the data exchange between the DEM code and the CFD code. The twoWayMany2Many model is a model that can exchange particle properties from DEM to CFD and from CFD to DEM. Data is exchanged via MPI technique using the many to many mapping scheme. The DEM run is executed by the coupling model, via a liggghtsCommandModel object.
[Restrictions:]
Must be used in combination with the engineSearchMany2Many locate model!
[Related commands:]
"dataExchangeModel"_dataExchangeModel.html

View File

@ -33,7 +33,7 @@
</P> </P>
<P><B>Description:</B> <P><B>Description:</B>
</P> </P>
<P>The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. All force models selected are executed sequentially and the forces on the particles are superposed. <P>The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. All force models selected are executed sequentially and the forces on the particles are superposed. If the fluid density field is needed, by default a field named "rho" will be used. Via the forceSubModel an alternative field can be chosen.
</P> </P>
<P><B>Restrictions:</B> <P><B>Restrictions:</B>
</P> </P>

View File

@ -31,7 +31,7 @@ Note: This examples list might not be complete - please look for other models (f
[Description:] [Description:]
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. All force models selected are executed sequentially and the forces on the particles are superposed. The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. All force models selected are executed sequentially and the forces on the particles are superposed. If the fluid density field is needed, by default a field named "rho" will be used. Via the forceSubModel an alternative field can be chosen.
[Restrictions:] [Restrictions:]

View File

@ -19,13 +19,10 @@
); );
ArchimedesProps ArchimedesProps
{ {
densityFieldName "density";
gravityFieldName "gravity"; gravityFieldName "gravity";
}; };
</PRE> </PRE>
<UL><LI><I>density</I> = name of the finite volume density field <UL><LI><I>gravity</I> = name of the finite volume gravity field
<LI><I>gravity</I> = name of the finite volume gravity field
</UL> </UL>
@ -37,7 +34,6 @@ ArchimedesProps
); );
ArchimedesProps ArchimedesProps
{ {
densityFieldName "rho";
gravityFieldName "g"; gravityFieldName "g";
} }
</PRE> </PRE>

View File

@ -17,12 +17,10 @@ forceModels
); );
ArchimedesProps ArchimedesProps
\{ \{
densityFieldName "density";
gravityFieldName "gravity"; gravityFieldName "gravity";
\}; :pre \}; :pre
{density} = name of the finite volume density field :ulb,l {gravity} = name of the finite volume gravity field :ulb,l
{gravity} = name of the finite volume gravity field :l
:ule :ule
[Examples:] [Examples:]
@ -33,7 +31,6 @@ forceModels
); );
ArchimedesProps ArchimedesProps
\{ \{
densityFieldName "rho";
gravityFieldName "g"; gravityFieldName "g";
\} :pre \} :pre

View File

@ -19,14 +19,11 @@
); );
ArchimedesIBProps ArchimedesIBProps
{ {
densityFieldName "density";
gravityFieldName "gravity"; gravityFieldName "gravity";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
}; };
</PRE> </PRE>
<UL><LI><I>density</I> = name of the finite volume density field <UL><LI><I>gravity</I> = name of the finite volume gravity field
<LI><I>gravity</I> = name of the finite volume gravity field
<LI><I>voidfraction</I> = name of the finite volume voidfraction field <LI><I>voidfraction</I> = name of the finite volume voidfraction field
@ -40,7 +37,6 @@ ArchimedesIBProps
); );
ArchimedesIBProps ArchimedesIBProps
{ {
densityFieldName "rho";
gravityFieldName "g"; gravityFieldName "g";
voidfractionFieldName "voidfractionNext"; voidfractionFieldName "voidfractionNext";
} }

View File

@ -17,13 +17,11 @@ forceModels
); );
ArchimedesIBProps ArchimedesIBProps
\{ \{
densityFieldName "density";
gravityFieldName "gravity"; gravityFieldName "gravity";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
\}; :pre \}; :pre
{density} = name of the finite volume density field :ulb,l {gravity} = name of the finite volume gravity field :ulb,l
{gravity} = name of the finite volume gravity field :l
{voidfraction} = name of the finite volume voidfraction field :l {voidfraction} = name of the finite volume voidfraction field :l
:ule :ule
@ -35,7 +33,6 @@ forceModels
); );
ArchimedesIBProps ArchimedesIBProps
\{ \{
densityFieldName "rho";
gravityFieldName "g"; gravityFieldName "g";
voidfractionFieldName "voidfractionNext"; voidfractionFieldName "voidfractionNext";
\} :pre \} :pre

View File

@ -20,15 +20,12 @@
DiFeliceDragProps DiFeliceDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density"; interpolation switch1;
interpolation;
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume gravity field <LI><I>switch1</I> = flag to use interpolated voidfraction and velocity values (normally off)
<LI><I>interpolation</I> = flag to use interpolated voidfraction and velocity values (normally off)
</UL> </UL>
@ -41,8 +38,7 @@ DiFeliceDragProps
DiFeliceDragProps DiFeliceDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho"; interpolation true;
interpolation;
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,13 +18,11 @@ forceModels
DiFeliceDragProps DiFeliceDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density"; interpolation switch1;
interpolation;
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l {switch1} = flag to use interpolated voidfraction and velocity values (normally off) :l
{interpolation} = flag to use interpolated voidfraction and velocity values (normally off) :l
:ule :ule
[Examples:] [Examples:]
@ -36,8 +34,7 @@ forceModels
DiFeliceDragProps DiFeliceDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho"; interpolation true;
interpolation;
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,24 +20,24 @@
GidaspowDragProps GidaspowDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
granVelFieldName "Us";
phi "scalar"; phi "scalar";
interpolation; interpolation switch1;
implDEM; implForceDEM switch2;
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume gravity field
<LI><I>voidfraction</I> = name of the finite volume voidfraction field <LI><I>voidfraction</I> = name of the finite volume voidfraction field
<LI><I>Us</I> = name of the finite volume cell averaged particle velocity field
<LI><I>phi</I> = drag correction factor (in doubt 1) <LI><I>phi</I> = drag correction factor (in doubt 1)
<LI><I>interpolation</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values <LI><I>switch1</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
<I>implDEM</I> = (optional, normally off) flag to use implicit formulation of drag on DEM side:l <I>switch2</I> = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
</UL> </UL>
<P><B>Examples:</B> <P><B>Examples:</B>
@ -49,8 +49,8 @@ GidaspowDragProps
GidaspowDragProps GidaspowDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
granVelFieldName "Us";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,19 +18,19 @@ forceModels
GidaspowDragProps GidaspowDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
granVelFieldName "Us";
phi "scalar"; phi "scalar";
interpolation; interpolation switch1;
implDEM; implForceDEM switch2;
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
{voidfraction} = name of the finite volume voidfraction field :l {voidfraction} = name of the finite volume voidfraction field :l
{Us} = name of the finite volume cell averaged particle velocity field :l
{phi} = drag correction factor (in doubt 1) :l {phi} = drag correction factor (in doubt 1) :l
{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l {switch1} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
{implDEM} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l {switch2} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
:ule :ule
[Examples:] [Examples:]
@ -42,8 +42,8 @@ forceModels
GidaspowDragProps GidaspowDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
granVelFieldName "Us";
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,21 +20,18 @@
KochHillDragProps KochHillDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
interpolation; interpolation "bool1";
implDEM; implForceDEM "bool2";
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume gravity field
<LI><I>voidfraction</I> = name of the finite volume voidfraction field <LI><I>voidfraction</I> = name of the finite volume voidfraction field
<LI><I>interpolation</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values <LI><I>bool1</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
<I>implDEM</I> = (optional, normally off) flag to use implicit formulation of drag on DEM side:l <I>bool2</I> = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
</UL> </UL>
<P><B>Examples:</B> <P><B>Examples:</B>
@ -46,7 +43,6 @@ KochHillDragProps
KochHillDragProps KochHillDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
} }
</PRE> </PRE>

View File

@ -18,17 +18,15 @@ forceModels
KochHillDragProps KochHillDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
interpolation; interpolation "bool1";
implDEM; implForceDEM "bool2";
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
{voidfraction} = name of the finite volume voidfraction field :l {voidfraction} = name of the finite volume voidfraction field :l
{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l {bool1} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
{implDEM} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l {bool2} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
:ule :ule
[Examples:] [Examples:]
@ -40,7 +38,6 @@ forceModels
KochHillDragProps KochHillDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
\} :pre \} :pre

View File

@ -21,23 +21,19 @@ LaEuScalarTempProps
{ {
velFieldName "U"; velFieldName "U";
tempFieldName "T"; tempFieldName "T";
tempSourceFieldName "Tsource";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
partTempName "Temp"; partTempName "Temp";
partHeatFluxName "convectiveHeatFlux"; partHeatFluxName "convectiveHeatFlux";
lambda value; lambda value;
Cp value1; Cp value1;
densityFieldName "density"; interpolation "switch1";
interpolation; verbose "switch2";
verbose;
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>T</I> = name of the finite volume scalar temperature field <LI><I>T</I> = name of the finite volume scalar temperature field
<LI><I>Tsource</I> = name of the finite volume scalar temperature source field
<LI><I>voidfraction</I> = name of the finite volume voidfraction field <LI><I>voidfraction</I> = name of the finite volume voidfraction field
<LI><I>Temp</I> = name of the DEM data representing the particles temperature <LI><I>Temp</I> = name of the DEM data representing the particles temperature
@ -48,11 +44,9 @@ LaEuScalarTempProps
<LI><I>value1</I> = fluid specific heat capacity [W*s/(kg*K)] <LI><I>value1</I> = fluid specific heat capacity [W*s/(kg*K)]
<LI><I>density</I> = name of the finite volume fluid density field <LI><I>switch1</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
<LI><I>interpolation</I> = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values <LI><I>switch2</I> = (normally off) for verbose run
<LI><I>verbose</I> = (normally off) for verbose run
</UL> </UL>
@ -66,13 +60,11 @@ LaEuScalarTempProps
{ {
velFieldName "U"; velFieldName "U";
tempFieldName "T"; tempFieldName "T";
tempSourceFieldName "Tsource";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
partTempName "Temp"; partTempName "Temp";
partHeatFluxName "convectiveHeatFlux"; partHeatFluxName "convectiveHeatFlux";
lambda 0.0256; lambda 0.0256;
Cp 1007; Cp 1007;
densityFieldName "rho";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>
@ -81,7 +73,7 @@ LaEuScalarTempProps
</P> </P>
<P><B>Restrictions:</B> <P><B>Restrictions:</B>
</P> </P>
<P>Goes only with cfdemSolverScalar. <P>Goes only with cfdemSolverScalar. The force model has to be the second (!!!) model in the forces list.
</P> </P>
<P><B>Related commands:</B> <P><B>Related commands:</B>
</P> </P>

View File

@ -19,28 +19,24 @@ LaEuScalarTempProps
\{ \{
velFieldName "U"; velFieldName "U";
tempFieldName "T"; tempFieldName "T";
tempSourceFieldName "Tsource";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
partTempName "Temp"; partTempName "Temp";
partHeatFluxName "convectiveHeatFlux"; partHeatFluxName "convectiveHeatFlux";
lambda value; lambda value;
Cp value1; Cp value1;
densityFieldName "density"; interpolation "switch1";
interpolation; verbose "switch2";
verbose;
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{T} = name of the finite volume scalar temperature field :l {T} = name of the finite volume scalar temperature field :l
{Tsource} = name of the finite volume scalar temperature source field :l
{voidfraction} = name of the finite volume voidfraction field :l {voidfraction} = name of the finite volume voidfraction field :l
{Temp} = name of the DEM data representing the particles temperature :l {Temp} = name of the DEM data representing the particles temperature :l
{convectiveHeatFlux} = name of the DEM data representing the particle-fluid convective heat flux :l {convectiveHeatFlux} = name of the DEM data representing the particle-fluid convective heat flux :l
{value} = fluid thermal conductivity \[W/(m*K)\] :l {value} = fluid thermal conductivity \[W/(m*K)\] :l
{value1} = fluid specific heat capacity \[W*s/(kg*K)\] :l {value1} = fluid specific heat capacity \[W*s/(kg*K)\] :l
{density} = name of the finite volume fluid density field :l {switch1} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l {switch2} = (normally off) for verbose run :l
{verbose} = (normally off) for verbose run :l
:ule :ule
[Examples:] [Examples:]
@ -53,13 +49,11 @@ LaEuScalarTempProps
\{ \{
velFieldName "U"; velFieldName "U";
tempFieldName "T"; tempFieldName "T";
tempSourceFieldName "Tsource";
voidfractionFieldName "voidfraction"; voidfractionFieldName "voidfraction";
partTempName "Temp"; partTempName "Temp";
partHeatFluxName "convectiveHeatFlux"; partHeatFluxName "convectiveHeatFlux";
lambda 0.0256; lambda 0.0256;
Cp 1007; Cp 1007;
densityFieldName "rho";
\} :pre \} :pre
[Description:] [Description:]
@ -68,7 +62,7 @@ This "forceModel" does not influence the particles or the fluid flow! Using the
[Restrictions:] [Restrictions:]
Goes only with cfdemSolverScalar. Goes only with cfdemSolverScalar. The force model has to be the second (!!!) model in the forces list.
[Related commands:] [Related commands:]

View File

@ -20,21 +20,18 @@
MeiLiftProps MeiLiftProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
useSecondOrderTerms; useSecondOrderTerms;
interpolation; interpolation "switch1";
verbose; verbose "switch2";
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume fluid density field
<LI><I>useSecondOrderTerms</I> = switch to activate second order terms in the lift force model <LI><I>useSecondOrderTerms</I> = switch to activate second order terms in the lift force model
<LI><I>interpolation</I> = switch to activate tri-linear interpolation of the flow quantities at the particle position <LI><I>switch1</I> = switch to activate tri-linear interpolation of the flow quantities at the particle position
<LI><I>verbose</I> = switch to activate the report of per-particle quantities to the screen <LI><I>switch2</I> = switch to activate the report of per-particle quantities to the screen
</UL> </UL>
@ -47,10 +44,9 @@ MeiLiftProps
MeiLiftProps MeiLiftProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
useSecondOrderTerms; useSecondOrderTerms;
interpolation; interpolation true;
verbose; verbose true;
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,17 +18,15 @@ forceModels
MeiLiftProps MeiLiftProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
useSecondOrderTerms; useSecondOrderTerms;
interpolation; interpolation "switch1";
verbose; verbose "switch2";
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume fluid density field :l
{useSecondOrderTerms} = switch to activate second order terms in the lift force model :l {useSecondOrderTerms} = switch to activate second order terms in the lift force model :l
{interpolation} = switch to activate tri-linear interpolation of the flow quantities at the particle position :l {switch1} = switch to activate tri-linear interpolation of the flow quantities at the particle position :l
{verbose} = switch to activate the report of per-particle quantities to the screen :l {switch2} = switch to activate the report of per-particle quantities to the screen :l
:ule :ule
[Examples:] [Examples:]
@ -40,10 +38,9 @@ forceModels
MeiLiftProps MeiLiftProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
useSecondOrderTerms; useSecondOrderTerms;
interpolation; interpolation true;
verbose; verbose true;
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,13 +20,10 @@
SchillerNaumannDragProps SchillerNaumannDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume gravity field
</UL> </UL>
<P><B>Examples:</B> <P><B>Examples:</B>
@ -38,7 +35,6 @@ SchillerNaumannDragProps
SchillerNaumannDragProps SchillerNaumannDragProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,11 +18,9 @@ forceModels
SchillerNaumannDragProps SchillerNaumannDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
:ule :ule
[Examples:] [Examples:]
@ -34,7 +32,6 @@ forceModels
SchillerNaumannDragProps SchillerNaumannDragProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,14 +20,11 @@
ShirgaonkarIBProps ShirgaonkarIBProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
pressureFieldName "pressure"; pressureFieldName "pressure";
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume density field
<LI><I>pressure</I> = name of the finite volume pressure field <LI><I>pressure</I> = name of the finite volume pressure field
@ -41,7 +38,6 @@ ShirgaonkarIBProps
ShirgaonkarIBProps ShirgaonkarIBProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
pressureFieldName "p"; pressureFieldName "p";
} }
</PRE> </PRE>

View File

@ -18,12 +18,10 @@ forceModels
ShirgaonkarIBProps ShirgaonkarIBProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
pressureFieldName "pressure"; pressureFieldName "pressure";
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume density field :l
{pressure} = name of the finite volume pressure field :l {pressure} = name of the finite volume pressure field :l
:ule :ule
@ -36,7 +34,6 @@ forceModels
ShirgaonkarIBProps ShirgaonkarIBProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
pressureFieldName "p"; pressureFieldName "p";
\} :pre \} :pre

View File

@ -0,0 +1,68 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>forceModel_fieldStore command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>forceModels
(
fieldStore
);
fieldStoreProps
{
scalarFieldNames
(
"scalarField"
);
vectorFieldNames
(
"vectorField"
);
};
</PRE>
<UL><LI><I>scalarField</I> = names of the finite volume scalar fields to be stored
<LI><I>vectorField</I> = names of the finite volume vector fields to be stored
</UL>
<P><B>Examples:</B>
</P>
<PRE>forceModels
(
fieldStore
);
fieldStoreProps
{
scalarFieldNames
(
"voidfraction"
);
vectorFieldNames
(
"U"
);
}
</PRE>
<P><B>Description:</B>
</P>
<P>This "forceModel" does not influence the particles or the flow - it is a tool to store a scalar/vector field! This is especially useful if you use a boundary condition which cannot interpreted correctly in your postporcessor (e.g. paraview).
</P>
<P><B>Restrictions:</B>
</P>
<P>none.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "forceModel.html">forceModel</A>
</P>
</HTML>

View File

@ -0,0 +1,63 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
forceModel_fieldStore command :h3
[Syntax:]
Defined in couplingProperties dictionary.
forceModels
(
fieldStore
);
fieldStoreProps
\{
scalarFieldNames
(
"scalarField"
);
vectorFieldNames
(
"vectorField"
);
\}; :pre
{scalarField} = names of the finite volume scalar fields to be stored :ulb,l
{vectorField} = names of the finite volume vector fields to be stored :l
:ule
[Examples:]
forceModels
(
fieldStore
);
fieldStoreProps
\{
scalarFieldNames
(
"voidfraction"
);
vectorFieldNames
(
"U"
);
\} :pre
[Description:]
This "forceModel" does not influence the particles or the flow - it is a tool to store a scalar/vector field! This is especially useful if you use a boundary condition which cannot interpreted correctly in your postporcessor (e.g. paraview).
[Restrictions:]
none.
[Related commands:]
"forceModel"_forceModel.html

View File

@ -20,18 +20,15 @@
gradPForceProps gradPForceProps
{ {
pFieldName "pressure"; pFieldName "pressure";
densityFieldName "density";
velocityFieldName "U"; velocityFieldName "U";
interpolation; interpolation switch1;
}; };
</PRE> </PRE>
<UL><LI><I>pressure</I> = name of the finite volume fluid pressure field <UL><LI><I>pressure</I> = name of the finite volume fluid pressure field
<LI><I>density</I> = name of the finite volume gravity field
<LI><I>U</I> = name of the finite volume fluid velocity field <LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>interpolation</I> = flag to use interpolated pressure values (normally off) <LI><I>switch1</I> = flag to use interpolated pressure values (normally off)
</UL> </UL>
@ -44,9 +41,8 @@ gradPForceProps
gradPForceProps gradPForceProps
{ {
pFieldName "p"; pFieldName "p";
densityFieldName "rho";
velocityFieldName "U"; velocityFieldName "U";
interpolation; interpolation true;
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,15 +18,13 @@ forceModels
gradPForceProps gradPForceProps
\{ \{
pFieldName "pressure"; pFieldName "pressure";
densityFieldName "density";
velocityFieldName "U"; velocityFieldName "U";
interpolation; interpolation switch1;
\}; :pre \}; :pre
{pressure} = name of the finite volume fluid pressure field :ulb,l {pressure} = name of the finite volume fluid pressure field :ulb,l
{density} = name of the finite volume gravity field :l
{U} = name of the finite volume fluid velocity field :l {U} = name of the finite volume fluid velocity field :l
{interpolation} = flag to use interpolated pressure values (normally off) :l {switch1} = flag to use interpolated pressure values (normally off) :l
:ule :ule
[Examples:] [Examples:]
@ -38,9 +36,8 @@ forceModels
gradPForceProps gradPForceProps
\{ \{
pFieldName "p"; pFieldName "p";
densityFieldName "rho";
velocityFieldName "U"; velocityFieldName "U";
interpolation; interpolation true;
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,13 +20,10 @@
virtualMassForceProps virtualMassForceProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "density";
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume fluid density field
</UL> </UL>
<P><B>Examples:</B> <P><B>Examples:</B>
@ -38,7 +35,6 @@ virtualMassForceProps
virtualMassForceProps virtualMassForceProps
{ {
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,11 +18,9 @@ forceModels
virtualMassForceProps virtualMassForceProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "density";
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume fluid density field :l
:ule :ule
[Examples:] [Examples:]
@ -34,7 +32,6 @@ forceModels
virtualMassForceProps virtualMassForceProps
\{ \{
velFieldName "U"; velFieldName "U";
densityFieldName "rho";
\} :pre \} :pre
[Description:] [Description:]

View File

@ -20,15 +20,12 @@
viscForceProps viscForceProps
{ {
velocityFieldName "U"; velocityFieldName "U";
densityFieldName "density"; interpolation "switch";
interpolation;
}; };
</PRE> </PRE>
<UL><LI><I>U</I> = name of the finite volume fluid velocity field <UL><LI><I>U</I> = name of the finite volume fluid velocity field
<LI><I>density</I> = name of the finite volume gravity field <LI><I>switch</I> = flag to use interpolated stress values (normally off)
<LI><I>interpolation</I> = flag to use interpolated stress values (normally off)
</UL> </UL>
@ -41,7 +38,6 @@ viscForceProps
viscForceProps viscForceProps
{ {
velocityFieldName "U"; velocityFieldName "U";
densityFieldName "density";
} }
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>

View File

@ -18,13 +18,11 @@ forceModels
viscForceProps viscForceProps
\{ \{
velocityFieldName "U"; velocityFieldName "U";
densityFieldName "density"; interpolation "switch";
interpolation;
\}; :pre \}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l {U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l {switch} = flag to use interpolated stress values (normally off) :l
{interpolation} = flag to use interpolated stress values (normally off) :l
:ule :ule
[Examples:] [Examples:]
@ -36,7 +34,6 @@ forceModels
viscForceProps viscForceProps
\{ \{
velocityFieldName "U"; velocityFieldName "U";
densityFieldName "density";
\} :pre \} :pre
[Description:] [Description:]

49
doc/forceSubModel.html Normal file
View File

@ -0,0 +1,49 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>forceSubModel command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties sub-dictionary of the force model in use. If no force sub-model is applied ImEx is used as default. If the keyword "forceSubModels" is provided, a choice of sub model is demanded.
</P>
<PRE>forceSubModels
(
model_x
model_y
);
</PRE>
<UL><LI>model = name of force sub-model to be applied
</UL>
<P><B>Examples:</B>
</P>
<PRE>forceSubModels
(
ImEx
);
</PRE>
<P>Note: This examples list might not be complete - please look for other models (forceSubModel_XY) in this documentation.
</P>
<P><B>Description:</B>
</P>
<P>The force sub model is designed to hold the settings a force model can have. For now it handles the treatExplicit, treatDEM and implDEM option.
</P>
<P><B>Restrictions:</B>
</P>
<P>None.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "forceSubModel_ImEx.html">ImEx</A>
</P>
<P>Note: This examples list may be incomplete - please look for other models (forceSubModel_XY) in this documentation.
</P>
<P><B>Default:</B> none.
</P>
</HTML>

45
doc/forceSubModel.txt Normal file
View File

@ -0,0 +1,45 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
forceSubModel command :h3
[Syntax:]
Defined in couplingProperties sub-dictionary of the force model in use. If no force sub-model is applied ImEx is used as default. If the keyword "forceSubModels" is provided, a choice of sub model is demanded.
forceSubModels
(
model_x
model_y
); :pre
model = name of force sub-model to be applied :ul
[Examples:]
forceSubModels
(
ImEx
); :pre
Note: This examples list might not be complete - please look for other models (forceSubModel_XY) in this documentation.
[Description:]
The force sub model is designed to hold the settings a force model can have. For now it handles the treatExplicit, treatDEM and implDEM option.
[Restrictions:]
None.
[Related commands:]
"ImEx"_forceSubModel_ImEx.html
Note: This examples list may be incomplete - please look for other models (forceSubModel_XY) in this documentation.
[Default:] none.

View File

@ -0,0 +1,45 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>forceSubModel_ImEx command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties sub-dictionary of the force model in use.
</P>
<P>forceSubModels
(
ImEx;
);
</P>
<P>treatExplicit true; // optional for some force models.
treatDEM true; // optional for some force models.
implDEM true; // optional for some force models.
</P>
<P><B>Examples:</B>
</P>
<P>forceSubModels
(
ImEx;
);
treatExplicit true; // optional for some force models.
</P>
<P><B>Description:</B>
</P>
<P> If no force sub-model is applied ImEx is used as default. If the keyword "forceSubModels" is provided, a choice of sub model is demanded. Depending on the force model different keywords are read and can therefrore be set (see the log file). If the keyword is provided, its value is used.
</P>
<P><B>Restrictions:</B>
</P>
<P>none.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "forceSubModel.html">forceSubModel</A>
</P>
</HTML>

View File

@ -0,0 +1,42 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
forceSubModel_ImEx command :h3
[Syntax:]
Defined in couplingProperties sub-dictionary of the force model in use.
forceSubModels
(
ImEx;
);
treatExplicit true; // optional for some force models.
treatDEM true; // optional for some force models.
implDEM true; // optional for some force models.
[Examples:]
forceSubModels
(
ImEx;
);
treatExplicit true; // optional for some force models.
[Description:]
If no force sub-model is applied ImEx is used as default. If the keyword "forceSubModels" is provided, a choice of sub model is demanded. Depending on the force model different keywords are read and can therefrore be set (see the log file). If the keyword is provided, its value is used.
[Restrictions:]
none.
[Related commands:]
"forceSubModel"_forceSubModel.html

View File

@ -0,0 +1,46 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>forceSubModel_ImExCorr command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties sub-dictionary of the force model in use.
</P>
<P>forceSubModels
(
ImExCorr;
);
</P>
<P>treatExplicit true; // optional for some force models.
treatDEM true; // optional for some force models.
implDEM true; // optional for some force models.
explicitInterpCorr true; // optional for some force models.
</P>
<P><B>Examples:</B>
</P>
<P>forceSubModels
(
ImExCorr;
);
treatExplicit true; // optional for some force models.
</P>
<P><B>Description:</B>
</P>
<P> Same as ImEx, but it additionally reads "explicitInterpCorr" to correct the error steming from interpolation of Ufluid and averaging of Uparticles.
</P>
<P><B>Restrictions:</B>
</P>
<P>none.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "forceSubModel.html">forceSubModel</A>
</P>
</HTML>

View File

@ -0,0 +1,43 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
forceSubModel_ImExCorr command :h3
[Syntax:]
Defined in couplingProperties sub-dictionary of the force model in use.
forceSubModels
(
ImExCorr;
);
treatExplicit true; // optional for some force models.
treatDEM true; // optional for some force models.
implDEM true; // optional for some force models.
explicitInterpCorr true; // optional for some force models.
[Examples:]
forceSubModels
(
ImExCorr;
);
treatExplicit true; // optional for some force models.
[Description:]
Same as ImEx, but it additionally reads "explicitInterpCorr" to correct the error steming from interpolation of Ufluid and averaging of Uparticles.
[Restrictions:]
none.
[Related commands:]
"forceSubModel"_forceSubModel.html

Binary file not shown.

View File

@ -26,13 +26,12 @@ writeLiggghtsProps
verbose; verbose;
} }
</PRE> </PRE>
<UL><LI><I>switch1</I> = switch (choose on/off) to select if only last step is stored or every write step. <UL><LI><I>switch1</I> = switch (choose on/off) to select if only last step is stored or every write step (default on).
<LI><I>name</I> = name of the restart file to be written in /$caseDir/DEM/ default default "liggghts.restartCFDEM" <LI><I>name</I> = name of the restart file to be written in /$caseDir/DEM/ default (default "liggghts.restartCFDEM")
<LI><I>switch2</I> = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written <LI><I>switch2</I> = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written (default off):l
<I>verbose</I> = (default off) for verbose run
<LI><I>verbose</I> = (normally off) for verbose run
</UL> </UL>

View File

@ -24,10 +24,10 @@ writeLiggghtsProps
verbose; verbose;
\} :pre \} :pre
{switch1} = switch (choose on/off) to select if only last step is stored or every write step. :ulb,l {switch1} = switch (choose on/off) to select if only last step is stored or every write step (default on). :ulb,l
{name} = name of the restart file to be written in /$caseDir/DEM/ default default "liggghts.restartCFDEM" :l {name} = name of the restart file to be written in /$caseDir/DEM/ default (default "liggghts.restartCFDEM") :l
{switch2} = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written :l {switch2} = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written (default off):l
{verbose} = (normally off) for verbose run :l {verbose} = (default off) for verbose run :l
:ule :ule
[Examples:] [Examples:]

View File

@ -1,58 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>locateModel_turboEngineM2MSearch command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>locateModel turboEngineM2M;
turboEngineM2MProps
{
turboEngineProps
{
treeSearch switch1;
}
}
</PRE>
<UL><LI><I>switch1</I> = switch to use tree search algorithm
</UL>
<P><B>Examples:</B>
</P>
<PRE>locateModel turboEngineM2M;
turboEngineM2MProps
{
turboEngineProps
{
treeSearch true;
}
}
</PRE>
<P><B>Description:</B>
</P>
<P>The locateModel "turboEngineM2M" locates the CFD cell and cellID corresponding to a given position. The algorithm is improved compared to engine search to show better parallel performance.
</P>
<P>The turboEngineM2MSearch locate Model can be used with different settings to use different algorithms:
</P>
<UL><LI>faceDecomp false; treeSearch false; will execute some geometric (linear) search using the last known cellID (recommended)
<LI>faceDecomp false; treeSearch true; will use a recursive tree structure to find the cell.
</UL>
<P><B>Restrictions:</B> This model can only be used with many to many data exchange model!
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "locateModel.html">locateModel</A>
</P>
</HTML>

View File

@ -1,52 +0,0 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:line
locateModel_turboEngineM2MSearch command :h3
[Syntax:]
Defined in couplingProperties dictionary.
locateModel turboEngineM2M;
turboEngineM2MProps
\{
turboEngineProps
\{
treeSearch switch1;
\}
\} :pre
{switch1} = switch to use tree search algorithm :ulb,l
:ule
[Examples:]
locateModel turboEngineM2M;
turboEngineM2MProps
\{
turboEngineProps
\{
treeSearch true;
\}
\} :pre
[Description:]
The locateModel "turboEngineM2M" locates the CFD cell and cellID corresponding to a given position. The algorithm is improved compared to engine search to show better parallel performance.
The turboEngineM2MSearch locate Model can be used with different settings to use different algorithms:
faceDecomp false; treeSearch false; will execute some geometric (linear) search using the last known cellID (recommended) :ulb,l
faceDecomp false; treeSearch true; will use a recursive tree structure to find the cell. :l
:ule
[Restrictions:] This model can only be used with many to many data exchange model!
[Related commands:]
"locateModel"_locateModel.html

View File

@ -33,7 +33,8 @@
</P> </P>
<P>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. <P>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.
</P> </P>
<P><B>Description:</B> <P>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.
<B>Description:</B>
</P> </P>
<P>The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation. <P>The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.
</P> </P>

View File

@ -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 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:] [Description:]
The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation. The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.

7
src/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~

View File

@ -1,5 +1,8 @@
fvPatchFields = fields/fvPatchFields fvPatchFields = fields/fvPatchFields
derivedFvPatchFields = $(fvPatchFields)/derived derivedFvPatchFields = $(fvPatchFields)/derived
general = cfdTools/general
$(derivedFvPatchFields)/uniformFixedValueVoidfraction/uniformFixedValueVoidfractionFvPatchFields.C $(derivedFvPatchFields)/uniformFixedValueVoidfraction/uniformFixedValueVoidfractionFvPatchFields.C
$(derivedFvPatchFields)/uniformFixedValueTube/uniformFixedValueTubeFvPatchFields.C $(derivedFvPatchFields)/uniformFixedValueTube/uniformFixedValueTubeFvPatchFields.C

View File

@ -1,11 +1,14 @@
cfdemCloud = cfdemCloud cfdemCloud = cfdemCloud
cfdTools = cfdTools
forceModels = subModels/forceModel forceModels = subModels/forceModel
forceSubModels = subModels/forceModel/forceSubModels
forceModelsMS = subModels/forceModelMS forceModelsMS = subModels/forceModelMS
IOModels = subModels/IOModel IOModels = subModels/IOModel
voidFractionModels = subModels/voidFractionModel voidFractionModels = subModels/voidFractionModel
locateModels = subModels/locateModel locateModels = subModels/locateModel
meshMotionModels = subModels/meshMotionModel meshMotionModels = subModels/meshMotionModel
momCoupleModels = subModels/momCoupleModel momCoupleModels = subModels/momCoupleModel
regionModels = subModels/regionModel
dataExchangeModels = subModels/dataExchangeModel dataExchangeModels = subModels/dataExchangeModel
averagingModels = subModels/averagingModel averagingModels = subModels/averagingModel
clockModels = subModels/clockModel clockModels = subModels/clockModel
@ -14,68 +17,52 @@ smoothingModels = subModels/smoothingModel
probeModels = subModels/probeModel probeModels = subModels/probeModel
$(cfdemCloud)/cfdemCloud.C $(cfdemCloud)/cfdemCloud.C
derived/cfdemCloudBiDisperse/cfdemCloudBiDisperse.C
derived/cfdemCloudIB/cfdemCloudIB.C derived/cfdemCloudIB/cfdemCloudIB.C
derived/cfdemCloudMS/cfdemCloudMS.C derived/cfdemCloudMS/cfdemCloudMS.C
$(cfdTools)/global.C
$(cfdTools)/newGlobal.C
$(forceModels)/forceModel/forceModel.C $(forceModels)/forceModel/forceModel.C
$(forceModels)/forceModel/newForceModel.C $(forceModels)/forceModel/newForceModel.C
$(forceModels)/noDrag/noDrag.C $(forceModels)/noDrag/noDrag.C
$(forceModels)/checkCouplingInterval/checkCouplingInterval.C $(forceModels)/checkCouplingInterval/checkCouplingInterval.C
$(forceModels)/DiFeliceDrag/DiFeliceDrag.C $(forceModels)/DiFeliceDrag/DiFeliceDrag.C
$(forceModels)/DiFeliceDragNLift/DiFeliceDragNLift.C $(forceModels)/fieldStore/fieldStore.C
$(forceModels)/GidaspowDrag/GidaspowDrag.C $(forceModels)/GidaspowDrag/GidaspowDrag.C
$(forceModels)/SchillerNaumannDrag/SchillerNaumannDrag.C $(forceModels)/SchillerNaumannDrag/SchillerNaumannDrag.C
$(forceModels)/Archimedes/Archimedes.C $(forceModels)/Archimedes/Archimedes.C
$(forceModels)/ArchimedesIB/ArchimedesIB.C $(forceModels)/ArchimedesIB/ArchimedesIB.C
$(forceModels)/interface/interface.C $(forceModels)/interface/interface.C
$(forceModels)/ShirgaonkarIB/ShirgaonkarIB.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)/KochHillDrag/KochHillDrag.C
$(forceModels)/KochHillRWDrag/KochHillRWDrag.C $(forceModels)/KochHillRWDrag/KochHillRWDrag.C
$(forceModels)/BeetstraDrag/multiphaseFlowBasic/multiphaseFlowBasic.C
$(forceModels)/BeetstraDrag/BeetstraDrag.C
$(forceModels)/LaEuScalarLiquid/LaEuScalarLiquid.C
$(forceModels)/LaEuScalarTemp/LaEuScalarTemp.C $(forceModels)/LaEuScalarTemp/LaEuScalarTemp.C
$(forceModels)/LaEuScalarDust/LaEuScalarDust.C
$(forceModels)/virtualMassForce/virtualMassForce.C $(forceModels)/virtualMassForce/virtualMassForce.C
$(forceModels)/gradPForce/gradPForce.C $(forceModels)/gradPForce/gradPForce.C
$(forceModels)/gradULiftForce/gradULiftForce.C
$(forceModels)/HollowayDrag/HollowayDrag.C
$(forceModels)/viscForce/viscForce.C $(forceModels)/viscForce/viscForce.C
$(forceModels)/MeiLift/MeiLift.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)/particleCellVolume/particleCellVolume.C
$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
$(forceModels)/volWeightedAverage/volWeightedAverage.C
$(forceModelsMS)/forceModelMS/forceModelMS.C $(forceModelsMS)/forceModelMS/forceModelMS.C
$(forceModelsMS)/forceModelMS/newForceModelMS.C $(forceModelsMS)/forceModelMS/newForceModelMS.C
$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C $(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C
$(forceModelsMS)/GidaspowDragMS/GidaspowDragMS.C
$(forceModelsMS)/noDragMS/noDragMS.C $(forceSubModels)/forceSubModel/newForceSubModel.C
$(forceSubModels)/forceSubModel/forceSubModel.C
$(forceSubModels)/ImEx/ImEx.C
$(probeModels)/probeModel/probeModel.C $(probeModels)/probeModel/probeModel.C
$(probeModels)/probeModel/newProbeModel.C $(probeModels)/probeModel/newProbeModel.C
$(probeModels)/noProbe/noProbe.C $(probeModels)/noProbe/noProbe.C
$(probeModels)/particleProbe/particleProbe.C $(probeModels)/particleProbe/particleProbe.C
/*$(probeModels)/interfaceParticleProbe/interfaceParticleProbe.C*/
$(IOModels)/IOModel/IOModel.C $(IOModels)/IOModel/IOModel.C
$(IOModels)/IOModel/newIOModel.C $(IOModels)/IOModel/newIOModel.C
$(IOModels)/noIO/noIO.C $(IOModels)/noIO/noIO.C
$(IOModels)/basicIO/basicIO.C $(IOModels)/basicIO/basicIO.C
$(IOModels)/tempIO/tempIO.C
$(IOModels)/colorIO/colorIO.C
$(IOModels)/trackIO/trackIO.C $(IOModels)/trackIO/trackIO.C
$(IOModels)/sophIO/sophIO.C $(IOModels)/sophIO/sophIO.C
@ -83,50 +70,46 @@ $(voidFractionModels)/voidFractionModel/voidFractionModel.C
$(voidFractionModels)/voidFractionModel/newVoidFractionModel.C $(voidFractionModels)/voidFractionModel/newVoidFractionModel.C
$(voidFractionModels)/centreVoidFraction/centreVoidFraction.C $(voidFractionModels)/centreVoidFraction/centreVoidFraction.C
$(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C $(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C
$(voidFractionModels)/dividedVoidFractionBiDi/dividedVoidFractionBiDi.C
$(voidFractionModels)/dividedVoidFractionMS/dividedVoidFractionMS.C $(voidFractionModels)/dividedVoidFractionMS/dividedVoidFractionMS.C
$(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C $(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C
$(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C $(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C
$(voidFractionModels)/IBVoidFraction/IBVoidFraction.C $(voidFractionModels)/IBVoidFraction/IBVoidFraction.C
$(voidFractionModels)/weightedNeigbhorsVoidFraction/weightedNeigbhorsVoidFraction.C
$(locateModels)/locateModel/locateModel.C $(locateModels)/locateModel/locateModel.C
$(locateModels)/locateModel/newLocateModel.C $(locateModels)/locateModel/newLocateModel.C
$(locateModels)/standardSearch/standardSearch.C $(locateModels)/standardSearch/standardSearch.C
$(locateModels)/engineSearch/engineSearch.C $(locateModels)/engineSearch/engineSearch.C
$(locateModels)/engineSearchMany2Many/engineSearchMany2Many.C
$(locateModels)/turboEngineSearch/turboEngineSearch.C $(locateModels)/turboEngineSearch/turboEngineSearch.C
$(locateModels)/turboEngineSearchM2M/turboEngineSearchM2M.C $(locateModels)/engineSearchMany2Many/engineSearchMany2Many.C
$(locateModels)/engineSearchIB/engineSearchIB.C $(locateModels)/engineSearchIB/engineSearchIB.C
$(locateModels)/hyperEngineSearch/hyperEngineSearch.C
$(locateModels)/ijkSearch/ijkSearch.C
$(meshMotionModels)/meshMotionModel/meshMotionModel.C $(meshMotionModels)/meshMotionModel/meshMotionModel.C
$(meshMotionModels)/meshMotionModel/newMeshMotionModel.C $(meshMotionModels)/meshMotionModel/newMeshMotionModel.C
$(meshMotionModels)/noMeshMotion/noMeshMotion.C $(meshMotionModels)/noMeshMotion/noMeshMotion.C
$(meshMotionModels)/DEMdrivenMeshMotion/DEMdrivenMeshMotion.C
$(momCoupleModels)/momCoupleModel/momCoupleModel.C $(momCoupleModels)/momCoupleModel/momCoupleModel.C
$(momCoupleModels)/momCoupleModel/newMomCoupleModel.C $(momCoupleModels)/momCoupleModel/newMomCoupleModel.C
$(momCoupleModels)/explicitCouple/explicitCouple.C $(momCoupleModels)/explicitCouple/explicitCouple.C
$(momCoupleModels)/explicitCoupleSource/explicitCoupleSource.C
$(momCoupleModels)/implicitCouple/implicitCouple.C $(momCoupleModels)/implicitCouple/implicitCouple.C
$(momCoupleModels)/noCouple/noCouple.C $(momCoupleModels)/noCouple/noCouple.C
$(regionModels)/regionModel/regionModel.C
$(regionModels)/regionModel/newRegionModel.C
$(regionModels)/allRegion/allRegion.C
$(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C $(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C
$(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C $(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C
$(dataExchangeModels)/oneWayVTK/oneWayVTK.C $(dataExchangeModels)/oneWayVTK/oneWayVTK.C
$(dataExchangeModels)/twoWayFiles/twoWayFiles.C $(dataExchangeModels)/twoWayFiles/twoWayFiles.C
$(dataExchangeModels)/noDataExchange/noDataExchange.C $(dataExchangeModels)/noDataExchange/noDataExchange.C
$(dataExchangeModels)/twoWayMPI/twoWayMPI.C $(dataExchangeModels)/twoWayMPI/twoWayMPI.C
$(dataExchangeModels)/twoWayM2M/twoWayM2M.C
$(dataExchangeModels)/twoWayMany2Many/twoWayMany2Many.C $(dataExchangeModels)/twoWayMany2Many/twoWayMany2Many.C
$(averagingModels)/averagingModel/averagingModel.C $(averagingModels)/averagingModel/averagingModel.C
$(averagingModels)/averagingModel/newAveragingModel.C $(averagingModels)/averagingModel/newAveragingModel.C
$(averagingModels)/dilute/dilute.C $(averagingModels)/dilute/dilute.C
$(averagingModels)/dense/dense.C $(averagingModels)/dense/dense.C
$(averagingModels)/denseBiDi/denseBiDi.C
$(clockModels)/clockModel/clockModel.C $(clockModels)/clockModel/clockModel.C
$(clockModels)/clockModel/newClockModel.C $(clockModels)/clockModel/newClockModel.C
@ -135,7 +118,6 @@ $(clockModels)/noClock/noClock.C
$(liggghtsCommandModels)/liggghtsCommandModel/liggghtsCommandModel.C $(liggghtsCommandModels)/liggghtsCommandModel/liggghtsCommandModel.C
$(liggghtsCommandModels)/liggghtsCommandModel/newLiggghtsCommandModel.C $(liggghtsCommandModels)/liggghtsCommandModel/newLiggghtsCommandModel.C
$(liggghtsCommandModels)/colorParticles/colorParticles.C
$(liggghtsCommandModels)/execute/execute.C $(liggghtsCommandModels)/execute/execute.C
$(liggghtsCommandModels)/runLiggghts/runLiggghts.C $(liggghtsCommandModels)/runLiggghts/runLiggghts.C
$(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C $(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C
@ -145,6 +127,5 @@ $(smoothingModels)/smoothingModel/smoothingModel.C
$(smoothingModels)/smoothingModel/newSmoothingModel.C $(smoothingModels)/smoothingModel/newSmoothingModel.C
$(smoothingModels)/noSmoothing/noSmoothing.C $(smoothingModels)/noSmoothing/noSmoothing.C
$(smoothingModels)/constDiffSmoothing/constDiffSmoothing.C $(smoothingModels)/constDiffSmoothing/constDiffSmoothing.C
$(smoothingModels)/localPSizeDiffSmoothing/localPSizeDiffSmoothing.C
LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME) LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME)

View File

@ -1,6 +1,9 @@
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(RULES)/mplib$(WM_MPLIB) sinclude $(RULES)/mplib$(WM_MPLIB)
GIT_VERSION := $(shell git describe --abbrev=4 --dirty --always --tags)
PFLAGS+= -DGITVERSION=\"$(GIT_VERSION)\"
EXE_INC = \ EXE_INC = \
$(PFLAGS) \ $(PFLAGS) \
@ -14,12 +17,11 @@ EXE_INC = \
-I$(LIB_SRC)/OpenFOAM/containers/HashTables/labelHashSet \ -I$(LIB_SRC)/OpenFOAM/containers/HashTables/labelHashSet \
-I$(CFDEM_LIGGGHTS_SRC_DIR) \ -I$(CFDEM_LIGGGHTS_SRC_DIR) \
-I$(CFDEM_M2MLIB_PATH) \ -I$(CFDEM_M2MLIB_PATH) \
-I$(CFDEM_Many2ManyLIB_PATH) \
-I$(CFDEM_SRC_DIR)/cfdTools \ -I$(CFDEM_SRC_DIR)/cfdTools \
LIB_LIBS = \ LIB_LIBS = \
$(PLIBS) \ $(PLIBS) \
-L$(FOAM_USER_LIBBIN) \ -L$(CFDEM_LIB_DIR) \
-lfiniteVolume \ -lfiniteVolume \
-lincompressibleRASModels \ -lincompressibleRASModels \
-lincompressibleLESModels \ -lincompressibleLESModels \
@ -27,12 +29,6 @@ LIB_LIBS = \
-llagrangian \ -llagrangian \
-lmpi_cxx \ -lmpi_cxx \
-L$(CFDEM_LIGGGHTS_SRC_DIR) \ -L$(CFDEM_LIGGGHTS_SRC_DIR) \
-l$(CFDEM_LIGGGHTS_LIB_NAME) \ -Wl,--whole-archive -l$(CFDEM_LIGGGHTS_LIB_NAME) -Wl,--no-whole-archive \
-L$(CFDEM_M2MLIB_PATH) \
-lcouple \
-L$(CFDEM_Many2ManyLIB_PATH) \ -L$(CFDEM_Many2ManyLIB_PATH) \
-lcoupleMany2Many \ -lcoupleMany2Many
/* add -I$(CFDEM_POEMSLIB_PATH) \ to EXE_INC */
/* -L$(CFDEM_POEMSLIB_PATH) \ */
/* -lpoems */

View File

@ -4,8 +4,7 @@
word modelType = particleCloud.modelType(); word modelType = particleCloud.modelType();
//Warning << "model type not being checked" << endl; //Warning << "model type not being checked" << endl;
if (modelType=="Bfull"){
if (modelType=="B"){
Info << "solving volume averaged Navier Stokes equations of type B\n"<< endl; Info << "solving volume averaged Navier Stokes equations of type B\n"<< endl;
// check if Archimedes is used // check if Archimedes is used
@ -18,6 +17,41 @@
if(!found) if(!found)
FatalError <<"Archimedes model not found!\n" << abort(FatalError); FatalError <<"Archimedes model not found!\n" << abort(FatalError);
// check if gradPForce is used
found=false;
forAll(particleCloud.forceModels(),i)
{
if(particleCloud.forceModels()[i]=="gradPForce")
found=true;
}
if(!found)
FatalError <<"gradPForce model not found!\n" << abort(FatalError);
// check if viscForce is used
found=false;
forAll(particleCloud.forceModels(),i)
{
if(particleCloud.forceModels()[i]=="viscForce")
found=true;
}
if(!found)
FatalError <<"viscForce model not found!\n" << abort(FatalError);
}else if(modelType=="B"){
Info << "solving volume averaged Navier Stokes equations of type B\n"<< endl;
// check if Archimedes is used
bool found=false;
forAll(particleCloud.forceModels(),i)
{
if(particleCloud.forceModels()[i]=="Archimedes")
found=true;
}
if(!found)
FatalError <<"Archimedes model not found!\n" << abort(FatalError);
// check if gradP and viscForce are used // check if gradP and viscForce are used
found=false; found=false;
forAll(particleCloud.forceModels(),i) forAll(particleCloud.forceModels(),i)

View File

@ -0,0 +1,80 @@
/*---------------------------------------------------------------------------*\
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 "global.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(global, 0);
defineRunTimeSelectionTable(global, dictionary);
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void global::info()
{
Info << "\nYou are currently using:" << endl;
Info << "OF version: " << FOAMversion << endl;
Info << "OF build: " << FOAMbuild << endl;
Info << "CFDEM build: " << CFDEMversion << "\n" << endl;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
global::global
(
const dictionary& dict,
cfdemCloud& sm
)
:
dict_(dict),
particleCloud_(sm),
CFDEMversion(GITVERSION)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
global::~global()
{}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,128 @@
/*---------------------------------------------------------------------------*\
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
global
SourceFiles
global.Cver
\*---------------------------------------------------------------------------*/
#ifndef global_H
#define global_H
#include "fvCFD.H"
#include "cfdemCloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class global Declaration
\*---------------------------------------------------------------------------*/
class global
{
protected:
// Protected data
const dictionary& dict_;
cfdemCloud& particleCloud_;
const char* const CFDEMversion;
// Protected member functions
public:
//- Runtime type information
TypeName("global");
// Declare runtime constructor selection table
declareRunTimeSelectionTable
(
autoPtr,
global,
dictionary,
(
const dictionary& dict,
cfdemCloud& sm
),
(dict,sm)
);
// Constructors
//- Construct from components
global
(
const dictionary& dict,
cfdemCloud& sm
);
// Destructor
virtual ~global();
// Selector
static autoPtr<global> New
(
const dictionary& dict,
cfdemCloud& sm
);
// Member Function
void info();
// Access
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,265 @@
/* ----------------------------------------------------------------------
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).
Copyright of this contribution:
Copyright 2014- TU Graz, IPPT
------------------------------------------------------------------------- */
#ifndef CFDEM_MATH_EXTRA_H
#define CFDEM_MATH_EXTRA_H
#include <vector>
//#include "math.h"
#include "stdio.h"
#include "string.h"
#include "error.h"
#include "ctype.h"
#define TOLERANCE_ORTHO 1e-10
namespace MathExtra
{
// inline void outerProduct(double *vec1, double *vec2, double **m);
// inline double spheroidGeometry(int index, double bi, double ai);
//--------------------------------------------------------------------
// Outer Product of two vectors
inline void outerProduct(double *vec1, double *vec2, double **m)
{
int i, j;
//debug output
for( i = 0; i < 3; ++i )
// printf("OUTER PRODUCT: Input: vec1 element %d = %g", i, vec1[i]);
for( i = 0; i < 3; ++i )
// printf("OUTER PRODUCT: Input: vec2 element %d=%g", i, vec2[i]);
//calculation
for( i = 0; i < 3; ++i )
for( j = 0; j < 3; ++j )
{
m[i][j] = vec1[i] * vec2[j];
printf("OUTER PRODUCT: Result: m[%d][%d]=%g", i, j, m[i][j]);
}
}
//--------------------------------------------------------------------
// Compute the major, minor axis and eccentricity parameters of a prolate spheroid
inline bool spheroidGeometry(double radius, double aspectRatio, //inputs
double& ai, double& bi, //outputs
double& ei, double& Le //outputs
) //
{
//INPUT
// radius ...volume-equivalent radius of the spheroid
// aspectRatio ...major/minor aspect ratio
//OUTPUT
// ai ...
// bi ...
// ei ...
// Le ...
if(radius<=0.0) //avoid troubles in case radius is 0 or negative
return false;
ai = radius * std::pow(aspectRatio*aspectRatio,0.33333333333333333333333);
bi = ai / aspectRatio;
ei = std::sqrt(
1.0
- 1.0 / (aspectRatio*aspectRatio)
);
Le = std::log(
(1.0+ei)
/(1.0-ei)
);
return true;
}
//--------------------------------------------------------------------
// Compute the major, minor axis and eccentricity parameters of a prolate spheroid
inline double Pi()
{
return 3.1415926535897932384626433832795;
}
//--------------------------------------------------------------------
// Compute the major, minor axis and eccentricity parameters of a prolate spheroid
inline bool spheroidGeometry2(double radius, double aspectRatio, //inputs
double& ai, double& bi, //outputs
double& XAe, double& YAe, //outputs
double& XCe, double& YCe, //outputs
double& YHe
) //
{
//INPUT
// radius ...volume-equivalent radius of the spheroid
// aspectRatio ...major/minor aspect ratio
//OUTPUT
// XAe ...Eccentricity dependet parameter
// YAe ...Eccentricity dependet parameter
// XCe ...Eccentricity dependet parameter
// XCe ...Eccentricity dependet parameter
// YCe ...Eccentricity dependet parameter
// YHe ...Eccentricity dependet parameter
double ei(0.0), Le(0.0);
bool result =
spheroidGeometry(radius, aspectRatio, //inputs
ai, bi, //outputs
ei, Le //outputs
);
if(!result)
return false;
XAe= 2.6666666666666666666666667
*ei*ei*ei
/(-2.0*ei+(1.0+ei*ei)*Le);
YAe= 5.333333333333333333333333333
*ei*ei*ei
/(2.0*ei+(3*ei*ei-1.0)*Le);
XCe= 1.333333333333333333333333333
*ei*ei*ei
*(1.0-ei*ei)
/(2.0*ei-(1.0-ei*ei)*Le);
YCe= 1.3333333333333333333333
*ei*ei*ei
*(2.0-ei*ei)
/(-2.0*ei+(1.0+ei*ei)*Le);
YHe= 1.3333333333333333333333
*ei*ei*ei*ei*ei
/(-2.0*ei+(1.0+ei*ei)*Le);
return true;
}
//--------------------------------------------------------------------
// zeroize a 3x3x3 tensor
inline void zeroize333(double tensor[3][3][3] )
{
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
for(int iZ=0; iZ<3; iZ++)
tensor[iX][iY][iZ] = 0.0;
}
//--------------------------------------------------------------------
// zeroize a 3x3 tensor
inline void zeroize33(double tensor[3][3] )
{
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
tensor[iX][iY] = 0.0;
}
//--------------------------------------------------------------------
// multiply a 3x3x3 tensor with a scalar
inline void multiply333(double scalar, double tensor[3][3][3] )
{
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
for(int iZ=0; iZ<3; iZ++)
tensor[iX][iY][iZ] *= scalar;
}
//--------------------------------------------------------------------
// Compute a dot and dyadic product of with a vector
inline void permutationTensor(double tensor[3][3][3] )
{
zeroize333(tensor);
tensor[0][1][2] = 1.0;
tensor[1][2][0] = 1.0;
tensor[2][0][1] = 1.0;
tensor[0][2][1] =-1.0;
tensor[2][1][0] =-1.0;
tensor[1][0][2] =-1.0;
}
//--------------------------------------------------------------------
// Compute a dot product of the permutation tensor and
// then a dyadic product of with a vector
inline bool permutationDotDyadic(
double vector[3],
double tensor[3][3][3]
)
{
//Generate permutation tensor
double permutationT[3][3][3];
permutationTensor(permutationT);
//Step 1: compute dot prodcut of permutation tensor
double permutationDotProd[3][3];
zeroize33(permutationDotProd);
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
for(int iZ=0; iZ<3; iZ++)
permutationDotProd[iX][iY] += permutationT[iX][iY][iZ]
* vector[iZ];
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
for(int iZ=0; iZ<3; iZ++)
tensor[iX][iY][iZ] = permutationDotProd[iX][iY]
* vector[iZ];
return true;
}
//--------------------------------------------------------------------
// Compute a dot and dyadic product of with a vector
inline bool doubleDotTensor333Tensor33(double tensor333[3][3][3],
double tensor33[3][3],
double result[3]
)
{
result[0]=0.0;result[1]=0.0;result[2]=0.0;
for(int iX=0; iX<3; iX++)
for(int iY=0; iY<3; iY++)
for(int iZ=0; iZ<3; iZ++)
result[iX] += tensor333[iX][iY][iZ] * tensor33[iY][iZ];
return true;
}
}; //end of namespace
#endif

View File

@ -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 "global.H"
#include "dilute.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
autoPtr<global> global::New
(
const dictionary& dict,
cfdemCloud& sm
)
{
word globalType
(
dict.lookup("global")
);
Info<< "Selecting global "
<< globalType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(globalType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
{
FatalError
<< "global::New(const dictionary&, const spray&) : "
<< endl
<< " unknown globalType type "
<< globalType
<< ", constructor not in hash table" << endl << endl
<< " Valid global types are :"
<< endl;
Info<< dictionaryConstructorTablePtr_->toc()
<< abort(FatalError);
}
return autoPtr<global>(cstrIter()(dict,sm));
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -1,9 +1,44 @@
word CFDEMversion="cfdem-2.6.4"; /*---------------------------------------------------------------------------*\
word compatibleLIGGGHTSversion="3.0.1"; CFDEMcoupling - Open Source CFD-DEM coupling
word OFversion="2.2.x-commit-61b850bc107bdd60bbf1bf9a6417b9faf701d128";
Info << "\nCFDEMcoupling version: " << CFDEMversion << "\n" << endl; CFDEMcoupling is part of the CFDEMproject
Info << "\n, compatible to LIGGGHTS version: " << compatibleLIGGGHTSversion << "\n" << endl; www.cfdem.com
Info << "\n, compatible to OF version: " << OFversion << "\n" << endl; 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).
\*---------------------------------------------------------------------------*/
#ifndef versionInfo_H
#define versionInfo_H
word CFDEMversion="cfdem-2.8.2";
word compatibleLIGGGHTSversion="3.0.6";
word OFversion="2.3.x-commit-4d6f4a3115ff76ec4154c580eb041bc95ba4ec09";
Info << "\nCFDEMcoupling version: " << CFDEMversion << endl;
Info << ", compatible to LIGGGHTS version: " << compatibleLIGGGHTSversion << endl;
Info << ", compatible to OF version and build: " << OFversion << endl;
#endif

View File

@ -31,6 +31,7 @@ Description
#include "fileName.H" #include "fileName.H"
#include "cfdemCloud.H" #include "cfdemCloud.H"
#include "global.H"
#include "forceModel.H" #include "forceModel.H"
#include "locateModel.H" #include "locateModel.H"
#include "momCoupleModel.H" #include "momCoupleModel.H"
@ -80,6 +81,7 @@ Foam::cfdemCloud::cfdemCloud
positions_(NULL), positions_(NULL),
velocities_(NULL), velocities_(NULL),
fluidVel_(NULL), fluidVel_(NULL),
fAcc_(NULL),
impForces_(NULL), impForces_(NULL),
expForces_(NULL), expForces_(NULL),
DEMForces_(NULL), DEMForces_(NULL),
@ -89,6 +91,7 @@ Foam::cfdemCloud::cfdemCloud
cellIDs_(NULL), cellIDs_(NULL),
particleWeights_(NULL), particleWeights_(NULL),
particleVolumes_(NULL), particleVolumes_(NULL),
particleV_(NULL),
numberOfParticles_(0), numberOfParticles_(0),
numberOfParticlesChanged_(false), numberOfParticlesChanged_(false),
arraysReallocated_(false), arraysReallocated_(false),
@ -99,7 +102,9 @@ Foam::cfdemCloud::cfdemCloud
cg_(1.), cg_(1.),
cgOK_(true), cgOK_(true),
impDEMdrag_(false), impDEMdrag_(false),
impDEMdragAcc_(false),
imExSplitFactor_(1.0), imExSplitFactor_(1.0),
treatVoidCellsAsExplicitForce_(false),
useDDTvoidfraction_(false), useDDTvoidfraction_(false),
ddtVoidfraction_ ddtVoidfraction_
( (
@ -117,7 +122,7 @@ Foam::cfdemCloud::cfdemCloud
turbulence_ turbulence_
( (
#if defined(version21) || defined(version16ext) #if defined(version21) || defined(version16ext)
#ifdef comp #ifdef compre
mesh.lookupObject<compressible::turbulenceModel> mesh.lookupObject<compressible::turbulenceModel>
#else #else
mesh.lookupObject<incompressible::turbulenceModel> mesh.lookupObject<incompressible::turbulenceModel>
@ -213,12 +218,16 @@ Foam::cfdemCloud::cfdemCloud
) )
{ {
#include "versionInfo.H" #include "versionInfo.H"
global buildInfo(couplingProperties_,*this);
buildInfo.info();
Info << "If BC are important, please provide volScalarFields -imp/expParticleForces-" << endl; Info << "If BC are important, please provide volScalarFields -imp/expParticleForces-" << endl;
if (couplingProperties_.found("solveFlow")) if (couplingProperties_.found("solveFlow"))
solveFlow_=Switch(couplingProperties_.lookup("solveFlow")); solveFlow_=Switch(couplingProperties_.lookup("solveFlow"));
if (couplingProperties_.found("imExSplitFactor")) if (couplingProperties_.found("imExSplitFactor"))
imExSplitFactor_ = readScalar(couplingProperties_.lookup("imExSplitFactor")); imExSplitFactor_ = readScalar(couplingProperties_.lookup("imExSplitFactor"));
if (couplingProperties_.found("treatVoidCellsAsExplicitForce"))
treatVoidCellsAsExplicitForce_ = readBool(couplingProperties_.lookup("treatVoidCellsAsExplicitForce"));
if (couplingProperties_.found("verbose")) verbose_=true; if (couplingProperties_.found("verbose")) verbose_=true;
if (couplingProperties_.found("ignore")) ignore_=true; if (couplingProperties_.found("ignore")) ignore_=true;
if (turbulenceModelType_=="LESProperties") if (turbulenceModelType_=="LESProperties")
@ -276,6 +285,7 @@ Foam::cfdemCloud::~cfdemCloud()
dataExchangeM().destroy(positions_,3); dataExchangeM().destroy(positions_,3);
dataExchangeM().destroy(velocities_,3); dataExchangeM().destroy(velocities_,3);
dataExchangeM().destroy(fluidVel_,3); dataExchangeM().destroy(fluidVel_,3);
dataExchangeM().destroy(fAcc_,3);
dataExchangeM().destroy(impForces_,3); dataExchangeM().destroy(impForces_,3);
dataExchangeM().destroy(expForces_,3); dataExchangeM().destroy(expForces_,3);
dataExchangeM().destroy(DEMForces_,3); dataExchangeM().destroy(DEMForces_,3);
@ -285,6 +295,7 @@ Foam::cfdemCloud::~cfdemCloud()
dataExchangeM().destroy(cellIDs_,1); dataExchangeM().destroy(cellIDs_,1);
dataExchangeM().destroy(particleWeights_,1); dataExchangeM().destroy(particleWeights_,1);
dataExchangeM().destroy(particleVolumes_,1); dataExchangeM().destroy(particleVolumes_,1);
dataExchangeM().destroy(particleV_,1);
} }
// * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * //
void Foam::cfdemCloud::getDEMdata() void Foam::cfdemCloud::getDEMdata()
@ -292,6 +303,9 @@ void Foam::cfdemCloud::getDEMdata()
dataExchangeM().getData("radius","scalar-atom",radii_); dataExchangeM().getData("radius","scalar-atom",radii_);
dataExchangeM().getData("x","vector-atom",positions_); dataExchangeM().getData("x","vector-atom",positions_);
dataExchangeM().getData("v","vector-atom",velocities_); dataExchangeM().getData("v","vector-atom",velocities_);
if(impDEMdragAcc_)
dataExchangeM().getData("dragAcc","vector-atom",fAcc_); // array is used twice - might be necessary to clean it first
} }
void Foam::cfdemCloud::giveDEMdata() void Foam::cfdemCloud::giveDEMdata()
@ -302,6 +316,7 @@ void Foam::cfdemCloud::giveDEMdata()
if(impDEMdrag_) if(impDEMdrag_)
{ {
if(verbose_) Info << "sending Ksl and uf" << endl;
dataExchangeM().giveData("Ksl","scalar-atom",Cds_); dataExchangeM().giveData("Ksl","scalar-atom",Cds_);
dataExchangeM().giveData("uf","vector-atom",fluidVel_); dataExchangeM().giveData("uf","vector-atom",fluidVel_);
} }
@ -391,11 +406,6 @@ label Foam::cfdemCloud::particleCell(int index)
return cellI; return cellI;
} }
double Foam::cfdemCloud::d(int index)
{
return 2*radii()[index][0];
}
vector Foam::cfdemCloud::position(int index) vector Foam::cfdemCloud::position(int index)
{ {
vector pos; vector pos;
@ -427,12 +437,6 @@ int Foam::cfdemCloud::nrForceModels()
return forceModels_.size(); return forceModels_.size();
} }
scalar Foam::cfdemCloud::radius(int index)
{
scalar r = radii()[index][0];
return r;
}
scalar Foam::cfdemCloud::voidfraction(int index) scalar Foam::cfdemCloud::voidfraction(int index)
{ {
return voidfractions()[index][0]; return voidfractions()[index][0];
@ -452,6 +456,16 @@ label Foam::cfdemCloud::liggghtsCommandModelIndex(word name)
return index; return index;
} }
std::vector<double*>* Foam::cfdemCloud::getVprobe()
{
return probeModel_->getVprobe();
}
std::vector<double>* Foam::cfdemCloud::getSprobe()
{
return probeModel_->getSprobe();
}
// * * * * * * * * * * * * * * * WRITE * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * WRITE * * * * * * * * * * * * * //
// * * * write cfdemCloud internal data * * * // // * * * write cfdemCloud internal data * * * //
@ -466,6 +480,7 @@ bool Foam::cfdemCloud::evolve
numberOfParticlesChanged_ = false; numberOfParticlesChanged_ = false;
arraysReallocated_=false; arraysReallocated_=false;
bool doCouple=false; bool doCouple=false;
probeModel_->clearProbes();
if(!ignore()) if(!ignore())
{ {
@ -507,7 +522,7 @@ bool Foam::cfdemCloud::evolve
// set void fraction field // set void fraction field
clockM().start(19,"setvoidFraction"); clockM().start(19,"setvoidFraction");
if(verbose_) Info << "- setvoidFraction()" << endl; if(verbose_) Info << "- setvoidFraction()" << endl;
voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_); voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_,particleV_);
if(verbose_) Info << "setvoidFraction done." << endl; if(verbose_) Info << "setvoidFraction done." << endl;
clockM().stop("setvoidFraction"); clockM().stop("setvoidFraction");
@ -519,7 +534,12 @@ bool Foam::cfdemCloud::evolve
//Smoothen "next" fields //Smoothen "next" fields
smoothingM().dSmoothing(); smoothingM().dSmoothing();
smoothingM().smoothen(voidFractionM().voidFractionNext()); 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"); clockM().stop("setVectorAverage");
} }
@ -595,15 +615,40 @@ bool Foam::cfdemCloud::reAllocArrays() const
dataExchangeM().allocateArray(positions_,0.,3); dataExchangeM().allocateArray(positions_,0.,3);
dataExchangeM().allocateArray(velocities_,0.,3); dataExchangeM().allocateArray(velocities_,0.,3);
dataExchangeM().allocateArray(fluidVel_,0.,3); dataExchangeM().allocateArray(fluidVel_,0.,3);
dataExchangeM().allocateArray(fAcc_,0.,3);
dataExchangeM().allocateArray(impForces_,0.,3); dataExchangeM().allocateArray(impForces_,0.,3);
dataExchangeM().allocateArray(expForces_,0.,3); dataExchangeM().allocateArray(expForces_,0.,3);
dataExchangeM().allocateArray(DEMForces_,0.,3); dataExchangeM().allocateArray(DEMForces_,0.,3);
dataExchangeM().allocateArray(Cds_,0.,1); dataExchangeM().allocateArray(Cds_,0.,1);
dataExchangeM().allocateArray(radii_,0.,1); dataExchangeM().allocateArray(radii_,0.,1);
dataExchangeM().allocateArray(voidfractions_,1.,voidFractionM().maxCellsPerParticle()); dataExchangeM().allocateArray(voidfractions_,1.,voidFractionM().maxCellsPerParticle());
dataExchangeM().allocateArray(cellIDs_,0.,voidFractionM().maxCellsPerParticle()); dataExchangeM().allocateArray(cellIDs_,-1.,voidFractionM().maxCellsPerParticle());
dataExchangeM().allocateArray(particleWeights_,0.,voidFractionM().maxCellsPerParticle()); dataExchangeM().allocateArray(particleWeights_,0.,voidFractionM().maxCellsPerParticle());
dataExchangeM().allocateArray(particleVolumes_,0.,voidFractionM().maxCellsPerParticle()); dataExchangeM().allocateArray(particleVolumes_,0.,voidFractionM().maxCellsPerParticle());
dataExchangeM().allocateArray(particleV_,0.,1);
arraysReallocated_ = true;
return true;
}
return false;
}
bool Foam::cfdemCloud::reAllocArrays(int nP, bool forceRealloc) const
{
if( (numberOfParticlesChanged_ && !arraysReallocated_) || forceRealloc)
{
// get arrays of new length
dataExchangeM().allocateArray(positions_,0.,3,nP);
dataExchangeM().allocateArray(velocities_,0.,3,nP);
dataExchangeM().allocateArray(fluidVel_,0.,3,nP);
dataExchangeM().allocateArray(impForces_,0.,3,nP);
dataExchangeM().allocateArray(expForces_,0.,3,nP);
dataExchangeM().allocateArray(DEMForces_,0.,3,nP);
dataExchangeM().allocateArray(Cds_,0.,1,nP);
dataExchangeM().allocateArray(radii_,0.,1,nP);
dataExchangeM().allocateArray(voidfractions_,1.,voidFractionM().maxCellsPerParticle(),nP);
dataExchangeM().allocateArray(cellIDs_,0.,voidFractionM().maxCellsPerParticle(),nP);
dataExchangeM().allocateArray(particleWeights_,0.,voidFractionM().maxCellsPerParticle(),nP);
dataExchangeM().allocateArray(particleVolumes_,0.,voidFractionM().maxCellsPerParticle(),nP);
arraysReallocated_ = true; arraysReallocated_ = true;
return true; return true;
} }
@ -615,7 +660,7 @@ tmp<fvVectorMatrix> cfdemCloud::divVoidfractionTau(volVectorField& U,volScalarFi
return return
( (
- fvm::laplacian(voidfractionNuEff(voidfraction), U) - fvm::laplacian(voidfractionNuEff(voidfraction), U)
- fvc::div(voidfractionNuEff(voidfraction)*dev(fvc::grad(U)().T())) - fvc::div(voidfractionNuEff(voidfraction)*dev2(fvc::grad(U)().T()))
); );
} }
@ -648,11 +693,11 @@ void cfdemCloud::calcDdtVoidfraction(volScalarField& voidfraction) const
tmp<volScalarField> cfdemCloud::voidfractionNuEff(volScalarField& voidfraction) const tmp<volScalarField> cfdemCloud::voidfractionNuEff(volScalarField& voidfraction) const
{ {
if (modelType_=="B") if (modelType_=="B" || modelType_=="Bfull")
{ {
return tmp<volScalarField> return tmp<volScalarField>
( (
#ifdef comp #ifdef compre
new volScalarField("viscousTerm", (turbulence_.mut() + turbulence_.mu())) new volScalarField("viscousTerm", (turbulence_.mut() + turbulence_.mu()))
#else #else
new volScalarField("viscousTerm", (turbulence_.nut() + turbulence_.nu())) new volScalarField("viscousTerm", (turbulence_.nut() + turbulence_.nu()))
@ -663,7 +708,7 @@ tmp<volScalarField> cfdemCloud::voidfractionNuEff(volScalarField& voidfraction)
{ {
return tmp<volScalarField> return tmp<volScalarField>
( (
#ifdef comp #ifdef compre
new volScalarField("viscousTerm", voidfraction*(turbulence_.mut() + turbulence_.mu())) new volScalarField("viscousTerm", voidfraction*(turbulence_.mut() + turbulence_.mu()))
#else #else
new volScalarField("viscousTerm", voidfraction*(turbulence_.nut() + turbulence_.nu())) new volScalarField("viscousTerm", voidfraction*(turbulence_.nut() + turbulence_.nu()))

View File

@ -44,6 +44,7 @@ SourceFiles
// choose version // choose version
#include "OFversion.H" #include "OFversion.H"
#include <vector>
#include "fvCFD.H" #include "fvCFD.H"
#include "IFstream.H" #include "IFstream.H"
@ -102,6 +103,8 @@ protected:
mutable double **fluidVel_; mutable double **fluidVel_;
mutable double **fAcc_;
mutable double **impForces_; mutable double **impForces_;
mutable double **expForces_; mutable double **expForces_;
@ -120,6 +123,8 @@ protected:
mutable double **particleVolumes_; mutable double **particleVolumes_;
mutable double **particleV_;
int numberOfParticles_; int numberOfParticles_;
bool numberOfParticlesChanged_; bool numberOfParticlesChanged_;
@ -140,14 +145,18 @@ protected:
bool impDEMdrag_; bool impDEMdrag_;
bool impDEMdragAcc_;
mutable scalar imExSplitFactor_; mutable scalar imExSplitFactor_;
mutable bool treatVoidCellsAsExplicitForce_; //will treat the coupling force in cells with no Us data explicitly
bool useDDTvoidfraction_; bool useDDTvoidfraction_;
mutable volScalarField ddtVoidfraction_; mutable volScalarField ddtVoidfraction_;
#if defined(version21) || defined(version16ext) #if defined(version21) || defined(version16ext)
#ifdef comp #ifdef compre
const compressible::turbulenceModel& turbulence_; const compressible::turbulenceModel& turbulence_;
#else #else
const incompressible::turbulenceModel& turbulence_; const incompressible::turbulenceModel& turbulence_;
@ -200,6 +209,7 @@ public:
friend class dataExchangeModel; friend class dataExchangeModel;
friend class voidFractionModel; friend class voidFractionModel;
friend class forceModel; friend class forceModel;
friend class forceSubModel;
// Constructors // Constructors
@ -223,8 +233,6 @@ public:
label particleCell(int); label particleCell(int);
double d(int);
vector position(int); vector position(int);
vector velocity(int); vector velocity(int);
@ -235,8 +243,6 @@ public:
virtual int nrForceModels(); virtual int nrForceModels();
scalar radius(int);
scalar voidfraction(int); scalar voidfraction(int);
label liggghtsCommandModelIndex(word); label liggghtsCommandModelIndex(word);
@ -247,8 +253,12 @@ public:
inline const bool& impDEMdrag() const; inline const bool& impDEMdrag() const;
inline const bool& impDEMdragAcc() const;
inline const scalar& imExSplitFactor() const; inline const scalar& imExSplitFactor() const;
inline const bool& treatVoidCellsAsExplicitForce() const;
inline const bool& ignore() const; inline const bool& ignore() const;
inline const fvMesh& mesh() const; inline const fvMesh& mesh() const;
@ -265,6 +275,8 @@ public:
inline double ** fluidVels() const; inline double ** fluidVels() const;
inline double ** fAccs() const;
inline double ** impForces() const; inline double ** impForces() const;
inline double ** expForces() const; inline double ** expForces() const;
@ -285,7 +297,13 @@ public:
inline double ** particleWeights() const; inline double ** particleWeights() const;
inline double ** particleVolumes() const; virtual inline label body(int);
virtual inline double particleVolume(int);
inline scalar radius(int);
virtual inline double d(int);
virtual inline double dMin() {return -1;} virtual inline double dMin() {return -1;}
virtual inline double dMax() {return -1;} virtual inline double dMax() {return -1;}
@ -297,10 +315,18 @@ public:
virtual inline int ** particleTypes() const {return NULL;}; virtual inline int ** particleTypes() const {return NULL;};
virtual label particleType(label index) const {return -1;}; 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 //access to the particles' orientation information
virtual inline double ** exArray() const {return NULL;}; virtual inline double ** exArray() const {return NULL;};
virtual vector ex(int) const {return Foam::vector(0,0,0);}; virtual vector ex(int) const {return Foam::vector(0,0,0);};
//Detector if SRF module is enable or not
virtual inline bool SRFOn(){return false;}
inline int numberOfParticles() const; inline int numberOfParticles() const;
inline bool numberOfParticlesChanged() const; inline bool numberOfParticlesChanged() const;
@ -336,7 +362,7 @@ public:
inline autoPtr<liggghtsCommandModel>* liggghtsCommand() const; inline autoPtr<liggghtsCommandModel>* liggghtsCommand() const;
#if defined(version21) || defined(version16ext) #if defined(version21) || defined(version16ext)
#ifdef comp #ifdef compre
inline const compressible::turbulenceModel& turbulence() const; inline const compressible::turbulenceModel& turbulence() const;
#else #else
inline const incompressible::turbulenceModel& turbulence() const; inline const incompressible::turbulenceModel& turbulence() const;
@ -352,6 +378,9 @@ public:
virtual bool reAllocArrays() const; virtual bool reAllocArrays() const;
virtual bool reAllocArrays(int nP, bool forceRealloc) const; //force number of particles during reallocation
// IO // IO
void writeScalarFieldToTerminal(double**&); void writeScalarFieldToTerminal(double**&);
@ -369,6 +398,10 @@ public:
tmp<volScalarField> voidfractionNuEff(volScalarField&) const; tmp<volScalarField> voidfractionNuEff(volScalarField&) const;
void resetArray(double**&,int,int,double resetVal=0.); void resetArray(double**&,int,int,double resetVal=0.);
std::vector<double*>* getVprobe();
std::vector<double>* getSprobe();
}; };

View File

@ -55,11 +55,21 @@ inline const bool& cfdemCloud::impDEMdrag() const
return impDEMdrag_; return impDEMdrag_;
}; };
inline const bool& cfdemCloud::impDEMdragAcc() const
{
return impDEMdragAcc_;
};
inline const scalar& cfdemCloud::imExSplitFactor() const inline const scalar& cfdemCloud::imExSplitFactor() const
{ {
return imExSplitFactor_; return imExSplitFactor_;
}; };
inline const bool& cfdemCloud::treatVoidCellsAsExplicitForce() const
{
return treatVoidCellsAsExplicitForce_;
}
inline const scalar& cfdemCloud::cg() const inline const scalar& cfdemCloud::cg() const
{ {
return cg_; return cg_;
@ -105,6 +115,11 @@ inline double ** cfdemCloud::fluidVels() const
return fluidVel_; return fluidVel_;
} }
inline double ** cfdemCloud::fAccs() const
{
return fAcc_;
}
inline double ** cfdemCloud::impForces() const inline double ** cfdemCloud::impForces() const
{ {
return impForces_; return impForces_;
@ -162,9 +177,24 @@ inline double ** cfdemCloud::particleWeights() const
return particleWeights_; return particleWeights_;
} }
inline double ** cfdemCloud::particleVolumes() const inline label Foam::cfdemCloud::body(int index)
{ {
return particleVolumes_; return index;
}
inline double cfdemCloud::particleVolume(int index)
{
return particleV_[index][0];
}
inline scalar cfdemCloud::radius(int index)
{
return radii_[index][0];
}
inline double cfdemCloud::d(int index)
{
return 2*radii_[index][0];
} }
inline int cfdemCloud::numberOfParticles() const inline int cfdemCloud::numberOfParticles() const
@ -254,7 +284,7 @@ inline autoPtr<liggghtsCommandModel>* cfdemCloud::liggghtsCommand() const
} }
#if defined(version21) || defined(version16ext) #if defined(version21) || defined(version16ext)
#ifdef comp #ifdef compre
inline const compressible::turbulenceModel& cfdemCloud::turbulence() const inline const compressible::turbulenceModel& cfdemCloud::turbulence() const
#else #else
inline const incompressible::turbulenceModel& cfdemCloud::turbulence() const inline const incompressible::turbulenceModel& cfdemCloud::turbulence() const

View File

@ -121,7 +121,7 @@ bool Foam::cfdemCloudIB::evolve()
// set void fraction field // set void fraction field
if(verbose_) Info << "- setvoidFraction()" << endl; if(verbose_) Info << "- setvoidFraction()" << endl;
voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_); voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_,particleV_);
if(verbose_) Info << "setvoidFraction done." << endl; if(verbose_) Info << "setvoidFraction done." << endl;
} }
@ -190,6 +190,7 @@ void Foam::cfdemCloudIB::calcVelocityCorrection
} }
//} //}
} }
U.correctBoundaryConditions();
// make field divergence free - set reference value in case it is needed // make field divergence free - set reference value in case it is needed
fvScalarMatrix phiIBEqn fvScalarMatrix phiIBEqn

View File

@ -56,21 +56,25 @@ cfdemCloudMS::cfdemCloudMS
cellIDsCM_(NULL), cellIDsCM_(NULL),
bodies_(NULL), bodies_(NULL),
nrigids_(NULL), nrigids_(NULL),
exCM_(NULL), clumpType_(NULL),
eyCM_(NULL), nClumpTypes_(1),
ezCM_(NULL), clumpVol_(NULL),
VclumpCM_(NULL), clumpDH_(NULL),
SclumpCM_(NULL), clumpWeights_(NULL),
scalingCM_(NULL), //exCM_(NULL),
typeCM_(NULL), //eyCM_(NULL),
Cclump_ex_(NULL), //ezCM_(NULL),
Cclump_ey_(NULL), //SclumpCM_(NULL),
//scalingCM_(NULL),
//Cclump_ex_(NULL),
//Cclump_ey_(NULL),
impForcesCM_(NULL), impForcesCM_(NULL),
expForcesCM_(NULL), expForcesCM_(NULL),
DEMForcesCM_(NULL), DEMForcesCM_(NULL),
particleWeightsCM_(NULL),
numberOfClumps_(-1), numberOfClumps_(-1),
numberOfClumpsChanged_(false), numberOfClumpsChanged_(false),
manDHdev_(false),
dHbyV_(scalarList(0)),
useforcePerClump_(false), useforcePerClump_(false),
forceModels_(couplingProperties_.lookup("forceModelsMS")) forceModels_(couplingProperties_.lookup("forceModelsMS"))
{ {
@ -84,6 +88,7 @@ cfdemCloudMS::cfdemCloudMS
forceModels_[i] forceModels_[i]
); );
} }
} }
@ -91,24 +96,25 @@ cfdemCloudMS::cfdemCloudMS
cfdemCloudMS::~cfdemCloudMS() cfdemCloudMS::~cfdemCloudMS()
{ {
delete positionsCM_; dataExchangeM().destroy(positionsCM_,3);
delete velocitiesCM_; dataExchangeM().destroy(velocitiesCM_,3);
delete cellIDsCM_; dataExchangeM().destroy(cellIDsCM_,1);
delete bodies_; dataExchangeM().destroy(bodies_,1);
delete nrigids_; dataExchangeM().destroy(nrigids_,1);
delete exCM_; dataExchangeM().destroy(clumpType_,1);
delete eyCM_; dataExchangeM().destroy(clumpVol_,1);
delete ezCM_; dataExchangeM().destroy(clumpDH_,1);
delete VclumpCM_; dataExchangeM().destroy(clumpWeights_,1);
delete SclumpCM_; //delete exCM_;
delete scalingCM_; //delete eyCM_;
delete typeCM_; //delete ezCM_;
delete Cclump_ex_; //delete SclumpCM_;
delete Cclump_ey_; //delete scalingCM_;
delete impForcesCM_; //delete Cclump_ex_;
delete expForcesCM_; //delete Cclump_ey_;
delete DEMForcesCM_; dataExchangeM().destroy(impForcesCM_,3);
delete particleWeightsCM_; dataExchangeM().destroy(expForcesCM_,3);
dataExchangeM().destroy(DEMForcesCM_,3);
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -117,32 +123,50 @@ cfdemCloudMS::~cfdemCloudMS()
void cfdemCloudMS::getDEMdata() void cfdemCloudMS::getDEMdata()
{ {
cfdemCloud::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("xcm","vector-multisphere",positionsCM_); // position of the centre of mass
dataExchangeM().getData("vcm","vector-multisphere",velocitiesCM_); // velocity 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("body","scalar-atom",bodies_); // clump-particle connex
dataExchangeM().getData("nrigid","scalar-multisphere",nrigids_); // # particles in clump dataExchangeM().getData("nrigid","scalar-multisphere",nrigids_); // # particles in clump
dataExchangeM().getData("ex_space","vector-multisphere",exCM_); // axis of inertia dataExchangeM().getData("clumptype","scalar-multisphere",clumpType_); // type of the clump
dataExchangeM().getData("ey_space","vector-multisphere",eyCM_); // axis of inertia
dataExchangeM().getData("ez_space","vector-multisphere",ezCM_); // axis of inertia
// dataExchangeM().getScalarData("Vclump",VclumpCM_); // Volume of the clump nClumpTypes_=dataExchangeM().getNumberOfTypes(); // nr of clump types
// dataExchangeM().getScalarData("Sclump",SclumpCM_); // surface area of the clump double* typeVol_=dataExchangeM().getTypeVol(); // volume of the clump
// dataExchangeM().getScalarData("scaling",scalingCM_); // scaling of the clump //- save clump volume and mass
// dataExchangeM().getScalarData("typeCM",typeCM_); // type of the clump double **typeDH(NULL);
dataExchangeM().allocateArray(typeDH,-1,1,nClumpTypes()+1);
if(manDHdev_) // use manually defined dH
{
for(int k = 1;k <= nClumpTypes(); k++)
typeDH[k][0]=dHbyV_[k-1]*typeVol_[k];
}
else // calc dH from volAeqivalent shpere
{
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
}
// dataExchangeM().getScalarData("Cclump_ex",Cclump_ex_); // cross section of the clump in ex normal direction int ct(0);
// dataExchangeM().getScalarData("Cclump_ey",Cclump_ey_); // cross section of the clump in ey normal direction 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;
}
dataExchangeM().destroy(typeDH,1);
// --
// calc Saequi, surface area of the vol aequivalent sphere //dataExchangeM().getData("ex_space","vector-multisphere",exCM_); // axis of inertia
// Saequi=pi*pow(6*VclumpCM_/pi,2./3.); //dataExchangeM().getData("ey_space","vector-multisphere",eyCM_); // axis of inertia
//dataExchangeM().getData("ez_space","vector-multisphere",ezCM_); // axis of inertia
// calc Caequi, cross section of the vol aequivalent sphere //dataExchangeM().getScalarData("Sclump",SclumpCM_); // surface area of the clump
// Caequi=Saequi/4; //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() void Foam::cfdemCloudMS::giveDEMdata()
@ -174,27 +198,26 @@ bool cfdemCloudMS::reAllocArrays() const
{ {
if(cfdemCloud::reAllocArrays()) if(cfdemCloud::reAllocArrays())
{ {
int nClumpTypes = dataExchangeM().nClumpTypes();
// get arrays of new length // get arrays of new length
dataExchangeM().allocateArray(positionsCM_,0,3,"nbodies"); dataExchangeM().allocateArray(positionsCM_,0,3,"nbodies");
dataExchangeM().allocateArray(velocitiesCM_,0,3,"nbodies"); dataExchangeM().allocateArray(velocitiesCM_,0,3,"nbodies");
dataExchangeM().allocateArray(cellIDsCM_,0,1,"nbodies"); dataExchangeM().allocateArray(cellIDsCM_,-1,1,"nbodies");
dataExchangeM().allocateArray(bodies_,0,3); dataExchangeM().allocateArray(bodies_,0,1);
dataExchangeM().allocateArray(nrigids_,0,1,"nbodies"); dataExchangeM().allocateArray(nrigids_,0,1,"nbodies");
dataExchangeM().allocateArray(exCM_,0,3,"nbodies"); dataExchangeM().allocateArray(clumpType_,0,1,"nbodies");
dataExchangeM().allocateArray(eyCM_,0,3,"nbodies"); dataExchangeM().allocateArray(clumpVol_,0,1,"nbodies");
dataExchangeM().allocateArray(ezCM_,0,3,"nbodies"); dataExchangeM().allocateArray(clumpDH_,1.,1,"nbodies");
dataExchangeM().allocateArray(VclumpCM_,0,3,nClumpTypes); dataExchangeM().allocateArray(clumpWeights_,1,1,"nbodies");
dataExchangeM().allocateArray(SclumpCM_,0,3,nClumpTypes); //dataExchangeM().allocateArray(exCM_,0,3,"nbodies");
dataExchangeM().allocateArray(scalingCM_,0,3,"nbodies"); //dataExchangeM().allocateArray(eyCM_,0,3,"nbodies");
dataExchangeM().allocateArray(typeCM_,0,3,"nbodies"); //dataExchangeM().allocateArray(ezCM_,0,3,"nbodies");
dataExchangeM().allocateArray(Cclump_ex_,0,3,nClumpTypes); //dataExchangeM().allocateArray(SclumpCM_,0,3,nClumpTypes);
dataExchangeM().allocateArray(Cclump_ey_,0,3,nClumpTypes); //dataExchangeM().allocateArray(scalingCM_,0,3,"nbodies");
//dataExchangeM().allocateArray(Cclump_ex_,0,3,nClumpTypes);
//dataExchangeM().allocateArray(Cclump_ey_,0,3,nClumpTypes);
dataExchangeM().allocateArray(impForcesCM_,0,3,"nbodies"); dataExchangeM().allocateArray(impForcesCM_,0,3,"nbodies");
dataExchangeM().allocateArray(expForcesCM_,0,3,"nbodies"); dataExchangeM().allocateArray(expForcesCM_,0,3,"nbodies");
dataExchangeM().allocateArray(DEMForcesCM_,0,3,"nbodies"); dataExchangeM().allocateArray(DEMForcesCM_,0,3,"nbodies");
dataExchangeM().allocateArray(particleWeightsCM_,1,1,"nbodies"); // filed is never changed-correct only for centre
return true; return true;
} }
return false; return false;
@ -203,7 +226,6 @@ bool cfdemCloudMS::reAllocArrays() const
void Foam::cfdemCloudMS::setNumberOfParticles(int nP) void Foam::cfdemCloudMS::setNumberOfParticles(int nP)
{ {
cfdemCloud::setNumberOfParticles(nP); cfdemCloud::setNumberOfParticles(nP);
int nC = dataExchangeM().getNumberOfClumps(); int nC = dataExchangeM().getNumberOfClumps();
if(nC != numberOfClumps()) if(nC != numberOfClumps())
@ -211,6 +233,9 @@ void Foam::cfdemCloudMS::setNumberOfParticles(int nP)
numberOfClumpsChanged_ = true; numberOfClumpsChanged_ = true;
numberOfClumps_ = nC; numberOfClumps_ = nC;
} }
// in case last particle has left an ma-_tag_ms is not up to date
numberOfClumps_ = min(numberOfParticles(),numberOfClumps_);
} }
void Foam::cfdemCloudMS::findCells() void Foam::cfdemCloudMS::findCells()
@ -246,14 +271,14 @@ void Foam::cfdemCloudMS::setParticleForceField()
( (
forceM(0).impParticleForces(), forceM(0).impParticleForces(),
impForcesCM_, impForcesCM_,
particleWeightsCM_, clumpWeights_,
numberOfClumps() numberOfClumps()
); );
averagingM().setVectorSumSimple averagingM().setVectorSumSimple
( (
forceM(0).expParticleForces(), forceM(0).expParticleForces(),
expForcesCM_, expForcesCM_,
particleWeightsCM_, clumpWeights_,
numberOfClumps() numberOfClumps()
); );
} }
@ -262,45 +287,11 @@ void Foam::cfdemCloudMS::setParticleForceField()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// PUBLIC MEMBER FUNCTIONS // PUBLIC MEMBER FUNCTIONS
vector Foam::cfdemCloudMS::positionCM(int index)
{
vector pos;
for(int i=0;i<3;i++) pos[i] = positionsCM()[index][i];
return pos;
}
vector Foam::cfdemCloudMS::velocityCM(int index)
{
vector vel;
for(int i=0;i<3;i++) vel[i] = velocitiesCM()[index][i];
return vel;
}
label Foam::cfdemCloudMS::cellIDCM(int index)
{
return cellIDsCM_[index][0];
}
label Foam::cfdemCloudMS::body(int index)
{
return bodies_[0][index]-1;
}
label Foam::cfdemCloudMS::nrigid(int index)
{
return nrigids_[0][index];
// return nrigids_[0][0];
}
const forceModel& Foam::cfdemCloudMS::forceM(int i) const forceModel& Foam::cfdemCloudMS::forceM(int i)
{ {
return forceModel_[i]; return forceModel_[i];
} }
int Foam::cfdemCloudMS::nrForceModels()
{
return forceModels_.size();
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam

View File

@ -59,37 +59,36 @@ class cfdemCloudMS
public cfdemCloud public cfdemCloud
{ {
private: private:
mutable double **positionsCM_; mutable double **positionsCM_;
mutable double **velocitiesCM_; mutable double **velocitiesCM_;
mutable double **cellIDsCM_; mutable double **cellIDsCM_;
mutable int **bodies_; mutable int **bodies_;
mutable int **nrigids_; mutable int **nrigids_;
mutable double **exCM_; mutable int **clumpType_;
mutable double **eyCM_; mutable int nClumpTypes_;
mutable double **ezCM_; mutable double **clumpVol_;
mutable double **clumpDH_;
mutable double **clumpWeights_;
mutable double **VclumpCM_; //mutable double **exCM_;
mutable double **SclumpCM_; //mutable double **eyCM_;
//mutable double **ezCM_;
mutable double **scalingCM_; //mutable double **SclumpCM_;
mutable double **typeCM_; //mutable double **scalingCM_;
//mutable double **Cclump_ex_;
mutable double **Cclump_ex_; //mutable double **Cclump_ey_;
mutable double **Cclump_ey_;
mutable double **impForcesCM_; mutable double **impForcesCM_;
mutable double **expForcesCM_; mutable double **expForcesCM_;
mutable double **DEMForcesCM_; mutable double **DEMForcesCM_;
mutable double **particleWeightsCM_;
int numberOfClumps_; int numberOfClumps_;
bool numberOfClumpsChanged_; bool numberOfClumpsChanged_;
Switch manDHdev_;
scalarList dHbyV_;
bool useforcePerClump_; bool useforcePerClump_;
const wordList forceModels_; const wordList forceModels_;
autoPtr<class forceModelMS>* forceModel_; autoPtr<class forceModelMS>* forceModel_;
@ -119,21 +118,32 @@ public:
// Member Functions // Member Functions
// Access // Access
inline label body(int);
vector positionCM(int); inline double particleVolume(int);
vector velocityCM(int); inline vector positionCM(int);
label cellIDCM(int); inline vector velocityCM(int);
label body(int); inline label cellIDCM(int);
label nrigid(int); inline label nrigid(int);
inline int nrForceModels();
inline double **& positionsCM() const; inline double **& positionsCM() const;
inline double **& velocitiesCM() const; inline double **& velocitiesCM() const;
inline int **& clumpType() const;
inline int nClumpTypes() const;
inline double **& clumpVol() const;
inline double **& clumpDH() const;
inline double **& impForcesCM() const; inline double **& impForcesCM() const;
inline double **& expForcesCM() const; inline double **& expForcesCM() const;
@ -144,12 +154,16 @@ public:
inline bool numberOfClumpsChanged() const; inline bool numberOfClumpsChanged() const;
inline void setManDHdev(Switch);
inline void setDHbyV(scalarList);
inline scalarList& dHbyV();
inline bool useforcePerClump() const; inline bool useforcePerClump() const;
const forceModel& forceM(int); const forceModel& forceM(int);
int nrForceModels();
bool evolve(volScalarField&,volVectorField&,volVectorField&); bool evolve(volScalarField&,volVectorField&,volVectorField&);
}; };

View File

@ -34,6 +34,55 @@ namespace Foam
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline label Foam::cfdemCloudMS::body(int index)
{
return bodies_[0][index]-1;
}
inline double cfdemCloudMS::particleVolume(int index)
{
int ind = body(index); // particle to clump ID
double Vp(SMALL);
if(ind >= 0 && ind <numberOfClumps())
Vp=clumpVol_[ind][0];
else
Warning << "ind=" << ind << endl;
int nR(nrigid(ind));
if(nR>0) Vp/=nR;
return Vp;
}
inline vector Foam::cfdemCloudMS::positionCM(int index)
{
vector pos;
for(int i=0;i<3;i++) pos[i] = positionsCM()[index][i];
return pos;
}
inline vector Foam::cfdemCloudMS::velocityCM(int index)
{
vector vel;
for(int i=0;i<3;i++) vel[i] = velocitiesCM()[index][i];
return vel;
}
inline label Foam::cfdemCloudMS::cellIDCM(int index)
{
return cellIDsCM_[index][0];
}
inline label Foam::cfdemCloudMS::nrigid(int index)
{
return nrigids_[0][index];
}
inline int Foam::cfdemCloudMS::nrForceModels()
{
return forceModels_.size();
}
inline double **& cfdemCloudMS::positionsCM() const inline double **& cfdemCloudMS::positionsCM() const
{ {
return positionsCM_; return positionsCM_;
@ -44,6 +93,26 @@ inline double **& cfdemCloudMS::velocitiesCM() const
return velocitiesCM_; return velocitiesCM_;
} }
inline int cfdemCloudMS::nClumpTypes() const
{
return nClumpTypes_;
}
inline int **& cfdemCloudMS::clumpType() const
{
return clumpType_;
}
inline double **& cfdemCloudMS::clumpVol() const
{
return clumpVol_;
}
inline double **& cfdemCloudMS::clumpDH() const
{
return clumpDH_;
}
inline double **& cfdemCloudMS::impForcesCM() const inline double **& cfdemCloudMS::impForcesCM() const
{ {
return impForcesCM_; return impForcesCM_;
@ -69,6 +138,21 @@ inline bool cfdemCloudMS::numberOfClumpsChanged() const
return numberOfClumpsChanged_; return numberOfClumpsChanged_;
} }
inline void cfdemCloudMS::setManDHdev(Switch v)
{
manDHdev_ = v;
}
inline void cfdemCloudMS::setDHbyV(scalarList v)
{
dHbyV_ = v;
}
inline scalarList& cfdemCloudMS::dHbyV()
{
return dHbyV_;
}
inline bool cfdemCloudMS::useforcePerClump() const inline bool cfdemCloudMS::useforcePerClump() const
{ {
return useforcePerClump_; return useforcePerClump_;

View File

@ -1,11 +1,11 @@
//#define version23 // currently being tested #define version23 // currently being tested
#define version22 // currently being used //#define version22 // currently being used
//#define version21 //#define version21
//#define version16ext //#define version16ext
//#define version15 //#define version15
// choose comp/incomp // choose comp/incomp
//#define comp // if comp is on - you must use Make/options_comp! //#define compre // if comp is on - you must use Make/options_comp!
//define multi sphere //define multi sphere
//#define multisphere //#define multisphere

View File

@ -37,12 +37,25 @@
#- export environment variables (adapt to your paths) #- export environment variables (adapt to your paths)
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
#check if default lammps lib path should be used
if [[ $CFDEM_LAMMPS_LIB_DIR == "" ]]; then
export CFDEM_LAMMPS_LIB_DIR=$CFDEM_LIGGGHTS_SRC_DIR/../lib/
else
echo "using already defined CFDEM_LAMMPS_LIB_DIR=$CFDEM_LAMMPS_LIB_DIR ."
fi
#- LIGGGHTS lib name #- LIGGGHTS lib name
export CFDEM_LIGGGHTS_LIB_NAME=lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME export CFDEM_LIGGGHTS_LIB_NAME=lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME
#- CFDEM lib name #- CFDEM lib name
export CFDEM_LIB_NAME=lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION export CFDEM_LIB_NAME=lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
#- CFDEM compressible lib name
export CFDEM_LIB_COMP_NAME=lagrangianCFDEMcomp-$CFDEM_VERSION-$WM_PROJECT_VERSION
#-----------------------------------------------------
# additional libraries
#- LMP Many2Many lib path and makefile #- LMP Many2Many lib path and makefile
export CFDEM_Many2ManyLIB_PATH=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library export CFDEM_Many2ManyLIB_PATH=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library
export CFDEM_Many2ManyLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME export CFDEM_Many2ManyLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME
@ -52,9 +65,17 @@ export CFDEM_M2MLIB_PATH=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataE
export CFDEM_M2MLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME export CFDEM_M2MLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME
#- LMP POEMS lib path and makefile #- LMP POEMS lib path and makefile
export CFDEM_POEMSLIB_PATH=$CFDEM_LIGGGHTS_SRC_DIR/../lib/poems export CFDEM_POEMSLIB_PATH=$CFDEM_LAMMPS_LIB_DIR/poems
export CFDEM_POEMSLIB_MAKEFILENAME=g++ export CFDEM_POEMSLIB_MAKEFILENAME=g++
#- LMP ASPHERE lib path and makefile
export CFDEM_ASPHERELIB_PATH=$CFDEM_LAMMPS_LIB_DIR/poems
export CFDEM_ASPHERELIB_MAKEFILENAME=g++
#-C3PO library
export C3PO_SRC_DIR=$CFDEM_SRC_DIR/c3po
#-----------------------------------------------------
#- path to test harness #- path to test harness
export CFDEM_TEST_HARNESS_PATH=$CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION export CFDEM_TEST_HARNESS_PATH=$CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
@ -100,6 +121,9 @@ alias cfdemUt='cd $CFDEM_UT_DIR'
#- shortcut to run path #- shortcut to run path
alias cfdemRun='cd $CFDEM_PROJECT_USER_DIR/run' alias cfdemRun='cd $CFDEM_PROJECT_USER_DIR/run'
#- shortcut to user solver path
alias cfdemUsrSol='cd $CFDEM_PROJECT_USER_DIR/applications/solvers'
#- shortcut to documentation path #- shortcut to documentation path
alias cfdemDoc='cd $CFDEM_DOC_DIR' alias cfdemDoc='cd $CFDEM_DOC_DIR'
@ -142,6 +166,9 @@ alias cfdemCompCFDEMuti='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compil
#- shortcut to test basic tutorials #- shortcut to test basic tutorials
alias cfdemTestTUT='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh' alias cfdemTestTUT='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh'
#- shortcut to visualize the clock model data
alias vizClock='python $CFDEM_UT_DIR/vizClock/matPlot.py'
#- recursive touch of current directory #- recursive touch of current directory
alias touchRec='find ./* -exec touch {} \;' alias touchRec='find ./* -exec touch {} \;'
@ -157,6 +184,11 @@ export -f cfdemLiggghtsPar
cfdemGrep() { grep -rl "$1" ./* | xargs gedit; } cfdemGrep() { grep -rl "$1" ./* | xargs gedit; }
export -f cfdemGrep export -f cfdemGrep
#- shortcut lo list files in a directory
#cfdemListFiles() { find $1 | sed s:""$1"":: > listOfFiles.txt; } #leave out the dir iteslf in list
cfdemListFiles() { find $1 > listOfFiles.txt; } #keep the dir in list
export -f cfdemListFiles
# check if the run directory exists # check if the run directory exists
if [ -d "$CFDEM_PROJECT_USER_DIR" ]; then if [ -d "$CFDEM_PROJECT_USER_DIR" ]; then
: :
@ -164,11 +196,11 @@ else
echo "make new dirs $CFDEM_PROJECT_USER_DIR ? (y/n)" echo "make new dirs $CFDEM_PROJECT_USER_DIR ? (y/n)"
read YN read YN
if [ $YN == "y" ]; then if [ $YN == "y" ]; then
cd $CFDEM_PROJECT_DIR mkdir -p $CFDEM_PROJECT_USER_DIR
mkdir $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION cd $CFDEM_PROJECT_USER_DIR
cd $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION
mkdir run mkdir run
mkdir -p log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION mkdir -p log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
mkdir -p applications/solvers
else else
echo "aborted by user." echo "aborted by user."
#exit #exit

View File

@ -51,15 +51,16 @@ else
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
##number of solvers compiled at a time ##number of solvers compiled at a time
nsteps=$WM_NCOMPPROCS
echo "do compilation on $nsteps procs" if [[ $WM_NCOMPPROCS == "" ]] || [ $WM_NCOMPPROCS -eq 1 ]; then
nchunk=`echo $njobs/$nsteps+1 | bc`
if [[ $WM_NCOMPPROCS == "" ]]; then
echo "do compilation in serial"
nsteps=1 nsteps=1
nchunk=1 let nchunk=$njobs+1 # +1, to wait for the last compilation too
else echo "do compilation in serial"
echo "do compilation on $nsteps procs in $nchunk chunks" else
nsteps=$WM_NCOMPPROCS
nchunk=`echo $njobs/$nsteps+1 | bc`
echo "do compilation on $nsteps procs in $nchunk chunks"
let nchunk++ # +1, to wait for the last compilation too
fi fi
counter=0 counter=0
@ -108,6 +109,8 @@ else
let counter++ let counter++
fi fi
done done
sleep 1 # wait a second until compilation starts
done done
echo "compilation done." echo "compilation done."

View File

@ -20,48 +20,48 @@ mkdir -p $logDir
#================================================================================# #================================================================================#
# compile src # compile src
#================================================================================# #================================================================================#
whitelist="$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/library-list.txt" whitelist="$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/library-list.txt"
echo "" echo ""
echo "Please provide the libraries to be compiled in the $CWD/$whitelist file." echo "Please provide the libraries to be compiled in the $CWD/$whitelist file."
if [ ! -f "$CWD/$whitelist" ];then if [ ! -f "$CWD/$whitelist" ];then
echo "$whitelist does not exist in $CWD. Nothing will be done." echo "$whitelist does not exist in $CWD. Nothing will be done."
NLINES=0 NLINES=0
COUNT=0 COUNT=0
else else
NLINES=`wc -l < $CWD/$whitelist` NLINES=`wc -l < $CWD/$whitelist`
COUNT=0 COUNT=0
fi fi
while [ $COUNT -lt $NLINES ] while [ $COUNT -lt $NLINES ]
do do
let COUNT++ let COUNT++
LINE=`head -n $COUNT $CWD/$whitelist | tail -1` LINE=`head -n $COUNT $CWD/$whitelist | tail -1`
# white lines # white lines
if [[ "$LINE" == "" ]]; then if [[ "$LINE" == "" ]]; then
echo "compile $LINE" echo "compile $LINE"
continue continue
# comments # comments
elif [[ "$LINE" == \#* ]]; then elif [[ "$LINE" == \#* ]]; then
continue continue
# paths # paths
elif [[ "$LINE" == */dir ]]; then elif [[ "$LINE" == */dir ]]; then
echo "will change path..." echo "will change path..."
LINE=$(echo "${LINE%????}") LINE=$(echo "${LINE%????}")
path="$CFDEM_SRC_DIR/$LINE" path="$CFDEM_SRC_DIR/$LINE"
cd $path cd $path
#continue #continue
fi fi
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
#- define variables #- define variables
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
logfileName="log_compileCFDEMcoupling_"$(basename $LINE)"" logfileName="log_compileCFDEMcoupling_"$(basename $LINE)""
casePath="$path" casePath="$path"
headerText="$logfileName""-$NOW" headerText="$logfileName""-$NOW"
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
# remove old log file # remove old log file
rm "$logpath/$logfileName"* rm "$logpath/$logfileName"*
compileLib $logpath $logfileName $casePath $headerText compileLib $logpath $logfileName $casePath $headerText
done done

View File

@ -1,36 +1,115 @@
#!/bin/bash #!/bin/bash
#===================================================================# #===================================================================#
# compile routine for CFDEMcoupling solvers, part of CFDEMproject # compile routine for CFDEMcoupling utilities, part of CFDEMproject
# Christoph Goniva - May. 2012, DCS Computing GmbH # Christoph Goniva - May. 2012, DCS Computing GmbH
#===================================================================# #===================================================================#
whitelist="utilities-list.txt"
#- include functions #- include functions
source $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/functions.sh source $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/functions.sh
NOW="$(date +"%Y-%m-%d-%H:%M")"
logDir="log" logDir="log"
cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
mkdir -p $logDir mkdir -p $logDir
#================================================================================# CWD="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")"
# compile utilities NOW="$(date +"%Y-%m-%d-%H:%M")"
#================================================================================#
echo ""
echo "This routine will compile the utilities specified in utilities-list.txt"
echo ""
#echo "Are the variables CFDEM_UT_DIR=$CFDEM_UT_DIR"
#echo "and CFDEM_SRC_DIR=$CFDEM_SRC_DIR/lagrangian/cfdemParticle correct? (y/n)"
#read YN
#if [ "$YN" != "y" ];then
# echo "Aborted by user."
# exit 1
#fi
echo ""
echo "Please provide the utilities to be compiled in the $CWD/$whitelist file."
echo "structure:"
echo "path to provide the path relative to CFDEM_UT_DIR"
echo ""
echo "example:"
echo "cfdemPostproc/dir"
echo ""
if [ ! -f "$CWD/$whitelist" ];then
echo "$whitelist does not exist in $CWD"
else
njobs=`wc -l < $CWD/$whitelist`
echo ""
echo "running compilation in pseudo-parallel mode of $njobs utilities"
for utName in "cfdemPostproc"
do
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
#- define variables
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
logfileName="log_compileCFDEMcoupling""_$utName"
casePath="$CFDEM_UT_DIR/$utName"
headerText="$logfileName""_$utName""-$NOW"
#--------------------------------------------------------------------------------#
compileSolver $logpath $logfileName $casePath $headerText
done
echo "Note: the list of utilities compiled might be incomplete." ##number of utilities compiled at a time
echo "please check $CFDEM_UT_DIR for more utilities available"
if [[ $WM_NCOMPPROCS == "" ]] || [ $WM_NCOMPPROCS -eq 1 ]; then
nsteps=1
let nchunk=$njobs+1 # +1, to wait for the last compilation too
echo "do compilation in serial"
else
nsteps=$WM_NCOMPPROCS
nchunk=`echo $njobs/$nsteps+1 | bc`
echo "do compilation on $nsteps procs in $nchunk chunks"
let nchunk++ # +1, to wait for the last compilation too
fi
counter=0
for i in `seq $nchunk`
do
#wait until prev. compilation is finished
echo "waiting..."
until [ `ps -C make | wc -l` -eq 1 ];
do
sleep 2
done
for j in `seq $nsteps`
do
let solNr=($i-1)*$nsteps+$j
LINE=`head -n $solNr $CWD/$whitelist | tail -1`
# white lines
if [[ "$LINE" == "" ]]; then
continue
# comments
elif [[ "$LINE" == \#* ]]; then
continue
# paths
elif [[ "$LINE" == */dir ]]; then
#echo "change path"
LINE=$(echo "${LINE%????}")
path="$CFDEM_UT_DIR/$LINE"
#cd $path
let solNr++
fi
if [[ "$counter" -lt "$njobs" ]]; then
#--------------------------------------------------------------------------------#
#- define variables
#logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
logfileName="log_compileCFDEMcoupling""_$LINE"
casePath="$CFDEM_UT_DIR/$LINE"
headerText="$logfileName""_$LINE""-$NOW"
parallel="true"
#--------------------------------------------------------------------------------#
#echo "compiling $LINE"
compileSolver $logpath $logfileName $casePath $headerText $parallel
let counter++
fi
done
sleep 1 # wait a second until compilation starts
done
echo "compilation done."
fi

View File

@ -14,6 +14,12 @@ logDir="log"
cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
mkdir -p $logDir mkdir -p $logDir
#================================================================================#
# copy LIGGGHTS patch files if available
#================================================================================#
echo "copying patch files for LIGGGHTS if available"
cp $CFDEM_SRC_DIR/LIGGGHTSpatch/* $CFDEM_LIGGGHTS_SRC_DIR
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
#- define variables #- define variables
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"

View File

@ -33,6 +33,8 @@ mkdir -p $logDir
COUNT=0 COUNT=0
fi fi
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
while [ $COUNT -lt $NLINES ] while [ $COUNT -lt $NLINES ]
do do
let COUNT++ let COUNT++
@ -57,7 +59,7 @@ mkdir -p $logDir
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
#- define variables #- define variables
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" #logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
logfileName="log_compile$LINE""lib" logfileName="log_compile$LINE""lib"
headerText="$logfileName""-$NOW" headerText="$logfileName""-$NOW"
libVarMakefileName="CFDEM_$LINE""LIB_MAKEFILENAME" libVarMakefileName="CFDEM_$LINE""LIB_MAKEFILENAME"

View File

@ -43,6 +43,9 @@ setenv CFDEM_LIGGGHTS_LIB_NAME lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME
#- CFDEM lib name #- CFDEM lib name
setenv CFDEM_LIB_NAME lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION setenv CFDEM_LIB_NAME lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
#- CFDEM compressible lib name
setenv CFDEM_LIB_COMP_NAME lagrangianCFDEMcomp-$CFDEM_VERSION-$WM_PROJECT_VERSION
#- LMP Many2Many lib path and makefile #- LMP Many2Many lib path and makefile
setenv CFDEM_Many2ManyLIB_PATH $CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library setenv CFDEM_Many2ManyLIB_PATH $CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library
setenv CFDEM_Many2ManyLIB_MAKEFILENAME $CFDEM_LIGGGHTS_MAKEFILE_NAME setenv CFDEM_Many2ManyLIB_MAKEFILENAME $CFDEM_LIGGGHTS_MAKEFILE_NAME
@ -98,6 +101,9 @@ alias cfdemUt 'cd $CFDEM_UT_DIR'
#- shortcut to run path #- shortcut to run path
alias cfdemRun 'cd $CFDEM_PROJECT_USER_DIR/run' alias cfdemRun 'cd $CFDEM_PROJECT_USER_DIR/run'
#- shortcut to user solver path
alias cfdemUsrSol 'cd $CFDEM_PROJECT_USER_DIR/applications/solvers'
#- shortcut to documentation path #- shortcut to documentation path
alias cfdemDoc 'cd $CFDEM_DOC_DIR' alias cfdemDoc 'cd $CFDEM_DOC_DIR'
@ -140,6 +146,9 @@ alias cfdemCompCFDEMuti 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compil
#- shortcut to test basic tutorials #- shortcut to test basic tutorials
alias cfdemTestTUT 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh' alias cfdemTestTUT 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh'
#- shortcut to visualize the clock model data
alias vizClock 'python $CFDEM_UT_DIR/vizClock/matPlot.py'
#- shortcut to run liggghts in serial #- shortcut to run liggghts in serial
alias cfdemLiggghts '$CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME' alias cfdemLiggghts '$CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME'
@ -157,20 +166,20 @@ if ( -d "$CFDEM_PROJECT_USER_DIR" ) then
: :
else else
if ( -d "$CFDEM_PROJECT_DIR" ) then if ( -d "$CFDEM_PROJECT_DIR" ) then
cd $CFDEM_PROJECT_DIR/.. echo "make new dirs $CFDEM_PROJECT_USER_DIR ? (y/n)"
echo "make new dirs $CFDEM_PROJECT_DIR/../$LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION ? (y/n)"
set YN=$< set YN=$<
if ( $YN == "y" ) then if ( $YN == "y" ) then
mkdir $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION mkdir -p $CFDEM_PROJECT_USER_DIR
cd $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION cd $CFDEM_PROJECT_USER_DIR
mkdir run mkdir run
mkdir -p log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION mkdir -p log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
mkdir -p applications/solvers
else else
echo "aborted by user." echo "aborted by user."
exit exit
endif endif
else else
echo "error in CFDEMcoupling's bashrc." echo "error in CFDEMcoupling's cshrc."
exit exit
endif endif
endif endif

View File

@ -71,6 +71,21 @@ compileLib()
#- wclean and wmake #- wclean and wmake
#if [ $doClean != "noClean" ]; then #if [ $doClean != "noClean" ]; then
# check library to compile is compressible
str=$casePath
i=$((${#str}-4))
ending=${str:$i:4}
if [[ $ending == "Comp" ]]; then
echo "Compiling a compressible library - so doing an rmdepall of incomp library first."
echo "Please make sure to have the compressible libraries first in the library-list.txt!"
cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle
echo "changing to $PWD"
rmdepall 2>&1 | tee -a $logpath/$logfileName
cd $casePath
echo "changing to $PWD"
else
echo "Compiling a incompressible library."
fi
rmdepall 2>&1 | tee -a $logpath/$logfileName rmdepall 2>&1 | tee -a $logpath/$logfileName
wclean 2>&1 | tee -a $logpath/$logfileName wclean 2>&1 | tee -a $logpath/$logfileName
#fi #fi
@ -139,6 +154,7 @@ compileLIGGGHTS()
logpath="$1" logpath="$1"
logfileName="$2" logfileName="$2"
headerText="$3" headerText="$3"
clean="$4"
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
#- clean up old log file #- clean up old log file
@ -157,9 +173,14 @@ compileLIGGGHTS()
echo 2>&1 | tee -a $logpath/$logfileName echo 2>&1 | tee -a $logpath/$logfileName
#- wclean and wmake #- wclean and wmake
rm $CFDEM_LIGGGHTS_SRC_DIR/"lmp_"$CFDEM_LIGGGHTS_MAKEFILE_NAME if [[ $clean == "false" ]]; then
rm $CFDEM_LIGGGHTS_SRC_DIR/"lib"$CFDEM_LIGGGHTS_LIB_NAME".a" echo "not cleaning LIGGGHTS"
make clean-all 2>&1 | tee -a $logpath/$logfileName 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 if [[ $WM_NCOMPPROCS == "" ]]; then
echo "compiling LIGGGHTS on one CPU" echo "compiling LIGGGHTS on one CPU"
make $CFDEM_LIGGGHTS_MAKEFILE_NAME 2>&1 | tee -a $logpath/$logfileName make $CFDEM_LIGGGHTS_MAKEFILE_NAME 2>&1 | tee -a $logpath/$logfileName
@ -189,7 +210,13 @@ compileLMPlib()
rm $logpath/$logfileName rm $logpath/$logfileName
#- change path #- change path
cd $libraryPath if [ -d "$libraryPath" ]; then
cd $libraryPath
else
echo ""
echo "lib path $libraryPath does not exist - check settings in .../etc/bashrc."
read
fi
#- header #- header
echo 2>&1 | tee -a $logpath/$logfileName echo 2>&1 | tee -a $logpath/$logfileName
@ -524,7 +551,7 @@ parCFDrun()
#- run applictaion #- run applictaion
if [ $machineFileName == "none" ]; then if [ $machineFileName == "none" ]; then
mpirun -np $nrProcs $solverName 2>&1 | tee -a $logpath/$logfileName mpirun -np $nrProcs $solverName -parallel 2>&1 | tee -a $logpath/$logfileName
else else
mpirun -machinefile $machineFileName -np $nrProcs $debugMode $solverName -parallel 2>&1 | tee -a $logpath/$logfileName mpirun -machinefile $machineFileName -np $nrProcs $debugMode $solverName -parallel 2>&1 | tee -a $logpath/$logfileName
fi fi
@ -550,6 +577,7 @@ parCFDDEMrun()
machineFileName="$7" machineFileName="$7"
debugMode="$8" debugMode="$8"
reconstuctCase="$9" reconstuctCase="$9"
cleanCase="$10"
#--------------------------------------------------------------------------------# #--------------------------------------------------------------------------------#
if [ $debugMode == "on" ]; then if [ $debugMode == "on" ]; then

View File

@ -1,4 +1,4 @@
#syntax: makefileName/dir #syntax: makefileName/dir
#note: dir is not a path, just a keyword here #note: dir is not a path, just a keyword here
############################################### ###############################################
M2M/dir Many2Many/dir

View File

@ -1,11 +1,2 @@
lagrangian/cfdemParticle/dir lagrangian/cfdemParticle/dir
#====================================================='
#- RADL
fvOptions/dir
cylPorousMedia/dir
#====================================================='
#- other
finiteVolume/dir finiteVolume/dir

View File

@ -1,13 +1,4 @@
cfdemSolverPisoMS/dir
cfdemSolverPiso/dir cfdemSolverPiso/dir
cfdemSolverIB/dir cfdemSolverIB/dir
cfdemSolverPisoScalar/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

View File

@ -7,51 +7,15 @@
#===================================================================# #===================================================================#
cfdemSolverPiso/settlingTestMPI/dir cfdemSolverPiso/settlingTestMPI/dir
cfdemSolverPiso/ErgunTestMPI/dir cfdemSolverPiso/ErgunTestMPI/dir
cfdemSolverPiso/ErgunTestMPI_cgs/dir cfdemSolverPiso/ErgunTestMPI_cgs/dir
cfdemSolverPiso/ErgunTestMPI_restart/dir cfdemSolverPiso/ErgunTestMPI_restart/dir
cfdemSolverIB/twoSpheresGlowinskiMPI/dir cfdemSolverIB/twoSpheresGlowinskiMPI/dir
cfdemSolverPisoScalar/packedBedTemp/dir cfdemSolverPisoScalar/packedBedTemp/dir
#===================================================================# cfdemSolverPiso/ErgunTestCG/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

View File

@ -0,0 +1 @@
cfdemPostproc/dir

View File

@ -50,6 +50,15 @@ int IOModel::dumpDEMdata() const
return -1; return -1;
} }
bool IOModel::dumpNow() const
{
//bool dmp(false);
//if (time_.value()+SMALL > time_.endTime().value()-time_.deltaT().value() || time_.outputTime())
// dmp=true;
return time_.outputTime();
}
fileName IOModel::createTimeDir(fileName path) const fileName IOModel::createTimeDir(fileName path) const
{ {
fileName timeDirPath(path/time_.timeName()); fileName timeDirPath(path/time_.timeName());

View File

@ -113,6 +113,8 @@ public:
virtual int dumpDEMdata() const; virtual int dumpDEMdata() const;
bool dumpNow() const;
fileName createTimeDir(fileName) const; fileName createTimeDir(fileName) const;
fileName createLagrangianDir(fileName) const; fileName createLagrangianDir(fileName) const;

View File

@ -84,7 +84,7 @@ basicIO::~basicIO()
int basicIO::dumpDEMdata() const int basicIO::dumpDEMdata() const
{ {
if (time_.outputTime()) if (dumpNow())
{ {
// make time directory // make time directory
if (parOutput_) lagPath_=buildFilePath(dirName_); if (parOutput_) lagPath_=buildFilePath(dirName_);

View File

@ -79,7 +79,7 @@ int sophIO::dumpDEMdata() const
{ {
int npProcs(-1); int npProcs(-1);
if (time_.outputTime()) if (dumpNow())
{ {
npProcs=basicIO::dumpDEMdata(); npProcs=basicIO::dumpDEMdata();

View File

@ -77,7 +77,7 @@ int trackIO::dumpDEMdata() const
{ {
int npProcs(-1); int npProcs(-1);
if (time_.outputTime()) if (dumpNow())
{ {
npProcs = sophIO::dumpDEMdata(); npProcs = sophIO::dumpDEMdata();

Some files were not shown because too many files have changed in this diff Show More