Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 24b52943b5 | |||
| 444bcec790 | |||
| 337a7ffb17 | |||
| 0d1097a4da | |||
| 957b3244b7 | |||
| 3c1c2ec223 | |||
| 0c94034d70 | |||
| f18d60107c | |||
| 1b78322bf4 | |||
| b237264637 | |||
| 4d7ee5b540 | |||
| b81664f315 | |||
| b4bc2d67dc | |||
| 5cb9190126 | |||
| d03549ba88 | |||
| 3ece629585 | |||
| 18319a8bf0 | |||
| 641f6c694f | |||
| c9953c7afe | |||
| fbf9d1da77 | |||
| 227331e2d5 | |||
| 559eff1823 | |||
| fa665204ef |
6
.gitignore
vendored
@ -1,6 +1,8 @@
|
||||
*.o
|
||||
*.dep
|
||||
log_*
|
||||
log.*
|
||||
log*
|
||||
.vscode
|
||||
platforms
|
||||
*~
|
||||
testCase*
|
||||
|
||||
|
||||
107
README
@ -1,107 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFD-DEM coupling toolbox, released by
|
||||
DCS Computing GmbH, Linz, Austria
|
||||
www.dcs-computing.com, office@dcs-computing.com
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
|
||||
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 part of CFDEMproject:
|
||||
www.liggghts.com | www.cfdem.com
|
||||
|
||||
Core developer and main author:
|
||||
Christoph Goniva, christoph.goniva@dcs-computing.com
|
||||
|
||||
LIGGGHTS® and CFDEM® are registered trade marks of DCS Computing GmbH,
|
||||
the producer of the LIGGGHTS® software and the CFDEM®coupling software
|
||||
See http://www.cfdem.com/terms-trademark-policy for details.
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Copyright
|
||||
|
||||
Copyright 2012- DCS Computing GmbH, Linz
|
||||
Copyright 2009-2015 JKU Linz
|
||||
|
||||
Some parts of CFDEMcoupling are based on OpenFOAM® and Copyright on these
|
||||
parts is held by the OpenFOAM® Foundation (www.openFoam.org)
|
||||
and potentially other parties.
|
||||
Some parts of CFDEMcoupling are contributied by other parties, which are
|
||||
holding the Copyright. This is listed in each file of the distribution.
|
||||
/*---------------------------------------------------------------------------*\
|
||||
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 provides models and solvers to realize coupled CFD-DEM simulations
|
||||
using LIGGGHTS and OpenFOAM® technology.
|
||||
Note: this code is not part of OpenFOAM®.
|
||||
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.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
CFDEM® coupling provides an open source parallel coupled CFD-DEM framework
|
||||
combining the strengths of LIGGGHTS® DEM code and the Open Source
|
||||
CFD package OpenFOAM®(*). The CFDEM®coupling toolbox allows to expand
|
||||
standard CFD solvers of OpenFOAM®(*) to include a coupling to the DEM
|
||||
code LIGGGHTS®. In this toolbox the particle representation within the
|
||||
CFD solver is organized by "cloud" classes. Key functionalities are organised
|
||||
in sub-models (e.g. force models, data exchange models, etc.), which can easily
|
||||
be selected and combined by dictionary settings.
|
||||
|
||||
The coupled solvers run fully parallel on distributed-memory clusters.
|
||||
|
||||
Features are:
|
||||
|
||||
- its modular approach allows users to easily implement new models
|
||||
- its MPI parallelization enables to use it for large scale problems
|
||||
- the "forum" (www.cfdem.com) on CFD-DEM gives the possibility
|
||||
to exchange with other users / developers
|
||||
- the use of GIT allows to easily update to the latest version
|
||||
- basic documentation is provided
|
||||
|
||||
The CFDEM®coupling distribution includes the following files and directories:
|
||||
|
||||
- "README" file (this file)
|
||||
- "COPYING" file the GNU General Public License (GPL)
|
||||
- "DISCLAIMER" file
|
||||
- "src" directory including the source files of the coupling toolbox and models
|
||||
- "applications" directory including the solver files for coupled CFD-DEM simulations
|
||||
- "doc" directory including the documentation of CFDEM®coupling
|
||||
- "tutorials" directory including basic tutorial cases showing the functionality
|
||||
|
||||
Details on installation are given on the "www.cfdem.com" website.
|
||||
|
||||
The functionality of this CFD-DEM framwork is described via "tutorial cases" showing
|
||||
how to use different solvers and models.
|
||||
|
||||
CFDEM®coupling stands for Computational Fluid Dynamics (CFD) -
|
||||
Discrete Element Method (DEM) coupling.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
(*) 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.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
88
README.md
Normal file
@ -0,0 +1,88 @@
|
||||
<div align ="center">
|
||||
|
||||
<p float="left">
|
||||
<img src="doc/cfdem_logo.jpg" width="300" />
|
||||
<img src="doc/cfdem_logo2.png" width="300" />
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
## The extended version of CFDEM®coupling is constantly developed and maintained by DCS Computing GmbH - you can find more information [here](https://www.aspherix-dem.com/software/cfdemcoupling-functionalities/)
|
||||
|
||||
This repository contains older, publicly available versions of CFDEM®coupling (referred to as "CFDEM®coupling-PUBLIC") and will not be updated in the foreseeable future.
|
||||
|
||||
CFDEM®coupling-PUBLIC is compatible with [LIGGGHTS-PUBLIC](https://github.com/CFDEMproject/LIGGGHTS-PUBLIC).
|
||||
|
||||
The extended version of CFDEM®coupling is compatible with the DEM software [Aspherix®](https://www.aspherix-dem.com/), the "successor" of LIGGGHTS® developed and distributed by DCS Computing GmbH, Linz, Austria.
|
||||
|
||||
</div>
|
||||
|
||||
## CFDEM®coupling-PUBLIC
|
||||
|
||||
CFDEM®coupling-PUBLIC is an Open Source coupled CFD-DEM framework combining the strengths of LIGGGHTS® DEM code and the Open Source CFD package OpenFOAM® [^1]. CFDEM®coupling stands for Computational Fluid Dynamics (CFD) - Discrete Element Method (DEM) coupling.
|
||||
|
||||
LIGGGHTS® and CFDEM® are registered trade marks of DCS Computing GmbH, the producer of the LIGGGHTS® software and the CFDEM®coupling software; see http://www.cfdem.com/terms-trademark-policy for details.
|
||||
|
||||
CFDEM®coupling-PUBLIC is open-source, distributed under the terms of the GNU Public License, version 3 or later. CFDEM®coupling-PUBLIC is part of CFDEM®project: www.liggghts.com | www.cfdem.com. Core developer and main author: Christoph Goniva, christoph.goniva@dcs-computing.com
|
||||
|
||||
[^1]: 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.
|
||||
|
||||
</div>
|
||||
|
||||
## Features
|
||||
|
||||
* Modular approach that allows users to easily implement new models
|
||||
* MPI parallelization that enables to use it for large scale problems
|
||||
* The "forum" (www.cfdem.com) on CFD-DEM gives the possibility to exchange with other users / developers
|
||||
* The use of GIT allows to easily update to the latest version
|
||||
* Basic documentation is provided
|
||||
|
||||
In this toolbox the particle representation within the CFD solver is organized by "cloud" classes. Key functionalities are organised in sub-models (e.g. force models, data exchange models, etc.), which can easily be selected and combined by dictionary settings.
|
||||
|
||||
</div>
|
||||
|
||||
## Structure
|
||||
The CFDEM®coupling-PUBLIC distribution includes the following files and directories:
|
||||
|
||||
* `README`: this file
|
||||
* `COPYING`: the GNU General Public License (GPL) file
|
||||
* `DISCLAIMER`
|
||||
* `src`: directory including the source files of the coupling toolbox and models
|
||||
* `applications`: directory including the solver files for coupled CFD-DEM simulations
|
||||
* `doc`: directory including the documentation of CFDEM®coupling
|
||||
* `tutorials`: directory including basic tutorial cases showing the functionality
|
||||
|
||||
Details on installation are given on the www.cfdem.com website.
|
||||
|
||||
</div>
|
||||
|
||||
## License
|
||||
|
||||
CFDEM®coupling-PUBLIC 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.
|
||||
|
||||
CFDEM®coupling is distributed in the hope that it will be useful, but **without any warranty**; without even the implied warranty of **merchantabiity** or **fitness for a particular purpouse**; see the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with CFDEM®coupling-PUBLIC; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
</div>
|
||||
|
||||
## Copyrights
|
||||
* Copyright 2012-now: DCS Computing GmbH, Linz
|
||||
* Copyright 2009-2015: JKU Linz
|
||||
|
||||
Some parts of CFDEM®coupling are based on OpenFOAM® and Copyright on these parts is held by the OpenFOAM® Foundation (www.openFoam.org) and potentially other parties. Some parts of CFDEMcoupling are contributied by other parties, which are holding the Copyright. This is listed in each file of the distribution.
|
||||
|
||||
## How to cite CFDEM®coupling-PUBLIC
|
||||
If you are using PhasicFlow in your research or industrial work, cite the following [article](https://doi.org/10.1016/j.partic.2012.05.002):
|
||||
```
|
||||
@article{goniva2012influence,
|
||||
title={Influence of rolling friction on single spout fluidized bed simulation},
|
||||
author={Goniva, Christoph and Kloss, Christoph and Deen, Niels G and Kuipers, Johannes AM and Pirker, Stefan},
|
||||
journal={Particuology},
|
||||
volume={10},
|
||||
number={5},
|
||||
pages={582--591},
|
||||
year={2012},
|
||||
publisher={Elsevier}
|
||||
}
|
||||
```
|
||||
@ -1,10 +1,12 @@
|
||||
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
|
||||
include $(CFDEM_ADD_LIBS_DIR)/$(CFDEM_ADD_LIBS_NAME)
|
||||
|
||||
PFLAGS+= -DCFDEMWMPROJECTVERSION="$(CFDEM_WM_PROJECT_VERSION)"
|
||||
|
||||
EXE_INC = \
|
||||
$(PFLAGS) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
$(PINC) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
@ -16,6 +18,7 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
|
||||
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
|
||||
-I$(CFDEM_LIGGGHTS_SRC_DIR)
|
||||
|
||||
EXE_LIBS = \
|
||||
-L$(CFDEM_LIB_DIR)\
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_LIBS) \
|
||||
|
||||
@ -47,15 +47,13 @@ Contributions
|
||||
#else
|
||||
#include "turbulenceModel.H"
|
||||
#endif
|
||||
#include "superquadric_flag.h"
|
||||
#include "cfdemCloudIB.H"
|
||||
#if defined(SUPERQUADRIC_ACTIVE_FLAG)
|
||||
#if defined(superquadrics_flag)
|
||||
#include "cfdemCloudIBSuperquadric.H"
|
||||
#endif
|
||||
#include "implicitCouple.H"
|
||||
|
||||
#include "averagingModel.H"
|
||||
#include "regionModel.H"
|
||||
#include "voidFractionModel.H"
|
||||
|
||||
#include "dynamicFvMesh.H"
|
||||
@ -92,7 +90,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
#if defined(SUPERQUADRIC_ACTIVE_FLAG)
|
||||
#if defined(superquadrics_flag)
|
||||
cfdemCloudIBSuperquadric particleCloud(mesh);
|
||||
#else
|
||||
cfdemCloudIB particleCloud(mesh);
|
||||
@ -108,7 +106,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
//=== dyM ===================
|
||||
interFace = mag(mesh.lookupObject<volScalarField>("voidfractionNext"));
|
||||
mesh.update(); //dyM
|
||||
particleCloud.setMeshHasUpdatedFlag(mesh.update()); //dyM
|
||||
|
||||
#if defined(version30)
|
||||
#include "readTimeControls.H"
|
||||
@ -124,6 +122,7 @@ int main(int argc, char *argv[])
|
||||
particleCloud.evolve(voidfraction, interFace);
|
||||
|
||||
// Pressure-velocity PISO corrector
|
||||
if(particleCloud.solveFlow())
|
||||
{
|
||||
// Momentum predictor
|
||||
|
||||
@ -217,8 +216,9 @@ int main(int argc, char *argv[])
|
||||
U -= rUA*fvc::grad(p);
|
||||
U.correctBoundaryConditions();
|
||||
}
|
||||
}
|
||||
} //end solveFlow
|
||||
|
||||
laminarTransport.correct();
|
||||
turbulence->correct();
|
||||
|
||||
Info << "particleCloud.calcVelocityCorrection() " << endl;
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
|
||||
include $(CFDEM_ADD_LIBS_DIR)/$(CFDEM_ADD_LIBS_NAME)
|
||||
|
||||
PFLAGS+= -DCFDEMWMPROJECTVERSION="$(CFDEM_WM_PROJECT_VERSION)"
|
||||
|
||||
EXE_INC = \
|
||||
$(PFLAGS) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
$(PINC) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/fvOptions/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
|
||||
-I$(CFDEM_LIGGGHTS_SRC_DIR)
|
||||
@ -19,6 +22,7 @@ EXE_LIBS = \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvOptions \
|
||||
-l$(CFDEM_LIB_NAME) \
|
||||
$(CFDEM_ADD_LIB_PATHS) \
|
||||
$(CFDEM_ADD_LIBS)
|
||||
|
||||
@ -37,233 +37,160 @@ Description
|
||||
#include "fvCFD.H"
|
||||
#include "singlePhaseTransportModel.H"
|
||||
|
||||
#include "OFversion.H"
|
||||
#if defined(version30)
|
||||
#include "turbulentTransportModel.H"
|
||||
#include "pisoControl.H"
|
||||
#else
|
||||
#include "turbulenceModel.H"
|
||||
#endif
|
||||
#include "turbulentTransportModel.H"
|
||||
#include "pisoControl.H"
|
||||
|
||||
#include "fvOptions.H"
|
||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||
#include "cfdemCloud.H"
|
||||
|
||||
#if defined(anisotropicRotation)
|
||||
#include "cfdemCloudRotation.H"
|
||||
#endif
|
||||
#include "superquadric_flag.h"
|
||||
#if defined(SUPERQUADRIC_ACTIVE_FLAG)
|
||||
#include "cfdemCloudRotationSuperquadric.H"
|
||||
#endif
|
||||
#include "implicitCouple.H"
|
||||
#include "clockModel.H"
|
||||
#include "smoothingModel.H"
|
||||
#include "forceModel.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#include "setRootCase.H"
|
||||
#include "createTime.H"
|
||||
#include "createMesh.H"
|
||||
#if defined(version30)
|
||||
pisoControl piso(mesh);
|
||||
#include "createTimeControls.H"
|
||||
#endif
|
||||
#include "createFields.H"
|
||||
#include "initContinuityErrs.H"
|
||||
// int i = 0;
|
||||
// while(1){
|
||||
// if(i!=0){
|
||||
// break;
|
||||
// }
|
||||
// sleep(1);
|
||||
// }
|
||||
#include "setRootCase.H" // 更新listOptions; 定义args; 更新listOutput
|
||||
#include "createTime.H" // 定义Foam::Time runTime(Time::controlDictname, args)
|
||||
#include "createMesh.H" // 定义Foam::FvMesh mesh
|
||||
pisoControl piso(mesh);
|
||||
// #include "createTimeControls.H" // 读取adjustTimeStep, maxCo, maxDeltaT
|
||||
#include "createFields.H" // 初始化物理场
|
||||
#include "createFvOptions.H" // 定义fvOptions
|
||||
#include "initContinuityErrs.H" // 定义cumulativeContErr
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
#if defined(anisotropicRotation)
|
||||
cfdemCloudRotation particleCloud(mesh);
|
||||
#elif defined(SUPERQUADRIC_ACTIVE_FLAG)
|
||||
cfdemCloudRotationSuperquadric particleCloud(mesh);
|
||||
#else
|
||||
cfdemCloud particleCloud(mesh);
|
||||
#endif
|
||||
#include "checkModelType.H"
|
||||
// #include "readGravitationalAcceleration.H"
|
||||
#include "createGravity.H" // 定于重力加速度g
|
||||
#include "checkImCoupleM.H" //
|
||||
cfdemCloud particleCloud(mesh); // 定义particleCloud
|
||||
#include "checkModelType.H" // CFD-DEM模型类型, referring to: Zhou et al. 2010,JFM
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
Info<< "\nStarting time loop\n" << endl;
|
||||
Info << "\nStarting time loop\n" << endl;
|
||||
while (runTime.loop())
|
||||
{
|
||||
particleCloud.clockM().start(1,"Global");
|
||||
Info << "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
#if defined(version30)
|
||||
#include "readTimeControls.H"
|
||||
#include "CourantNo.H"
|
||||
#include "setDeltaT.H"
|
||||
#else
|
||||
#include "readPISOControls.H"
|
||||
#include "CourantNo.H"
|
||||
#endif
|
||||
// #include "readTimeControls.H"
|
||||
#include "CourantNo.H"
|
||||
// #include "setDeltaT.H"
|
||||
|
||||
// do particle stuff
|
||||
particleCloud.clockM().start(2,"Coupling");
|
||||
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
|
||||
particleCloud.clockM().start(1, "Global");
|
||||
particleCloud.clockM().start(2, "Coupling");
|
||||
bool hasEvolved = particleCloud.evolve(voidfraction, Us, U);
|
||||
|
||||
if(hasEvolved)
|
||||
if (hasEvolved)
|
||||
{
|
||||
particleCloud.smoothingM().smoothenAbsolutField(particleCloud.forceM(0).impParticleForces());
|
||||
}
|
||||
|
||||
Info << "update Ksl.internalField()" << endl;
|
||||
Ksl = particleCloud.momCoupleM(0).impMomSource();
|
||||
Ksl = particleCloud.momCoupleM(particleCloud.registryM().getProperty("implicitCouple_index")).impMomSource();
|
||||
Ksl.correctBoundaryConditions();
|
||||
|
||||
surfaceScalarField voidfractionf = fvc::interpolate(voidfraction);
|
||||
phi = voidfractionf*phiByVoidfraction;
|
||||
phi = voidfractionf * phiByVoidfraction;
|
||||
|
||||
//Force Checks
|
||||
// Force Checks
|
||||
#include "forceCheckIm.H"
|
||||
|
||||
#include "solverDebugInfo.H"
|
||||
particleCloud.clockM().stop("Coupling");
|
||||
|
||||
particleCloud.clockM().start(26,"Flow");
|
||||
particleCloud.clockM().start(26, "Flow");
|
||||
|
||||
if(particleCloud.solveFlow())
|
||||
if (particleCloud.solveFlow())
|
||||
{
|
||||
// Pressure-velocity PISO corrector
|
||||
{
|
||||
// Momentum predictor
|
||||
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)
|
||||
);
|
||||
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)
|
||||
+ fvOptions(U));
|
||||
|
||||
UEqn.relax();
|
||||
fvOptions.constrain(UEqn);
|
||||
|
||||
#if defined(version30)
|
||||
if (piso.momentumPredictor())
|
||||
#else
|
||||
if (momentumPredictor)
|
||||
#endif
|
||||
if (piso.momentumPredictor())
|
||||
{
|
||||
if (modelType=="B" || modelType=="Bfull")
|
||||
solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
|
||||
if (modelType == "B" || modelType == "Bfull")
|
||||
solve(UEqn == -fvc::grad(p) + Ksl / rho * Us);
|
||||
else
|
||||
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
|
||||
}
|
||||
solve(UEqn == -voidfraction * fvc::grad(p) + Ksl / rho * Us);
|
||||
|
||||
fvOptions.correct(U);
|
||||
}
|
||||
// --- PISO loop
|
||||
#if defined(version30)
|
||||
while (piso.correct())
|
||||
#else
|
||||
for (int corr=0; corr<nCorr; corr++)
|
||||
#endif
|
||||
while (piso.correct())
|
||||
{
|
||||
volScalarField rUA = 1.0/UEqn.A();
|
||||
volScalarField rUA = 1.0 / UEqn.A();
|
||||
|
||||
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();
|
||||
|
||||
#ifdef version23
|
||||
phi = ( fvc::interpolate(U) & mesh.Sf() )
|
||||
+ rUAfvoidfraction*fvc::ddtCorr(U, phiByVoidfraction);
|
||||
#else
|
||||
phi = ( fvc::interpolate(U) & mesh.Sf() )
|
||||
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phiByVoidfraction);
|
||||
#endif
|
||||
phi = (fvc::interpolate(U) & mesh.Sf()) + rUAfvoidfraction * fvc::ddtCorr(U, phiByVoidfraction);
|
||||
surfaceScalarField phiS(fvc::interpolate(Us) & mesh.Sf());
|
||||
phi += rUAf*(fvc::interpolate(Ksl/rho) * phiS);
|
||||
phi += rUAf * (fvc::interpolate(Ksl / rho) * phiS);
|
||||
|
||||
if (modelType=="A")
|
||||
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
|
||||
if (modelType == "A")
|
||||
rUAvoidfraction = volScalarField("(voidfraction2|A(U))", rUA * voidfraction * voidfraction);
|
||||
|
||||
// Update the fixedFluxPressure BCs to ensure flux consistency
|
||||
#ifndef versionExt32
|
||||
#ifndef version40
|
||||
if (modelType=="A")
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField()*voidfractionf.boundaryField())
|
||||
);
|
||||
}else
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField())
|
||||
);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "fixedFluxPressureHandling.H"
|
||||
|
||||
// Non-orthogonal pressure corrector loop
|
||||
#if defined(version30)
|
||||
while (piso.correctNonOrthogonal())
|
||||
#else
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
#endif
|
||||
while (piso.correctNonOrthogonal())
|
||||
{
|
||||
// Pressure corrector
|
||||
fvScalarMatrix pEqn
|
||||
(
|
||||
fvm::laplacian(rUAvoidfraction, p) == fvc::div(voidfractionf*phi) + particleCloud.ddtVoidfraction()
|
||||
);
|
||||
fvScalarMatrix pEqn(
|
||||
fvm::laplacian(rUAvoidfraction, p) == fvc::div(voidfractionf * phi) + particleCloud.ddtVoidfraction());
|
||||
pEqn.setReference(pRefCell, pRefValue);
|
||||
|
||||
#if defined(version30)
|
||||
pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
|
||||
if (piso.finalNonOrthogonalIter())
|
||||
{
|
||||
phiByVoidfraction = phi - pEqn.flux()/voidfractionf;
|
||||
}
|
||||
#else
|
||||
if( corr == nCorr-1 && nonOrth == nNonOrthCorr )
|
||||
#if defined(versionExt32)
|
||||
pEqn.solve(mesh.solutionDict().solver("pFinal"));
|
||||
#else
|
||||
pEqn.solve(mesh.solver("pFinal"));
|
||||
#endif
|
||||
else
|
||||
pEqn.solve();
|
||||
|
||||
if (nonOrth == nNonOrthCorr)
|
||||
{
|
||||
phiByVoidfraction = phi - pEqn.flux()/voidfractionf;
|
||||
}
|
||||
#endif
|
||||
pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
|
||||
if (piso.finalNonOrthogonalIter())
|
||||
{
|
||||
phiByVoidfraction = phi - pEqn.flux() / voidfractionf;
|
||||
}
|
||||
|
||||
} // end non-orthogonal corrector loop
|
||||
|
||||
phi = voidfractionf*phiByVoidfraction;
|
||||
phi = voidfractionf * phiByVoidfraction;
|
||||
#include "continuityErrorPhiPU.H"
|
||||
|
||||
if (modelType=="B" || modelType=="Bfull")
|
||||
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
|
||||
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 -= voidfraction * rUA * fvc::grad(p) - Ksl / rho * Us * rUA;
|
||||
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.correct(U);
|
||||
|
||||
} // end piso loop
|
||||
}
|
||||
|
||||
laminarTransport.correct();
|
||||
turbulence->correct();
|
||||
}// end solveFlow
|
||||
} // end solveFlow
|
||||
else
|
||||
{
|
||||
Info << "skipping flow solution." << endl;
|
||||
@ -271,18 +198,18 @@ int main(int argc, char *argv[])
|
||||
|
||||
runTime.write();
|
||||
|
||||
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||
<< nl << endl;
|
||||
Info << "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||
<< nl << endl;
|
||||
|
||||
particleCloud.clockM().stop("Flow");
|
||||
particleCloud.clockM().stop("Global");
|
||||
}
|
||||
|
||||
Info<< "End\n" << endl;
|
||||
Info << "End\n"
|
||||
<< endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
274
applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C.bk
Normal file
@ -0,0 +1,274 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
Copyright (C) 2009-2012 JKU, Linz
|
||||
Copyright (C) 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Application
|
||||
cfdemSolverPiso
|
||||
|
||||
Description
|
||||
Transient solver for incompressible flow.
|
||||
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,
|
||||
where additional functionality for CFD-DEM coupling is added.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "singlePhaseTransportModel.H"
|
||||
|
||||
#include "OFversion.H"
|
||||
#if defined(version30)
|
||||
#include "turbulentTransportModel.H"
|
||||
#include "pisoControl.H"
|
||||
#else
|
||||
#include "turbulenceModel.H"
|
||||
#endif
|
||||
#if defined(versionv1606plus) || defined(version40)
|
||||
#include "fvOptions.H"
|
||||
#else
|
||||
#include "fvIOoptionList.H"
|
||||
#endif
|
||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||
#include "cfdemCloud.H"
|
||||
|
||||
#if defined(anisotropicRotation)
|
||||
#include "cfdemCloudRotation.H"
|
||||
#endif
|
||||
#if defined(superquadrics_flag)
|
||||
#include "cfdemCloudRotationSuperquadric.H"
|
||||
#endif
|
||||
#include "implicitCouple.H"
|
||||
#include "clockModel.H"
|
||||
#include "smoothingModel.H"
|
||||
#include "forceModel.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#include "setRootCase.H"
|
||||
#include "createTime.H"
|
||||
#include "createMesh.H"
|
||||
#if defined(version30)
|
||||
pisoControl piso(mesh);
|
||||
#include "createTimeControls.H"
|
||||
#endif
|
||||
#include "createFields.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "initContinuityErrs.H"
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
#include "checkImCoupleM.H"
|
||||
#if defined(anisotropicRotation)
|
||||
cfdemCloudRotation particleCloud(mesh);
|
||||
#elif defined(superquadrics_flag)
|
||||
cfdemCloudRotationSuperquadric particleCloud(mesh);
|
||||
#else
|
||||
cfdemCloud particleCloud(mesh);
|
||||
#endif
|
||||
#include "checkModelType.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
Info<< "\nStarting time loop\n" << endl;
|
||||
while (runTime.loop())
|
||||
{
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
#if defined(version30)
|
||||
#include "readTimeControls.H"
|
||||
#include "CourantNo.H"
|
||||
#include "setDeltaT.H"
|
||||
#else
|
||||
#include "readPISOControls.H"
|
||||
#include "CourantNo.H"
|
||||
#endif
|
||||
|
||||
// do particle stuff
|
||||
particleCloud.clockM().start(1,"Global");
|
||||
particleCloud.clockM().start(2,"Coupling");
|
||||
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
|
||||
|
||||
if(hasEvolved)
|
||||
{
|
||||
particleCloud.smoothingM().smoothenAbsolutField(particleCloud.forceM(0).impParticleForces());
|
||||
}
|
||||
|
||||
Ksl = particleCloud.momCoupleM(particleCloud.registryM().getProperty("implicitCouple_index")).impMomSource();
|
||||
Ksl.correctBoundaryConditions();
|
||||
|
||||
surfaceScalarField voidfractionf = fvc::interpolate(voidfraction);
|
||||
phi = voidfractionf*phiByVoidfraction;
|
||||
|
||||
//Force Checks
|
||||
#include "forceCheckIm.H"
|
||||
|
||||
#include "solverDebugInfo.H"
|
||||
particleCloud.clockM().stop("Coupling");
|
||||
|
||||
particleCloud.clockM().start(26,"Flow");
|
||||
|
||||
if(particleCloud.solveFlow())
|
||||
{
|
||||
// Pressure-velocity PISO corrector
|
||||
{
|
||||
// Momentum predictor
|
||||
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)
|
||||
+ fvOptions(U)
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
fvOptions.constrain(UEqn);
|
||||
|
||||
#if defined(version30)
|
||||
if (piso.momentumPredictor())
|
||||
#else
|
||||
if (momentumPredictor)
|
||||
#endif
|
||||
{
|
||||
if (modelType=="B" || modelType=="Bfull")
|
||||
solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
|
||||
else
|
||||
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
|
||||
|
||||
fvOptions.correct(U);
|
||||
}
|
||||
|
||||
// --- PISO loop
|
||||
#if defined(version30)
|
||||
while (piso.correct())
|
||||
#else
|
||||
for (int corr=0; corr<nCorr; corr++)
|
||||
#endif
|
||||
{
|
||||
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) & mesh.Sf() )
|
||||
+ rUAfvoidfraction*fvc::ddtCorr(U, phiByVoidfraction);
|
||||
#else
|
||||
phi = ( fvc::interpolate(U) & mesh.Sf() )
|
||||
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phiByVoidfraction);
|
||||
#endif
|
||||
surfaceScalarField phiS(fvc::interpolate(Us) & mesh.Sf());
|
||||
phi += rUAf*(fvc::interpolate(Ksl/rho) * phiS);
|
||||
|
||||
if (modelType=="A")
|
||||
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
|
||||
|
||||
// Update the fixedFluxPressure BCs to ensure flux consistency
|
||||
#include "fixedFluxPressureHandling.H"
|
||||
|
||||
|
||||
// Non-orthogonal pressure corrector loop
|
||||
#if defined(version30)
|
||||
while (piso.correctNonOrthogonal())
|
||||
#else
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
#endif
|
||||
{
|
||||
// Pressure corrector
|
||||
fvScalarMatrix pEqn
|
||||
(
|
||||
fvm::laplacian(rUAvoidfraction, p) == fvc::div(voidfractionf*phi) + particleCloud.ddtVoidfraction()
|
||||
);
|
||||
pEqn.setReference(pRefCell, pRefValue);
|
||||
|
||||
#if defined(version30)
|
||||
pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
|
||||
if (piso.finalNonOrthogonalIter())
|
||||
{
|
||||
phiByVoidfraction = phi - pEqn.flux()/voidfractionf;
|
||||
}
|
||||
#else
|
||||
if( corr == nCorr-1 && nonOrth == nNonOrthCorr )
|
||||
#if defined(versionExt32)
|
||||
pEqn.solve(mesh.solutionDict().solver("pFinal"));
|
||||
#else
|
||||
pEqn.solve(mesh.solver("pFinal"));
|
||||
#endif
|
||||
else
|
||||
pEqn.solve();
|
||||
|
||||
if (nonOrth == nNonOrthCorr)
|
||||
{
|
||||
phiByVoidfraction = phi - pEqn.flux()/voidfractionf;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // end non-orthogonal corrector loop
|
||||
|
||||
phi = voidfractionf*phiByVoidfraction;
|
||||
#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();
|
||||
fvOptions.correct(U);
|
||||
|
||||
} // end piso loop
|
||||
}
|
||||
|
||||
laminarTransport.correct();
|
||||
turbulence->correct();
|
||||
}// end solveFlow
|
||||
else
|
||||
{
|
||||
Info << "skipping flow solution." << endl;
|
||||
}
|
||||
|
||||
runTime.write();
|
||||
|
||||
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||
<< nl << endl;
|
||||
|
||||
particleCloud.clockM().stop("Flow");
|
||||
particleCloud.clockM().stop("Global");
|
||||
}
|
||||
|
||||
Info<< "End\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
12
applications/solvers/cfdemSolverPiso/createGravity.H
Normal file
@ -0,0 +1,12 @@
|
||||
Info<< "\nReading g" << endl;
|
||||
uniformDimensionedVectorField g
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"g",
|
||||
runTime.constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
);
|
||||
@ -1,10 +1,12 @@
|
||||
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
|
||||
include $(CFDEM_ADD_LIBS_DIR)/$(CFDEM_ADD_LIBS_NAME)
|
||||
|
||||
PFLAGS+= -DCFDEMWMPROJECTVERSION="$(CFDEM_WM_PROJECT_VERSION)"
|
||||
|
||||
EXE_INC = \
|
||||
$(PFLAGS) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
$(PINC) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
@ -12,6 +14,7 @@ EXE_INC = \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
|
||||
-I$(CFDEM_SRC_DIR)/eulerian/scalarTransportModelsCFDEM/lnInclude \
|
||||
-I$(CFDEM_LIGGGHTS_SRC_DIR)
|
||||
|
||||
EXE_LIBS = \
|
||||
-L$(CFDEM_LIB_DIR)\
|
||||
|
||||
@ -43,8 +43,17 @@ Description
|
||||
#else
|
||||
#include "turbulenceModel.H"
|
||||
#endif
|
||||
#if defined(versionv1606plus) || defined(version40)
|
||||
#include "fvOptions.H"
|
||||
#else
|
||||
#include "fvIOoptionList.H"
|
||||
#endif
|
||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||
#include "cfdemCloud.H"
|
||||
#ifdef MS
|
||||
#include "cfdemCloudMS.H"
|
||||
#else
|
||||
#include "cfdemCloud.H"
|
||||
#endif
|
||||
#if defined(anisotropicRotation)
|
||||
#include "cfdemCloudRotation.H"
|
||||
#endif
|
||||
@ -66,14 +75,20 @@ int main(int argc, char *argv[])
|
||||
#include "createTimeControls.H"
|
||||
#endif
|
||||
#include "createFields.H"
|
||||
#include "createFvOptions.H"
|
||||
#include "initContinuityErrs.H"
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
#include "checkImCoupleM.H"
|
||||
#if defined(anisotropicRotation)
|
||||
cfdemCloudRotation particleCloud(mesh);
|
||||
#else
|
||||
cfdemCloud particleCloud(mesh);
|
||||
#ifdef MS
|
||||
cfdemCloudMS particleCloud(mesh);
|
||||
#else
|
||||
cfdemCloud particleCloud(mesh);
|
||||
#endif
|
||||
#endif
|
||||
#include "checkModelType.H"
|
||||
|
||||
@ -87,8 +102,6 @@ int main(int argc, char *argv[])
|
||||
Info<< "\nStarting time loop\n" << endl;
|
||||
while (runTime.loop())
|
||||
{
|
||||
particleCloud.clockM().start(1,"Global");
|
||||
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
#if defined(version30)
|
||||
@ -101,6 +114,7 @@ int main(int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
// do particle stuff
|
||||
particleCloud.clockM().start(1,"Global");
|
||||
particleCloud.clockM().start(2,"Coupling");
|
||||
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
|
||||
|
||||
@ -109,8 +123,7 @@ int main(int argc, char *argv[])
|
||||
particleCloud.smoothingM().smoothenAbsolutField(particleCloud.forceM(0).impParticleForces());
|
||||
}
|
||||
|
||||
Info << "update Ksl.internalField()" << endl;
|
||||
Ksl = particleCloud.momCoupleM(0).impMomSource();
|
||||
Ksl = particleCloud.momCoupleM(particleCloud.registryM().getProperty("implicitCouple_index")).impMomSource();
|
||||
Ksl.correctBoundaryConditions();
|
||||
|
||||
surfaceScalarField voidfractionf = fvc::interpolate(voidfraction);
|
||||
@ -124,14 +137,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
particleCloud.clockM().start(26,"Flow");
|
||||
|
||||
// get scalar source from DEM
|
||||
particleCloud.forceM(1).manipulateScalarField(Tsource);
|
||||
Tsource.correctBoundaryConditions();
|
||||
|
||||
//Scalar transport if desired. Use "none" (noTransport) if no scalar transport is desired
|
||||
stm().update();
|
||||
|
||||
particleCloud.clockM().start(26,"Flow");
|
||||
|
||||
if(particleCloud.solveFlow())
|
||||
{
|
||||
// Pressure-velocity PISO corrector
|
||||
@ -145,9 +153,11 @@ int main(int argc, char *argv[])
|
||||
+ particleCloud.divVoidfractionTau(U, voidfraction)
|
||||
==
|
||||
- fvm::Sp(Ksl/rho,U)
|
||||
+ fvOptions(U)
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
fvOptions.constrain(UEqn);
|
||||
|
||||
#if defined(version30)
|
||||
if (piso.momentumPredictor())
|
||||
@ -159,6 +169,8 @@ int main(int argc, char *argv[])
|
||||
solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
|
||||
else
|
||||
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
|
||||
|
||||
fvOptions.correct(U);
|
||||
}
|
||||
|
||||
// --- PISO loop
|
||||
@ -190,32 +202,7 @@ int main(int argc, char *argv[])
|
||||
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
|
||||
|
||||
// Update the fixedFluxPressure BCs to ensure flux consistency
|
||||
#ifndef versionExt32
|
||||
#ifndef version40
|
||||
if (modelType=="A")
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField()*voidfractionf.boundaryField())
|
||||
);
|
||||
}else
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField())
|
||||
);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "fixedFluxPressureHandling.H"
|
||||
|
||||
// Non-orthogonal pressure corrector loop
|
||||
#if defined(version30)
|
||||
@ -264,10 +251,12 @@ int main(int argc, char *argv[])
|
||||
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
|
||||
|
||||
U.correctBoundaryConditions();
|
||||
fvOptions.correct(U);
|
||||
|
||||
} // end piso loop
|
||||
}
|
||||
|
||||
laminarTransport.correct();
|
||||
turbulence->correct();
|
||||
}// end solveFlow
|
||||
else
|
||||
|
||||
@ -1,22 +1,27 @@
|
||||
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
|
||||
include $(CFDEM_ADD_LIBS_DIR)/$(CFDEM_ADD_LIBS_NAME)
|
||||
|
||||
PFLAGS+= -DCFDEMWMPROJECTVERSION="$(CFDEM_WM_PROJECT_VERSION)"
|
||||
|
||||
EXE_INC = \
|
||||
$(PFLAGS) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
$(PINC) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
|
||||
-I$(CFDEM_LIGGGHTS_SRC_DIR)
|
||||
|
||||
EXE_LIBS = \
|
||||
-L$(CFDEM_LIB_DIR)\
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_LIBS) \
|
||||
-lincompressibleTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lradiationModels \
|
||||
-lmeshTools \
|
||||
-l$(CFDEM_LIB_NAME) \
|
||||
$(CFDEM_ADD_LIB_PATHS) \
|
||||
|
||||
@ -44,6 +44,7 @@ Description
|
||||
#else
|
||||
#include "turbulenceModel.H"
|
||||
#endif
|
||||
#include "radiationModel.H"
|
||||
#include "fixedFluxPressureFvPatchScalarField.H"
|
||||
#include "cfdemCloud.H"
|
||||
#if defined(anisotropicRotation)
|
||||
@ -66,10 +67,12 @@ int main(int argc, char *argv[])
|
||||
#include "createTimeControls.H"
|
||||
#endif
|
||||
#include "createFields.H"
|
||||
#include "createIncompressibleRadiationModel.H"
|
||||
#include "initContinuityErrs.H"
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
#include "checkImCoupleM.H"
|
||||
#if defined(anisotropicRotation)
|
||||
cfdemCloudRotation particleCloud(mesh);
|
||||
#else
|
||||
@ -104,7 +107,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
Info << "update Ksl.internalField()" << endl;
|
||||
Ksl = particleCloud.momCoupleM(0).impMomSource();
|
||||
Ksl = particleCloud.momCoupleM(particleCloud.registryM().getProperty("implicitCouple_index")).impMomSource();
|
||||
Ksl.correctBoundaryConditions();
|
||||
|
||||
surfaceScalarField voidfractionf = fvc::interpolate(voidfraction);
|
||||
@ -121,18 +124,26 @@ int main(int argc, char *argv[])
|
||||
// get scalar source from DEM
|
||||
particleCloud.forceM(1).manipulateScalarField(Tsource);
|
||||
Tsource.correctBoundaryConditions();
|
||||
particleCloud.forceM(1).commToDEM();
|
||||
|
||||
// solve scalar transport equation
|
||||
{
|
||||
alphat = turbulence->nut()/Prt;
|
||||
alphat.correctBoundaryConditions();
|
||||
volScalarField alphaEff("alphaEff", turbulence->nu()/Pr + alphat);
|
||||
fvScalarMatrix TEqn
|
||||
(
|
||||
fvm::ddt(voidfraction,T) - fvm::Sp(fvc::ddt(voidfraction),T)
|
||||
+ fvm::div(phi, T) - fvm::Sp(fvc::div(phi),T)
|
||||
- fvm::laplacian(DT*voidfraction, T)
|
||||
- fvm::laplacian(alphaEff*voidfraction, T)
|
||||
==
|
||||
Tsource
|
||||
+ radiation->ST(rhoCpRef, T)
|
||||
);
|
||||
TEqn.relax();
|
||||
TEqn.solve();
|
||||
radiation->correct();
|
||||
}
|
||||
|
||||
if(particleCloud.solveFlow())
|
||||
{
|
||||
@ -192,32 +203,7 @@ int main(int argc, char *argv[])
|
||||
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
|
||||
|
||||
// Update the fixedFluxPressure BCs to ensure flux consistency
|
||||
#ifndef versionExt32
|
||||
#ifndef version40
|
||||
if (modelType=="A")
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField()*voidfractionf.boundaryField())
|
||||
);
|
||||
}else
|
||||
{
|
||||
setSnGrad<fixedFluxPressureFvPatchScalarField>
|
||||
(
|
||||
p.boundaryField(),
|
||||
(
|
||||
phi.boundaryField()
|
||||
- (mesh.Sf().boundaryField() & U.boundaryField())
|
||||
)/(mesh.magSf().boundaryField()*rUAf.boundaryField())
|
||||
);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "fixedFluxPressureHandling.H"
|
||||
|
||||
// Non-orthogonal pressure corrector loop
|
||||
#if defined(version30)
|
||||
@ -270,6 +256,7 @@ int main(int argc, char *argv[])
|
||||
} // end piso loop
|
||||
}
|
||||
|
||||
laminarTransport.correct();
|
||||
turbulence->correct();
|
||||
}// end solveFlow
|
||||
else
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
//========================
|
||||
// scalar field modelling
|
||||
//========================
|
||||
Info<< "\nCreating dummy density field rho = 1\n" << endl;
|
||||
Info<< "\nCreating T field\n" << endl;
|
||||
volScalarField T
|
||||
(
|
||||
IOobject
|
||||
@ -134,11 +134,27 @@
|
||||
)
|
||||
);
|
||||
|
||||
dimensionedScalar DT
|
||||
// kinematic turbulent thermal thermal conductivity m2/s
|
||||
Info<< "Reading field alphat\n" << endl;
|
||||
volScalarField alphat
|
||||
(
|
||||
transportProperties.lookup("DT")
|
||||
IOobject
|
||||
(
|
||||
"alphat",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
// Laminar Prandtl number
|
||||
dimensionedScalar Pr("Pr", dimless, transportProperties);
|
||||
|
||||
// Turbulent Prandtl number
|
||||
dimensionedScalar Prt("Prt", dimless, transportProperties);
|
||||
|
||||
//========================
|
||||
|
||||
//# include "createPhi.H"
|
||||
|
||||
@ -1,15 +1,18 @@
|
||||
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
|
||||
include $(CFDEM_ADD_LIBS_DIR)/$(CFDEM_ADD_LIBS_NAME)
|
||||
|
||||
PFLAGS+= -DCFDEMWMPROJECTVERSION="$(CFDEM_WM_PROJECT_VERSION)"
|
||||
|
||||
EXE_INC = \
|
||||
$(PFLAGS) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
$(PINC) \
|
||||
$(CFDEM_ADD_INCOMPTURBMOD_PATHS) \
|
||||
-I$(LIB_SRC)/transportModels \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(CFDEM_LIGGGHTS_SRC_DIR)
|
||||
|
||||
|
||||
EXE_LIBS = \
|
||||
|
||||
@ -71,14 +71,14 @@ int main(int argc, char *argv[])
|
||||
int DEM_dump_Interval=1000;
|
||||
particleCloud.reAllocArrays();
|
||||
|
||||
double **positions_;
|
||||
double **velocities_;
|
||||
double **radii_;
|
||||
double **voidfractions_;
|
||||
double **particleWeights_;
|
||||
double **particleVolumes_;
|
||||
double **particleV_;
|
||||
double **cellIDs_;
|
||||
double **positions_(NULL);
|
||||
double **velocities_(NULL);
|
||||
double **radii_(NULL);
|
||||
double **voidfractions_(NULL);
|
||||
double **particleWeights_(NULL);
|
||||
double **particleVolumes_(NULL);
|
||||
double **particleV_(NULL);
|
||||
double **cellIDs_(NULL);
|
||||
|
||||
particleCloud.dataExchangeM().allocateArray(positions_,0.,3);
|
||||
particleCloud.dataExchangeM().allocateArray(velocities_,0.,3);
|
||||
@ -114,8 +114,11 @@ int main(int argc, char *argv[])
|
||||
particleCloud.setPos(positions_);
|
||||
|
||||
particleCloud.voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_,particleV_);
|
||||
|
||||
voidfraction.internalField() = particleCloud.voidFractionM().voidFractionInterp();
|
||||
#if defined(versionv1612plus) || defined(version40)
|
||||
voidfraction = particleCloud.voidFractionM().voidFractionInterp();
|
||||
#else
|
||||
voidfraction.internalField() = particleCloud.voidFractionM().voidFractionInterp();
|
||||
#endif
|
||||
voidfraction.correctBoundaryConditions();
|
||||
|
||||
particleCloud.averagingM().setVectorAverage
|
||||
@ -129,6 +132,10 @@ int main(int argc, char *argv[])
|
||||
false
|
||||
);
|
||||
|
||||
//write Us field
|
||||
Us = particleCloud.averagingM().UsInterp();
|
||||
Us.correctBoundaryConditions();
|
||||
|
||||
for (int i=0;i<particleCloud.nrForceModels();i++) particleCloud.forceM(i).setForce();
|
||||
|
||||
runTime.write();
|
||||
|
||||
4
doc/.gitignore
vendored
@ -1,3 +1,7 @@
|
||||
#ignore .rst build files
|
||||
*.rst
|
||||
_tmp/*
|
||||
|
||||
# C++.gitignore from github
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
|
||||
@ -1,257 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws :c
|
||||
|
||||
:line
|
||||
CFDEMcoupling Documentation :h2,c
|
||||
:line
|
||||
:c,image(Portfolio_CFDEMcoupling.png)
|
||||
:line
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
:link(of,http://www.openfoam.com)
|
||||
:link(lig,http://www.cfdem.com)
|
||||
|
||||
1. Contents :h3
|
||||
|
||||
The CFDEMcoupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEMcoupling documentation can be improved.
|
||||
|
||||
1.1 "About CFDEMcoupling"_#1_1
|
||||
1.2 "Installation"_#1_2
|
||||
1.3 "Tutorials"_#1_3
|
||||
1.4 "couplingProperties dictionary"_#1_4
|
||||
1.5 "liggghtsCommands dictionary"_#1_5
|
||||
1.6 "Models and solvers"_#cmd_5 :all(b)
|
||||
|
||||
:line
|
||||
|
||||
1.1 About CFDEMcoupling :link(1_1),h4
|
||||
|
||||
CFDEM coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of "LIGGGHTS"_lig DEM code and the Open Source CFD package "OpenFOAM(R)(*)"_of. The CFDEMcoupling toolbox allows to expand standard CFD solvers of "OpenFOAM(R)(*)"_of to include a coupling to the DEM code "LIGGGHTS"_lig. In this toolbox the particle representation within the CFD solver is organized by "cloud" classes. Key functionalities are organised in sub-models (e.g. force models, data exchange models, etc.) which can easily be selected and combined by dictionary settings.
|
||||
|
||||
The coupled solvers run fully parallel on distributed-memory clusters. Features are:
|
||||
|
||||
its modular approach allows users to easily implement new models :ulb,l
|
||||
its MPI parallelization enables to use it for large scale problems :l
|
||||
the "forum"_lws on CFD-DEM gives the possibility to exchange with other users / developers :l
|
||||
the use of GIT allows to easily update to the latest version :l
|
||||
basic documentation is provided :l
|
||||
:ule
|
||||
|
||||
The file structure:
|
||||
|
||||
{src} directory including the source files of the coupling toolbox and models :ulb,l
|
||||
{applications} directory including the solver files for coupled CFD-DEM simulations :l
|
||||
{doc} directory including the documentation of CFDEMcoupling :l
|
||||
{tutorials} directory including basic tutorial cases showing the functionality :l
|
||||
:ule
|
||||
|
||||
Details on installation are given on the "CFDEMproject WWW Site"_lws .
|
||||
The functionality of this CFD-DEM framework is described via "tutorial cases"_#_1_2 showing how to use different solvers and models.
|
||||
|
||||
CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.
|
||||
|
||||
CFDEMcoupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).
|
||||
|
||||
Core development of CFDEMcoupling is done by Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
|
||||
|
||||
This documentation was written by Christoph Goniva, DCS Computing GmbH, 2012
|
||||
|
||||
: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.
|
||||
|
||||
:line
|
||||
|
||||
1.2 Installation :link(1_2),h4
|
||||
|
||||
Please follow the installation routine provided at www.cfdem.com.
|
||||
In order to get the latest code version, please use the git repository at http://github.com ("githubAccess"_githubAccess_public.html).
|
||||
|
||||
:line
|
||||
|
||||
1.3 Tutorials :link(1_3),h4
|
||||
|
||||
[General:]
|
||||
|
||||
Each solver of the CFDEMcoupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).
|
||||
|
||||
[Location:]
|
||||
|
||||
The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials, which can be reached by typing "cfdemTut"
|
||||
|
||||
[Structure:]
|
||||
|
||||
Each case is structured in a directory called "CFD" covering the CFD relevant settings and data, and a dirctory called "DEM" covering the DEM relevant settings and data. This allows to easily expand a pure CFD or DEM simulation case to a coupled case.
|
||||
|
||||
[Usage:]
|
||||
|
||||
Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell script, executed by typing "./Allrun.sh". The successful run of the script might need some third party software (e.g. octave, evince, etc.).
|
||||
|
||||
[Settings:]
|
||||
|
||||
The main settings of a simulation are done via dictionaries:
|
||||
|
||||
The DEM setup of each case is defined by a "LIGGGHTS"_lig input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the "LIGGGHTS"_lig setup, please have a look at the "LIGGGHTS"_lig manual.
|
||||
|
||||
Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). You can find more information on that in "OpenFOAM(R)(*)"_of documentations (www.openFoam.com)(*).
|
||||
|
||||
Settings of the coupling routines are defined in $caseDir/CFD/constant/"couplingProperies"_#1_3 (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/"liggghtsCommands"_#1_3 (allows to execute a LIGGGHTS command during a coupled simulation).
|
||||
|
||||
:line
|
||||
|
||||
1.4 "couplingProperties" dictionary :link(1_4),h4
|
||||
|
||||
[General:]
|
||||
|
||||
In the "couplingProperties" dictionary the setup of the coupling routines of the CFD-DEM simulation are defined.
|
||||
|
||||
[Location:] $caseDir/CFD/constant
|
||||
|
||||
[Structure:]
|
||||
|
||||
The dictionary is divided into two parts, "sub-models & settings" and "sub-model properties".
|
||||
|
||||
In "sub-models & settings" the following routines must be specified:
|
||||
|
||||
modelType :ulb,l
|
||||
couplingInterval :l
|
||||
voidFractionModel :l
|
||||
locateModel :l
|
||||
meshMotionModel :l
|
||||
regionModel :l
|
||||
IOModel :l
|
||||
dataExchangeModel :l
|
||||
averagingModel :l
|
||||
forceModels :l
|
||||
momCoupleModels :l
|
||||
turbulenceModelType :l
|
||||
:ule
|
||||
|
||||
In "sub-model properties" sub-dictionaries might be defined to specify model specific parameters.
|
||||
|
||||
[Settings:]
|
||||
|
||||
Reasonable example settings for the "couplingProperties" dictionary are given in the tutorial cases.
|
||||
|
||||
modelType :pre
|
||||
|
||||
"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
|
||||
|
||||
The coupling interval determines the time passing between two CFD-DEM data exchanges.
|
||||
|
||||
A useful procedure would be:
|
||||
1) Set the DEM timestep in the in.xxx file according to the needs of the pure DEM problem.
|
||||
2) Set the "couplingInterval", which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling.
|
||||
3) Choose the CFD timestep in the controlDict. It must be equal to or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!".
|
||||
|
||||
Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s.
|
||||
|
||||
:line
|
||||
|
||||
1.5 "liggghtsCommands" dictionary :h4,link(1_5)
|
||||
|
||||
[General:]
|
||||
|
||||
In the "liggghtsCommands" dictionary liggghts commands being executed during a coupled CFD-DEM simulation are specified.
|
||||
|
||||
[Location:] $caseDir/CFD/constant
|
||||
|
||||
[Structure:]
|
||||
|
||||
The dictionary is divided into two parts, first a list of "liggghtsCommandModels" is defined, then the settings for each model must be specified.
|
||||
|
||||
[Settings:]
|
||||
|
||||
Reasonable example settings for the "liggghtsCommands" dictionary are given in the tutorial cases.
|
||||
|
||||
:line
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1.6 Models/Solvers :h4,link(cmd_5),link(comm)
|
||||
|
||||
This section lists all CFDEMcoupling sub-models and solvers alphabetically, with a separate
|
||||
listing below of styles within certain commands.
|
||||
|
||||
|
||||
"IOModel"_IOModel.html,
|
||||
"IOModel_basicIO"_IOModel_basicIO.html,
|
||||
"IOModel_noIO"_IOModel_noIO.html,
|
||||
"IOModel_sophIO"_IOModel_sophIO.html,
|
||||
"IOModel_trackIO"_IOModel_trackIO.html,
|
||||
"averagingModel"_averagingModel.html,
|
||||
"averagingModel_dense"_averagingModel_dense.html,
|
||||
"averagingModel_dilute"_averagingModel_dilute.html,
|
||||
"cfdemSolverIB"_cfdemSolverIB.html,
|
||||
"cfdemSolverPiso"_cfdemSolverPiso.html,
|
||||
"cfdemSolverPisoScalar"_cfdemSolverPisoScalar.html,
|
||||
"clockModel"_clockModel.html,
|
||||
"clockModel_noClock"_clockModel_noClock.html,
|
||||
"clockModel_standardClock"_clockModel_standardClock.html,
|
||||
"dataExchangeModel"_dataExchangeModel.html,
|
||||
"dataExchangeModel_noDataExchange"_dataExchangeModel_noDataExchange.html,
|
||||
"dataExchangeModel_oneWayVTK"_dataExchangeModel_oneWayVTK.html,
|
||||
"dataExchangeModel_twoWayFiles"_dataExchangeModel_twoWayFiles.html,
|
||||
"dataExchangeModel_twoWayMPI"_dataExchangeModel_twoWayMPI.html,
|
||||
"forceModel"_forceModel.html,
|
||||
"forceModel_Archimedes"_forceModel_Archimedes.html,
|
||||
"forceModel_ArchimedesIB"_forceModel_ArchimedesIB.html,
|
||||
"forceModel_DiFeliceDrag"_forceModel_DiFeliceDrag.html,
|
||||
"forceModel_GidaspowDrag"_forceModel_GidaspowDrag.html,
|
||||
"forceModel_KochHillDrag"_forceModel_KochHillDrag.html,
|
||||
"forceModel_LaEuScalarTemp"_forceModel_LaEuScalarTemp.html,
|
||||
"forceModel_MeiLift"_forceModel_MeiLift.html,
|
||||
"forceModel_SchillerNaumannDrag"_forceModel_SchillerNaumannDrag.html,
|
||||
"forceModel_ShirgaonkarIB"_forceModel_ShirgaonkarIB.html,
|
||||
"forceModel_checkCouplingInterval"_forceModel_checkCouplingInterval.html,
|
||||
"forceModel_fieldStore"_forceModel_fieldStore.html,
|
||||
"forceModel_fieldTimeAverage"_forceModel_fieldTimeAverage.html,
|
||||
"forceModel_gradPForce"_forceModel_gradPForce.html,
|
||||
"forceModel_noDrag"_forceModel_noDrag.html,
|
||||
"forceModel_particleCellVolume"_forceModel_particleCellVolume.html,
|
||||
"forceModel_particleVolume"_forceModel_particleVolume.html,
|
||||
"forceModel_scalarGeneralExchange"_forceModel_scalarGeneralExchange.html,
|
||||
"forceModel_virtualMassForce"_forceModel_virtualMassForce.html,
|
||||
"forceModel_viscForce"_forceModel_viscForce.html,
|
||||
"forceModel_volWeightedAverage"_forceModel_volWeightedAverage.html,
|
||||
"forceSubModel"_forceSubModel.html,
|
||||
"forceSubModel_ImEx"_forceSubModel_ImEx.html,
|
||||
"liggghtsCommandModel"_liggghtsCommandModel.html,
|
||||
"liggghtsCommandModel_execute"_liggghtsCommandModel_execute.html,
|
||||
"liggghtsCommandModel_readLiggghtsData"_liggghtsCommandModel_readLiggghtsData.html,
|
||||
"liggghtsCommandModel_runLiggghts"_liggghtsCommandModel_runLiggghts.html,
|
||||
"liggghtsCommandModel_setDEMGravity"_liggghtsCommandModel_setDEMGravity.html,
|
||||
"liggghtsCommandModel_writeLiggghts"_liggghtsCommandModel_writeLiggghts.html,
|
||||
"locateModel"_locateModel.html,
|
||||
"locateModel_engineSearch"_locateModel_engineSearch.html,
|
||||
"locateModel_engineSearchIB"_locateModel_engineSearchIB.html,
|
||||
"locateModel_standardSearch"_locateModel_standardSearch.html,
|
||||
"meshMotionModel"_meshMotionModel.html,
|
||||
"meshMotionModel_noMeshMotion"_meshMotionModel_noMeshMotion.html,
|
||||
"momCoupleModel"_momCoupleModel.html,
|
||||
"momCoupleModel_explicitCouple"_momCoupleModel_explicitCouple.html,
|
||||
"momCoupleModel_implicitCouple"_momCoupleModel_implicitCouple.html,
|
||||
"momCoupleModel_noCouple"_momCoupleModel_noCouple.html,
|
||||
"probeModel"_probeModel.html,
|
||||
"probeModel_noProbe"_probeModel_noProbe.html,
|
||||
"probeModel_particleProbe"_probeModel_particleProbe.html,
|
||||
"regionModel"_regionModel.html,
|
||||
"regionModel_allRegion"_regionModel_allRegion.html,
|
||||
"scalarTransportModel"_scalarTransportModel.html,
|
||||
"smoothingModel"_smoothingModel.html,
|
||||
"smoothingModel_constDiffSmoothing"_smoothingModel_constDiffSmoothing.html,
|
||||
"smoothingModel_noSmoothing"_smoothingModel_noSmoothing.html,
|
||||
"voidfractionModel"_voidFractionModel.html,
|
||||
"voidfractionModel_GaussVoidFraction"_voidFractionModel_GaussVoidFraction.html,
|
||||
"voidfractionModel_IBVoidFraction"_voidFractionModel_IBVoidFraction.html,
|
||||
"voidfractionModel_bigParticleVoidFraction"_voidFractionModel_bigParticleVoidFraction.html,
|
||||
"voidfractionModel_centreVoidFraction"_voidFractionModel_centreVoidFraction.html,
|
||||
"voidfractionModel_dividedVoidFraction"_voidFractionModel_dividedVoidFraction.html,
|
||||
"voidfractionModel_noVoidFractionVoidFraction"_voidFractionModel_noVoidFraction.html,
|
||||
"voidfractionModel_trilinearVoidFraction"_voidFractionModel_trilinearVoidFraction.html :tb(c=2,ea=c)
|
||||
BIN
doc/Eqs/Ksl.png
Executable file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
doc/Eqs/NavierStokesLiquSoli.png
Executable file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic1.png
Executable file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic2.png
Executable file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic3.png
Executable file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic4.png
Executable file
|
After Width: | Height: | Size: 15 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic5.png
Executable file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
doc/Eqs/voidfractionModel_divided_pic6.png
Executable file
|
After Width: | Height: | Size: 1.9 KiB |
@ -1,36 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "model"; :pre
|
||||
|
||||
model = name of IO-model to be applied :ul
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "off";
|
||||
|
||||
Note: This examples list might not be complete - please look for other models (IOModel_XY) in this documentation.
|
||||
|
||||
[Description:]
|
||||
|
||||
The IO-model is the base class to write data (e.g. particle properties) to files.
|
||||
|
||||
[Restrictions:]
|
||||
|
||||
none.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
Note: This examples list may be incomplete - please look for other models (IOModel_XY) in this documentation.
|
||||
|
||||
[Default:] none.
|
||||
@ -1,29 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel_basicIO command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "basicIO"; :pre
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "basicIO"; :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
The basic IO-model writes particle positions velocities and radii to files. The default output directory ($casePath/CFD/proc*/time/lagrangian). Using the keyword "serialOutput;" in couplingProperties the IO is serial to the directory ($casePath/CFD/lagrangian). In the latter case only the data on processor 0 is written! Data is written every write time of the CFD simulation.
|
||||
|
||||
[Restrictions:] None.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"IOModel"_IOModel.html
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel_noIO command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "off"; :pre
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "off"; :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
The noIO-model is a dummy IO model.
|
||||
|
||||
[Restrictions:] None.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"IOModel"_IOModel.html
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel_sophIO command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "sophIO"; :pre
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "sophIO"; :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
The sophIO-model is based on basicIO model and additionally writes voidfraction, implicit forces, explicit forces. Data is written every write time of the CFD simulation.
|
||||
|
||||
[Restrictions:] None.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"IOModel"_IOModel.html
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel_trackIO command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "trackIO"; :pre
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "trackIO"; :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
The trackIO-model is based on sophIO model and additionally writes fields necessary to use the particleTracks utility (which needs a particleTrackProperties file in the constant dir). The particleTracks utility generates tracks of the particles and writes them to a vtk file.
|
||||
|
||||
[Restrictions:] None.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"IOModel"_IOModel.html
|
||||
|
||||
BIN
doc/_build/doctrees/CFDEMcoupling_Manual.doctree
vendored
BIN
doc/_build/doctrees/IOModel.doctree
vendored
BIN
doc/_build/doctrees/IOModel_basicIO.doctree
vendored
BIN
doc/_build/doctrees/IOModel_sophIO.doctree
vendored
BIN
doc/_build/doctrees/IOModel_trackIO.doctree
vendored
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/README.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/api.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/demo.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/index.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/list.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/long.doctree
vendored
Normal file
BIN
doc/_build/doctrees/_tmp/sphinx_rtd_theme/demo_docs/source/toc.doctree
vendored
Normal file
BIN
doc/_build/doctrees/averagingModel.doctree
vendored
BIN
doc/_build/doctrees/averagingModel_dilute.doctree
vendored
BIN
doc/_build/doctrees/cfdemSolverIB.doctree
vendored
BIN
doc/_build/doctrees/cfdemSolverPiso.doctree
vendored
BIN
doc/_build/doctrees/cfdemSolverPisoSTM.doctree
vendored
Normal file
BIN
doc/_build/doctrees/cfdemSolverPisoScalar.doctree
vendored
BIN
doc/_build/doctrees/clockModel.doctree
vendored
BIN
doc/_build/doctrees/clockModel_standardClock.doctree
vendored
BIN
doc/_build/doctrees/dataExchangeModel.doctree
vendored
BIN
doc/_build/doctrees/environment.pickle
vendored
BIN
doc/_build/doctrees/fix_couple_cfd.doctree
vendored
Normal file
BIN
doc/_build/doctrees/fix_couple_cfd_force.doctree
vendored
Normal file
BIN
doc/_build/doctrees/fix_couple_cfd_force_implicit.doctree
vendored
Normal file
BIN
doc/_build/doctrees/forceModel.doctree
vendored
BIN
doc/_build/doctrees/forceModel_Archimedes.doctree
vendored
BIN
doc/_build/doctrees/forceModel_DiFeliceDrag.doctree
vendored
BIN
doc/_build/doctrees/forceModel_GidaspowDrag.doctree
vendored
BIN
doc/_build/doctrees/forceModel_KochHillDrag.doctree
vendored
BIN
doc/_build/doctrees/forceModel_MeiLift.doctree
vendored
BIN
doc/_build/doctrees/forceModel_noDrag.doctree
vendored
BIN
doc/_build/doctrees/forceModel_viscForce.doctree
vendored
BIN
doc/_build/doctrees/forceSubModel.doctree
vendored
BIN
doc/_build/doctrees/forceSubModel_ImEx.doctree
vendored
BIN
doc/_build/doctrees/fvOptions.doctree
vendored
Normal file
BIN
doc/_build/doctrees/fvOptions_meanSupVelocityForce.doctree
vendored
Normal file
BIN
doc/_build/doctrees/githubAccess_public.doctree
vendored
BIN
doc/_build/doctrees/liggghtsCommandModel.doctree
vendored
BIN
doc/_build/doctrees/locateModel.doctree
vendored
BIN
doc/_build/doctrees/meshMotionModel.doctree
vendored
BIN
doc/_build/doctrees/momCoupleModel.doctree
vendored
BIN
doc/_build/doctrees/probeModel.doctree
vendored
BIN
doc/_build/doctrees/probeModel_particleProbe.doctree
vendored
BIN
doc/_build/doctrees/regionModel.doctree
vendored
BIN
doc/_build/doctrees/regionModel_allRegion.doctree
vendored
BIN
doc/_build/doctrees/scalarTransportModel.doctree
vendored
BIN
doc/_build/doctrees/scalarTransportModel_generalManual.doctree
vendored
Normal file
BIN
doc/_build/doctrees/smoothingModel.doctree
vendored
BIN
doc/_build/doctrees/voidFractionModel.doctree
vendored
508
doc/_build/html/CFDEMcoupling_Manual.html
vendored
@ -8,7 +8,7 @@
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>CFDEMcoupling Documentation — CFDEMcoupling v3.X documentation</title>
|
||||
<title>CFDEM®coupling Documentation — CFDEMcoupling v3.X documentation</title>
|
||||
|
||||
|
||||
|
||||
@ -82,9 +82,9 @@
|
||||
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc"><ul>
|
||||
<li><a class="reference internal" href="#">CFDEMcoupling Documentation</a><ul>
|
||||
<li><a class="reference internal" href="#">CFDEM®coupling Documentation</a><ul>
|
||||
<li><a class="reference internal" href="#contents">Contents</a><ul>
|
||||
<li><a class="reference internal" href="#about-cfdemcoupling">About CFDEMcoupling</a></li>
|
||||
<li><a class="reference internal" href="#about-cfdemcoupling">About CFDEM®coupling</a></li>
|
||||
<li><a class="reference internal" href="#installation">Installation</a></li>
|
||||
<li><a class="reference internal" href="#tutorials">Tutorials</a></li>
|
||||
<li><a class="reference internal" href="#couplingproperties-dictionary">“couplingProperties” dictionary</a></li>
|
||||
@ -124,7 +124,7 @@
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="#">Docs</a> »</li>
|
||||
|
||||
<li>CFDEMcoupling Documentation</li>
|
||||
<li>CFDEM®coupling Documentation</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
|
||||
|
||||
@ -140,15 +140,15 @@
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<div class="section" id="cfdemcoupling-documentation">
|
||||
<h1>CFDEMcoupling Documentation<a class="headerlink" href="#cfdemcoupling-documentation" title="Permalink to this headline">¶</a></h1>
|
||||
<h1>CFDEM®coupling Documentation<a class="headerlink" href="#cfdemcoupling-documentation" title="Permalink to this headline">¶</a></h1>
|
||||
<hr class="docutils" />
|
||||
<img alt="_images/Portfolio_CFDEMcoupling.png" class="align-center" src="_images/Portfolio_CFDEMcoupling.png" />
|
||||
<hr class="docutils" />
|
||||
<div class="section" id="contents">
|
||||
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The CFDEMcoupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEMcoupling documentation can be improved.</p>
|
||||
<p>The CFDEM®coupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEM®coupling documentation can be improved.</p>
|
||||
<div class="line-block">
|
||||
<div class="line">1.1 <a class="reference internal" href="#id1"><em>About CFDEMcoupling</em></a></div>
|
||||
<div class="line">1.1 <a class="reference internal" href="#id1"><em>About CFDEM®coupling</em></a></div>
|
||||
<div class="line">1.2 <a class="reference internal" href="#id2"><em>Installation</em></a></div>
|
||||
<div class="line">1.3 <a class="reference internal" href="#id3"><em>Tutorials</em></a></div>
|
||||
<div class="line">1.4 <a class="reference internal" href="#id4"><em>couplingProperties dictionary</em></a></div>
|
||||
@ -158,8 +158,8 @@
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<div class="section" id="about-cfdemcoupling">
|
||||
<span id="id1"></span><h3>About CFDEMcoupling<a class="headerlink" href="#about-cfdemcoupling" title="Permalink to this headline">¶</a></h3>
|
||||
<p>CFDEM coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of <a class="reference external" href="http://www.cfdem.com">LIGGGHTS</a> DEM code and the Open Source CFD package <a class="reference external" href="http://www.openfoam.com">OpenFOAM(R)(*)</a>. The CFDEMcoupling toolbox allows to expand standard CFD solvers of <a class="reference external" href="http://www.openfoam.com">OpenFOAM(R)(*)</a> to include a coupling to the DEM code <a class="reference external" href="http://www.cfdem.com">LIGGGHTS</a>. In this toolbox the particle representation within the CFD solver is organized by “cloud” classes. Key functionalities are organised in sub-models (e.g. force models, data exchange models, etc.) which can easily be selected and combined by dictionary settings.</p>
|
||||
<span id="id1"></span><h3>About CFDEM®coupling<a class="headerlink" href="#about-cfdemcoupling" title="Permalink to this headline">¶</a></h3>
|
||||
<p>CFDEM®coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of <a class="reference external" href="https://www.cfdem.com/liggghtsr-open-source-discrete-element-method-particle-simulation-code">LIGGGHTS®</a> DEM code and the Open Source CFD package <a class="reference external" href="http://www.openfoam.com">OpenFOAM®(*)</a>. The CFDEM®coupling toolbox allows to expand standard CFD solvers of <a class="reference external" href="http://www.openfoam.com">OpenFOAM®(*)</a> to include a coupling to the DEM code <a class="reference external" href="https://www.cfdem.com/liggghtsr-open-source-discrete-element-method-particle-simulation-code">LIGGGHTS®</a>. In this toolbox the particle representation within the CFD solver is organized by “cloud” classes. Key functionalities are organised in sub-models (e.g. force models, data exchange models, etc.) which can easily be selected and combined by dictionary settings.</p>
|
||||
<p>The coupled solvers run fully parallel on distributed-memory clusters. Features are:</p>
|
||||
<ul class="simple">
|
||||
<li>its modular approach allows users to easily implement new models</li>
|
||||
@ -170,42 +170,416 @@
|
||||
</ul>
|
||||
<p>The file structure:</p>
|
||||
<ul class="simple">
|
||||
<li><em>src</em> directory including the source files of the coupling toolbox and models</li>
|
||||
<li><em>applications</em> directory including the solver files for coupled CFD-DEM simulations</li>
|
||||
<li><em>doc</em> directory including the documentation of CFDEMcoupling</li>
|
||||
<li><em>src</em> directory contains the source-code files of the CFDEM®coupling toolbox library and models</li>
|
||||
<li><em>applications</em> directory contains the solver source files for coupled CFD-DEM simulations</li>
|
||||
<li><em>doc</em> directory including the documentation of CFDEM®coupling</li>
|
||||
<li><em>tutorials</em> directory including basic tutorial cases showing the functionality</li>
|
||||
</ul>
|
||||
<p>Details on installation are given on the <a class="reference external" href="http://www.cfdem.com">CFDEMproject WWW Site</a> .
|
||||
The functionality of this CFD-DEM framework is described via <em class="xref std std-ref">tutorial cases</em> showing how to use different solvers and models.</p>
|
||||
<p>CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.</p>
|
||||
<p>CFDEMcoupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).</p>
|
||||
<p>Core development of CFDEMcoupling is done by Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012</p>
|
||||
<p>This documentation was written by Christoph Goniva, DCS Computing GmbH, 2012</p>
|
||||
<p>The functionality of this CFD-DEM framework is described via <a class="reference internal" href="#id3"><em>tutorial cases</em></a> showing how to use different solvers and models.</p>
|
||||
<p>CFDEM®coupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.</p>
|
||||
<p>CFDEM®coupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).</p>
|
||||
<p>Core development of CFDEM®coupling is done by Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012</p>
|
||||
<p>This documentation was written by DCS Computing GmbH, 2017</p>
|
||||
<hr class="docutils" />
|
||||
<p>How CFDEM®coupling works, a short description:</p>
|
||||
<p>The launched applications are CFDEM®coupling solvers, e.g. cfdemSolverPiso. Its job is to solve the Navier-Stokes equations with a solid phase present.
|
||||
A general formulation with a solid phase:</p>
|
||||
<img alt="_images/NavierStokesLiquSoli.png" class="align-center" src="_images/NavierStokesLiquSoli.png" />
|
||||
<p>In general “l” denotes liquid and “s” solid properties. AlphaL is the fluid (liquid) content of a calculation-cell, the voidfraction. “rhoL” is the fluid (liquid) density, uL the fluid (liquid) velocity, p the pressure, Ksl the implicit momentum exchange term between solid and liquid phase, us the solid velocity, tau the liquid-stress-tensor, g the gravity vector and t the time. “f” is a general explicit term which can be used to explicitely exchange momentum from the solid to the liquid phase.</p>
|
||||
<p>All cfdemSolvers use a “cfdemCloud” object, which takes care of many things. The most important are:</p>
|
||||
<ul class="simple">
|
||||
<li>Control and communicate with the LIGGGHTS® library object. (liggghtsCommandModel and dataExchangeModel)</li>
|
||||
<li>Find the cell ID of a certain position, e.g. the particle center. (locateModel)</li>
|
||||
<li>Calculate the voidfraction field from particle positions, particle volumes and cell volumes. (voidFractionModel)</li>
|
||||
<li>Calculate the forces on the CFD field and the particle forces. These may be assembled by various forceModels, e.g. buyoancy and a drag-law. (forceModel and forceSubModel)</li>
|
||||
<li>Calculate the implicit and if necessary explicit source terms from the force fields for the Navier-Stokes-Equations, the solver needs to solve. (momCoupleModel)</li>
|
||||
<li>Calculate the “Us” field from particle data, map the particle data to the CFD field. (averagingModel)</li>
|
||||
</ul>
|
||||
<p>In the standard setting the momentum coupling model takes the calculated forces of forceModels and produces the implicit momentum source term Ksl with</p>
|
||||
<img alt="_images/Ksl.png" class="align-center" src="_images/Ksl.png" />
|
||||
<p>More advanced solvers have also an explicit source term field f which is assembled from those forces which have the treatForceExplicit=true flag (see forceSubModels).</p>
|
||||
<hr class="docutils" />
|
||||
<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.</p>
|
||||
<hr class="docutils" />
|
||||
</div>
|
||||
<div class="section" id="installation">
|
||||
<span id="id2"></span><h3>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Please follow the installation routine provided at www.cfdem.com.
|
||||
In order to get the latest code version, please use the git repository at <a class="reference external" href="http://github.com">http://github.com</a> (<a class="reference internal" href="githubAccess_public.html"><em>githubAccess</em></a>).</p>
|
||||
<hr class="docutils" />
|
||||
<p>This section describes how to download repositories of the CFDEM®project from <a class="reference external" href="http://github.com/">github.com</a> .
|
||||
After setting some environment variables, LIGGGHTS® and CFDEM®coupling can be compiled.</p>
|
||||
<p><strong>Procedure:</strong></p>
|
||||
<p>Short summary:</p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#install-1"><em>Install git</em></a></li>
|
||||
<li><a class="reference internal" href="#install-2"><em>Download CFDEM®project software</em></a></li>
|
||||
<li><a class="reference internal" href="#install-3"><em>Download the correct OpenFOAM® version</em></a></li>
|
||||
<li><a class="reference internal" href="#install-4"><em>Setup prerequisites</em></a></li>
|
||||
<li><a class="reference internal" href="#install-5"><em>Setup and compile OpenFOAM®</em></a></li>
|
||||
<li><a class="reference internal" href="#install-6"><em>Set environment variables and paths</em></a></li>
|
||||
<li><a class="reference internal" href="#install-7"><em>Compile LIGGGHTS® and CFDEM®coupling</em></a></li>
|
||||
<li><a class="reference internal" href="#additionalinstall"><em>Additional information</em></a></li>
|
||||
<li><a class="reference internal" href="#install-8"><em>Run your own cases</em></a></li>
|
||||
</ul>
|
||||
<hr class="docutils" />
|
||||
<p id="install-1"><strong>Install git:</strong></p>
|
||||
<p>This step is optional, but recommended. Git allows you to update the source code very easily with the git pull command.
|
||||
On debian based systems you can run</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>sudo apt-get install git-core
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Similar packages are available on other systems too:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>sudo zypper install git-core
|
||||
sudo yum install git
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">In this tutorial the git protocol is used to transfer files. If port 9418 is closed for internet connections, please switch to “<a class="reference external" href="https://">https://</a>” instead of “git://” for git clone commands.</p>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<p id="install-2"><strong>Download CFDEMproject software:</strong></p>
|
||||
<p>With git you can clone git repositories from <a class="reference external" href="http://github.com/">github</a> . The following terminal commands will download the CFDEM®project software to your machine in the typical folder structure. The download of the post-processing tool LPP is optional and requires python-numpy.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>cd $HOME
|
||||
mkdir CFDEM
|
||||
cd CFDEM
|
||||
git clone git://github.com/CFDEMproject/CFDEMcoupling-PUBLIC.git
|
||||
cd $HOME
|
||||
mkdir LIGGGHTS
|
||||
cd LIGGGHTS
|
||||
git clone git://github.com/CFDEMproject/LIGGGHTS-PUBLIC.git
|
||||
git clone git://github.com/CFDEMproject/LPP.git lpp
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you do not have git, you can use the download buttons after visiting a repository in the <a class="reference external" href="http://github.com/CFDEMproject">CFDEMproject project page</a> and unzip the archives to the proper locations. Typically github tags the folders with “-master”, please rename them with</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>cd $HOME/CFDEM
|
||||
mv CFDEMcoupling-PUBLIC-master CFDEMcoupling-PUBLIC
|
||||
cd $HOME/LIGGGHTS
|
||||
mv LIGGGHTS-PUBLIC-master LIGGGHTS-PUBLIC
|
||||
mv LPP-master lpp
|
||||
</pre></div>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<p id="install-3"><strong>Download the correct OpenFOAM® version:</strong></p>
|
||||
<p>All mentions of OpenFOAM® refer to <a class="reference internal" href="#footnotes"><em>this</em></a> . It is strongly recommended to compile OpenFOAM® yourself with the latest compatible version.
|
||||
The latest compatible OpenFOAM®-version can be found in the in your local copy of CFDEM®coupling in src/lagrangian/cfdemParticle/cfdTools/versionInfo.H, or directly at <a class="reference external" href="https://github.com/CFDEMproject/CFDEMcoupling-PUBLIC/blob/master/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H">github</a> .
|
||||
Look for the git commit hashtag in the following line:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>word OFversion="<OF-Release>-commit-<commitHashtag>";
|
||||
e.g. word OFversion="5.x-commit-538044ac05c4672b37c7df607dca1116fa88df88";
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>With git you can use the following recipe to get the correct version:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>cd $HOME
|
||||
mkdir OpenFOAM
|
||||
cd OpenFOAM
|
||||
git clone git://github.com/OpenFOAM/OpenFOAM-<OF-Release>.git
|
||||
git clone git://github.com/OpenFOAM/ThirdParty-<OF-Release>.git
|
||||
cd OpenFOAM-<OF-Release>
|
||||
git checkout <commitHashtag>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Without git you can visit git://github.com/OpenFOAM/OpenFOAM-<OF-Release>/tree/<commitHashtag> and use the download button.</p>
|
||||
<p>Other OpenFOAM® versions can be used for compilation, but aren’t officially supported. The list includes 4.x, 3.x, 2.4.x, 1612+, 1606+ and extend-3.2</p>
|
||||
<hr class="docutils" />
|
||||
<p id="install-4"><strong>Setup prerequisites for CFDEM®project:</strong></p>
|
||||
<p>Prerequisites for OpenFOAM® can be found <a class="reference external" href="https://openfoam.org/download/source/">here</a> .
|
||||
On an Ubuntu system (14.04+), you can use the following</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>sudo apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev libscotch-dev libptscotch-dev
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>CFDEM®project requires OpenFOAM® with a working MPI version.
|
||||
Optional, but strongly recommended is the use of <a class="reference external" href="http://www.vtk.org/">VTK</a> . VTK is used to directly write data in vtk format, which is readable by <a class="reference external" href="https://www.paraview.org/">ParaView</a> . The minimum version is VTK 5.8, recommended is 6.3. On debian-based systems it is sufficient to run</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>sudo apt-get install libvtk6-dev
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>For manual VTK compilation, please read the <a class="reference internal" href="#additionalinstall"><em>additional installation hints</em></a> .</p>
|
||||
<p>The post-processing tool lpp requires the python numpy package.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>sudo apt-get install python-numpy
|
||||
</pre></div>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<p id="install-5"><strong>Setup and compile OpenFOAM®</strong></p>
|
||||
<p>You can follow the OpenFOAM® git compilation <a class="reference external" href="https://openfoam.org/download/source/">instructions</a> , with a small number of exceptions:
|
||||
CFDEM®coupling requires the WM_LABEL_SIZE=32 , which is the standard setting.</p>
|
||||
<p>On an Ubuntu system (14.04+), you can use the following steps to install OpenFOAM®:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>gedit ~/.bashrc
|
||||
add the following two lines in the end, where <NofProcs> is the integer number of the processors you want to compile with. Save and exit gedit.
|
||||
"export WM_NCOMPPROCS=<NofProcs>"
|
||||
"source $HOME/OpenFOAM/OpenFOAM-<OF-Release>/etc/bashrc"
|
||||
now again in the terminal:
|
||||
source ~/.bashrc
|
||||
cd $WM_PROJECT_DIR
|
||||
foamSystemCheck
|
||||
./Allwmake
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Additional OpenFOAM® installation hints can be found <a class="reference internal" href="#additionalinstall"><em>here</em></a> .</p>
|
||||
<hr class="docutils" />
|
||||
<p id="install-6"><strong>Set environment variables and paths</strong></p>
|
||||
<p>Typically the CFDEM®coupling folder is tagged with the OpenFOAM® version number. To do this, perform the following steps:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>cd $HOME/CFDEM
|
||||
mv CFDEMcoupling-PUBLIC CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You need to set some environment variables in ~/.bashrc (if you use c-shell, manipulate ~/.cshrc accordingly). Open your .bashrc and the CFDEM®coupling bashrc file.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>gedit ~/.bashrc $HOME/CFDEM/CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION/src/lagrangian/cfdemParticle/etc/bashrc
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Add the STANDARD block to the end of your bashrc and modify entries if necessary. Make sure the statements are not comments; remove the “#”. Similar to:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>#================================================#
|
||||
#- source cfdem env vars
|
||||
export CFDEM_VERSION=PUBLIC
|
||||
export CFDEM_PROJECT_DIR=$HOME/CFDEM/CFDEMcoupling-$CFDEM_VERSION-$WM_PROJECT_VERSION
|
||||
export CFDEM_PROJECT_USER_DIR=$HOME/CFDEM/$LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION
|
||||
export CFDEM_bashrc=$CFDEM_PROJECT_DIR/src/lagrangian/cfdemParticle/etc/bashrc
|
||||
export CFDEM_LIGGGHTS_SRC_DIR=$HOME/LIGGGHTS/LIGGGHTS-PUBLIC/src
|
||||
export CFDEM_LIGGGHTS_MAKEFILE_NAME=auto
|
||||
export CFDEM_LPP_DIR=$HOME/LIGGGHTS/lpp/src
|
||||
. $CFDEM_bashrc
|
||||
#================================================#
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You may insert the EXTENDED block above ”. $CFDEM_bashrc” for further customization.
|
||||
The detailed description for allowed entries can be found <a class="reference internal" href="#additionalinstall"><em>here</em></a> .</p>
|
||||
<p>To load and check the environment you can run now</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>source ~/.bashrc
|
||||
cfdemSysTest
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">Many useful aliases are set with sourcing of the CFDEMcoupling bashrc, e.g. cfdemEtc . Make use of them!</p>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<p id="install-7"><strong>Compile LIGGGHTS® and CFDEM®coupling</strong></p>
|
||||
<p>To compile CFDEM®project open a new terminal and run</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">cfdemCompCFDEMall</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>It compiles the LIGGGHTS® executable, LIGGGHTS® as a shared library, the CFDEM®coupling libraries, CFDEM®coupling solvers and CFDEM®coupling utilities. The compilation will stop, if build errors occur. Having a previous manually compiled LIGGGHTS® is not enough, it needs to be compiled as shared library with the cfdemCompLIG command.</p>
|
||||
<p>As step by step compilation of only specific parts, the following commands are available:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">cfdemCompLIG</span>
|
||||
<span class="n">cfdemCompCFDEMsrc</span>
|
||||
<span class="n">cfdemCompCFDEmsol</span>
|
||||
<span class="n">cfdenCompCFDEMuti</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The compilation is automatically logged and the logs can be found in:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/log
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>In case questions concerning the installation arise, please feel free to contact our forum at <a class="reference external" href="http://www.cfdem.com">www.cfdem.com</a> .</p>
|
||||
<hr class="docutils" />
|
||||
<p id="install-8"><strong>Run your own cases</strong></p>
|
||||
<p>If you want to run your own cases, please do so in <em>$CFDEM_PROJECT_USER_DIR/run</em> which is automatically being generated. E.g. copy one of the tutorial cases there, adapt it to your needs.
|
||||
Changes in $CFDEM_TUT_DIR might be lost after every <em>git stash</em>.</p>
|
||||
<p>You can run all the tutorial cases by executing the alias cfdemTestTUT.
|
||||
Alternatively you can run each tutorial using the <em>Allrun.sh</em> scripts in the tutorial directories.</p>
|
||||
<p>To run pure LIGGGHTS® cases, you can use the aliases</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>cfdemLiggghts inputScriptName
|
||||
cfdemLiggghtsPar inputScriptName nOfProcs
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or you can set a link in /usr/local/bin to the LIGGGHTS® executable as described in the <a class="reference external" href="https://www.cfdem.com/media/DEM/docu/Section_start.html#steps-to-build-a-liggghts-r-public-executable">LIGGGHTS®documentation</a> .</p>
|
||||
<hr class="docutils" />
|
||||
<p><strong>Backwards Compatibility:</strong></p>
|
||||
<p>Basically CFDEM®coupling supports one OpenFOAM® version therefore all settings are prepared for that. Nevertheless we try to maintain backwards compatibility as long as it works with reasonable effort.</p>
|
||||
<p>The supported OpenFOAM® and LIGGGHTS® versions are stated in:
|
||||
src/lagrangian/cfdemParticle/cfdTools/versionInfo.H</p>
|
||||
<p>For using other versions you can manipulate:
|
||||
src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
|
||||
(still not all functionality might work then!)</p>
|
||||
<hr class="docutils" />
|
||||
<p id="additionalinstall"><strong>Installation, additional information</strong></p>
|
||||
<hr class="docutils" />
|
||||
<p><strong>Procedure:</strong></p>
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#ainstall-4"><em>Setup prerequisites</em></a></li>
|
||||
<li><a class="reference internal" href="#ainstall-5"><em>Setup and compile OpenFOAM®</em></a></li>
|
||||
<li><a class="reference internal" href="#ainstall-6"><em>Set environment variables and paths</em></a></li>
|
||||
<li><a class="reference internal" href="#ainstall-7"><em>Compile LIGGGHTS® and CFDEM®coupling</em></a></li>
|
||||
<li><a class="reference internal" href="#ainstall-8"><em>Compiling OpenFOAM®, LIGGGHTS® and CFDEM®coupling in debug mode</em></a></li>
|
||||
</ul>
|
||||
<hr class="docutils" />
|
||||
<p id="ainstall-4"><strong>Setup prerequisites for CFDEM®project:</strong></p>
|
||||
<p>If you need to compile VTK on your machine yourself, we recommend version 6.3, which is available <a class="reference external" href="http://www.vtk.org/files/release/6.3/VTK-6.3.0.zip">here</a> . The installation guide is available <a class="reference external" href="http://www.vtk.org/Wiki/VTK/Configure_and_Build#On_Unix-like_systems">here</a> .</p>
|
||||
<p>Please note the VTK components necessary need cmake, MPI and some X11 libraries on your machine. Compilation using ccmake is recommended. In the standard configuration MPI related packages are disabled. Enable Parallel / MPI packages during configuration. For VTK-6.3 set VTK_Group_MPI:BOOL=ON .</p>
|
||||
<hr class="docutils" />
|
||||
<p id="ainstall-5"><strong>Setup and compile OpenFOAM®</strong></p>
|
||||
<p>All mentions of OpenFOAM® refer to <a class="reference external" href="afootnotes">this</a> .</p>
|
||||
<p>Often problems arise configuring OpenFOAM® to work with a specific MPI installation on a cluster. However it has built-in capability to work with nearly any MPI implementation.
|
||||
Set the following variable in the OpenFOAM® bashrc:</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>export WM_MPLIB=SYSTEMMPI
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Defining the following variables in your ~/.bashrc BEFORE the sourcing of OpenFOAM® will take care of the rest. This is an example for older MVAPICH installations where there is no libmpi.so, only libmpich.so :</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre>export MPI_ROOT=<path/to/mpi/installation>
|
||||
export MPI_ARCH_PATH=$MPI_ROOT
|
||||
export MPI_ARCH_FLAGS="-DMPICH_SKIP_MPICXX"
|
||||
export MPI_ARCH_INC="-I$MPI_ARCH_PATH/include"
|
||||
export MPI_ARCH_LIBS='-L$(MPI_ARCH_PATH)/lib -lmpich -lmpichcxx -lmpl -lopa -lrt'
|
||||
</pre></div>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<p id="ainstall-6"><strong>Set environment variables and paths</strong></p>
|
||||
<p>Detailed description of the environment variables:</p>
|
||||
<p>standard block:</p>
|
||||
<table border="1" class="docutils">
|
||||
<colgroup>
|
||||
<col width="13%" />
|
||||
<col width="74%" />
|
||||
<col width="13%" />
|
||||
</colgroup>
|
||||
<tbody valign="top">
|
||||
<tr class="row-odd"><td>CFDEM_VERSION</td>
|
||||
<td>CFDEMcoupling branch name; e.g. PUBLIC</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_PROJECT_DIR</td>
|
||||
<td>path to the installation directory of CFDEM®coupling</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_PROJECT_USER_DIR</td>
|
||||
<td>path to the user directory; used to store users simulation cases and source-code</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_bashrc</td>
|
||||
<td>location of the CFDEM®coupling bashrc (or cshrc)</td>
|
||||
<td>which sets up the environment</td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_LIGGGHTS_SRC_DIR</td>
|
||||
<td>path to the LIGGGHTS src directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_LIGGGHTS_MAKEFILE_NAME</td>
|
||||
<td>Name of the LIGGGHTS® Makefile which defines how to compile LIGGGHTS®; more information on which Makefile to select is within the LIGGGHTS® documentation; standard is auto</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_LPP_DIR path</td>
|
||||
<td>to the src directory of the local lpp installation</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>extended block may be inserted above ”. $CFDEM_bashrc”:</p>
|
||||
<table border="1" class="docutils">
|
||||
<colgroup>
|
||||
<col width="13%" />
|
||||
<col width="64%" />
|
||||
<col width="23%" />
|
||||
</colgroup>
|
||||
<tbody valign="top">
|
||||
<tr class="row-odd"><td>CFDEM_SRC_DIR</td>
|
||||
<td>can be used to use alternative src directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_SOLVER_DIR</td>
|
||||
<td>can be used to use alternative solver directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_DOC_DIR</td>
|
||||
<td>can be used to use alternative doc directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_UT_DIR</td>
|
||||
<td>can be used to use alternative utilities directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_TUT_DIR</td>
|
||||
<td>can be used to use alternative tutorials directory</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_LIGGGHTS_MAKEFILE_POSTIFX</td>
|
||||
<td>if you wish to compile LIGGGHTS® to CFDEM®coupling with a postfix auto Makefile; for more information on postfixes please read the LIGGGHTS® documentation</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_VERBOSE</td>
|
||||
<td>if set to false</td>
|
||||
<td>standard output of environment variables is suppressed</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr class="docutils" />
|
||||
<p>additionalLibs:</p>
|
||||
<p>The additionalLibs are used as a centralized system for adding libraries and paths to CFDEM®coupling compilations. There is and automated detection of your OpenFOAM® version, which should select the proper additionalLibs file.
|
||||
If the automated selection of the additionalLibs fails or if you wish to set it manually to a specific file, you may set the following environment variables above ”. $CFDEM_bashrc”:</p>
|
||||
<table border="1" class="docutils">
|
||||
<colgroup>
|
||||
<col width="28%" />
|
||||
<col width="72%" />
|
||||
</colgroup>
|
||||
<tbody valign="top">
|
||||
<tr class="row-odd"><td>CFDEM_ADD_LIBS_DIR</td>
|
||||
<td>path containing the user-defined additionalLibs file</td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_ADD_LIBS_NAME</td>
|
||||
<td>filename of the user-defined additionalLibs file</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>even further customization with variables:</p>
|
||||
<table border="1" class="docutils">
|
||||
<colgroup>
|
||||
<col width="14%" />
|
||||
<col width="86%" />
|
||||
</colgroup>
|
||||
<tbody valign="top">
|
||||
<tr class="row-odd"><td>CFDEM_LAMMPS_LIB_DIR</td>
|
||||
<td>alternative path to LIGGGHTS® lib folder containing additional LIGGGHTS® packages; e.g. ASPHERE</td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_LIGGGHTS_LIB_PATH</td>
|
||||
<td>path to compiled LIGGGHTS® library; useful if the compiled LIGGGHTS® library has manually been moved from the LIGGGHTS® src path to an alternative location</td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_LIB_DIR</td>
|
||||
<td>alternative target directory for CFDEM®coupling libraries</td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_USER_LIB_DIR</td>
|
||||
<td>alternative target directory for CFDEM®coupling user-libraries</td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td>CFDEM_APP_DIR</td>
|
||||
<td>alternative target directory for CFDEMcoupling executables</td>
|
||||
</tr>
|
||||
<tr class="row-even"><td>CFDEM_USER_APP_DIR</td>
|
||||
<td>alternative target directory for CFDEM®coupling user-executables</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr class="docutils" />
|
||||
<p id="ainstall-7"><strong>Compile LIGGGHTS® and CFDEM®coupling</strong></p>
|
||||
<p>LIGGGHTS® needs to be compiled as library with the cfdemCompLIG command. You can compile LIGGGHTS® manually as a shared library with “make -f Makefile.shlib <Makefilename>” within your LIGGGHTS® src directory.
|
||||
LIGGGHTS® is included into CFDEM®coupling by the creation of a symbolic link in $CFDEM_LIB_DIR to the LIGGGHTS shared library. This link is automatically created during the compilation of the CFDEM®coupling lagrangian library at the beginning of the make phase. This means even if you compile the lagrangian library manually with “wmake libso”, the link is created.</p>
|
||||
<hr class="docutils" />
|
||||
<p id="ainstall-8"><strong>Compiling OpenFOAM®, LIGGGHTS® and CFDEM®coupling in debug mode</strong></p>
|
||||
<p>Set the WM_COMPILE_OPTION parameter in the OF bashrc to “Debug” and compile OF with the Allwmake script.
|
||||
If you are using the LIGGGHTS® auto Makefile, simply compile LIGGGHTS® and CFDEM®coupling with “cfdemCompCFDEMall”. CFDEM®coupling detects the OpenFOAM® variable compiles LIGGGHTS® in debug mode. The coupling itself is compiled with OpenFOAM®s wmake, so this is automatically taken care of.
|
||||
If you aren’t using the auto Makefile, you need to make sure the “-O0 -g” or “-O2 -g” compilation parameters are set properly within the LIGGGHTS®-Makefile.</p>
|
||||
<hr class="docutils" />
|
||||
<p id="footnotes"><strong>Footnotes:</strong></p>
|
||||
<p>OPENFOAM® is a registered trade mark of OpenCFD Limited, producer and distributor of the OpenFOAM software via wwww.openfoam.com.</p>
|
||||
<hr class="docutils" />
|
||||
</div>
|
||||
<div class="section" id="tutorials">
|
||||
<span id="id3"></span><h3>Tutorials<a class="headerlink" href="#tutorials" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>General:</strong></p>
|
||||
<p>Each solver of the CFDEMcoupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via “Allrun.sh” shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).</p>
|
||||
<p>Each solver of the CFDEM®coupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via “Allrun.sh” shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).</p>
|
||||
<p><strong>Location:</strong></p>
|
||||
<p>The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials, which can be reached by typing “cfdemTut”</p>
|
||||
<p><strong>Structure:</strong></p>
|
||||
<p>Each case is structured in a directory called “CFD” covering the CFD relevant settings and data, and a dirctory called “DEM” covering the DEM relevant settings and data. This allows to easily expand a pure CFD or DEM simulation case to a coupled case.</p>
|
||||
<p><strong>Usage:</strong></p>
|
||||
<p>Provided that the installation is correct, the tutorials can be run via “Allrun.sh” shell script, executed by typing ”./Allrun.sh”. The successful run of the script might need some third party software (e.g. octave, evince, etc.).</p>
|
||||
<p>A typical Allrun.sh script executes the following steps:</p>
|
||||
<ul class="simple">
|
||||
<li>DEM: LIGGGHTS init run</li>
|
||||
<li>CFD: mesh generation (blockMesh)</li>
|
||||
<li>CFD: mesh decomposition (decomposePar)</li>
|
||||
<li>CFDEM: parallel CFDEM run; mpirun -np X cfdemSolverXXX -parallel</li>
|
||||
<li>post-processing</li>
|
||||
</ul>
|
||||
<p><strong>Settings:</strong></p>
|
||||
<p>The main settings of a simulation are done via dictionaries:</p>
|
||||
<p>The DEM setup of each case is defined by a <a class="reference external" href="http://www.cfdem.com">LIGGGHTS</a> input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the <a class="reference external" href="http://www.cfdem.com">LIGGGHTS</a> setup, please have a look at the <a class="reference external" href="http://www.cfdem.com">LIGGGHTS</a> manual.</p>
|
||||
<p>Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). You can find more information on that in <a class="reference external" href="http://www.openfoam.com">OpenFOAM(R)(*)</a> documentations (www.openFoam.com)(*).</p>
|
||||
<p>Settings of the coupling routines are defined in $caseDir/CFD/constant/<a class="reference internal" href="#id3"><em>couplingProperies</em></a> (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/<a class="reference internal" href="#id3"><em>liggghtsCommands</em></a> (allows to execute a LIGGGHTS command during a coupled simulation).</p>
|
||||
<p>The DEM setup of each case is defined by a <a class="reference external" href="https://www.cfdem.com/liggghtsr-open-source-discrete-element-method-particle-simulation-code">LIGGGHTS®</a> input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the <a class="reference external" href="https://www.cfdem.com/liggghtsr-open-source-discrete-element-method-particle-simulation-code">LIGGGHTS®</a> setup, please have a look at the <a class="reference external" href="https://www.cfdem.com/liggghtsr-open-source-discrete-element-method-particle-simulation-code">LIGGGHTS®</a> manual.</p>
|
||||
<p>Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). For settings related to the solver such as discretization schemes, solution settings for the equations and solver control (e.g. corrector or non-orthogonal corrector steps for non-orthogonal meshes) you can find more information in <a class="reference external" href="http://www.openfoam.com">OpenFOAM®(*)</a> documentations (www.openFoam.com)(*).</p>
|
||||
<p>Settings of the coupling routines are defined in $caseDir/CFD/constant/<a class="reference internal" href="#id4"><em>couplingProperies</em></a> (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/<a class="reference internal" href="#id5"><em>liggghtsCommands</em></a> (allows to execute a LIGGGHTS® command during a coupled simulation).</p>
|
||||
<hr class="docutils" />
|
||||
</div>
|
||||
<div class="section" id="couplingproperties-dictionary">
|
||||
@ -217,15 +591,18 @@ In order to get the latest code version, please use the git repository at <a cla
|
||||
<p>The dictionary is divided into two parts, “sub-models & settings” and “sub-model properties”.</p>
|
||||
<p>In “sub-models & settings” the following routines must be specified:</p>
|
||||
<ul class="simple">
|
||||
<li>solveFlow</li>
|
||||
<li>modelType</li>
|
||||
<li>couplingInterval</li>
|
||||
<li>voidFractionModel</li>
|
||||
<li>locateModel</li>
|
||||
<li>meshMotionModel</li>
|
||||
<li>regionModel</li>
|
||||
<li>IOModel</li>
|
||||
<li>probeModel</li>
|
||||
<li>dataExchangeModel</li>
|
||||
<li>averagingModel</li>
|
||||
<li>clockModel</li>
|
||||
<li>smoothingModel</li>
|
||||
<li>forceModels</li>
|
||||
<li>momCoupleModels</li>
|
||||
<li>turbulenceModelType</li>
|
||||
@ -233,25 +610,34 @@ In order to get the latest code version, please use the git repository at <a cla
|
||||
<p>In “sub-model properties” sub-dictionaries might be defined to specify model specific parameters.</p>
|
||||
<p><strong>Settings:</strong></p>
|
||||
<p>Reasonable example settings for the “couplingProperties” dictionary are given in the tutorial cases.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">solveFlow</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The solveFlow switch determines, whether the fluid equations are solved or not. By setting solveFlow to false, the fluid solver becomes inactive.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">modelType</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<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>“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, “A” refers to model type II and “B” refers to type III in the nomenclature used by Zhou et al.</p>
|
||||
<div class="highlight-python"><div class="highlight"><pre><span class="n">couplingInterval</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The coupling interval determines the time passing between two CFD-DEM data exchanges.</p>
|
||||
<p>A useful procedure would be:
|
||||
1) Set the DEM timestep in the in.xxx file according to the needs of the pure DEM problem.
|
||||
2) Set the “couplingInterval”, which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling.
|
||||
3) Choose the CFD timestep in the controlDict. It must be equal to or smaller than the coupling time, otherwise you will get the error: “Error - TS bigger than coupling interval!”.</p>
|
||||
<p>Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s.</p>
|
||||
<p>A useful procedure would be:</p>
|
||||
<ol class="arabic simple">
|
||||
<li>Set the DEM timestep in the in.xxx file according to the needs of the pure DEM problem.</li>
|
||||
<li>Set the “couplingInterval”, which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling.</li>
|
||||
<li>Choose the CFD timestep in the controlDict. It must be equal to or smaller than the coupling time, otherwise you will get the error: “Error - TS bigger than coupling interval!”.</li>
|
||||
<li>To ensure a synchronous run, the coupling time should be a multiple of the CFD timestep, or you’ll get a warning “Warning - Coupling time (= DEM time step * coupling interval) is not a multiple of CFD time-step!”</li>
|
||||
</ol>
|
||||
<p>Example: DEMts=1.0e-5s, couplingInterval=10 exchange data (=couple) will happen every 1.0e-4s.</p>
|
||||
<hr class="docutils" />
|
||||
</div>
|
||||
<div class="section" id="liggghtscommands-dictionary">
|
||||
<span id="id5"></span><h3>“liggghtsCommands” dictionary<a class="headerlink" href="#liggghtscommands-dictionary" title="Permalink to this headline">¶</a></h3>
|
||||
<p><strong>General:</strong></p>
|
||||
<p>In the “liggghtsCommands” dictionary liggghts commands being executed during a coupled CFD-DEM simulation are specified.</p>
|
||||
<p>In the “liggghtsCommands” dictionary LIGGGHTS® commands being executed during a coupled CFD-DEM simulation are specified.
|
||||
The most important command is the “run” command. After the start-up read of the LIGGGHTS®-input-script it is fed by CFDEM®coupling
|
||||
with commands. User-defined commands may be added.</p>
|
||||
<p><strong>Location:</strong> $caseDir/CFD/constant</p>
|
||||
<p><strong>Structure:</strong></p>
|
||||
<p>The dictionary is divided into two parts, first a list of “liggghtsCommandModels” is defined, then the settings for each model must be specified.</p>
|
||||
@ -284,11 +670,17 @@ listing below of styles within certain commands.</p>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="cfdemSolverIB.html"><em>cfdemSolverIB</em></a></td>
|
||||
<td><a class="reference internal" href="cfdemSolverPiso.html"><em>cfdemSolverPiso</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="cfdemSolverPisoScalar.html"><em>cfdemSolverPisoScalar</em></a></td>
|
||||
<td><a class="reference internal" href="clockModel.html"><em>clockModel</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="cfdemSolverPisoSTM.html"><em>cfdemSolverPisoSTM</em></a></td>
|
||||
<td><a class="reference internal" href="cfdemSolverPisoScalar.html"><em>cfdemSolverPisoScalar</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="clockModel_noClock.html"><em>clockModel_noClock</em></a></td>
|
||||
<td><a class="reference internal" href="clockModel_standardClock.html"><em>clockModel_standardClock</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="clockModel.html"><em>clockModel</em></a></td>
|
||||
<td><a class="reference internal" href="clockModel_noClock.html"><em>clockModel_noClock</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="clockModel_standardClock.html"><em>clockModel_standardClock</em></a></td>
|
||||
<td><a class="reference internal" href="fix_couple_cfd.html"><em>couple/cfd</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="fix_couple_cfd_force.html"><em>couple/cfd/force</em></a></td>
|
||||
<td><a class="reference internal" href="fix_couple_cfd_force_implicit.html"><em>couple/cfd/force/implicit</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="dataExchangeModel.html"><em>dataExchangeModel</em></a></td>
|
||||
<td><a class="reference internal" href="dataExchangeModel_noDataExchange.html"><em>dataExchangeModel_noDataExchange</em></a></td>
|
||||
@ -332,38 +724,38 @@ listing below of styles within certain commands.</p>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="forceSubModel.html"><em>forceSubModel</em></a></td>
|
||||
<td><a class="reference internal" href="forceSubModel_ImEx.html"><em>forceSubModel_ImEx</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="liggghtsCommandModel.html"><em>liggghtsCommandModel</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel_execute.html"><em>liggghtsCommandModel_execute</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="fvOptions_meanSupVelocityForce.html"><em>fvOptions_meanSupVelocityForce</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel.html"><em>liggghtsCommandModel</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="liggghtsCommandModel_readLiggghtsData.html"><em>liggghtsCommandModel_readLiggghtsData</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel_runLiggghts.html"><em>liggghtsCommandModel_runLiggghts</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="liggghtsCommandModel_execute.html"><em>liggghtsCommandModel_execute</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel_readLiggghtsData.html"><em>liggghtsCommandModel_readLiggghtsData</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="liggghtsCommandModel_setDEMGravity.html"><em>liggghtsCommandModel_setDEMGravity</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel_writeLiggghts.html"><em>liggghtsCommandModel_writeLiggghts</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="liggghtsCommandModel_runLiggghts.html"><em>liggghtsCommandModel_runLiggghts</em></a></td>
|
||||
<td><a class="reference internal" href="liggghtsCommandModel_setDEMGravity.html"><em>liggghtsCommandModel_setDEMGravity</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="locateModel.html"><em>locateModel</em></a></td>
|
||||
<td><a class="reference internal" href="locateModel_engineSearch.html"><em>locateModel_engineSearch</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="liggghtsCommandModel_writeLiggghts.html"><em>liggghtsCommandModel_writeLiggghts</em></a></td>
|
||||
<td><a class="reference internal" href="locateModel.html"><em>locateModel</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="locateModel_engineSearchIB.html"><em>locateModel_engineSearchIB</em></a></td>
|
||||
<td><a class="reference internal" href="locateModel_standardSearch.html"><em>locateModel_standardSearch</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="locateModel_engineSearch.html"><em>locateModel_engineSearch</em></a></td>
|
||||
<td><a class="reference internal" href="locateModel_engineSearchIB.html"><em>locateModel_engineSearchIB</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="meshMotionModel.html"><em>meshMotionModel</em></a></td>
|
||||
<td><a class="reference internal" href="meshMotionModel_noMeshMotion.html"><em>meshMotionModel_noMeshMotion</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="locateModel_standardSearch.html"><em>locateModel_standardSearch</em></a></td>
|
||||
<td><a class="reference internal" href="meshMotionModel.html"><em>meshMotionModel</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="momCoupleModel.html"><em>momCoupleModel</em></a></td>
|
||||
<td><a class="reference internal" href="momCoupleModel_explicitCouple.html"><em>momCoupleModel_explicitCouple</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="meshMotionModel_noMeshMotion.html"><em>meshMotionModel_noMeshMotion</em></a></td>
|
||||
<td><a class="reference internal" href="momCoupleModel.html"><em>momCoupleModel</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="momCoupleModel_implicitCouple.html"><em>momCoupleModel_implicitCouple</em></a></td>
|
||||
<td><a class="reference internal" href="momCoupleModel_noCouple.html"><em>momCoupleModel_noCouple</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="momCoupleModel_explicitCouple.html"><em>momCoupleModel_explicitCouple</em></a></td>
|
||||
<td><a class="reference internal" href="momCoupleModel_implicitCouple.html"><em>momCoupleModel_implicitCouple</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="probeModel.html"><em>probeModel</em></a></td>
|
||||
<td><a class="reference internal" href="probeModel_noProbe.html"><em>probeModel_noProbe</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="momCoupleModel_noCouple.html"><em>momCoupleModel_noCouple</em></a></td>
|
||||
<td><a class="reference internal" href="probeModel.html"><em>probeModel</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="probeModel_particleProbe.html"><em>probeModel_particleProbe</em></a></td>
|
||||
<td><a class="reference internal" href="regionModel.html"><em>regionModel</em></a></td>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="probeModel_noProbe.html"><em>probeModel_noProbe</em></a></td>
|
||||
<td><a class="reference internal" href="probeModel_particleProbe.html"><em>probeModel_particleProbe</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><a class="reference internal" href="regionModel_allRegion.html"><em>regionModel_allRegion</em></a></td>
|
||||
<td><a class="reference internal" href="scalarTransportModel.html"><em>scalarTransportModel</em></a></td>
|
||||
<tr class="row-even"><td><a class="reference internal" href="scalarTransportModel.html"><em>scalarTransportModel</em></a></td>
|
||||
<td><a class="reference internal" href="scalarTransportModel_generalManual.html"><em>scalarTransportModel_generalManual</em></a></td>
|
||||
</tr>
|
||||
<tr class="row-odd"><td><a class="reference internal" href="smoothingModel.html"><em>smoothingModel</em></a></td>
|
||||
<td><a class="reference internal" href="smoothingModel_constDiffSmoothing.html"><em>smoothingModel_constDiffSmoothing</em></a></td>
|
||||
|
||||
9
doc/_build/html/IOModel.html
vendored
@ -150,11 +150,14 @@
|
||||
<div class="section" id="examples">
|
||||
<h2>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h2>
|
||||
<p>IOModel “off”;</p>
|
||||
<p>Note: This examples list might not be complete - please look for other models (IOModel_XY) in this documentation.</p>
|
||||
<div class="admonition note">
|
||||
<p class="first admonition-title">Note</p>
|
||||
<p class="last">This examples list might not be complete - please look for other models (IOModel_XY) in this documentation.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="description">
|
||||
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The IO-model is the base class to write data (e.g. particle properties) to files.</p>
|
||||
<p>The IO-model is the base class to write data (e.g. particle properties) to files within the CFD file-structure.</p>
|
||||
</div>
|
||||
<div class="section" id="restrictions">
|
||||
<h2>Restrictions<a class="headerlink" href="#restrictions" title="Permalink to this headline">¶</a></h2>
|
||||
@ -162,7 +165,7 @@
|
||||
</div>
|
||||
<div class="section" id="related-commands">
|
||||
<h2>Related commands<a class="headerlink" href="#related-commands" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Note: This examples list may be incomplete - please look for other models (IOModel_XY) in this documentation.</p>
|
||||
<p><a class="reference internal" href="IOModel_basicIO.html"><em>basicIO</em></a>, <a class="reference internal" href="IOModel_noIO.html"><em>noIO</em></a>, <a class="reference internal" href="IOModel_sophIO.html"><em>sophIO</em></a>, <a class="reference internal" href="IOModel_trackIO.html"><em>trackIO</em></a></p>
|
||||
<p><strong>Default:</strong> none.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
2
doc/_build/html/IOModel_trackIO.html
vendored
@ -152,7 +152,7 @@
|
||||
</div>
|
||||
<div class="section" id="description">
|
||||
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The trackIO-model is based on sophIO model and additionally writes fields necessary to use the particleTracks utility (which needs a particleTrackProperties file in the constant dir). The particleTracks utility generates tracks of the particles and writes them to a vtk file.</p>
|
||||
<p>The trackIO-model writes in addition to basicIO fields the particleID from LIGGGHTS. This id can be used with Paraviews TemporalParticlesToPathlines filter to generate particle path-lines in post-processing.</p>
|
||||
</div>
|
||||
<div class="section" id="restrictions">
|
||||
<h2>Restrictions<a class="headerlink" href="#restrictions" title="Permalink to this headline">¶</a></h2>
|
||||
|
||||
BIN
doc/_build/html/_downloads/yi_jing_01_chien.jpg
vendored
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
doc/_build/html/_images/Ksl.png
vendored
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
doc/_build/html/_images/NavierStokesLiquSoli.png
vendored
Normal file
|
After Width: | Height: | Size: 7.0 KiB |