diff --git a/README b/README
deleted file mode 100755
index fd2ca75..0000000
--- a/README
+++ /dev/null
@@ -1,81 +0,0 @@
-/*---------------------------------------------------------------------------*\
- CFDEMcoupling - Open Source CFD-DEM coupling
-
- CFDEMcoupling is part of the CFDEMproject
- www.cfdem.com
- Christoph Goniva, christoph.goniva@cfdem.com
- Copyright 2009-2012 JKU Linz
- Copyright 2012- DCS Computing GmbH, Linz
--------------------------------------------------------------------------------
-License
- This file is part of CFDEMcoupling.
-
- CFDEMcoupling is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3 of the License, or (at your
- option) any later version.
-
- CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with CFDEMcoupling; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Description
- This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
- and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER).
-\*---------------------------------------------------------------------------*/
-
-
-CFDEM coupling provides an open source parallel coupled CFD-DEM framework
-combining the strengths of LIGGGHTS DEM code and the Open Source
-CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand
-standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM
-code LIGGGHTS. In this toolbox the particle representation within the
-CFD solver is organized by "cloud" classes. Key functionalities are organised
-in sub-models (e.g. force models, data exchange models, etc.) which can easily
-be selected and combined by dictionary settings.
-
-The coupled solvers run fully parallel on distributed-memory clusters.
-
-Features are:
-
-- its modular approach allows users to easily implement new models
-- its MPI parallelization enables to use it for large scale problems
-- the "forum"_lws on CFD-DEM gives the possibility to exchange with other
- users / developers
-- the use of GIT allows to easily update to the latest version
-- basic documentation is provided
-
-The file structure:
-
-- "src" directory including the source files of the coupling toolbox and models
-- "applications" directory including the solver files for coupled CFD-DEM simulations
-- "doc" directory including the documentation of CFDEMcoupling
-- "tutorials" directory including basic tutorial cases showing the functionality
-
-
-
-Details on installation are given on the "www.cfdem.com"
-
-The functionality of this CFD-DEM framwork is described via "tutorial cases" showing
-how to use different solvers and models.
-
-CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -
-Discrete Element Method (DEM) coupling.
-
-CFDEMcoupling is an open-source code, distributed freely under the terms of the
-GNU Public License (GPL).
-
-Core development of CFDEMcoupling is done by
-Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
-
-
-\*---------------------------------------------------------------------------*/
-(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group.
-This offering is not affiliated, approved or endorsed by ESI Group,
-the producer of the OpenFOAMĀ® software and owner of the OpenFOAMĀ® trade mark.
-\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
index 2df2a46..93f0d41 100755
--- a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
+++ b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
@@ -130,9 +130,12 @@ int main(int argc, char *argv[])
volScalarField rUA = 1.0/UEqn.A();
U = rUA*UEqn.H();
+ #ifdef version23
+ phi = (fvc::interpolate(U) & mesh.Sf()); // there is a new version in 23x
+ #else
phi = (fvc::interpolate(U) & mesh.Sf())
+ fvc::ddtPhiCorr(rUA, U, phi);
-
+ #endif
adjustPhi(phi, U, p);
#if defined(version22)
diff --git a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
index 73c97d6..c07ca22 100644
--- a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
+++ b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C
@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
particleCloud.evolve(voidfraction,Us,U);
-
+
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
particleCloud.smoothingM().smoothen(Ksl);
@@ -83,95 +83,103 @@ int main(int argc, char *argv[])
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
- // Pressure-velocity PISO corrector
+
+ if(particleCloud.solveFlow())
{
- // Momentum predictor
- fvVectorMatrix UEqn
- (
- fvm::ddt(voidfraction,U) //particleCloud.ddtVoidfractionU(U,voidfraction) //
- + fvm::div(phi, U)
-// + turbulence->divDevReff(U)
- + particleCloud.divVoidfractionTau(U, voidfraction)
- ==
- - fvm::Sp(Ksl/rho,U)
- );
-
- if (modelType=="B")
- UEqn == - fvc::grad(p) + Ksl/rho*Us;
- else
- UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us;
-
- UEqn.relax();
-
- if (momentumPredictor)
- solve(UEqn);
-
- // --- PISO loop
-
- //for (int corr=0; corrdivDevReff(U)
+ + particleCloud.divVoidfractionTau(U, voidfraction)
+ ==
+ - fvm::Sp(Ksl/rho,U)
+ );
if (modelType=="B")
- U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
+ UEqn == - fvc::grad(p) + Ksl/rho*Us;
else
- U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
+ UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us;
- U.correctBoundaryConditions();
+ UEqn.relax();
- } // end piso loop
+ if (momentumPredictor)
+ solve(UEqn);
+
+ // --- PISO loop
+
+ //for (int corr=0; corrcorrect();
+ }// end solveFlow
+ else
+ {
+ Info << "skipping flow solution." << endl;
}
- turbulence->correct();
-
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
diff --git a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C
index af3134d..ac01594 100644
--- a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C
+++ b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C
@@ -133,8 +133,12 @@ int main(int argc, char *argv[])
U = rUA*UEqn.H();
+ #ifdef version23
+ phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() );
+ #else
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi);
+ #endif
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
if (modelType=="A")
diff --git a/doc/CFDEMcoupling_Manual.html b/doc/CFDEMcoupling_Manual.html
index 54ca18f..4bce9e4 100644
--- a/doc/CFDEMcoupling_Manual.html
+++ b/doc/CFDEMcoupling_Manual.html
@@ -21,7 +21,7 @@
1. Contents
-The CFDEMcoupling documentation is organized into the following sections. If you find errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so we can improve the CFDEMcoupling documentation.
+
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.2 Installation
@@ -63,11 +63,11 @@
Details on installation are given on the CFDEMproject WWW Site .
-The functionality of this CFD-DEM framwork is described via tutorial cases showing how to use different solvers and models.
+The functionality of this CFD-DEM framework is described via tutorial cases showing how to use different solvers and models.
CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.
-CFDEMcoupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).
+
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
@@ -90,7 +90,7 @@ In order to get the latest code version, please use the git repository at http:/
General:
-Each solver of the CFDEMcoupling is comes with at least one tutorial example, showing its functionality and correct useage. 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).
+
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:
@@ -108,7 +108,7 @@ In order to get the latest code version, please use the git repository at http:/
The main settings of a simulation are done via dictionaries:
-The DEM setup of each case is defined by a LIGGGHTS input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the LIGGGHTS setup, please have a look in the LIGGGHTS manual.
+
The DEM setup of each case is defined by a LIGGGHTS input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the LIGGGHTS setup, please have a look at the LIGGGHTS 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)(*) documentations (www.openFoam.com)(*).
@@ -164,16 +164,16 @@ In order to get the latest code version, please use the git repository at http:/
modelType
-"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their appliccability", JFM. "A" requres the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes".
+
"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes".
couplingInterval
-The coupling interval determines the time passing between two CFD-DEM data exchanges.
+
The coupling interval determines the time passing between two CFD-DEM data exchanges.
A useful procedure would be:
-1) Set the DEM TS in the in.xxx according to the needs of the pure DEM problem.
+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 or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!".
+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.
diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf
index baf9be4..822b8c2 100644
Binary files a/doc/CFDEMcoupling_Manual.pdf and b/doc/CFDEMcoupling_Manual.pdf differ
diff --git a/doc/CFDEMcoupling_Manual.txt b/doc/CFDEMcoupling_Manual.txt
index 655f96f..65da209 100644
--- a/doc/CFDEMcoupling_Manual.txt
+++ b/doc/CFDEMcoupling_Manual.txt
@@ -12,7 +12,7 @@ CFDEMcoupling Documentation :h2,c
:line
1. Contents :h3
-The CFDEMcoupling documentation is organized into the following sections. If you find errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so we can improve the CFDEMcoupling documentation.
+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
@@ -45,11 +45,11 @@ The file structure:
:ule
Details on installation are given on the "CFDEMproject WWW Site"_lws .
-The functionality of this CFD-DEM framwork is described via "tutorial cases"_#_1_2 showing how to use different solvers and models.
+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).
+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
@@ -71,7 +71,7 @@ In order to get the latest code version, please use the git repository at http:/
[General:]
-Each solver of the CFDEMcoupling is comes with at least one tutorial example, showing its functionality and correct useage. 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).
+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:]
@@ -89,7 +89,7 @@ Provided that the installation is correct, the tutorials can be run via "Allrun.
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 in the "LIGGGHTS"_lig manual.
+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)(*).
@@ -133,16 +133,16 @@ Reasonable example settings for the "couplingProperties" dictionary are given in
modelType :pre
-"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their appliccability", JFM. "A" requres the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes".
+"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes".
couplingInterval :pre
-The coupling interval determines the time passing between two CFD-DEM data exchanges.
+The coupling interval determines the time passing between two CFD-DEM data exchanges.
A useful procedure would be:
-1) Set the DEM TS in the in.xxx according to the needs of the pure DEM problem.
+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 or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!".
+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.
diff --git a/doc/IOModel_basicIO.html b/doc/IOModel_basicIO.html
index 3d8ff29..8152c9e 100644
--- a/doc/IOModel_basicIO.html
+++ b/doc/IOModel_basicIO.html
@@ -21,7 +21,7 @@
Description:
-The basic IO-model writes particle positions velocities and radii to files. The default output directory ($casePath/CFD/proc*/time/lagrangian). Using the ceyword "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.
+
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.
diff --git a/doc/IOModel_basicIO.txt b/doc/IOModel_basicIO.txt
index d73c516..98daa37 100644
--- a/doc/IOModel_basicIO.txt
+++ b/doc/IOModel_basicIO.txt
@@ -19,7 +19,7 @@ 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 ceyword "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.
+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.
diff --git a/doc/IOModel_trackIO.html b/doc/IOModel_trackIO.html
index 0d91e41..28d1e86 100644
--- a/doc/IOModel_trackIO.html
+++ b/doc/IOModel_trackIO.html
@@ -21,7 +21,7 @@
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 generats tracks of the particles and writes them to a vtk file.
+
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.
diff --git a/doc/IOModel_trackIO.txt b/doc/IOModel_trackIO.txt
index 7aa03e7..dff7906 100644
--- a/doc/IOModel_trackIO.txt
+++ b/doc/IOModel_trackIO.txt
@@ -19,7 +19,7 @@ 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 generats tracks of the particles and writes them to a vtk file.
+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.
diff --git a/doc/averagingModel.html b/doc/averagingModel.html
index ecc7def..5237b6d 100644
--- a/doc/averagingModel.html
+++ b/doc/averagingModel.html
@@ -22,7 +22,7 @@
averagingModel dense;
averagingModel dilute;
-Note: This examples list might not be complete - please look for other averagin models (averagingModel_XY) in this documentation.
+
Note: This examples list might not be complete - please look for other averaging models (averagingModel_XY) in this documentation.
Description:
diff --git a/doc/averagingModel.txt b/doc/averagingModel.txt
index 6ec694a..36c327e 100644
--- a/doc/averagingModel.txt
+++ b/doc/averagingModel.txt
@@ -20,7 +20,7 @@ model = name of averaging model to be applied :ul
averagingModel dense;
averagingModel dilute; :pre
-Note: This examples list might not be complete - please look for other averagin models (averagingModel_XY) in this documentation.
+Note: This examples list might not be complete - please look for other averaging models (averagingModel_XY) in this documentation.
[Description:]
diff --git a/doc/cfdemSolverIB.html b/doc/cfdemSolverIB.html
index c1850e5..556d244 100644
--- a/doc/cfdemSolverIB.html
+++ b/doc/cfdemSolverIB.html
@@ -14,7 +14,7 @@
"cfdemSolverIB" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework, for calculating
the dynamics between immersed bodies and the surrounding fluid. Being an implementation of an immersed boundary method it allows tackling problems where the body diameter exceeds the maximal size of a fluid cell. Using the toolbox of OpenFOAM(R)(*) the governing equations of the fluid are computed and the corrections of velocity and pressure field with respect to the body-movement information, gained from LIGGGHTS, are incorporated.
-Code of this solver contributions by Alice Hager, JKU.
+
Code of this solver contributions by Alice Hager, JKU.
Algorithm:
diff --git a/doc/cfdemSolverIB.txt b/doc/cfdemSolverIB.txt
index a3ed4d8..4bb7c2a 100644
--- a/doc/cfdemSolverIB.txt
+++ b/doc/cfdemSolverIB.txt
@@ -12,7 +12,7 @@ cfdemSolverIB command :h3
"cfdemSolverIB" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework, for calculating
the dynamics between immersed bodies and the surrounding fluid. Being an implementation of an immersed boundary method it allows tackling problems where the body diameter exceeds the maximal size of a fluid cell. Using the toolbox of OpenFOAM(R)(*) the governing equations of the fluid are computed and the corrections of velocity and pressure field with respect to the body-movement information, gained from LIGGGHTS, are incorporated.
-Code of this solver contributions by Alice Hager, JKU.
+Code of this solver contributions by Alice Hager, JKU.
[Algorithm:]
diff --git a/doc/cfdemSolverPiso.html b/doc/cfdemSolverPiso.html
index ebba4c7..dda4059 100644
--- a/doc/cfdemSolverPiso.html
+++ b/doc/cfdemSolverPiso.html
@@ -11,7 +11,7 @@
Description:
-"cfdemSolverPiso" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPiso" has additional functionality for a coupling to the DEM code "LIGGGHTS". The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS.
+
"cfdemSolverPiso" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying the PISO algorithm, "cfdemSolverPiso" has additional functionality for a coupling to the DEM code "LIGGGHTS". The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS.
see:
diff --git a/doc/cfdemSolverPiso.txt b/doc/cfdemSolverPiso.txt
index 551adae..3885699 100644
--- a/doc/cfdemSolverPiso.txt
+++ b/doc/cfdemSolverPiso.txt
@@ -9,7 +9,7 @@ cfdemSolverPiso command :h3
[Description:]
-"cfdemSolverPiso" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying PISO algorithm, "cfdemSolverPiso" has additional functionality for a coupling to the DEM code "LIGGGHTS". The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS.
+"cfdemSolverPiso" is a coupled CFD-DEM solver using CFDEMcoupling, an open source parallel coupled CFD-DEM framework. Based on pisoFoam(R)(*), a finite volume based solver for turbulent Navier-Stokes equations applying the PISO algorithm, "cfdemSolverPiso" has additional functionality for a coupling to the DEM code "LIGGGHTS". The volume averaged Navier-Stokes Equations are solved accounting for momentum exchange and volume displacement of discrete particles whose trajectories are calculated in the DEM code LIGGGHTS.
see:
diff --git a/doc/clockModel_standardClock.html b/doc/clockModel_standardClock.html
index b26c6c0..57ec9ee 100644
--- a/doc/clockModel_standardClock.html
+++ b/doc/clockModel_standardClock.html
@@ -22,7 +22,7 @@
Description:
The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt .
-Since the measurements are stored in an array, it is necessary to put a variable arrayPos (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If arrayPos is out of bounds, the array size will be doubled. The stop command does not need arrayPos, since the class remembers the positions. The string name is for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
+Since the measurements are stored in an array, it is necessary to put a variable arrayPos (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If arrayPos is out of bounds, the array size will be doubled. The stop command does not need arrayPos, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes.
Restrictions: none.
diff --git a/doc/clockModel_standardClock.txt b/doc/clockModel_standardClock.txt
index 117352d..30d675c 100644
--- a/doc/clockModel_standardClock.txt
+++ b/doc/clockModel_standardClock.txt
@@ -20,7 +20,7 @@ clockModel standardClock; :pre
[Description:]
The "standardClock" model is a basic clockModel model which measures the run time between every ".start(int arrayPos,string name)" and ".stop(string name)" statement placed in the code. If a ".start(name)" is called more than once (e.g. in a loop) the accumulated times are calculated. After the simulation has finished, the data is stored in $caseDir/CFD/clockData/$startTime/*.txt .
-Since the measurements are stored in an array, it is necessary to put a variable {arrayPos} (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If {arrayPos} is out of bounds, the array size will be doubled. The stop command does not need {arrayPos}, since the class remembers the positions. The string name is for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
+Since the measurements are stored in an array, it is necessary to put a variable {arrayPos} (type integer) at the start command. Those do not need to be in ascending order and positions may be omitted. The standard size of this array is 30 and can be changed at the initialization of the standardClock class. If {arrayPos} is out of bounds, the array size will be doubled. The stop command does not need {arrayPos}, since the class remembers the positions. The string name is intended for easier evaluation afterwards an may be omitted like ".start(int arrayPos)" and ".stop()". The command ".stop(string name)" is a safety feature, because if the name is not equal to the started name, output will be produced for information.
After the case ran you may use the matPlot.py script located in $CFDEM_UT_DIR/vizClock/ to produce a graphical output of your measurements. The usage is like 'python < matPlot.py' and you have to be in the directory of the desired time step, where there is a file called "timeEvalFull.txt", which contains averaged and maximum data with respect to the number of processes.
[Restrictions:] none.
diff --git a/doc/dataExchangeModel_oneWayVTK.html b/doc/dataExchangeModel_oneWayVTK.html
index 800af8e..def2619 100644
--- a/doc/dataExchangeModel_oneWayVTK.html
+++ b/doc/dataExchangeModel_oneWayVTK.html
@@ -28,7 +28,7 @@ oneWayVTKProps
filename = filename of the VTK file series
-number = maximum nuber of particles in DEM simulation
+number = maximum number of particles in DEM simulation
diff --git a/doc/dataExchangeModel_oneWayVTK.txt b/doc/dataExchangeModel_oneWayVTK.txt
index f3e0153..3cf6642 100644
--- a/doc/dataExchangeModel_oneWayVTK.txt
+++ b/doc/dataExchangeModel_oneWayVTK.txt
@@ -23,7 +23,7 @@ oneWayVTKProps
{timeStep} = time step size of stored DEM data :ulb,l
{path} = path to the VTK data files relative do simulation directory :l
{filename} = filename of the VTK file series :l
-{number} = maximum nuber of particles in DEM simulation :l
+{number} = maximum number of particles in DEM simulation :l
:ule
[Examples:]
diff --git a/doc/dataExchangeModel_twoWayFiles.html b/doc/dataExchangeModel_twoWayFiles.html
index 30a7233..46d2d89 100644
--- a/doc/dataExchangeModel_twoWayFiles.html
+++ b/doc/dataExchangeModel_twoWayFiles.html
@@ -22,7 +22,7 @@ twoWayFilesProps
- filename = filename of the VTK file series
-
- number = maximum nuber of particles in DEM simulation
+
- number = maximum number of particles in DEM simulation
@@ -41,7 +41,7 @@ twoWayFilesProps
Restrictions:
-Developed only for two processors, one for DEM and on for CFD run.
+
Developed only for two processors, one for DEM and one for CFD run.
Related commands:
diff --git a/doc/dataExchangeModel_twoWayFiles.txt b/doc/dataExchangeModel_twoWayFiles.txt
index 20c4d8d..cd31b16 100644
--- a/doc/dataExchangeModel_twoWayFiles.txt
+++ b/doc/dataExchangeModel_twoWayFiles.txt
@@ -19,7 +19,7 @@ twoWayFilesProps
\}; :pre
{filename} = filename of the VTK file series :ulb,l
-{number} = maximum nuber of particles in DEM simulation :l
+{number} = maximum number of particles in DEM simulation :l
:ule
[Examples:]
@@ -37,7 +37,7 @@ The data exchange model performs the data exchange between the DEM code and the
[Restrictions:]
-Developed only for two processors, one for DEM and on for CFD run.
+Developed only for two processors, one for DEM and one for CFD run.
[Related commands:]
diff --git a/doc/forceModel_ArchimedesIB.html b/doc/forceModel_ArchimedesIB.html
index df087d3..0146856 100644
--- a/doc/forceModel_ArchimedesIB.html
+++ b/doc/forceModel_ArchimedesIB.html
@@ -47,7 +47,7 @@ ArchimedesIBProps
Description:
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ArchimedesIB model is a model that calculates the ArchimedesIB' volumetric lift force stemming from density difference of fluid and particle. This model is especially suited for resolved CFD-DEM simulations where the particle is represented by immersed boundrary method.
+
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ArchimedesIB model is a model that calculates the ArchimedesIB' volumetric lift force stemming from density difference of fluid and particle. This model is especially suited for resolved CFD-DEM simulations where the particle is represented by immersed boundary method.
Restrictions:
diff --git a/doc/forceModel_ArchimedesIB.txt b/doc/forceModel_ArchimedesIB.txt
index 4b26bb3..b9aca33 100644
--- a/doc/forceModel_ArchimedesIB.txt
+++ b/doc/forceModel_ArchimedesIB.txt
@@ -42,7 +42,7 @@ ArchimedesIBProps
[Description:]
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ArchimedesIB model is a model that calculates the ArchimedesIB' volumetric lift force stemming from density difference of fluid and particle. This model is especially suited for resolved CFD-DEM simulations where the particle is represented by immersed boundrary method.
+The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ArchimedesIB model is a model that calculates the ArchimedesIB' volumetric lift force stemming from density difference of fluid and particle. This model is especially suited for resolved CFD-DEM simulations where the particle is represented by immersed boundary method.
[Restrictions:]
diff --git a/doc/forceModel_DiFeliceDrag.html b/doc/forceModel_DiFeliceDrag.html
index 1fe8dac..9b02164 100644
--- a/doc/forceModel_DiFeliceDrag.html
+++ b/doc/forceModel_DiFeliceDrag.html
@@ -28,7 +28,7 @@ DiFeliceDragProps
density = name of the finite volume gravity field
-interpolation = flag to use interolate interpolated voidfraction and velocity values (normally off)
+interpolation = flag to use interpolated voidfraction and velocity values (normally off)
diff --git a/doc/forceModel_DiFeliceDrag.txt b/doc/forceModel_DiFeliceDrag.txt
index b2e0c85..7180d17 100644
--- a/doc/forceModel_DiFeliceDrag.txt
+++ b/doc/forceModel_DiFeliceDrag.txt
@@ -24,7 +24,7 @@ DiFeliceDragProps
{U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
-{interpolation} = flag to use interolate interpolated voidfraction and velocity values (normally off) :l
+{interpolation} = flag to use interpolated voidfraction and velocity values (normally off) :l
:ule
[Examples:]
diff --git a/doc/forceModel_GidaspowDrag.html b/doc/forceModel_GidaspowDrag.html
index 197227a..0523427 100644
--- a/doc/forceModel_GidaspowDrag.html
+++ b/doc/forceModel_GidaspowDrag.html
@@ -21,15 +21,23 @@ GidaspowDragProps
{
velFieldName "U";
densityFieldName "density";
+ voidfractionFieldName "voidfraction";
phi "scalar";
+ interpolation;
+ implDEM;
};
- U = name of the finite volume fluid velocity field
- density = name of the finite volume gravity field
+
- voidfraction = name of the finite volume voidfraction field
+
- phi = drag correction factor (in doubt 1)
+
- interpolation = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
+
+implDEM = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
Examples:
@@ -42,11 +50,12 @@ GidaspowDragProps
{
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
}
Description:
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The GidaspowDrag model is a model that calculates the particle based drag force following the correlation of Gidaspow which is a combination of Egrun (1952) and Wen & Yu (1966) (see Zhu et al. (2007): "Discrete particle simulation of particulate systems: Theoretical developments" ,ChemEngScience).
+
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The GidaspowDrag model is a model that calculates the particle based drag force following the correlation of Gidaspow which is a combination of Ergun (1952) and Wen & Yu (1966) (see Zhu et al. (2007): "Discrete particle simulation of particulate systems: Theoretical developments", ChemEngScience).
Restrictions:
diff --git a/doc/forceModel_GidaspowDrag.txt b/doc/forceModel_GidaspowDrag.txt
index 9a5af51..8357170 100644
--- a/doc/forceModel_GidaspowDrag.txt
+++ b/doc/forceModel_GidaspowDrag.txt
@@ -19,12 +19,18 @@ GidaspowDragProps
\{
velFieldName "U";
densityFieldName "density";
+ voidfractionFieldName "voidfraction";
phi "scalar";
+ interpolation;
+ implDEM;
\}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
+{voidfraction} = name of the finite volume voidfraction field :l
{phi} = drag correction factor (in doubt 1) :l
+{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
+{implDEM} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
:ule
[Examples:]
@@ -37,11 +43,12 @@ GidaspowDragProps
\{
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
\} :pre
[Description:]
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The GidaspowDrag model is a model that calculates the particle based drag force following the correlation of Gidaspow which is a combination of Egrun (1952) and Wen & Yu (1966) (see Zhu et al. (2007): "Discrete particle simulation of particulate systems: Theoretical developments" ,ChemEngScience).
+The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The GidaspowDrag model is a model that calculates the particle based drag force following the correlation of Gidaspow which is a combination of Ergun (1952) and Wen & Yu (1966) (see Zhu et al. (2007): "Discrete particle simulation of particulate systems: Theoretical developments", ChemEngScience).
[Restrictions:]
diff --git a/doc/forceModel_KochHillDrag.html b/doc/forceModel_KochHillDrag.html
index 94857f5..db34b8a 100644
--- a/doc/forceModel_KochHillDrag.html
+++ b/doc/forceModel_KochHillDrag.html
@@ -23,6 +23,7 @@ KochHillDragProps
densityFieldName "density";
voidfractionFieldName "voidfraction";
interpolation;
+ implDEM;
};
- U = name of the finite volume fluid velocity field
@@ -31,10 +32,9 @@ KochHillDragProps
- voidfraction = name of the finite volume voidfraction field
-
- interpolation = flag to use interpolated voidfraction and fluid velocity values (normally off)
-
-
- implDEM = flag to use implicit formulation of drag on DEM side (normally off)
+
- interpolation = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
+implDEM = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
Examples:
@@ -52,7 +52,7 @@ KochHillDragProps
Description:
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The KochHillDrag model is a model that calculates the particle based drag force following the correlation of Koch & Hill (2001) (see van Buijtenen et al. (2011): "Numerical and experimental study on multiple-spout fluidized beds" ,ChemEngScience).
+
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The KochHillDrag model is a model that calculates the particle based drag force following the correlation of Koch & Hill (2001) (see van Buijtenen et al. (2011): "Numerical and experimental study on multiple-spout fluidized beds", ChemEngScience).
Restrictions:
diff --git a/doc/forceModel_KochHillDrag.txt b/doc/forceModel_KochHillDrag.txt
index 565c820..5a783fe 100644
--- a/doc/forceModel_KochHillDrag.txt
+++ b/doc/forceModel_KochHillDrag.txt
@@ -21,13 +21,14 @@ KochHillDragProps
densityFieldName "density";
voidfractionFieldName "voidfraction";
interpolation;
+ implDEM;
\}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
{voidfraction} = name of the finite volume voidfraction field :l
-{interpolation} = flag to use interpolated voidfraction and fluid velocity values (normally off) :l
-{implDEM} = flag to use implicit formulation of drag on DEM side (normally off) :l
+{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
+{implDEM} = (optional, normally off) flag to use implicit formulation of drag on DEM side:l
:ule
[Examples:]
@@ -45,7 +46,7 @@ KochHillDragProps
[Description:]
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The KochHillDrag model is a model that calculates the particle based drag force following the correlation of Koch & Hill (2001) (see van Buijtenen et al. (2011): "Numerical and experimental study on multiple-spout fluidized beds" ,ChemEngScience).
+The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The KochHillDrag model is a model that calculates the particle based drag force following the correlation of Koch & Hill (2001) (see van Buijtenen et al. (2011): "Numerical and experimental study on multiple-spout fluidized beds", ChemEngScience).
[Restrictions:]
diff --git a/doc/forceModel_LaEuScalarTemp.html b/doc/forceModel_LaEuScalarTemp.html
index 03f3cd3..c0075c9 100644
--- a/doc/forceModel_LaEuScalarTemp.html
+++ b/doc/forceModel_LaEuScalarTemp.html
@@ -28,6 +28,8 @@ LaEuScalarTempProps
lambda value;
Cp value1;
densityFieldName "density";
+ interpolation;
+ verbose;
};
- U = name of the finite volume fluid velocity field
@@ -48,6 +50,10 @@ LaEuScalarTempProps
- density = name of the finite volume fluid density field
+
- interpolation = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values
+
+
- verbose = (normally off) for verbose run
+
Examples:
@@ -71,7 +77,7 @@ LaEuScalarTempProps
Description:
-This "forceModel" does not influence the particles or the fluid flow! Using the particles' temperature a scalar field representing "particle-fluid heatflux" is calculated. The solver then uses this source field in the scalar transport equation for the temperature. The model for convective heat transfer is based on Li and Mason (2000), A computational investigation of transient heat transfer in pneumatic transport of granular particles, Pow.Tech 112
+
This "forceModel" does not influence the particles or the fluid flow! Using the particles' temperature a scalar field representing "particle-fluid heatflux" is calculated. The solver then uses this source field in the scalar transport equation for the temperature. The model for convective heat transfer is based on Li and Mason (2000), A computational investigation of transient heat transfer in pneumatic transport of granular particles, Pow.Tech 112
Restrictions:
diff --git a/doc/forceModel_LaEuScalarTemp.txt b/doc/forceModel_LaEuScalarTemp.txt
index 6c0daac..a2b8690 100644
--- a/doc/forceModel_LaEuScalarTemp.txt
+++ b/doc/forceModel_LaEuScalarTemp.txt
@@ -26,6 +26,8 @@ LaEuScalarTempProps
lambda value;
Cp value1;
densityFieldName "density";
+ interpolation;
+ verbose;
\}; :pre
{U} = name of the finite volume fluid velocity field :ulb,l
@@ -37,6 +39,8 @@ LaEuScalarTempProps
{value} = fluid thermal conductivity \[W/(m*K)\] :l
{value1} = fluid specific heat capacity \[W*s/(kg*K)\] :l
{density} = name of the finite volume fluid density field :l
+{interpolation} = (optional, normally off) flag to use interpolated voidfraction and fluid velocity values :l
+{verbose} = (normally off) for verbose run :l
:ule
[Examples:]
@@ -60,7 +64,7 @@ LaEuScalarTempProps
[Description:]
-This "forceModel" does not influence the particles or the fluid flow! Using the particles' temperature a scalar field representing "particle-fluid heatflux" is calculated. The solver then uses this source field in the scalar transport equation for the temperature. The model for convective heat transfer is based on Li and Mason (2000), A computational investigation of transient heat transfer in pneumatic transport of granular particles, Pow.Tech 112
+This "forceModel" does not influence the particles or the fluid flow! Using the particles' temperature a scalar field representing "particle-fluid heatflux" is calculated. The solver then uses this source field in the scalar transport equation for the temperature. The model for convective heat transfer is based on Li and Mason (2000), A computational investigation of transient heat transfer in pneumatic transport of granular particles, Pow.Tech 112
[Restrictions:]
diff --git a/doc/forceModel_ShirgaonkarIB.html b/doc/forceModel_ShirgaonkarIB.html
index 5956cc2..5e198cf 100644
--- a/doc/forceModel_ShirgaonkarIB.html
+++ b/doc/forceModel_ShirgaonkarIB.html
@@ -47,7 +47,7 @@ ShirgaonkarIBProps
Description:
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ShirgaonkarIB model calculates the drag force (viscous and pressure force) acting on each particle in a resolved manner (see Shirgaonkar et al. (2009): "A new mathematical formulation and fast algorithm for fully resolved simulation of self-propulsion", Journal of Comp. Physics). This model is only suited for resolved CFD-DEM simulations where the particle is represented by immersed boundrary method.
+
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ShirgaonkarIB model calculates the drag force (viscous and pressure force) acting on each particle in a resolved manner (see Shirgaonkar et al. (2009): "A new mathematical formulation and fast algorithm for fully resolved simulation of self-propulsion", Journal of Comp. Physics). This model is only suited for resolved CFD-DEM simulations where the particle is represented by immersed boundary method.
References:
diff --git a/doc/forceModel_ShirgaonkarIB.txt b/doc/forceModel_ShirgaonkarIB.txt
index f9a6223..9f488cf 100644
--- a/doc/forceModel_ShirgaonkarIB.txt
+++ b/doc/forceModel_ShirgaonkarIB.txt
@@ -42,7 +42,7 @@ ShirgaonkarIBProps
[Description:]
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ShirgaonkarIB model calculates the drag force (viscous and pressure force) acting on each particle in a resolved manner (see Shirgaonkar et al. (2009): "A new mathematical formulation and fast algorithm for fully resolved simulation of self-propulsion", Journal of Comp. Physics). This model is only suited for resolved CFD-DEM simulations where the particle is represented by immersed boundrary method.
+The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The ShirgaonkarIB model calculates the drag force (viscous and pressure force) acting on each particle in a resolved manner (see Shirgaonkar et al. (2009): "A new mathematical formulation and fast algorithm for fully resolved simulation of self-propulsion", Journal of Comp. Physics). This model is only suited for resolved CFD-DEM simulations where the particle is represented by immersed boundary method.
[References:]
diff --git a/doc/forceModel_gradPForce.html b/doc/forceModel_gradPForce.html
index 410cd20..f555313 100644
--- a/doc/forceModel_gradPForce.html
+++ b/doc/forceModel_gradPForce.html
@@ -31,7 +31,7 @@ gradPForceProps
U = name of the finite volume fluid velocity field
-interpolation = flag to use interolate interpolated pressure values (normally off)
+interpolation = flag to use interpolated pressure values (normally off)
diff --git a/doc/forceModel_gradPForce.txt b/doc/forceModel_gradPForce.txt
index c1d2bdf..7a0801d 100644
--- a/doc/forceModel_gradPForce.txt
+++ b/doc/forceModel_gradPForce.txt
@@ -26,7 +26,7 @@ gradPForceProps
{pressure} = name of the finite volume fluid pressure field :ulb,l
{density} = name of the finite volume gravity field :l
{U} = name of the finite volume fluid velocity field :l
-{interpolation} = flag to use interolate interpolated pressure values (normally off) :l
+{interpolation} = flag to use interpolated pressure values (normally off) :l
:ule
[Examples:]
diff --git a/doc/forceModel_particleCellVolume.html b/doc/forceModel_particleCellVolume.html
index d906882..c34aa71 100644
--- a/doc/forceModel_particleCellVolume.html
+++ b/doc/forceModel_particleCellVolume.html
@@ -21,7 +21,7 @@ particleCellVolumeProps
{
upperThreshold value;
lowerThreshold value2;
- verbous;
+ verbose;
};
value = only cells with a field value (magnitude) lower than this upper threshold are considered
@@ -40,13 +40,13 @@ particleCellVolumeProps
{
upperThreshold 0.999;
lowerThreshold 0;
- verbous;
+ verbose;
}
Description:
This "forceModel" does not influence the particles or the simulation - it is a postprocessing tool! The total volume of the particles as they are represented on the CFD mesh is calculated. Further the total volume of the cells particles are in is calculated.
-At "writeTime" a field named particleCellVolume , where scalarField is the name of the original field, is written. This can be can the be probed using standard function object probes. Analogously a field named cellVolume is written. Using the verbose option a screen output is given.
+At "writeTime" a field named particleCellVolume , where scalarField is the name of the original field, is written. This can then be probed using standard function object probes. Analogously a field named cellVolume is written. Using the verbose option a screen output is given.
Restrictions:
diff --git a/doc/forceModel_particleCellVolume.txt b/doc/forceModel_particleCellVolume.txt
index 21bc23d..93b1dbf 100644
--- a/doc/forceModel_particleCellVolume.txt
+++ b/doc/forceModel_particleCellVolume.txt
@@ -19,7 +19,7 @@ particleCellVolumeProps
\{
upperThreshold value;
lowerThreshold value2;
- verbous;
+ verbose;
\}; :pre
{value} = only cells with a field value (magnitude) lower than this upper threshold are considered :l
@@ -36,13 +36,13 @@ particleCellVolumeProps
\{
upperThreshold 0.999;
lowerThreshold 0;
- verbous;
+ verbose;
\} :pre
[Description:]
This "forceModel" does not influence the particles or the simulation - it is a postprocessing tool! The total volume of the particles as they are represented on the CFD mesh is calculated. Further the total volume of the cells particles are in is calculated.
-At "writeTime" a field named particleCellVolume , where scalarField is the name of the original field, is written. This can be can the be probed using standard function object probes. Analogously a field named cellVolume is written. Using the verbose option a screen output is given.
+At "writeTime" a field named particleCellVolume , where scalarField is the name of the original field, is written. This can then be probed using standard function object probes. Analogously a field named cellVolume is written. Using the verbose option a screen output is given.
[Restrictions:]
diff --git a/doc/forceModel_viscForce.html b/doc/forceModel_viscForce.html
index 73b6ad9..ebd76ec 100644
--- a/doc/forceModel_viscForce.html
+++ b/doc/forceModel_viscForce.html
@@ -28,7 +28,7 @@ viscForceProps
density = name of the finite volume gravity field
-interpolation = flag to use interolate interpolated stress values (normally off)
+interpolation = flag to use interpolated stress values (normally off)
@@ -46,7 +46,7 @@ viscForceProps
Description:
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The viscForce model calculates the particle based viscous force, -(grad(tau)) * Vparticle (see Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability" ,JFM).
+
The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The viscForce model calculates the particle based viscous force, -(grad(tau)) * Vparticle (see Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM).
Restrictions:
diff --git a/doc/forceModel_viscForce.txt b/doc/forceModel_viscForce.txt
index a7986d1..8577846 100644
--- a/doc/forceModel_viscForce.txt
+++ b/doc/forceModel_viscForce.txt
@@ -24,7 +24,7 @@ viscForceProps
{U} = name of the finite volume fluid velocity field :ulb,l
{density} = name of the finite volume gravity field :l
-{interpolation} = flag to use interolate interpolated stress values (normally off) :l
+{interpolation} = flag to use interpolated stress values (normally off) :l
:ule
[Examples:]
@@ -41,7 +41,7 @@ viscForceProps
[Description:]
-The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The viscForce model calculates the particle based viscous force, -(grad(tau)) * Vparticle (see Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability" ,JFM).
+The force model performs the calculation of forces (e.g. fluid-particle interaction forces) acting on each DEM particle. The viscForce model calculates the particle based viscous force, -(grad(tau)) * Vparticle (see Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their applicability", JFM).
[Restrictions:]
diff --git a/doc/githubAccess_public.html b/doc/githubAccess_public.html
index 2ca4118..b27e709 100644
--- a/doc/githubAccess_public.html
+++ b/doc/githubAccess_public.html
@@ -17,7 +17,7 @@
Description:
-This routine describes how to setup a github account and pull repositories of the CFDEM(R)project.
+
This routine describes how to set up a github account and pull repositories of the CFDEM(R)project.
After setting some environment variables LIGGGHTS(R) and CFDEM(R)coupling can be compiled
Procedure:
@@ -81,7 +81,7 @@ git pull
gedit ~/.bashrc &
-add the lines (you find them also in .../cfdemParticle/etc/bashrc and cshrc respectively):
+
add the lines (you find them also in .../cfdemParticle/etc/bashrc and cshrc respectively):
#================================================#
#- source cfdem env vars
@@ -107,7 +107,7 @@ export CFDEM_PIZZA_DIR=$HOME/LIGGGHTS/PIZZA/gran_pizza_17Aug10/src
$CFDEM_SRC_DIR
$CFDEM_LIGGGHTS_SRC_DIR
-should give "...: is a directory" otherwise something went wrong and the environment variables in ~/bashrc are not set correctly.
+
should give "...: is a directory" otherwise something went wrong and the environment variables in ~/.bashrc are not set correctly.
To specify the paths of pizza, please check the settings in $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/bashrc.
@@ -139,7 +139,7 @@ Changes in $CFDEM_TUT_DIR will be lost after every git stash!
Additional Installations:
-Optionally you can install lpp which will help you convert the DEM (dump) data to VTK format. For standard CFD-DEM runs this will not be necessary. To get the DEM postporcessing tool "lpp" you need python-numpy package installed:
+
Optionally you can install lpp which will help you convert the DEM (dump) data to VTK format. For standard CFD-DEM runs this will not be necessary. To get the DEM postprocessing tool "lpp" you need python-numpy package installed:
sudo apt-get install python-numpy
@@ -149,9 +149,9 @@ Changes in $CFDEM_TUT_DIR will be lost after every git stash!
git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/lpp mylpp
-Backward Compatibility:
+
Backwards Compatibility:
-Basically CFDEM(R)coupling supports one OpenFOAM(R) version therefore all settings are prepared for that. Nevertheless we try to maintain backward compatibility as long as it works with reasonable effort.
+
Basically CFDEM(R)coupling supports one OpenFOAM(R) version therefore all settings are prepared for that. Nevertheless we try to maintain backwards compatibility as long as it works with reasonable effort.
The supported OpenFOAM(R) and LIGGGHTS(R) versions are stated in:
src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
@@ -162,7 +162,7 @@ src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
Troubleshooting:
-- toubles with git clone?
+
diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf
index b1dd66d..4219234 100644
Binary files a/doc/githubAccess_public.pdf and b/doc/githubAccess_public.pdf differ
diff --git a/doc/githubAccess_public.txt b/doc/githubAccess_public.txt
index 35e80d0..f72df62 100644
--- a/doc/githubAccess_public.txt
+++ b/doc/githubAccess_public.txt
@@ -11,7 +11,7 @@ githubAccess_public :h3
[Description:]
-This routine describes how to setup a github account and pull repositories of the CFDEM(R)project.
+This routine describes how to set up a github account and pull repositories of the CFDEM(R)project.
After setting some environment variables LIGGGHTS(R) and CFDEM(R)coupling can be compiled
[Procedure:]
@@ -67,7 +67,7 @@ Now you need to set some environment variables in ~/.bashrc (if you use c-shell,
gedit ~/.bashrc & :pre
-add the lines (you find them also in .../cfdemParticle/etc/bashrc and cshrc respectively):
+add the lines (you find them also in .../cfdemParticle/etc/bashrc and cshrc respectively):
#================================================#
#- source cfdem env vars
@@ -93,7 +93,7 @@ $CFDEM_PROJECT_DIR
$CFDEM_SRC_DIR
$CFDEM_LIGGGHTS_SRC_DIR :pre
-should give "...: is a directory" otherwise something went wrong and the environment variables in ~/bashrc are not set correctly.
+should give "...: is a directory" otherwise something went wrong and the environment variables in ~/.bashrc are not set correctly.
To specify the paths of pizza, please check the settings in $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/bashrc.
@@ -125,7 +125,7 @@ Changes in $CFDEM_TUT_DIR will be lost after every {git stash}!
[Additional Installations:]
-Optionally you can install lpp which will help you convert the DEM (dump) data to VTK format. For standard CFD-DEM runs this will not be necessary. To get the DEM postporcessing tool "lpp" you need python-numpy package installed:
+Optionally you can install lpp which will help you convert the DEM (dump) data to VTK format. For standard CFD-DEM runs this will not be necessary. To get the DEM postprocessing tool "lpp" you need python-numpy package installed:
sudo apt-get install python-numpy :pre
@@ -134,9 +134,9 @@ You can pull the latest version of lpp with:
cd $HOME/LIGGGHTS :pre
git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/lpp mylpp :pre
-[Backward Compatibility:]
+[Backwards Compatibility:]
-Basically CFDEM(R)coupling supports one OpenFOAM(R) version therefore all settings are prepared for that. Nevertheless we try to maintain backward compatibility as long as it works with reasonable effort.
+Basically CFDEM(R)coupling supports one OpenFOAM(R) version therefore all settings are prepared for that. Nevertheless we try to maintain backwards compatibility as long as it works with reasonable effort.
The supported OpenFOAM(R) and LIGGGHTS(R) versions are stated in:
src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
@@ -147,7 +147,7 @@ src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
[Troubleshooting:]
-toubles with git clone? :ulb,l
+Troubles with git clone? :ulb,l
:ule
[a)] The git protocol will not work if your computer is behind a firewall which blocks the relevant TCP port, you can use alternatively (write command in one line):
diff --git a/doc/liggghtsCommandModel_execute.html b/doc/liggghtsCommandModel_execute.html
index efb9e5c..58909fe 100644
--- a/doc/liggghtsCommandModel_execute.html
+++ b/doc/liggghtsCommandModel_execute.html
@@ -28,6 +28,7 @@ executeProps0
runLast switch2;
runEveryCouplingStep switch3;
runEveryWriteStep switch4;
+ verbose;
}
- command = LIGGGHTS command to be executed. Each word in a new line, numbers and symbols need special treatment (e.g. $couplingInterval will be replaced by correct coupling interval in the simulation)
@@ -40,6 +41,8 @@ executeProps0
- switch4 = switch (choose on/off) if the command is executed at every writing step
+
- verbose = (normally off) for verbose run
+
Examples:
diff --git a/doc/liggghtsCommandModel_execute.txt b/doc/liggghtsCommandModel_execute.txt
index f0fec11..5db5f2a 100644
--- a/doc/liggghtsCommandModel_execute.txt
+++ b/doc/liggghtsCommandModel_execute.txt
@@ -26,6 +26,7 @@ executeProps0
runLast switch2;
runEveryCouplingStep switch3;
runEveryWriteStep switch4;
+ verbose;
\} :pre
{command} = LIGGGHTS command to be executed. Each word in a new line, numbers and symbols need special treatment (e.g. $couplingInterval will be replaced by correct coupling interval in the simulation) :ulb,l
@@ -33,6 +34,7 @@ executeProps0
{switch2} = switch (choose on/off) if the command is executed only at last time step :l
{switch3} = switch (choose on/off) if the command is executed at every coupling step :l
{switch4} = switch (choose on/off) if the command is executed at every writing step :l
+{verbose} = (normally off) for verbose run :l
:ule
[Examples:]
diff --git a/doc/liggghtsCommandModel_readLiggghtsData.html b/doc/liggghtsCommandModel_readLiggghtsData.html
index 7710a67..1981d49 100644
--- a/doc/liggghtsCommandModel_readLiggghtsData.html
+++ b/doc/liggghtsCommandModel_readLiggghtsData.html
@@ -36,9 +36,9 @@ readLiggghtsDataProps0
Description:
-The readLiggghtsData liggghtsCommand Model can be used to ???
+
The readLiggghtsData liggghtsCommand Model can be used to ???
-Restrictions:
+
Restrictions:
Note: Model is not up to date.
diff --git a/doc/liggghtsCommandModel_readLiggghtsData.txt b/doc/liggghtsCommandModel_readLiggghtsData.txt
index 99c655e..510ab55 100644
--- a/doc/liggghtsCommandModel_readLiggghtsData.txt
+++ b/doc/liggghtsCommandModel_readLiggghtsData.txt
@@ -35,10 +35,10 @@ readLiggghtsDataProps0
[Description:]
-The readLiggghtsData liggghtsCommand Model can be used to ???
+The readLiggghtsData liggghtsCommand Model can be used to ???
-[Restrictions:]
+[Restrictions:]
Note: Model is not up to date.
diff --git a/doc/liggghtsCommandModel_runLiggghts.html b/doc/liggghtsCommandModel_runLiggghts.html
index 58452e8..b9ad886 100644
--- a/doc/liggghtsCommandModel_runLiggghts.html
+++ b/doc/liggghtsCommandModel_runLiggghts.html
@@ -21,6 +21,7 @@
runLiggghtsProps
{
preNo true;
+ verbose; (optional)
}
Examples:
@@ -32,9 +33,9 @@ runLiggghtsProps
Description:
-The liggghtsCommand models can be used to execute a LIGGGHTS command during a CFD run. The "runLiggghts" command executes the command "run $nrDEMsteps", where $nrDEMsteps is automaically set according to the coupling intervals, every coupling step. Optionally a dictionary called runLiggghtsProps can be specified where the "preNo" switch can be set, which uses the command "run $nrDEMsteps pre no" for every time step except the first.
+
The liggghtsCommand models can be used to execute a LIGGGHTS command during a CFD run. The "runLiggghts" command executes the command "run $nrDEMsteps", where $nrDEMsteps is automatically set according to the coupling intervals, every coupling step. Optionally a dictionary called runLiggghtsProps can be specified where the "preNo" switch can be set, which uses the command "run $nrDEMsteps pre no" for every time step except the first.
-Restrictions: Warning: the "pre no" option can cause troubles (dump data of particles changin the domain might be erroneous)!
+
Restrictions: Warning: the "pre no" option can cause troubles (dump data of particles changing the domain might be erroneous)!
Related commands:
diff --git a/doc/liggghtsCommandModel_runLiggghts.txt b/doc/liggghtsCommandModel_runLiggghts.txt
index 1fefddd..a1f0ef4 100644
--- a/doc/liggghtsCommandModel_runLiggghts.txt
+++ b/doc/liggghtsCommandModel_runLiggghts.txt
@@ -19,6 +19,7 @@ liggghtsCommandModels
runLiggghtsProps
\{
preNo true;
+ verbose; (optional)
\} :pre
[Examples:]
@@ -30,9 +31,9 @@ liggghtsCommandModels
[Description:]
-The liggghtsCommand models can be used to execute a LIGGGHTS command during a CFD run. The "runLiggghts" command executes the command "run $nrDEMsteps", where $nrDEMsteps is automaically set according to the coupling intervals, every coupling step. Optionally a dictionary called runLiggghtsProps can be specified where the "preNo" switch can be set, which uses the command "run $nrDEMsteps pre no" for every time step except the first.
+The liggghtsCommand models can be used to execute a LIGGGHTS command during a CFD run. The "runLiggghts" command executes the command "run $nrDEMsteps", where $nrDEMsteps is automatically set according to the coupling intervals, every coupling step. Optionally a dictionary called runLiggghtsProps can be specified where the "preNo" switch can be set, which uses the command "run $nrDEMsteps pre no" for every time step except the first.
-[Restrictions:] Warning: the "pre no" option can cause troubles (dump data of particles changin the domain might be erroneous)!
+[Restrictions:] Warning: the "pre no" option can cause troubles (dump data of particles changing the domain might be erroneous)!
[Related commands:]
diff --git a/doc/liggghtsCommandModel_writeLiggghts.html b/doc/liggghtsCommandModel_writeLiggghts.html
index 685b901..3a96aaf 100644
--- a/doc/liggghtsCommandModel_writeLiggghts.html
+++ b/doc/liggghtsCommandModel_writeLiggghts.html
@@ -23,6 +23,7 @@ writeLiggghtsProps
writeLast switch1;
writeName "name";
overwrite switch2;
+ verbose;
}
- switch1 = switch (choose on/off) to select if only last step is stored or every write step.
@@ -31,6 +32,8 @@ writeLiggghtsProps
- switch2 = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written
+
- verbose = (normally off) for verbose run
+
Examples:
diff --git a/doc/liggghtsCommandModel_writeLiggghts.txt b/doc/liggghtsCommandModel_writeLiggghts.txt
index c0a2a31..77f4f46 100644
--- a/doc/liggghtsCommandModel_writeLiggghts.txt
+++ b/doc/liggghtsCommandModel_writeLiggghts.txt
@@ -21,11 +21,13 @@ writeLiggghtsProps
writeLast switch1;
writeName "name";
overwrite switch2;
+ verbose;
\} :pre
{switch1} = switch (choose on/off) to select if only last step is stored or every write step. :ulb,l
{name} = name of the restart file to be written in /$caseDir/DEM/ default default "liggghts.restartCFDEM" :l
{switch2} = switch (choose on/off) to select if only one restart file $name or many files $name_$timeStamp are written :l
+{verbose} = (normally off) for verbose run :l
:ule
[Examples:]
diff --git a/doc/locateModel_engineSearchIB.html b/doc/locateModel_engineSearchIB.html
index 15e3680..16ec8ce 100644
--- a/doc/locateModel_engineSearchIB.html
+++ b/doc/locateModel_engineSearchIB.html
@@ -57,9 +57,9 @@ engineIBProps
-This model is a modification of the engine search model. Instead of using the centre-cell as starting point for the engine search, further satellite points located on the surface of the sphere are checked. This makes sure that (parts of) spheres can be located even when their centre is on another processor. This is especially important for parallel computations, when a sphere is about to move from one processor to another.
+
This model is a modification of the engine search model. Instead of using the centre-cell as starting point for the engine search, further satellite points located on the surface of the sphere are checked. This ensures that (parts of) spheres can be located even when their centre is on another processor. This is especially important for parallel computations, when a sphere is about to move from one processor to another.
-Restrictions:
+
Restrictions:
Only for immersed boundary solvers!
diff --git a/doc/locateModel_engineSearchIB.txt b/doc/locateModel_engineSearchIB.txt
index 9adbdcc..08b66a1 100644
--- a/doc/locateModel_engineSearchIB.txt
+++ b/doc/locateModel_engineSearchIB.txt
@@ -50,9 +50,9 @@ treeSearch false; will execute some geometric (linear) search using the last
treeSearch true; will use a recursive tree structure to find the cell. :l
:ule
-This model is a modification of the engine search model. Instead of using the centre-cell as starting point for the engine search, further satellite points located on the surface of the sphere are checked. This makes sure that (parts of) spheres can be located even when their centre is on another processor. This is especially important for parallel computations, when a sphere is about to move from one processor to another.
+This model is a modification of the engine search model. Instead of using the centre-cell as starting point for the engine search, further satellite points located on the surface of the sphere are checked. This ensures that (parts of) spheres can be located even when their centre is on another processor. This is especially important for parallel computations, when a sphere is about to move from one processor to another.
-[Restrictions:]
+[Restrictions:]
Only for immersed boundary solvers!
diff --git a/doc/momCoupleModel.html b/doc/momCoupleModel.html
index d40ba87..2acae6a 100644
--- a/doc/momCoupleModel.html
+++ b/doc/momCoupleModel.html
@@ -29,6 +29,10 @@
Note: This examples list might not be complete - please look for other models (momCoupleModel_XY) in this documentation.
+Forces can be coupled in an implicit way to the fluid solver (i.e., when solving the Navier-Stokes equations, the fluid velocity at the new time will be considered for the coupling force). This implicit coupling is typically done for the drag forces (look for "impForces()" in the implementation of the drag model). Implicit coupling is more stable (especially important for dense flows), but conflicts Newton's third law. Explicit forces are imposed on the flow solver in an explicit fashion (look for "expForces()" in the implementation of the drag model), which is less stable, but does not conflict Newton's third law.
+
+Note that the variable "imExSplitFactor" can be set in the couplingProperties in order to treat implicitly defined forces (in the implementation of the force model) as explicit ones. "imExSplitFactor 1.0;" is set by default, meaning that all implicit forces will be considered implicitly, whereas "imExSplitFactor 0.0;" would mean that implicitly defined forces will be treated in an explicit fashion.
+
Description:
The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.
diff --git a/doc/momCoupleModel.txt b/doc/momCoupleModel.txt
index cfbddc1..05db72e 100644
--- a/doc/momCoupleModel.txt
+++ b/doc/momCoupleModel.txt
@@ -27,6 +27,10 @@ momCoupleModels
Note: This examples list might not be complete - please look for other models (momCoupleModel_XY) in this documentation.
+Forces can be coupled in an implicit way to the fluid solver (i.e., when solving the Navier-Stokes equations, the fluid velocity at the new time will be considered for the coupling force). This implicit coupling is typically done for the drag forces (look for "impForces()" in the implementation of the drag model). Implicit coupling is more stable (especially important for dense flows), but conflicts Newton's third law. Explicit forces are imposed on the flow solver in an explicit fashion (look for "expForces()" in the implementation of the drag model), which is less stable, but does not conflict Newton's third law.
+
+Note that the variable "imExSplitFactor" can be set in the couplingProperties in order to treat implicitly defined forces (in the implementation of the force model) as explicit ones. "imExSplitFactor 1.0;" is set by default, meaning that all implicit forces will be considered implicitly, whereas "imExSplitFactor 0.0;" would mean that implicitly defined forces will be treated in an explicit fashion.
+
[Description:]
The momCoupleModel is the base class for momentum exchange between DEM and CFD simulation.
diff --git a/doc/momCoupleModel_explicitCouple.html b/doc/momCoupleModel_explicitCouple.html
index 521d7c9..ac6b5ba 100644
--- a/doc/momCoupleModel_explicitCouple.html
+++ b/doc/momCoupleModel_explicitCouple.html
@@ -41,7 +41,7 @@ explicitCoupleProps
The explicitCouple-model is a momCoupleModel model providing an explicit momentum source term for the CFD solver.
-Restrictions:
+
Restrictions:
Only for solvers that include explicit momentum exchange.
diff --git a/doc/momCoupleModel_explicitCouple.txt b/doc/momCoupleModel_explicitCouple.txt
index 58cd282..bdcb465 100644
--- a/doc/momCoupleModel_explicitCouple.txt
+++ b/doc/momCoupleModel_explicitCouple.txt
@@ -38,7 +38,7 @@ explicitCoupleProps
The explicitCouple-model is a momCoupleModel model providing an explicit momentum source term for the CFD solver.
-[Restrictions:]
+[Restrictions:]
Only for solvers that include explicit momentum exchange.
diff --git a/doc/momCoupleModel_implicitCouple.html b/doc/momCoupleModel_implicitCouple.html
index ca70b2c..f2b1a00 100644
--- a/doc/momCoupleModel_implicitCouple.html
+++ b/doc/momCoupleModel_implicitCouple.html
@@ -31,7 +31,7 @@ implicitCoupleProps
voidfraction = name of the finite volume voidfraction field
-number = min value for local particle volume fraction to calculate the exchange filed (default SMALL):l
+number = minimum value for local particle volume fraction to calculate the exchange filed (default SMALL):l
Examples:
@@ -51,7 +51,7 @@ implicitCoupleProps
The implicitCouple-model is a momCoupleModel model providing an implicit momentum source term for the CFD solver.
-Restrictions:
+
Restrictions:
Only for solvers that include implicit momentum exchange.
diff --git a/doc/momCoupleModel_implicitCouple.txt b/doc/momCoupleModel_implicitCouple.txt
index e46a35c..08433ee 100644
--- a/doc/momCoupleModel_implicitCouple.txt
+++ b/doc/momCoupleModel_implicitCouple.txt
@@ -26,7 +26,7 @@ implicitCoupleProps
{U} = name of the finite volume fluid velocity field :ulb,l
{Us} = name of the finite volume granular velocity field :l
{voidfraction} = name of the finite volume voidfraction field :l
-{number} = min value for local particle volume fraction to calculate the exchange filed (default SMALL):l
+{number} = minimum value for local particle volume fraction to calculate the exchange filed (default SMALL):l
:ule
[Examples:]
@@ -46,7 +46,7 @@ implicitCoupleProps
The implicitCouple-model is a momCoupleModel model providing an implicit momentum source term for the CFD solver.
-[Restrictions:]
+[Restrictions:]
Only for solvers that include implicit momentum exchange.
diff --git a/doc/momCoupleModel_noCouple.html b/doc/momCoupleModel_noCouple.html
index 38dd7c3..0ec1e60 100644
--- a/doc/momCoupleModel_noCouple.html
+++ b/doc/momCoupleModel_noCouple.html
@@ -27,9 +27,9 @@
Description:
-The noCouple-model is a dummy momCoupleModel model providing an no momentum source term for the CFD solver.
+
The noCouple-model is a dummy momCoupleModel model providing a no momentum source term for the CFD solver.
-Restrictions:
+
Restrictions:
Only for solvers that include no momentum exchange, e.g. immersed boundary.
diff --git a/doc/momCoupleModel_noCouple.txt b/doc/momCoupleModel_noCouple.txt
index c608019..6972d30 100644
--- a/doc/momCoupleModel_noCouple.txt
+++ b/doc/momCoupleModel_noCouple.txt
@@ -26,9 +26,9 @@ momCoupleModels
[Description:]
-The noCouple-model is a dummy momCoupleModel model providing an no momentum source term for the CFD solver.
+The noCouple-model is a dummy momCoupleModel model providing a no momentum source term for the CFD solver.
-[Restrictions:]
+[Restrictions:]
Only for solvers that include no momentum exchange, e.g. immersed boundary.
diff --git a/doc/probeModel.html b/doc/probeModel.html
index 3871fe4..72309a3 100644
--- a/doc/probeModel.html
+++ b/doc/probeModel.html
@@ -31,7 +31,7 @@
Description:
-The probeModel feature allows one to implement various probing features in CFDEM. Currently, only the particleProbe model is implemented, that performs probing of particle forces.
+
The probeModel feature allows to implement various probing features in CFDEM. Currently, only the particleProbe model is implemented, that performs probing of particle forces.
Restrictions:
diff --git a/doc/probeModel.txt b/doc/probeModel.txt
index 5e10acf..64826ed 100644
--- a/doc/probeModel.txt
+++ b/doc/probeModel.txt
@@ -29,7 +29,7 @@ Note: This examples list might not be complete - please check below for the list
[Description:]
-The probeModel feature allows one to implement various probing features in CFDEM. Currently, only the "particleProbe"_probeModel_particleProbe.html model is implemented, that performs probing of particle forces.
+The probeModel feature allows to implement various probing features in CFDEM. Currently, only the "particleProbe"_probeModel_particleProbe.html model is implemented, that performs probing of particle forces.
[Restrictions:]
diff --git a/doc/smoothingModel_constDiffSmoothing.html b/doc/smoothingModel_constDiffSmoothing.html
index faf3f45..cf5904a 100644
--- a/doc/smoothingModel_constDiffSmoothing.html
+++ b/doc/smoothingModel_constDiffSmoothing.html
@@ -39,15 +39,15 @@ constDiffSmoothingProps
lowerLimit 0.1;
upperLimit 1e10;
smoothingLength 1500e-6;
- smoothingLengthReferenceField 9000e-6;
+ smoothingLengthReferenceField 9000e-6;
}
Description:
-The "constDiffSmoothing" model is a basic smoothingModel model which reads a smoothing length scale being used for smoothening the exchange fields (voidfraction, Ksl, f if present). This model can be used for smoothing explicit force coupling fields, as well as implicit fource coupling algorithms.
+
The "constDiffSmoothing" model is a basic smoothingModel model which reads a smoothing length scale being used for smoothing the exchange fields (voidfraction, Ksl, f if present). This model can be used for smoothing explicit force coupling fields, as well as implicit force coupling algorithms.
Smoothing for reference fields is performed to "fill in" values in cells in which these reference fields are not specified. Values calculated in the cells (via Lagrangian-To-Euler mapping) are NOT changed! These reference fields are, e.g., the average particle velocity, which are not specified in all cells in case the flow is rather dilute.
-Restrictions: This model is tested in a limited number of flow situations.
+
Restrictions: This model is tested in a limited number of flow situations.
ATTENTION: In case a smoothing model is used in conjunction with "PimpleImEx" solvers, the fields "f" and "fSmooth" must be placed in the initial time directory! This is because zeroGradient boundary conditions for the fields "f" and "fSmooth" must be specified, otherwise the smoothing operation will give an Error.
diff --git a/doc/smoothingModel_constDiffSmoothing.txt b/doc/smoothingModel_constDiffSmoothing.txt
index b6dc6db..54f75cf 100644
--- a/doc/smoothingModel_constDiffSmoothing.txt
+++ b/doc/smoothingModel_constDiffSmoothing.txt
@@ -33,15 +33,15 @@ constDiffSmoothingProps
lowerLimit 0.1;
upperLimit 1e10;
smoothingLength 1500e-6;
- smoothingLengthReferenceField 9000e-6;
+ smoothingLengthReferenceField 9000e-6;
\} :pre
[Description:]
-The "constDiffSmoothing" model is a basic smoothingModel model which reads a smoothing length scale being used for smoothening the exchange fields (voidfraction, Ksl, f if present). This model can be used for smoothing explicit force coupling fields, as well as implicit fource coupling algorithms.
+The "constDiffSmoothing" model is a basic smoothingModel model which reads a smoothing length scale being used for smoothing the exchange fields (voidfraction, Ksl, f if present). This model can be used for smoothing explicit force coupling fields, as well as implicit force coupling algorithms.
Smoothing for reference fields is performed to "fill in" values in cells in which these reference fields are not specified. Values calculated in the cells (via Lagrangian-To-Euler mapping) are NOT changed! These reference fields are, e.g., the average particle velocity, which are not specified in all cells in case the flow is rather dilute.
-[Restrictions:] This model is tested in a limited number of flow situations.
+[Restrictions:] This model is tested in a limited number of flow situations.
ATTENTION: In case a smoothing model is used in conjunction with "PimpleImEx" solvers, the fields "f" and "fSmooth" must be placed in the initial time directory! This is because zeroGradient boundary conditions for the fields "f" and "fSmooth" must be specified, otherwise the smoothing operation will give an Error.
diff --git a/doc/voidFractionModel_GaussVoidFraction.html b/doc/voidFractionModel_GaussVoidFraction.html
index c976b46..2ad4fd9 100644
--- a/doc/voidFractionModel_GaussVoidFraction.html
+++ b/doc/voidFractionModel_GaussVoidFraction.html
@@ -18,17 +18,17 @@ GaussProps
{
maxCellsPerParticle number1;
alphaMin number2;
- scaleUpVol number3;
- weight number4;
+ weight number3;
+ porosity number4;
}
-- number1 = max number of cells covered by a partilce (search will fail when more than number1 cells are covered by the particle)
+
- number1 = maximum number of cells covered by a particle (search will fail when more than number1 cells are covered by the particle)
-
- number2 = mininmum limit for voidfraction
+
- number2 = minimum limit for voidfraction
-
- number3 = diameter of the particle's representation is artificially increased according to number3 * Vparticle, volume remains unaltered!
+
- number3 = (optional) scaling of the particle volume to account for porosity or agglomerations.
-
- number4 = scaling of the particle volume to account for porosity or agglomerations.
+
- number4 = (optional) diameter of the particle's representation is artificially increased according to number2 * Vparticle, volume remains unaltered!
@@ -39,15 +39,15 @@ GaussProps
{
maxCellsPerParticle 1000;
alphaMin 0.10;
- scaleUpVol 5.0;
weight 1.;
+ porosity 1.;
}
Description:
-The Gauss voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The volume is here distributed according to a Gaussian dirstibution.
+
The Gauss voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The volume is here distributed according to a Gaussian distribution.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+
The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
diff --git a/doc/voidFractionModel_GaussVoidFraction.txt b/doc/voidFractionModel_GaussVoidFraction.txt
index dd0c6ad..ceca74b 100644
--- a/doc/voidFractionModel_GaussVoidFraction.txt
+++ b/doc/voidFractionModel_GaussVoidFraction.txt
@@ -16,14 +16,14 @@ GaussProps
\{
maxCellsPerParticle number1;
alphaMin number2;
- scaleUpVol number3;
- weight number4;
+ weight number3;
+ porosity number4;
\} :pre
-{number1} = max number of cells covered by a partilce (search will fail when more than {number1} cells are covered by the particle) :ulb,l
-{number2} = mininmum limit for voidfraction :l
-{number3} = diameter of the particle's representation is artificially increased according to {number3} * Vparticle, volume remains unaltered! :l
-{number4} = scaling of the particle volume to account for porosity or agglomerations. :l
+{number1} = maximum number of cells covered by a particle (search will fail when more than {number1} cells are covered by the particle) :ulb,l
+{number2} = minimum limit for voidfraction :l
+{number3} = (optional) scaling of the particle volume to account for porosity or agglomerations. :l
+{number4} = (optional) diameter of the particle's representation is artificially increased according to {number2} * Vparticle, volume remains unaltered! :l
:ule
[Examples:]
@@ -33,15 +33,15 @@ GaussProps
\{
maxCellsPerParticle 1000;
alphaMin 0.10;
- scaleUpVol 5.0;
weight 1.;
+ porosity 1.;
\} :pre
[Description:]
-The Gauss voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The volume is here distributed according to a Gaussian dirstibution.
+The Gauss voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The volume is here distributed according to a Gaussian distribution.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
diff --git a/doc/voidFractionModel_IBVoidFraction.html b/doc/voidFractionModel_IBVoidFraction.html
index 3ae0111..bdb61e7 100644
--- a/doc/voidFractionModel_IBVoidFraction.html
+++ b/doc/voidFractionModel_IBVoidFraction.html
@@ -21,9 +21,9 @@ IBProps
scaleUpVol number3;
}
-- number1 = max number of cells covered by a partilce (search will fail when more than number1 cells are covered by the particle)
+
- number1 = maximum number of cells covered by a particle (search will fail when more than number1 cells are covered by the particle)
-
- number2 = mininmum limit for voidfraction
+
- number2 = minimum limit for voidfraction
- number3 = diameter of the particle's representation is artificially increased according to number3 * Vparticle, volume remains unaltered!
@@ -41,11 +41,11 @@ IBProps
Description:
-The IB voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The model is specially designed for cfdemSolverIB and creates a smooth transition of the voidfraction at the particle surface. Cells which are only partially covered by solid are marked by void fracion values between 0 and 1 respectively.
+
The IB voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The model is specially designed for cfdemSolverIB and creates a smooth transition of the voidfraction at the particle surface. Cells which are only partially covered by solid are marked by voidfraction values between 0 and 1 respectively.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+
The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
-Code of this sub-model contributed by Alice Hager, JKU.
+
Code of this sub-model contributed by Alice Hager, JKU.
Restrictions: none.
diff --git a/doc/voidFractionModel_IBVoidFraction.txt b/doc/voidFractionModel_IBVoidFraction.txt
index f39d1bb..d300c8b 100644
--- a/doc/voidFractionModel_IBVoidFraction.txt
+++ b/doc/voidFractionModel_IBVoidFraction.txt
@@ -19,8 +19,8 @@ IBProps
scaleUpVol number3;
\} :pre
-{number1} = max number of cells covered by a partilce (search will fail when more than {number1} cells are covered by the particle) :ulb,l
-{number2} = mininmum limit for voidfraction :l
+{number1} = maximum number of cells covered by a particle (search will fail when more than {number1} cells are covered by the particle) :ulb,l
+{number2} = minimum limit for voidfraction :l
{number3} = diameter of the particle's representation is artificially increased according to {number3} * Vparticle, volume remains unaltered! :l
:ule
@@ -36,11 +36,11 @@ IBProps
[Description:]
-The IB voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The model is specially designed for cfdemSolverIB and creates a smooth transition of the voidfraction at the particle surface. Cells which are only partially covered by solid are marked by void fracion values between 0 and 1 respectively.
+The IB voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle. The model is specially designed for cfdemSolverIB and creates a smooth transition of the voidfraction at the particle surface. Cells which are only partially covered by solid are marked by voidfraction values between 0 and 1 respectively.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
-Code of this sub-model contributed by Alice Hager, JKU.
+Code of this sub-model contributed by Alice Hager, JKU.
[Restrictions:] none.
diff --git a/doc/voidFractionModel_bigParticleVoidFraction.html b/doc/voidFractionModel_bigParticleVoidFraction.html
index 76605fe..ad0b0c0 100644
--- a/doc/voidFractionModel_bigParticleVoidFraction.html
+++ b/doc/voidFractionModel_bigParticleVoidFraction.html
@@ -18,17 +18,17 @@ bigParticleProps
{
maxCellsPerParticle number1;
alphaMin number2;
- scaleUpVol number3;
- weight number4;
+ weight number3;
+ porosity number4;
}
-- number1 = max number of cells covered by a partilce (search will fail when more than number1 cells are covered by the particle)
+
- number1 = maximum number of cells covered by a particle (search will fail when more than number1 cells are covered by the particle)
-
- number2 = mininmum limit for voidfraction
+
- number2 = minimum limit for voidfraction
-
- number3 = diameter of the particle's representation is artificially increased according to number3 * Vparticle, volume remains unaltered!
+
- number3 = (optional) scaling of the particle volume to account for porosity or agglomerations.
-
- number4 = scaling of the particle volume to account for porosity or agglomerations.
+
- number4 = (optional) diameter of the particle's representation is artificially increased according to number2 * Vparticle, volume remains unaltered!
@@ -39,19 +39,19 @@ bigParticleProps
{
maxCellsPerParticle 1000;
alphaMin 0.10;
- scaleUpVol 5.0;
weight 1.;
+ porosity 5.0;
}
Description:
-The bigParticle voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle which results in a stairstep representation of the bodies within the mesh (i.e. voidfraction is either 1 (fluid) of zero (solid)). For archiving accurate results, approx. 8 cells per particle diameter are necessary.
+
The bigParticle voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle which results in a stairstep representation of the bodies within the mesh (i.e. voidfraction is either 1 (fluid) of zero (solid)). For archiving accurate results, approx. 8 cells per particle diameter are necessary.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+
The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
-Parts of this sub-model contributed by Alice Hager, JKU.
+
Parts of this sub-model contributed by Alice Hager, JKU.
Restrictions: none.
diff --git a/doc/voidFractionModel_bigParticleVoidFraction.txt b/doc/voidFractionModel_bigParticleVoidFraction.txt
index 2b816fe..d6d4329 100644
--- a/doc/voidFractionModel_bigParticleVoidFraction.txt
+++ b/doc/voidFractionModel_bigParticleVoidFraction.txt
@@ -16,14 +16,14 @@ bigParticleProps
\{
maxCellsPerParticle number1;
alphaMin number2;
- scaleUpVol number3;
- weight number4;
+ weight number3;
+ porosity number4;
\} :pre
-{number1} = max number of cells covered by a partilce (search will fail when more than {number1} cells are covered by the particle) :ulb,l
-{number2} = mininmum limit for voidfraction :l
-{number3} = diameter of the particle's representation is artificially increased according to {number3} * Vparticle, volume remains unaltered! :l
-{number4} = scaling of the particle volume to account for porosity or agglomerations. :l
+{number1} = maximum number of cells covered by a particle (search will fail when more than {number1} cells are covered by the particle) :ulb,l
+{number2} = minimum limit for voidfraction :l
+{number3} = (optional) scaling of the particle volume to account for porosity or agglomerations. :l
+{number4} = (optional) diameter of the particle's representation is artificially increased according to {number2} * Vparticle, volume remains unaltered! :l
:ule
[Examples:]
@@ -33,19 +33,19 @@ bigParticleProps
\{
maxCellsPerParticle 1000;
alphaMin 0.10;
- scaleUpVol 5.0;
weight 1.;
+ porosity 5.0;
\} :pre
[Description:]
-The bigParticle voidFraction model is supposed to be used when a particle (or it's representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle which results in a stairstep representation of the bodies within the mesh (i.e. voidfraction is either 1 (fluid) of zero (solid)). For archiving accurate results, approx. 8 cells per particle diameter are necessary.
+The bigParticle voidFraction model is supposed to be used when a particle (or its representation) is bigger than a CFD cell. The voidfraction field is set in those cell whose centres are inside the particle which results in a stairstep representation of the bodies within the mesh (i.e. voidfraction is either 1 (fluid) of zero (solid)). For archiving accurate results, approx. 8 cells per particle diameter are necessary.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
-Parts of this sub-model contributed by Alice Hager, JKU.
+Parts of this sub-model contributed by Alice Hager, JKU.
[Restrictions:] none.
diff --git a/doc/voidFractionModel_centreVoidFraction.html b/doc/voidFractionModel_centreVoidFraction.html
index 0e480d9..94ccd15 100644
--- a/doc/voidFractionModel_centreVoidFraction.html
+++ b/doc/voidFractionModel_centreVoidFraction.html
@@ -20,9 +20,9 @@ centreProps
weight number2;
}
-- number1 = mininmum limit for voidfraction
+
- number1 = minimum limit for voidfraction
-
- number2 = scaling of the particle volume to account for porosity or agglomerations.
+
- number2 = (optional) scaling of the particle volume to account for porosity or agglomerations.
diff --git a/doc/voidFractionModel_centreVoidFraction.txt b/doc/voidFractionModel_centreVoidFraction.txt
index 92b807f..60141f5 100644
--- a/doc/voidFractionModel_centreVoidFraction.txt
+++ b/doc/voidFractionModel_centreVoidFraction.txt
@@ -18,8 +18,8 @@ centreProps
weight number2;
\} :pre
-{number1} = mininmum limit for voidfraction :ulb,l
-{number2} = scaling of the particle volume to account for porosity or agglomerations. :l
+{number1} = minimum limit for voidfraction :ulb,l
+{number2} = (optional) scaling of the particle volume to account for porosity or agglomerations. :l
:ule
[Examples:]
diff --git a/doc/voidFractionModel_dividedVoidFraction.html b/doc/voidFractionModel_dividedVoidFraction.html
index 818c931..b6cbc2f 100644
--- a/doc/voidFractionModel_dividedVoidFraction.html
+++ b/doc/voidFractionModel_dividedVoidFraction.html
@@ -17,18 +17,18 @@
dividedProps
{
alphaMin number1;
- scaleUpVol number2;
interpolation;
- weight number3;
+ weight number2;
+ porosity number3;
}
-- number1 = mininmum limit for voidfraction
-
-
- number2 = diameter of the particle's representation is artificially increased according to number2 * Vparticle, volume remains unaltered!
+
- number1 = minimum limit for voidfraction
- interpolation = flag to interpolate voidfraction to particle positions (normally off)
-
- number3 = scaling of the particle volume to account for porosity or agglomerations.
+
- number2 = (optional) scaling of the particle volume to account for porosity or agglomerations.
+
+
- number3 = (optional) diameter of the particle's representation is artificially increased according to number2 * Vparticle, volume remains unaltered!
@@ -38,20 +38,18 @@ dividedProps
dividedProps
{
alphaMin 0.2;
- scaleUpVol 1.0;
- weight 1.;
}
Description:
-The divided voidFraction model is supposed to be used when a particle (or it's representation) is in the size range of a CFD cell. Satellite points are used to divide the particle's volume to the touched cells.
+
The divided voidFraction model is supposed to be used when a particle (or its representation) is in the size range of a CFD cell. Satellite points are used to divide the particle's volume to the touched cells.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+
The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
-In the basic implementation of solvers, the void fraction is calculated based on all particles. Depending on the solver used, the void fraction calculation is also performed for a certain type of particles.
-The void fraction calculation is based on a three-step approach (reset, set and interpolate), i.e., the void fraction is time interpolated from a previous and a next void fraction field. Appropriate names for these fields have to be specified in the sub-dictionaries voidFracFieldNamesPrev and voidFracFieldNamesNext in the couplingProperties dictionary.
+
In the basic implementation of solvers, the void fraction is calculated based on all particles. Depending on the solver used, the void fraction calculation is also performed for a certain type of particles.
+The void fraction calculation is based on a three-step approach (reset, set and interpolate), i.e., the void fraction is time interpolated from a previous and a next void fraction field. Appropriate names for these fields have to be specified in the sub-dictionaries voidFracFieldNamesPrev and voidFracFieldNamesNext in the couplingProperties dictionary.
Restrictions: none.
diff --git a/doc/voidFractionModel_dividedVoidFraction.txt b/doc/voidFractionModel_dividedVoidFraction.txt
index 48bb600..b2ce76f 100644
--- a/doc/voidFractionModel_dividedVoidFraction.txt
+++ b/doc/voidFractionModel_dividedVoidFraction.txt
@@ -15,15 +15,15 @@ voidfractionModel divided;
dividedProps
\{
alphaMin number1;
- scaleUpVol number2;
interpolation;
- weight number3;
+ weight number2;
+ porosity number3;
\} :pre
-{number1} = mininmum limit for voidfraction :ulb,l
-{number2} = diameter of the particle's representation is artificially increased according to {number2} * Vparticle, volume remains unaltered! :l
+{number1} = minimum limit for voidfraction :ulb,l
{interpolation} = flag to interpolate voidfraction to particle positions (normally off) :l
-{number3} = scaling of the particle volume to account for porosity or agglomerations. :l
+{number2} = (optional) scaling of the particle volume to account for porosity or agglomerations. :l
+{number3} = (optional) diameter of the particle's representation is artificially increased according to {number2} * Vparticle, volume remains unaltered! :l
:ule
[Examples:]
@@ -32,20 +32,18 @@ voidfractionModel divided;
dividedProps
\{
alphaMin 0.2;
- scaleUpVol 1.0;
- weight 1.;
\} :pre
[Description:]
-The divided voidFraction model is supposed to be used when a particle (or it's representation) is in the size range of a CFD cell. Satellite points are used to divide the particle's volume to the touched cells.
+The divided voidFraction model is supposed to be used when a particle (or its representation) is in the size range of a CFD cell. Satellite points are used to divide the particle's volume to the touched cells.
-The region of influence of a particle can be increased artificially by "scaleUpVol", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
+The region of influence of a particle can be increased artificially by "porosity", which blows up the particles, but keeps their volume (for voidfraction calculation) constant.
The particle volume occupied in the CFD domain can be adjusted by the parameter "weight", using Vparticle=dsphere^3*pi/6*weight.
-In the basic implementation of solvers, the void fraction is calculated based on all particles. Depending on the solver used, the void fraction calculation is also performed for a certain type of particles.
-The void fraction calculation is based on a three-step approach (reset, set and interpolate), i.e., the void fraction is time interpolated from a previous and a next void fraction field. Appropriate names for these fields have to be specified in the sub-dictionaries voidFracFieldNamesPrev and voidFracFieldNamesNext in the couplingProperties dictionary.
+In the basic implementation of solvers, the void fraction is calculated based on all particles. Depending on the solver used, the void fraction calculation is also performed for a certain type of particles.
+The void fraction calculation is based on a three-step approach (reset, set and interpolate), i.e., the void fraction is time interpolated from a previous and a next void fraction field. Appropriate names for these fields have to be specified in the sub-dictionaries voidFracFieldNamesPrev and voidFracFieldNamesNext in the couplingProperties dictionary.
[Restrictions:] none.
diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files
index fae4ce2..bb1a6e0 100644
--- a/src/lagrangian/cfdemParticle/Make/files
+++ b/src/lagrangian/cfdemParticle/Make/files
@@ -1,11 +1,12 @@
cfdemCloud = cfdemCloud
forceModels = subModels/forceModel
+forceModelsMS = subModels/forceModelMS
IOModels = subModels/IOModel
voidFractionModels = subModels/voidFractionModel
+voidFractionModelsMS = subModels/voidFractionModelMS
locateModels = subModels/locateModel
meshMotionModels = subModels/meshMotionModel
momCoupleModels = subModels/momCoupleModel
-regionModels = subModels/regionModel
dataExchangeModels = subModels/dataExchangeModel
averagingModels = subModels/averagingModel
clockModels = subModels/clockModel
@@ -14,35 +15,68 @@ smoothingModels = subModels/smoothingModel
probeModels = subModels/probeModel
$(cfdemCloud)/cfdemCloud.C
+derived/cfdemCloudBiDisperse/cfdemCloudBiDisperse.C
derived/cfdemCloudIB/cfdemCloudIB.C
+derived/cfdemCloudMS/cfdemCloudMS.C
$(forceModels)/forceModel/forceModel.C
$(forceModels)/forceModel/newForceModel.C
$(forceModels)/noDrag/noDrag.C
$(forceModels)/checkCouplingInterval/checkCouplingInterval.C
$(forceModels)/DiFeliceDrag/DiFeliceDrag.C
+$(forceModels)/DiFeliceDragNLift/DiFeliceDragNLift.C
$(forceModels)/GidaspowDrag/GidaspowDrag.C
$(forceModels)/SchillerNaumannDrag/SchillerNaumannDrag.C
$(forceModels)/Archimedes/Archimedes.C
$(forceModels)/ArchimedesIB/ArchimedesIB.C
$(forceModels)/interface/interface.C
$(forceModels)/ShirgaonkarIB/ShirgaonkarIB.C
+$(forceModels)/interfaceParticleProbe/interfaceParticleProbe.C
+$(forceModels)/fieldStore/fieldStore.C
+$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
+$(forceModels)/fieldBound/fieldBound.C
+$(forceModels)/volWeightedAverage/volWeightedAverage.C
+$(forceModels)/totalMomentumExchange/totalMomentumExchange.C
$(forceModels)/KochHillDrag/KochHillDrag.C
+$(forceModels)/KochHillRWDrag/KochHillRWDrag.C
+$(forceModels)/BeetstraDrag/multiphaseFlowBasic/multiphaseFlowBasic.C
+$(forceModels)/BeetstraDrag/BeetstraDrag.C
+$(forceModels)/LaEuScalarLiquid/LaEuScalarLiquid.C
$(forceModels)/LaEuScalarTemp/LaEuScalarTemp.C
+$(forceModels)/LaEuScalarDust/LaEuScalarDust.C
$(forceModels)/virtualMassForce/virtualMassForce.C
$(forceModels)/gradPForce/gradPForce.C
+$(forceModels)/gradULiftForce/gradULiftForce.C
+$(forceModels)/HollowayDrag/HollowayDrag.C
$(forceModels)/viscForce/viscForce.C
$(forceModels)/MeiLift/MeiLift.C
+$(forceModels)/melting/melting.C
+$(forceModels)/KochHillDragNLift/KochHillDragNLift.C
+$(forceModels)/stokesSpheroidDrag/stokesSpheroidDrag.C
+$(forceModels)/solidsPressureForce/solidsPressureForce.C
+$(forceModels)/periodicPressure/periodicPressure.C
+$(forceModels)/periodicPressureControl/periodicPressureControl.C
+$(forceModels)/averageSlipVel/averageSlipVel.C
$(forceModels)/particleCellVolume/particleCellVolume.C
+$(forceModelsMS)/forceModelMS/forceModelMS.C
+$(forceModelsMS)/forceModelMS/newForceModelMS.C
+$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C
+$(forceModelsMS)/GidaspowDragMS/GidaspowDragMS.C
+$(forceModelsMS)/noDragMS/noDragMS.C
+
$(probeModels)/probeModel/probeModel.C
$(probeModels)/probeModel/newProbeModel.C
$(probeModels)/noProbe/noProbe.C
+$(probeModels)/particleProbe/particleProbe.C
+/*$(probeModels)/interfaceParticleProbe/interfaceParticleProbe.C*/
$(IOModels)/IOModel/IOModel.C
$(IOModels)/IOModel/newIOModel.C
$(IOModels)/noIO/noIO.C
$(IOModels)/basicIO/basicIO.C
+$(IOModels)/tempIO/tempIO.C
+$(IOModels)/colorIO/colorIO.C
$(IOModels)/trackIO/trackIO.C
$(IOModels)/sophIO/sophIO.C
@@ -50,42 +84,53 @@ $(voidFractionModels)/voidFractionModel/voidFractionModel.C
$(voidFractionModels)/voidFractionModel/newVoidFractionModel.C
$(voidFractionModels)/centreVoidFraction/centreVoidFraction.C
$(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C
+$(voidFractionModels)/dividedVoidFractionBiDi/dividedVoidFractionBiDi.C
$(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C
$(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C
$(voidFractionModels)/IBVoidFraction/IBVoidFraction.C
+$(voidFractionModels)/weightedNeigbhorsVoidFraction/weightedNeigbhorsVoidFraction.C
+
+$(voidFractionModelsMS)/voidFractionModelMS/voidFractionModelMS.C
+$(voidFractionModelsMS)/voidFractionModelMS/newVoidFractionModelMS.C
+$(voidFractionModelsMS)/dividedVoidFractionMS/dividedVoidFractionMS.C
$(locateModels)/locateModel/locateModel.C
$(locateModels)/locateModel/newLocateModel.C
$(locateModels)/standardSearch/standardSearch.C
$(locateModels)/engineSearch/engineSearch.C
+$(locateModels)/engineSearchMany2Many/engineSearchMany2Many.C
+$(locateModels)/turboEngineSearch/turboEngineSearch.C
+$(locateModels)/turboEngineSearchM2M/turboEngineSearchM2M.C
$(locateModels)/engineSearchIB/engineSearchIB.C
-
+$(locateModels)/hyperEngineSearch/hyperEngineSearch.C
+$(locateModels)/ijkSearch/ijkSearch.C
$(meshMotionModels)/meshMotionModel/meshMotionModel.C
$(meshMotionModels)/meshMotionModel/newMeshMotionModel.C
$(meshMotionModels)/noMeshMotion/noMeshMotion.C
+$(meshMotionModels)/DEMdrivenMeshMotion/DEMdrivenMeshMotion.C
$(momCoupleModels)/momCoupleModel/momCoupleModel.C
$(momCoupleModels)/momCoupleModel/newMomCoupleModel.C
$(momCoupleModels)/explicitCouple/explicitCouple.C
+$(momCoupleModels)/explicitCoupleSource/explicitCoupleSource.C
$(momCoupleModels)/implicitCouple/implicitCouple.C
$(momCoupleModels)/noCouple/noCouple.C
-$(regionModels)/regionModel/regionModel.C
-$(regionModels)/regionModel/newRegionModel.C
-$(regionModels)/allRegion/allRegion.C
-
$(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C
$(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C
$(dataExchangeModels)/oneWayVTK/oneWayVTK.C
$(dataExchangeModels)/twoWayFiles/twoWayFiles.C
$(dataExchangeModels)/noDataExchange/noDataExchange.C
$(dataExchangeModels)/twoWayMPI/twoWayMPI.C
+$(dataExchangeModels)/twoWayM2M/twoWayM2M.C
+$(dataExchangeModels)/twoWayMany2Many/twoWayMany2Many.C
$(averagingModels)/averagingModel/averagingModel.C
$(averagingModels)/averagingModel/newAveragingModel.C
$(averagingModels)/dilute/dilute.C
$(averagingModels)/dense/dense.C
+$(averagingModels)/denseBiDi/denseBiDi.C
$(clockModels)/clockModel/clockModel.C
$(clockModels)/clockModel/newClockModel.C
@@ -94,6 +139,7 @@ $(clockModels)/noClock/noClock.C
$(liggghtsCommandModels)/liggghtsCommandModel/liggghtsCommandModel.C
$(liggghtsCommandModels)/liggghtsCommandModel/newLiggghtsCommandModel.C
+$(liggghtsCommandModels)/colorParticles/colorParticles.C
$(liggghtsCommandModels)/execute/execute.C
$(liggghtsCommandModels)/runLiggghts/runLiggghts.C
$(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C
@@ -103,5 +149,6 @@ $(smoothingModels)/smoothingModel/smoothingModel.C
$(smoothingModels)/smoothingModel/newSmoothingModel.C
$(smoothingModels)/noSmoothing/noSmoothing.C
$(smoothingModels)/constDiffSmoothing/constDiffSmoothing.C
+$(smoothingModels)/localPSizeDiffSmoothing/localPSizeDiffSmoothing.C
-LIB = $(FOAM_USER_LIBBIN)/lib$(CFDEM_LIB_NAME)
+LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME)
diff --git a/src/lagrangian/cfdemParticle/Make/options b/src/lagrangian/cfdemParticle/Make/options
index 0039c78..3e648ff 100644
--- a/src/lagrangian/cfdemParticle/Make/options
+++ b/src/lagrangian/cfdemParticle/Make/options
@@ -13,6 +13,8 @@ EXE_INC = \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/OpenFOAM/containers/HashTables/labelHashSet \
-I$(CFDEM_LIGGGHTS_SRC_DIR) \
+ -I$(CFDEM_M2MLIB_PATH) \
+ -I$(CFDEM_Many2ManyLIB_PATH) \
-I$(CFDEM_SRC_DIR)/cfdTools \
LIB_LIBS = \
@@ -25,4 +27,12 @@ LIB_LIBS = \
-llagrangian \
-lmpi_cxx \
-L$(CFDEM_LIGGGHTS_SRC_DIR) \
- -l$(CFDEM_LIGGGHTS_LIB_NAME)
+ -l$(CFDEM_LIGGGHTS_LIB_NAME) \
+ -L$(CFDEM_M2MLIB_PATH) \
+ -lcouple \
+ -L$(CFDEM_Many2ManyLIB_PATH) \
+ -lcoupleMany2Many \
+
+/* add -I$(CFDEM_POEMSLIB_PATH) \ to EXE_INC */
+/* -L$(CFDEM_POEMSLIB_PATH) \ */
+/* -lpoems */
diff --git a/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
index 213b21c..324cc97 100755
--- a/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
+++ b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
@@ -1,6 +1,6 @@
-word CFDEMversion="cfdem-2.6.1";
-word compatibleLIGGGHTSversion="3.0.0";
-word OFversion="2.2.x-commit-61b850bc107bdd60bbf1bf9a6417b9faf701d128";
+word CFDEMversion="cfdem-2.7.0";
+word compatibleLIGGGHTSversion="3.0.2";
+word OFversion="2.3.x-commit-4d6f4a3115ff76ec4154c580eb041bc95ba4ec09";
Info << "\nCFDEMcoupling version: " << CFDEMversion << "\n" << endl;
Info << "\n, compatible to LIGGGHTS version: " << compatibleLIGGGHTSversion << "\n" << endl;
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
index a713045..2835854 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
@@ -73,6 +73,7 @@ Foam::cfdemCloud::cfdemCloud
IOobject::NO_WRITE
)
),
+ solveFlow_(true),
verbose_(false),
ignore_(false),
modelType_(couplingProperties_.lookup("modelType")),
@@ -95,8 +96,10 @@ Foam::cfdemCloud::cfdemCloud
momCoupleModels_(couplingProperties_.lookup("momCoupleModels")),
liggghtsCommandModelList_(liggghtsCommandDict_.lookup("liggghtsCommandModels")),
turbulenceModelType_(couplingProperties_.lookup("turbulenceModelType")),
+ cg_(1.),
cgOK_(true),
impDEMdrag_(false),
+ imExSplitFactor_(1.0),
useDDTvoidfraction_(false),
ddtVoidfraction_
(
@@ -212,7 +215,10 @@ Foam::cfdemCloud::cfdemCloud
#include "versionInfo.H"
Info << "If BC are important, please provide volScalarFields -imp/expParticleForces-" << endl;
-
+ if (couplingProperties_.found("solveFlow"))
+ solveFlow_=Switch(couplingProperties_.lookup("solveFlow"));
+ if (couplingProperties_.found("imExSplitFactor"))
+ imExSplitFactor_ = readScalar(couplingProperties_.lookup("imExSplitFactor"));
if (couplingProperties_.found("verbose")) verbose_=true;
if (couplingProperties_.found("ignore")) ignore_=true;
if (turbulenceModelType_=="LESProperties")
@@ -259,7 +265,7 @@ Foam::cfdemCloud::cfdemCloud
}
dataExchangeM().setCG();
- if (!cgOK_ && forceM(0).cg() > 1) FatalError<< "at least one of your models is not fit for cg !!!"<< abort(FatalError);
+ if (!cgOK_ && cg_ > 1) FatalError<< "at least one of your models is not fit for cg !!!"<< abort(FatalError);
}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * //
@@ -331,6 +337,24 @@ void Foam::cfdemCloud::setForces()
for (int i=0;i cfdemCloud::voidfractionNuEff(volScalarField& voidfraction) const
{
- if (modelType_=="A")
+ if (modelType_=="B")
{
return tmp
(
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
index 893a64e..36c2bed 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H
@@ -88,6 +88,8 @@ protected:
IOdictionary liggghtsCommandDict_;
+ Switch solveFlow_;
+
bool verbose_;
bool ignore_;
@@ -132,10 +134,14 @@ protected:
const word turbulenceModelType_;
+ mutable scalar cg_;
+
bool cgOK_;
bool impDEMdrag_;
+ mutable scalar imExSplitFactor_;
+
bool useDDTvoidfraction_;
mutable volScalarField ddtVoidfraction_;
@@ -185,6 +191,8 @@ protected:
virtual void setForces();
+ virtual void setParticleForceField();
+
virtual void setVectorAverages();
public:
@@ -233,10 +241,20 @@ public:
label liggghtsCommandModelIndex(word);
+ inline void setCG(double) const;
+
+ inline const scalar& cg() const;
+
+ inline const bool& impDEMdrag() const;
+
+ inline const scalar& imExSplitFactor() const;
+
inline const bool& ignore() const;
inline const fvMesh& mesh() const;
+ inline bool solveFlow() const;
+
inline bool verbose() const;
inline const IOdictionary& couplingProperties() const;
@@ -279,6 +297,10 @@ public:
virtual inline int ** particleTypes() const {return NULL;};
virtual label particleType(label index) const {return -1;};
+ //access to the particles' orientation information
+ virtual inline double ** exArray() const {return NULL;};
+ virtual vector ex(int) const {return Foam::vector(0,0,0);};
+
inline int numberOfParticles() const;
inline bool numberOfParticlesChanged() const;
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
index 698ac71..170b526 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
@@ -44,6 +44,27 @@ namespace Foam
{
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+inline void cfdemCloud::setCG(double cg) const
+{
+ cg_ = cg;
+ Info << "cg is set to: " << cg_ << endl;
+};
+
+inline const bool& cfdemCloud::impDEMdrag() const
+{
+ return impDEMdrag_;
+};
+
+inline const scalar& cfdemCloud::imExSplitFactor() const
+{
+ return imExSplitFactor_;
+};
+
+inline const scalar& cfdemCloud::cg() const
+{
+ return cg_;
+};
+
inline const bool& cfdemCloud::ignore() const
{
return ignore_;
@@ -54,6 +75,11 @@ inline const fvMesh& cfdemCloud::mesh() const
return mesh_;
}
+inline bool cfdemCloud::solveFlow() const
+{
+ return bool(solveFlow_);
+}
+
inline bool cfdemCloud::verbose() const
{
return verbose_;
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
index 3fafc2e..828a859 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
@@ -36,6 +36,8 @@ Description
#include "locateModel.H"
#include "dataExchangeModel.H"
#include "IOModel.H"
+#include "mpi.h"
+#include "IOmanip.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -207,6 +209,13 @@ void Foam::cfdemCloudIB::calcVelocityCorrection
// correct the pressure as well
p=p+phiIB/U.mesh().time().deltaT(); // do we have to account for rho here?
p.correctBoundaryConditions();
+
+ if (couplingProperties_.found("checkinterface"))
+ {
+ Info << "checking no-slip on interface..." << endl;
+// #include "checkInterfaceVelocity.H" //TODO: check carefully!
+ }
+
}
vector Foam::cfdemCloudIB::angularVelocity(int index)
diff --git a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
index e9f1998..233ee97 100644
--- a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
+++ b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
@@ -1,4 +1,5 @@
-#define version22 // currently being tested
+#define version23 // currently being tested
+//#define version22 // currently being used
//#define version21
//#define version16ext
//#define version15
@@ -9,6 +10,12 @@
//define multi sphere
//#define multisphere
+// features of 2.1 work also in 2.3
+#if defined(version23)
+ #define version21
+ #define version221
+#endif
+
// features of 2.1 work also in 2.2
#if defined(version22)
#define version21
diff --git a/src/lagrangian/cfdemParticle/etc/bashrc b/src/lagrangian/cfdemParticle/etc/bashrc
index e5e2142..35aae2d 100755
--- a/src/lagrangian/cfdemParticle/etc/bashrc
+++ b/src/lagrangian/cfdemParticle/etc/bashrc
@@ -18,7 +18,7 @@
##- source cfdem env vars
#export CFDEM_VERSION=PUBLIC
#export CFDEM_PROJECT_DIR=$HOME/CFDEM/CFDEMcoupling-$CFDEM_VERSION-$WM_PROJECT_VERSION
-#export CFDEM_SRC_DIR=$CFDEM_PROJECT_DIR/src/lagrangian/cfdemParticle
+#export CFDEM_SRC_DIR=$CFDEM_PROJECT_DIR/src
#export CFDEM_SOLVER_DIR=$CFDEM_PROJECT_DIR/applications/solvers
#export CFDEM_DOC_DIR=$CFDEM_PROJECT_DIR/doc
#export CFDEM_UT_DIR=$CFDEM_PROJECT_DIR/applications/utilities
@@ -43,8 +43,17 @@ export CFDEM_LIGGGHTS_LIB_NAME=lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME
#- CFDEM lib name
export CFDEM_LIB_NAME=lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
-#- LMP M2M lib path
+#- LMP Many2Many lib path and makefile
+export CFDEM_Many2ManyLIB_PATH=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library
+export CFDEM_Many2ManyLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME
+
+#- LMP M2M lib path and makefile
export CFDEM_M2MLIB_PATH=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayM2M/library
+export CFDEM_M2MLIB_MAKEFILENAME=$CFDEM_LIGGGHTS_MAKEFILE_NAME
+
+#- LMP POEMS lib path and makefile
+export CFDEM_POEMSLIB_PATH=$CFDEM_LIGGGHTS_SRC_DIR/../lib/poems
+export CFDEM_POEMSLIB_MAKEFILENAME=g++
#- path to test harness
export CFDEM_TEST_HARNESS_PATH=$CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
@@ -112,7 +121,7 @@ alias cfdemPullCFDEMcoupling='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/p
#- shortcut to clean CFDEM
alias cfdemCleanCFDEM='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/cleanCFDEMcoupling.sh'
-#- shortcut to compile LIGGGHTS
+#- shortcut to compile LIGGGHTS + sublibraries
alias cfdemCompLIG='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh'
#- shortcut to compile CFDEMcoupling +LIGGGHTS
@@ -130,9 +139,6 @@ alias cfdemCompCFDEMsol='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compil
#- shortcut to compile CFDEMcoupling utilities
alias cfdemCompCFDEMuti='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_uti.sh'
-#- shortcut to compile couple library
-alias cfdemCompM2M='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileM2Mlib.sh'
-
#- shortcut to test basic tutorials
alias cfdemTestTUT='bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh'
@@ -147,25 +153,24 @@ export -f cfdemLiggghts
cfdemLiggghtsPar() { mpirun -np $2 $CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME < $1; }
export -f cfdemLiggghtsPar
+#- shortcut to open files including a pattern
+cfdemGrep() { grep -rl "$1" ./* | xargs gedit; }
+export -f cfdemGrep
+
# check if the run directory exists
if [ -d "$CFDEM_PROJECT_USER_DIR" ]; then
:
else
- if [ -d "$CFDEM_PROJECT_DIR" ]; then
- cd $CFDEM_PROJECT_DIR/..
- echo "make new dirs $CFDEM_PROJECT_DIR/../$LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION ? (y/n)"
+ echo "make new dirs $CFDEM_PROJECT_USER_DIR ? (y/n)"
read YN
if [ $YN == "y" ]; then
+ cd $CFDEM_PROJECT_DIR
mkdir $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION
cd $LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION
mkdir run
mkdir -p log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
else
echo "aborted by user."
- exit
+ #exit
fi
- else
- echo "error in CFDEMcoupling's bashrc."
- exit
- fi
fi
diff --git a/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh b/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh
index 9c508c8..c3da9ab 100755
--- a/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh
+++ b/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh
@@ -36,7 +36,8 @@ echo ""
echo "library names"
echo '$CFDEM_LIGGGHTS_LIB_NAME = '"$CFDEM_LIGGGHTS_LIB_NAME"
echo '$CFDEM_LIB_NAME = '"$CFDEM_LIB_NAME"
-echo '$LD_LIBRARY_PATH = '"$LD_LIBRARY_PATH "
+echo '$LD_LIBRARY_PATH = '"$LD_LIBRARY_PATH"
+echo '$WM_NCOMPPROCS = '"$WM_NCOMPPROCS"
echo "*******************"
diff --git a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_all.sh b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_all.sh
index f841216..96c4c91 100755
--- a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_all.sh
+++ b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_all.sh
@@ -3,6 +3,7 @@
#===================================================================#
# compile routine for CFDEMcoupling + LIGGGHTS, part of CFDEMproject
# Christoph Goniva - May. 2012, DCS Computing GmbH
+# update March 2014
#===================================================================#
#- include functions
@@ -16,10 +17,15 @@ cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
mkdir -p $logDir
#================================================================================#
-# compile LIGGGHTS
+# compile LIGGGHTS src
#================================================================================#
bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh
+#================================================================================#
+# compile LIGGGHTS libraries
+#================================================================================#
+bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileLIGGGHTS_lib.sh
+
#================================================================================#
# compile CFDEMcoupling
#================================================================================#
diff --git a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
index 2938863..a8aa9c5 100755
--- a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
+++ b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
@@ -13,6 +13,10 @@ logDir="log"
cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
mkdir -p $logDir
+#- remove old success/fail logs
+rm $logDir/log_compile_results_success
+rm $logDir/log_compile_results_fail
+
CWD="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")"
NOW="$(date +"%Y-%m-%d-%H:%M")"
@@ -36,6 +40,90 @@ echo "example:"
echo "cfdemSolverPiso/dir"
echo ""
+if [ ! -f "$CWD/$whitelist" ];then
+ echo "$whitelist does not exist in $CWD"
+else
+ njobs=`wc -l < $CWD/$whitelist`
+ echo ""
+ echo "running compilation in pseudo-parallel mode of $njobs solvers"
+
+ #--------------------------------------------------------------------------------#
+ logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
+
+ ##number of solvers compiled at a time
+ nsteps=$WM_NCOMPPROCS
+ echo "do compilation on $nsteps procs"
+ nchunk=`echo $njobs/$nsteps+1 | bc`
+ if [[ $WM_NCOMPPROCS == "" ]]; then
+ echo "do compilation in serial"
+ nsteps=1
+ nchunk=1
+ else
+ echo "do compilation on $nsteps procs in $nchunk chunks"
+ fi
+
+ counter=0
+ for i in `seq $nchunk`
+ do
+
+ #wait until prev. compilation is finished
+ echo "waiting..."
+ until [ `ps -C make | wc -l` -eq 1 ];
+ do
+ sleep 2
+ done
+
+ for j in `seq $nsteps`
+ do
+ let solNr=($i-1)*$nsteps+$j
+ LINE=`head -n $solNr $CWD/$whitelist | tail -1`
+
+ # white lines
+ if [[ "$LINE" == "" ]]; then
+ continue
+ # comments
+ elif [[ "$LINE" == \#* ]]; then
+ continue
+ # paths
+ elif [[ "$LINE" == */dir ]]; then
+ #echo "change path"
+ LINE=$(echo "${LINE%????}")
+ path="$CFDEM_SOLVER_DIR/$LINE"
+ #cd $path
+ let solNr++
+ fi
+
+ if [[ "$counter" -lt "$njobs" ]]; then
+ #--------------------------------------------------------------------------------#
+ #- define variables
+ #logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
+ logfileName="log_compileCFDEMcoupling""_$LINE"
+ casePath="$CFDEM_SOLVER_DIR/$LINE"
+ headerText="$logfileName""_$LINE""-$NOW"
+ parallel="true"
+ #--------------------------------------------------------------------------------#
+
+ #echo "compiling $LINE"
+ compileSolver $logpath $logfileName $casePath $headerText $parallel
+ let counter++
+ fi
+ done
+ done
+
+ echo "compilation done."
+fi
+
+#--------------------------------------------------------------------------------#
+# loop all solvers and collect the logs
+#--------------------------------------------------------------------------------#
+
+#wait until prev. compilation is finished
+echo "waiting..."
+until [ `ps -C make | wc -l` -eq 1 ];
+do
+ sleep 2
+done
+
if [ ! -f "$CWD/$whitelist" ];then
echo "$whitelist does not exist in $CWD"
else
@@ -58,28 +146,22 @@ else
continue
# paths
elif [[ "$LINE" == */dir ]]; then
- echo "change path"
LINE=$(echo "${LINE%????}")
path="$CFDEM_SOLVER_DIR/$LINE"
- cd $path
#continue
fi
#- execute tutorial
- echo "running testcase $path"
- #bash Allrun.sh
+ echo "collecting log of $path"
#--------------------------------------------------------------------------------#
#- define variables
- logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
+ #logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
logfileName="log_compileCFDEMcoupling""_$LINE"
casePath="$CFDEM_SOLVER_DIR/$LINE"
- headerText="$logfileName""_$LINE""-$NOW"
- #--------------------------------------------------------------------------------#
- compileSolver $logpath $logfileName $casePath $headerText
-
- #echo "did the solvers compile correcty? - press enter to proceed."
- #read
+ #--------------------------------------------------------------------------------#
+ collectLogCFDEMcoupling_sol $logpath $logfileName $casePath
done
done
fi
+
diff --git a/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh b/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh
index 6914f31..a5c35c5 100755
--- a/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh
+++ b/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh
@@ -14,6 +14,12 @@ logDir="log"
cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
mkdir -p $logDir
+#================================================================================#
+# copy LIGGGHTS patch files if available
+#================================================================================#
+echo "copying patch files for LIGGGHTS if available"
+cp $CFDEM_SRC_DIR/LIGGGHTSpatch/* $CFDEM_LIGGGHTS_SRC_DIR
+
#--------------------------------------------------------------------------------#
#- define variables
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
@@ -21,4 +27,15 @@ logfileName="log_compileLIGGGHTS" #alternative: logfileName="log_compileLIGGGHTS
headerText="$logfileName""-$NOW"
#--------------------------------------------------------------------------------#
+
+#================================================================================#
+# compile LIGGGHTS src
+#================================================================================#
+
compileLIGGGHTS $logpath $logfileName $headerText
+
+
+#================================================================================#
+# compile LIGGGHTS libraries
+#================================================================================#
+bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileLIGGGHTS_lib.sh
diff --git a/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS_lib.sh b/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS_lib.sh
new file mode 100755
index 0000000..ac9f18d
--- /dev/null
+++ b/src/lagrangian/cfdemParticle/etc/compileLIGGGHTS_lib.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+#===================================================================#
+# compile routine for LIGGGHTS libraries, part of CFDEMproject
+# Christoph Goniva - March. 2014, DCS Computing GmbH
+#===================================================================#
+
+#- include functions
+source $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/functions.sh
+
+NOW="$(date +"%Y-%m-%d-%H:%M")"
+logDir="log"
+
+
+cd $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc
+mkdir -p $logDir
+
+#================================================================================#
+# compile src
+#================================================================================#
+ whitelist="$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/library-liggghts-list.txt"
+ echo ""
+ echo "Compiling sub-libraries of LIGGGHTS now..."
+ echo "Please provide the libraries to be compiled in the $CWD/$whitelist file."
+ echo "Libraries must be in the $CFDEM_LIGGGHTS_SRC_DIR/../lib directory."
+
+ if [ ! -f "$CWD/$whitelist" ];then
+ echo "$whitelist does not exist in $CWD. Nothing will be done."
+ NLINES=0
+ COUNT=0
+ else
+ NLINES=`wc -l < $CWD/$whitelist`
+ COUNT=0
+ fi
+
+ while [ $COUNT -lt $NLINES ]
+ do
+ let COUNT++
+ LINE=`head -n $COUNT $CWD/$whitelist | tail -1`
+
+ # white lines
+ if [[ "$LINE" == "" ]]; then
+ echo "compile $LINE"
+ continue
+ # comments
+ elif [[ "$LINE" == \#* ]]; then
+ continue
+ # paths
+ elif [[ "$LINE" == */dir ]]; then
+ echo "will change path..."
+ LINE=$(echo "${LINE%????}")
+ path="$CFDEM_LIGGGHTS_SRC_DIR/../lib"
+ cd $path
+ echo $PWD
+ #continue
+ fi
+
+ #--------------------------------------------------------------------------------#
+ #- define variables
+ logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
+ logfileName="log_compile$LINE""lib"
+ headerText="$logfileName""-$NOW"
+ libVarMakefileName="CFDEM_$LINE""LIB_MAKEFILENAME"
+ makeFileName="Makefile.${!libVarMakefileName}"
+ libVarName="CFDEM_$LINE""LIB_PATH"
+ libraryPath="${!libVarName}"
+ #--------------------------------------------------------------------------------#
+
+ compileLMPlib $logpath $logfileName $headerText $makeFileName $libraryPath
+ done
diff --git a/src/lagrangian/cfdemParticle/etc/cshrc b/src/lagrangian/cfdemParticle/etc/cshrc
index 0e30c68..b572662 100755
--- a/src/lagrangian/cfdemParticle/etc/cshrc
+++ b/src/lagrangian/cfdemParticle/etc/cshrc
@@ -43,8 +43,17 @@ setenv CFDEM_LIGGGHTS_LIB_NAME lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME
#- CFDEM lib name
setenv CFDEM_LIB_NAME lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
+#- LMP Many2Many lib path and makefile
+setenv CFDEM_Many2ManyLIB_PATH $CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMany2Many/library
+setenv CFDEM_Many2ManyLIB_MAKEFILENAME $CFDEM_LIGGGHTS_MAKEFILE_NAME
+
#- LMP M2M lib path
setenv CFDEM_M2MLIB_PATH $CFDEM_SRC_DIR/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayM2M/library
+setenv CFDEM_M2MLIB_MAKEFILENAME $CFDEM_LIGGGHTS_MAKEFILE_NAME
+
+#- LMP POEMS lib path
+setenv CFDEM_POEMSLIB_PATH $CFDEM_LIGGGHTS_SRC_DIR/../lib/poems
+setenv CFDEM_POEMSLIB_MAKEFILENAME g++
#- path to test harness
setenv CFDEM_TEST_HARNESS_PATH $CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION
@@ -110,7 +119,7 @@ alias cfdemPullCFDEMcoupling 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/p
#- shortcut to clean CFDEM
alias cfdemCleanCFDEM 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/cleanCFDEMcoupling.sh'
-#- shortcut to compile LIGGGHTS
+#- shortcut to compile LIGGGHTS + sublibraries
alias cfdemCompLIG 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileLIGGGHTS.sh'
#- shortcut to compile CFDEMcoupling +LIGGGHTS
@@ -128,15 +137,15 @@ alias cfdemCompCFDEMsol 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compil
#- shortcut to compile CFDEMcoupling utilities
alias cfdemCompCFDEMuti 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_uti.sh'
-#- shortcut to compile couple library
-alias cfdemCompM2M 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/compileM2Mlib.sh'
-
#- shortcut to test basic tutorials
alias cfdemTestTUT 'bash $CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/testTutorials.sh'
#- shortcut to run liggghts in serial
alias cfdemLiggghts '$CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME'
+#- shortcut to run liggghts in parallel (no fcts in csh...)
+alias cfdemLiggghtsPar 'echo "mpirun -np xx -machinefile mynodes $CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME < in.liggghts_init"'
+
#- shortcut to run liggghts in parallel
# unfortunately no functions available in csh
diff --git a/src/lagrangian/cfdemParticle/etc/functions.sh b/src/lagrangian/cfdemParticle/etc/functions.sh
index b2b6a74..9b67c3e 100755
--- a/src/lagrangian/cfdemParticle/etc/functions.sh
+++ b/src/lagrangian/cfdemParticle/etc/functions.sh
@@ -93,6 +93,7 @@ compileSolver()
casePath="$3"
headerText="$4"
#doClean="$5"
+ parallel="$5"
#--------------------------------------------------------------------------------#
#- clean up old log file
@@ -115,7 +116,13 @@ compileSolver()
rmdepall 2>&1 | tee -a $logpath/$logfileName
wclean 2>&1 | tee -a $logpath/$logfileName
#fi
- wmake 2>&1 | tee -a $logpath/$logfileName
+
+ # compile parallel?
+ if [[ $parallel == "true" ]]; then
+ wmake 2>&1 | tee -a $logpath/$logfileName &
+ else
+ wmake 2>&1 | tee -a $logpath/$logfileName
+ fi
#- keep terminal open
#read
@@ -153,11 +160,16 @@ compileLIGGGHTS()
rm $CFDEM_LIGGGHTS_SRC_DIR/"lmp_"$CFDEM_LIGGGHTS_MAKEFILE_NAME
rm $CFDEM_LIGGGHTS_SRC_DIR/"lib"$CFDEM_LIGGGHTS_LIB_NAME".a"
make clean-all 2>&1 | tee -a $logpath/$logfileName
- make $CFDEM_LIGGGHTS_MAKEFILE_NAME -j $WM_NCOMPPROCS 2>&1 | tee -a $logpath/$logfileName
+ if [[ $WM_NCOMPPROCS == "" ]]; then
+ echo "compiling LIGGGHTS on one CPU"
+ make $CFDEM_LIGGGHTS_MAKEFILE_NAME 2>&1 | tee -a $logpath/$logfileName
+ else
+ echo "compiling LIGGGHTS on $WM_NCOMPPROCS CPUs"
+ make $CFDEM_LIGGGHTS_MAKEFILE_NAME -j $WM_NCOMPPROCS 2>&1 | tee -a $logpath/$logfileName
+ fi
make makelib 2>&1 | tee -a $logpath/$logfileName
make -f Makefile.lib $CFDEM_LIGGGHTS_MAKEFILE_NAME 2>&1 | tee -a $logpath/$logfileName
}
-#==================================#
#==================================#
#- function to compile a lammps lib
@@ -306,6 +318,26 @@ cleanCFDEM()
}
#==================================#
+#==================================#
+#- function to clean CFDEMcoupling case
+
+cleanCFDEMcase()
+{
+ #--------------------------------------------------------------------------------#
+ #- define variables
+ casepath="$1"
+ #--------------------------------------------------------------------------------#
+
+ echo "deleting data at: $casePath :\n"
+ source $WM_PROJECT_DIR/bin/tools/CleanFunctions
+ cd $casePath/CFD
+ cleanCase
+ rm -r $casePath/DEM/post/*
+ echo "dummyfile" >> $casePath/DEM/post/dummy
+ cd $casePath
+ echo "done"
+}
+
#==================================#
#- function to run a DEM case
@@ -325,7 +357,7 @@ DEMrun()
debugMode="valgrind"
elif [ $debugMode == "strict" ]; then
#debugMode="valgrind --leak-check=full -v --trace-children=yes --track-origins=yes"
- debugMode="valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes"
+ debugMode="valgrind --tool=memcheck --track-origins=yes --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes"
else
debugMode=""
fi
@@ -443,7 +475,7 @@ CFDrun()
echo 2>&1 | tee -a $logpath/$logfileName
#- clean up case
- rm couplingFiles/*
+ #rm couplingFiles/*
#- run applictaion
$debugMode $solverName 2>&1 | tee -a $logpath/$logfileName
@@ -517,6 +549,7 @@ parCFDDEMrun()
nrProcs="$6"
machineFileName="$7"
debugMode="$8"
+ reconstuctCase="$9"
#--------------------------------------------------------------------------------#
if [ $debugMode == "on" ]; then
@@ -540,6 +573,14 @@ parCFDDEMrun()
#- decompose case
decomposePar
+ #- make proc dirs visible
+ count=0
+ for i in `seq $nrProcs`
+ do
+ let count=$i-1
+ (cd $casePath/CFD/processor$count && touch file.foam)
+ done
+
#- header
echo 2>&1 | tee -a /$logpath/$logfileName
echo "// $headerText //" 2>&1 | tee -a $logpath/$logfileName
@@ -553,17 +594,22 @@ parCFDDEMrun()
rm couplingFiles/*
#- run applictaion
- if [ $machineFileName == "none" ]; then
+ if [[ $machineFileName == "none" ]]; then
mpirun -np $nrProcs $debugMode $solverName -parallel 2>&1 | tee -a $logpath/$logfileName
#- reconstruct case
- #pseudoParallelRun "reconstructPar" $nrProcs
- reconstructPar
+ if [[ $reconstuctCase == "true" ]]; then
+ #pseudoParallelRun "reconstructPar" $nrProcs
+ reconstructPar
+ fi
else
mpirun -machinefile $machineFileName -np $nrProcs $debugMode $solverName -parallel 2>&1 | tee -a $logpath/$logfileName
#- reconstruct case
- reconstructPar
+ if [[ $reconstuctCase == "true" ]]; then
+ #pseudoParallelRun "reconstructPar" $nrProcs
+ reconstructPar
+ fi
fi
#- keep terminal open (if started in new terminal)
@@ -593,6 +639,35 @@ collectLog()
}
#==================================#
+#==================================#
+#- function to collect results from
+#- logfiles to one log file
+
+collectLogCFDEMcoupling_sol()
+{
+ #--------------------------------------------------------------------------------#
+ #- define variables
+ logpath="$1"
+ logfileName="$2"
+ casePath="$3"
+ #--------------------------------------------------------------------------------#
+ # read name of solver
+ SOLVERNAME=$(basename $casePath)
+
+ # read last line of log
+ LASTLINE=`tac $logpath/$logfileName | egrep -m 1 .`
+ LASTSTRING=`echo ${LASTLINE##* }`
+ LASTWORD=$(basename $LASTSTRING)
+
+ # log if compilation was success
+ if [[ $LASTWORD == $SOLVERNAME ]]; then
+ echo "$SOLVERNAME" >> $logpath/log_compile_results_success
+ else
+ echo "$SOLVERNAME" >> $logpath/log_compile_results_fail
+ fi
+}
+#==================================#
+
#==================================#
#- function to replace a line in a file where text consecutive
# the old line must look like: oldWord
diff --git a/src/lagrangian/cfdemParticle/etc/library-list.txt b/src/lagrangian/cfdemParticle/etc/library-list.txt
index 27e798d..e34c254 100644
--- a/src/lagrangian/cfdemParticle/etc/library-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/library-list.txt
@@ -1 +1,11 @@
lagrangian/cfdemParticle/dir
+
+#====================================================='
+#- RADL
+fvOptions/dir
+cylPorousMedia/dir
+
+#====================================================='
+#- other
+finiteVolume/dir
+
diff --git a/src/lagrangian/cfdemParticle/etc/solver-list.txt b/src/lagrangian/cfdemParticle/etc/solver-list.txt
index 9a3d5b0..3d6d034 100644
--- a/src/lagrangian/cfdemParticle/etc/solver-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/solver-list.txt
@@ -1,3 +1,13 @@
cfdemSolverPiso/dir
cfdemSolverIB/dir
cfdemSolverPisoScalar/dir
+cfdemSolverPimpleImEx/dir
+cfdemSolverIBInterLubrication/dir
+cfdemSolverIBScalar/dir
+cfdemSolverInterDyM/dir
+cfdemSolverInterDyMPC/dir
+cfdemSolverBubble/dir
+cfdemSolverPisoMS/dir
+cfdemSolverPimpleDyM_22x/dir
+cfdemSolverPimpleDyMMS_22x/dir
+cfdemSolverPimpleDyMScalar_22x/dir
diff --git a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
index 51e965b..92456e2 100644
--- a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
@@ -7,13 +7,51 @@
#===================================================================#
cfdemSolverPiso/settlingTestMPI/dir
-
cfdemSolverPiso/ErgunTestMPI/dir
-
cfdemSolverPiso/ErgunTestMPI_cgs/dir
-
cfdemSolverPiso/ErgunTestMPI_restart/dir
-
cfdemSolverIB/twoSpheresGlowinskiMPI/dir
-
cfdemSolverPisoScalar/packedBedTemp/dir
+
+#===================================================================#
+# RADL
+cfdemSolverPimpleImEx/settlingTestMPI/dir
+cfdemSolverPimpleImEx/ErgunTestMPI/dir
+#cfdemSolverPimpleImEx/crossFlow/dir
+#cfdemSolverIB/periodicCase/dir
+#cfdemSolverIB/cfdemIBPeriodicCubicalBox_fullyPeriodic/dir
+#cfdemSolverIBInterLubrication/twoCoatedParticlesRelMotion_smallTest/dir
+#cfdemSolverIBScalar/cfdemIBPeriodicCubicalBoxScalar/dir
+
+#===================================================================#
+# NesteJacobs
+#Projects/Neste/cfdemSolverBubble/3pFBreactor/dir
+#Projects/Neste/cfdemSolverInterDyM/3pFBreactor/dir
+
+#===================================================================#
+# not in release:
+
+#cfdemSolverPiso/settlingTestBigParticleMPI/dir
+cfdemSolverPiso/ErgunTestCG/dir
+cfdemSolverPiso/ErgunTestM2M/dir
+#cfdemSolverPiso/HopperEmptying/dir
+
+cfdemSolverPimpleDyM/ErgunTestMPI/dir
+
+#cfdemSolverPisoMS/settlingTestMPI/dir
+#cfdemSolverPisoMS/ErgunTestMPI/dir
+
+#cfdemSolverInterDyM/twoPhaseSettlingTest/dir
+#cfdemSolverInterDyM/ErgunTestMPI/dir
+#cfdemSolverInterDyM/granularPiston/dir
+#cfdemSolverInterDyM/sugarNcoffee/dir
+
+#cfdemSolverBubble/ErgunTestMPI_pureLiquid/dir
+
+#- these examples are already designed for 2.3.x
+#cfdemSolverInterDyMPC/sugarNcoffee/dir
+#cfdemSolverInterDyMPC/granularPiston/dir
+#cfdemSolverInterDyMPC/meltingPot/dir
+
+
+
diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C
index 527a0c1..c2fd0e6 100644
--- a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C
+++ b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C
@@ -45,8 +45,10 @@ defineRunTimeSelectionTable(IOModel, dictionary);
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-void IOModel::dumpDEMdata() const
-{}
+int IOModel::dumpDEMdata() const
+{
+ return -1;
+}
fileName IOModel::createTimeDir(fileName path) const
{
@@ -64,6 +66,60 @@ fileName IOModel::createLagrangianDir(fileName path) const
return cfdemCloudDirPath;
}
+fileName IOModel::buildFilePath(word dirName) const
+{
+ // create file structure
+ fileName path("");
+ if(parOutput_)
+ {
+ path=fileName(particleCloud_.mesh().time().path()/particleCloud_.mesh().time().timeName()/dirName/"particleCloud");
+ mkDir(path,0777);
+ } else
+ {
+ path=fileName("."/dirName);
+ mkDir(path,0777);
+ mkDir(fileName(path/"constant"),0777);
+ OFstream* stubFile = new OFstream(fileName(path/"particles.foam"));
+ delete stubFile;
+ }
+ return path;
+}
+
+void IOModel::streamDataToPath(fileName path, double** array,int nPProc,word name,word type,word className,word finaliser) const
+{
+ vector vec;
+ OFstream* fileStream = new OFstream(fileName(path/name));
+ *fileStream << "FoamFile\n";
+ *fileStream << "{version 2.0; format ascii;class "<< className << "; location 0;object "<< name <<";}\n";
+ *fileStream << nPProc <<"\n";
+
+
+ if(type!="origProcId")*fileStream << "(\n";
+ else if(type=="origProcId")
+ {
+ if(nPProc>0) *fileStream <<"{0}"<< "\n";
+ else *fileStream <<"{}"<< "\n";
+ }
+
+ for(int index = 0;index < particleCloud_.numberOfParticles(); ++index)
+ {
+ if (particleCloud_.cellIDs()[index][0] > -1) // particle Found
+ {
+ if (type=="scalar"){
+ *fileStream << array[index][0] << " \n";
+ }else if (type=="position" || type=="vector"){
+ for(int i=0;i<3;i++) vec[i] = array[index][i];
+ *fileStream <<"( "<< vec[0] <<" "<","0");
- streamDataToPath(lagPath_, particleCloud_.velocities(), "v","vector","vectorField","");
- streamDataToPath(lagPath_, particleCloud_.radii(), "r","scalar","scalarField","");
+ streamDataToPath(lagPath_, particleCloud_.positions(),nPProc_,"positions","vector","Cloud","0");
+ streamDataToPath(lagPath_, particleCloud_.velocities(),nPProc_,"v","vector","vectorField","");
+ streamDataToPath(lagPath_, particleCloud_.radii(),nPProc_,"r","scalar","scalarField","");
}
+ return nPProc_;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Private Member Functions
-fileName basicIO::buildFilePath(word dirName) const
-{
- // create file structure
- fileName path("");
- if(parOutput_)
- {
- path=fileName(particleCloud_.mesh().time().path()/particleCloud_.mesh().time().timeName()/dirName/"particleCloud");
- mkDir(path,0777);
- } else
- {
- path=fileName("."/dirName);
- mkDir(path,0777);
- mkDir(fileName(path/"constant"),0777);
- OFstream* stubFile = new OFstream(fileName(path/"particles.foam"));
- delete stubFile;
- }
- return path;
-}
-void basicIO::streamDataToPath(fileName path, double** array,word name,word type,word className,word finaliser) const
-{
- vector vec;
- OFstream* fileStream = new OFstream(fileName(path/name));
- *fileStream << "FoamFile\n";
- *fileStream << "{version 2.0; format ascii;class "<< className << "; location 0;object "<< name <<";}\n";
- *fileStream << nPProc_ <<"\n";
- //*fileStream << "(\n";
-
- if(type!="origProcId")*fileStream << "(\n";
- else if(type=="origProcId")
- {
- if(nPProc_>0) *fileStream <<"{0}"<< "\n";
- else *fileStream <<"{}"<< "\n";
- }
-
- for(int index = 0;index < particleCloud_.numberOfParticles(); ++index)
- {
- if (particleCloud_.cellIDs()[index][0] > -1) // particle Found
- {
- if (type=="scalar"){
- *fileStream << array[index][0] << " \n";
- }else if (type=="position" || type=="vector"){
- for(int i=0;i<3;i++) vec[i] = array[index][i];
- *fileStream <<"( "<< vec[0] <<" "<= 0)
+ {
+ for(int i=0;i<3;i++) valueVec[i] = value[index][i];
+ weightP = weight[index][subCell];
+ field[cellI] += valueVec*weightP;
+ }
+ }
+
+ // correct cell values to patches
+ field.correctBoundaryConditions();
+}
+
void averagingModel::setScalarSum
(
volScalarField& field,
@@ -216,7 +245,7 @@ void averagingModel::setDSauter
scalar radiusPow3(-1);
scalar volume(-1);
- scalar scale_ = particleCloud_.forceM(0).cg(); //scaling of parcel vs. primary particle diameter
+ scalar scale_ = particleCloud_.cg(); //scaling of parcel vs. primary particle diameter
dSauter = 0.0 * dSauter; //set to zero, because we will use it to calc sum(wi*ri^3)
volScalarField riPower2
(
@@ -301,7 +330,7 @@ void Foam::averagingModel::undoWeightFields(double**const& mask) const
tmp Foam::averagingModel::UsInterp() const
{
- tmp tsource
+ tmp tsource
(
new volVectorField
(
diff --git a/src/lagrangian/cfdemParticle/subModels/averagingModel/averagingModel/averagingModel.H b/src/lagrangian/cfdemParticle/subModels/averagingModel/averagingModel/averagingModel.H
index 70021ae..cf1afb1 100644
--- a/src/lagrangian/cfdemParticle/subModels/averagingModel/averagingModel/averagingModel.H
+++ b/src/lagrangian/cfdemParticle/subModels/averagingModel/averagingModel/averagingModel.H
@@ -160,6 +160,14 @@ public:
double**const& mask
) const;
+ void setVectorSumSimple
+ (
+ volVectorField& field,
+ double**& value,
+ double**& weight,
+ int np
+ ) const;
+
void setScalarSum
(
volScalarField& field,
diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C
index 8bc84fc..1947682 100644
--- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C
+++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C
@@ -81,39 +81,28 @@ twoWayMPI::twoWayMPI
MPI_Comm_split(MPI_COMM_WORLD,liggghts,0,&comm_liggghts);
// open LIGGGHTS input script
- FILE *fp=NULL;
+ char *liggghtsPathChar = new char[256];
+ int n = 0;
if (me == 0)
{
// read path from dictionary
const fileName liggghtsPath(propsDict_.lookup("liggghtsPath"));
- char * liggghtsPathChar = (char*)liggghtsPath.c_str();
+ strcpy(liggghtsPathChar, liggghtsPath.c_str());
+ n = strlen(liggghtsPathChar) + 1;
Info<<"Executing input script '"<< liggghtsPath.c_str() <<"'"<input->one(line);
+ MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);
+ if (n > 0) {
+ MPI_Bcast(liggghtsPathChar,n,MPI_CHAR,0,MPI_COMM_WORLD);
+ if (liggghts == 1) lmp->input->file(liggghtsPathChar);
}
+ delete [] liggghtsPathChar;
+
// get DEM time step size
DEMts_ = lmp->update->dt;
checkTSsize();
@@ -327,23 +316,25 @@ bool Foam::twoWayMPI::couple() const
}
// models with exact timing exists
+ label commandLines(0);
if(exactTiming)
{
// extension for more liggghtsCommands active the same time:
// sort interrupt list within this run period
// keep track of corresponding liggghtsCommand
int DEMstepsRun(0);
+
forAll(interruptTimes,j)
{
// set run command till interrupt
DEMstepsRun += DEMstepsToInterrupt[j];
particleCloud_.liggghtsCommand()[runComNr]().set(DEMstepsToInterrupt[j]);
- const char* command = particleCloud_.liggghtsCommand()[runComNr]().command();
+ const char* command = particleCloud_.liggghtsCommand()[runComNr]().command(0);
Info << "Executing run command: '"<< command <<"'"<< endl;
lmp->input->one(command);
// run liggghts command with exact timing
- command = particleCloud_.liggghtsCommand()[lcModel[j]]().command();
+ command = particleCloud_.liggghtsCommand()[lcModel[j]]().command(0);
Info << "Executing command: '"<< command <<"'"<< endl;
lmp->input->one(command);
}
@@ -352,7 +343,7 @@ bool Foam::twoWayMPI::couple() const
if(particleCloud_.liggghtsCommand()[runComNr]().runCommand(couplingStep()))
{
particleCloud_.liggghtsCommand()[runComNr]().set(couplingInterval() - DEMstepsRun);
- const char* command = particleCloud_.liggghtsCommand()[runComNr]().command();
+ const char* command = particleCloud_.liggghtsCommand()[runComNr]().command(0);
Info << "Executing run command: '"<< command <<"'"<< endl;
lmp->input->one(command);
}
@@ -366,9 +357,13 @@ bool Foam::twoWayMPI::couple() const
particleCloud_.liggghtsCommand()[i]().runCommand(couplingStep())
)
{
- const char* command = particleCloud_.liggghtsCommand()[i]().command();
- Info << "Executing command: '"<< command <<"'"<< endl;
- lmp->input->one(command);
+ commandLines=particleCloud_.liggghtsCommand()[i]().commandLines();
+ for(int j=0;jinput->one(command);
+ }
}
}
}
@@ -379,9 +374,13 @@ bool Foam::twoWayMPI::couple() const
{
if(particleCloud_.liggghtsCommand()[i]().runCommand(couplingStep()))
{
- const char* command = particleCloud_.liggghtsCommand()[i]().command();
- Info << "Executing command: '"<< command <<"'"<< endl;
- lmp->input->one(command);
+ commandLines=particleCloud_.liggghtsCommand()[i]().commandLines();
+ for(int j=0;jinput->one(command);
+ }
}
}
}
diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.H b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.H
index 0afe397..2efc605 100644
--- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.H
+++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.H
@@ -167,7 +167,7 @@ public:
word myType() const{return typeName; };
- void setCG() const { particleCloud_.forceM(0).setCG(lmp->force->cg()); };
+ void setCG() const { particleCloud_.setCG(lmp->force->cg()); };
};
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.C
index abf2ef5..b5b7c4c 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.C
@@ -71,7 +71,12 @@ DiFeliceDrag::DiFeliceDrag
rho_(sm.mesh().lookupObject (densityFieldName_)),
voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")),
voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)),
- interpolation_(false)
+ interpolation_(false),
+ splitImplicitExplicit_(false),
+ UsFieldName_(propsDict_.lookup("granVelFieldName")),
+ UsField_(sm.mesh().lookupObject (UsFieldName_)),
+ scaleDia_(1.),
+ scaleDrag_(1.)
{
//Append the field names to be probed
particleCloud_.probeM().initialize(typeName, "diFeliceDrag.logDat");
@@ -89,7 +94,18 @@ DiFeliceDrag::DiFeliceDrag
Info << "using interpolated value of U." << endl;
interpolation_=true;
}
- particleCloud_.checkCG(false);
+ if (propsDict_.found("splitImplicitExplicit"))
+ {
+ Info << "will split implicit / explicit force contributions." << endl;
+ splitImplicitExplicit_ = true;
+ if(!interpolation_)
+ Info << "WARNING: will only consider fluctuating particle velocity in implicit / explicit force split!" << endl;
+ }
+ particleCloud_.checkCG(true);
+ if (propsDict_.found("scale"))
+ scaleDia_=scalar(readScalar(propsDict_.lookup("scale")));
+ if (propsDict_.found("scaleDrag"))
+ scaleDrag_=scalar(readScalar(propsDict_.lookup("scaleDrag")));
}
@@ -103,6 +119,13 @@ DiFeliceDrag::~DiFeliceDrag()
void DiFeliceDrag::setForce() const
{
+ if (scaleDia_ > 1)
+ Info << "DiFeliceDrag using scale = " << scaleDia_ << endl;
+ else if (particleCloud_.cg() > 1){
+ scaleDia_=particleCloud_.cg();
+ Info << "DiFeliceDrag using scale from liggghts cg = " << scaleDia_ << endl;
+ }
+
// get viscosity field
#ifdef comp
const volScalarField nufField = particleCloud_.turbulence().mu() / rho_;
@@ -122,7 +145,12 @@ void DiFeliceDrag::setForce() const
scalar rho(0);
scalar magUr(0);
scalar Rep(0);
- scalar Cd(0);
+ scalar Cd(0);
+
+ vector UfluidFluct(0,0,0);
+ vector UsFluct(0,0,0);
+ vector dragExplicit(0,0,0);
+ scalar dragCoefficient(0);
interpolationCellPoint voidfractionInterpolator_(voidfraction_);
interpolationCellPoint UInterpolator_(U_);
@@ -141,7 +169,7 @@ void DiFeliceDrag::setForce() const
{
if(interpolation_)
{
- position = particleCloud_.position(index);
+ position = particleCloud_.position(index);
voidfraction = voidfractionInterpolator_.interpolate(position,cellI);
Ufluid = UInterpolator_.interpolate(position,cellI);
}else
@@ -158,11 +186,13 @@ void DiFeliceDrag::setForce() const
magUr = mag(Ur);
Rep = 0;
Cd = 0;
+ dragCoefficient = 0;
if (magUr > 0)
{
+
// calc particle Re Nr
- Rep = ds*voidfraction*magUr/(nuf+SMALL);
+ Rep = ds/scaleDia_*voidfraction*magUr/(nuf+SMALL);
// calc fluid drag Coeff
Cd = sqr(0.63 + 4.8/sqrt(Rep));
@@ -171,24 +201,44 @@ void DiFeliceDrag::setForce() const
scalar Xi = 3.7 - 0.65 * exp(-sqr(1.5-log10(Rep))/2);
// calc particle's drag
- drag = 0.125*Cd*rho*M_PI*ds*ds*pow(voidfraction,(2-Xi))*magUr*Ur;
-
+ dragCoefficient = 0.125*Cd*rho
+ *M_PI
+ *ds*ds
+ *scaleDia_
+ *pow(voidfraction,(2-Xi))*magUr
+ *scaleDrag_;
if (modelType_=="B")
- drag /= voidfraction;
+ dragCoefficient /= voidfraction;
+
+ drag = dragCoefficient*Ur; //total drag force!
+
+ //Split forces
+ if(splitImplicitExplicit_)
+ {
+ UfluidFluct = Ufluid - U_[cellI];
+ UsFluct = Us - UsField_[cellI];
+ dragExplicit = dragCoefficient*(UfluidFluct - UsFluct); //explicit part of force
+ }
}
- if(verbose_ && index >100 && index <102)
+ if(verbose_ && index >-1 && index <102)
{
Pout << "index = " << index << endl;
Pout << "Us = " << Us << endl;
Pout << "Ur = " << Ur << endl;
- Pout << "ds = " << ds << endl;
+ Pout << "ds/scale = " << ds/scaleDia_ << endl;
Pout << "rho = " << rho << endl;
Pout << "nuf = " << nuf << endl;
Pout << "voidfraction = " << voidfraction << endl;
Pout << "Rep = " << Rep << endl;
Pout << "Cd = " << Cd << endl;
- Pout << "drag = " << drag << endl;
+ Pout << "drag (total) = " << drag << endl;
+ if(splitImplicitExplicit_)
+ {
+ Pout << "UfluidFluct = " << UfluidFluct << endl;
+ Pout << "UsFluct = " << UsFluct << endl;
+ Pout << "dragExplicit = " << dragExplicit << endl;
+ }
}
//Set value fields and write the probe
@@ -205,7 +255,15 @@ void DiFeliceDrag::setForce() const
}
// set force on particle
if(treatExplicit_) for(int j=0;j<3;j++) expForces()[index][j] += drag[j];
- else for(int j=0;j<3;j++) impForces()[index][j] += drag[j];
+ else //implicit treatment, taking explicit force contribution into account
+ {
+ for(int j=0;j<3;j++)
+ {
+ impForces()[index][j] += drag[j] - dragExplicit[j]; //only consider implicit part!
+ expForces()[index][j] += dragExplicit[j];
+ }
+ }
+
for(int j=0;j<3;j++) DEMForces()[index][j] += drag[j];
}
//}
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.H b/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.H
index 45a285a..5d788bf 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/DiFeliceDrag/DiFeliceDrag.H
@@ -76,6 +76,16 @@ private:
bool interpolation_; // use interpolated U field values
+ bool splitImplicitExplicit_; // use splitting of implicit and explict force contribution
+
+ word UsFieldName_;
+
+ const volVectorField& UsField_; // the average particle velocity field (for implicit/expliti force split)
+
+ mutable scalar scaleDia_;
+
+ mutable scalar scaleDrag_;
+
public:
//- Runtime type information
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
index bd7337a..c4f8e88 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
@@ -68,19 +68,39 @@ GidaspowDrag::GidaspowDrag
U_(sm.mesh().lookupObject (velFieldName_)),
densityFieldName_(propsDict_.lookup("densityFieldName")),
rho_(sm.mesh().lookupObject (densityFieldName_)),
- phi_(readScalar(propsDict_.lookup("phi")))
+ voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")),
+ voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)),
+ phi_(readScalar(propsDict_.lookup("phi"))),
+ interpolation_(false),
+ scaleDia_(1.),
+ scaleDrag_(1.)
{
//Append the field names to be probed
particleCloud_.probeM().initialize(typeName, "gidaspowDrag.logDat");
- particleCloud_.probeM().vectorFields_.append("dragForce"); //first entry must the be the force
- particleCloud_.probeM().vectorFields_.append("Urel"); //other are debug
- particleCloud_.probeM().scalarFields_.append("KslLag"); //other are debug
- particleCloud_.probeM().scalarFields_.append("voidfraction"); //other are debug
+ particleCloud_.probeM().vectorFields_.append("dragForce"); //first entry must be the force
+ particleCloud_.probeM().vectorFields_.append("Urel");
+ particleCloud_.probeM().scalarFields_.append("Rep");
+ particleCloud_.probeM().scalarFields_.append("betaP");
+ particleCloud_.probeM().scalarFields_.append("voidfraction");
particleCloud_.probeM().writeHeader();
if (propsDict_.found("verbose")) verbose_=true;
if (propsDict_.found("treatExplicit")) treatExplicit_=true;
- particleCloud_.checkCG(false);
+ if (propsDict_.found("interpolation")) interpolation_=true;
+ if (propsDict_.found("implDEM"))
+ {
+ treatExplicit_=false;
+ implDEM_=true;
+ setImpDEMdrag();
+ Info << "Using implicit DEM drag formulation." << endl;
+ }
+ particleCloud_.checkCG(true);
+ if (propsDict_.found("scale"))
+ scaleDia_=scalar(readScalar(propsDict_.lookup("scale")));
+ if (propsDict_.found("scaleDrag"))
+ scaleDrag_=scalar(readScalar(propsDict_.lookup("scaleDrag")));
+
+ Info << "Gidaspow - interpolation switch: " << interpolation_ << endl;
}
@@ -94,6 +114,13 @@ GidaspowDrag::~GidaspowDrag()
void GidaspowDrag::setForce() const
{
+ if (scaleDia_ > 1)
+ Info << "Gidaspow using scale = " << scaleDia_ << endl;
+ else if (particleCloud_.cg() > 1){
+ scaleDia_=particleCloud_.cg();
+ Info << "Gidaspow using scale from liggghts cg = " << scaleDia_ << endl;
+ }
+
// get viscosity field
#ifdef comp
const volScalarField nufField = particleCloud_.turbulence().mu() / rho_;
@@ -101,51 +128,119 @@ void GidaspowDrag::setForce() const
const volScalarField& nufField = particleCloud_.turbulence().nu();
#endif
+ vector position(0,0,0);
+ scalar voidfraction(1);
+ vector Ufluid(0,0,0);
+ vector drag(0,0,0);
+ label cellI=0;
+
+ vector Us(0,0,0);
+ vector Ur(0,0,0);
+ scalar ds(0);
+ scalar nuf(0);
+ scalar rho(0);
+ scalar magUr(0);
+ scalar Rep(0);
+ scalar Vs(0);
+ scalar localPhiP(0);
+
+ scalar CdMagUrLag(0); //Cd of the very particle
+ scalar KslLag(0); //momentum exchange of the very particle (per unit volume)
+ scalar betaP(0); //momentum exchange of the very particle
+
+ interpolationCellPoint voidfractionInterpolator_(voidfraction_);
+ interpolationCellPoint UInterpolator_(U_);
+
#include "setupProbeModel.H"
for(int index = 0;index < particleCloud_.numberOfParticles(); ++index)
{
//if(mask[index][0])
//{
- vector drag(0,0,0);
- label cellI = particleCloud_.cellIDs()[index][0];
+ cellI = particleCloud_.cellIDs()[index][0];
+ drag = vector(0,0,0);
+ betaP = 0;
+ Vs = 0;
+ Ufluid =vector(0,0,0);
+ voidfraction=0;
if (cellI > -1) // particle Found
{
- vector Us = particleCloud_.velocity(index);
- vector Ur = U_[cellI]-Us;
- scalar magUr = mag(Ur);
- scalar ds = 2*particleCloud_.radius(index)*phi_;
- scalar voidfraction = particleCloud_.voidfraction(index);
- scalar rho = rho_[cellI];
- scalar nuf = nufField[cellI];
- scalar CdMagUrLag=0;//Cd of the very particle
- scalar KslLag; //momentum exchange of the very particle
+ if(interpolation_)
+ {
+ position = particleCloud_.position(index);
+ voidfraction = voidfractionInterpolator_.interpolate(position,cellI);
+ Ufluid = UInterpolator_.interpolate(position,cellI);
+ //Ensure interpolated void fraction to be meaningful
+ // Info << " --> voidfraction: " << voidfraction << endl;
+ if(voidfraction>1.00) voidfraction = 1.0;
+ if(voidfraction<0.10) voidfraction = 0.10;
+ }
+ else
+ {
+ voidfraction = voidfraction_[cellI];
+ Ufluid = U_[cellI];
+ }
+
+ Us = particleCloud_.velocity(index);
+ Ur = Ufluid-Us;
+ magUr = mag(Ur);
+ ds = 2*particleCloud_.radius(index)*phi_;
+ rho = rho_[cellI];
+ nuf = nufField[cellI];
+
+ Rep=0.0;
+ localPhiP = 1.0f-voidfraction+SMALL;
+ Vs = ds*ds*ds*M_PI/6;
+
+ //Compute specific drag coefficient (i.e., Force per unit slip velocity and per m³ SUSPENSION)
if(voidfraction > 0.8) //dilute
{
- CdMagUrLag = (24.0*nuf/(ds*voidfraction))
- *(scalar(1)+0.15*Foam::pow(ds*voidfraction*magUr/nuf, 0.687));
- KslLag = 0.75*((1-voidfraction)*rho*voidfraction*CdMagUrLag
- /(ds*Foam::pow(voidfraction,2.65)));
+ Rep=ds/scaleDia_*voidfraction*magUr/nuf;
+ CdMagUrLag = (24.0*nuf/(ds/scaleDia_*voidfraction)) //1/magUr missing here, but compensated in expression for KslLag!
+ *(scalar(1)+0.15*Foam::pow(Rep, 0.687));
+
+ KslLag = 0.75*(
+ rho*localPhiP*voidfraction*CdMagUrLag
+ /
+ (ds/scaleDia_*Foam::pow(voidfraction,2.65))
+ );
}
else //dense
{
- KslLag = (150*Foam::pow(1-voidfraction,2)*nuf*rho)/
- (voidfraction*ds*ds+SMALL)
+ KslLag = (150*Foam::pow(localPhiP,2)*nuf*rho)/
+ (voidfraction*ds/scaleDia_*ds/scaleDia_+SMALL)
+
- (1.75*(1-voidfraction) * magUr * rho)/
- ((ds));
+ (1.75*(localPhiP) * magUr * rho)/
+ ((ds/scaleDia_));
}
- //divide by number of particles per unit volume - Enwald (Int J Multiphase Flow, 22, 21-61, pp39
- KslLag /= (particleCloud_.averagingM().UsWeightField()[cellI]/particleCloud_.mesh().V()[cellI]);
+ // calc particle's drag coefficient (i.e., Force per unit slip velocity and per m³ PARTICLE)
+ betaP = KslLag / localPhiP;
- drag = KslLag*Ur;
+ // calc particle's drag
+ drag = Vs * betaP * Ur * scaleDrag_;
if (modelType_=="B")
drag /= voidfraction;
+ if(verbose_ && index >=0 && index <2)
+ {
+ Pout << "cellI = " << cellI << endl;
+ Pout << "index = " << index << endl;
+ Pout << "Us = " << Us << endl;
+ Pout << "Ur = " << Ur << endl;
+ Pout << "ds = " << ds << endl;
+ Pout << "ds/scale = " << ds/scaleDia_ << endl;
+ Pout << "phi = " << phi_ << endl;
+ Pout << "rho = " << rho << endl;
+ Pout << "nuf = " << nuf << endl;
+ Pout << "voidfraction = " << voidfraction << endl;
+ Pout << "Rep = " << Rep << endl;
+ Pout << "betaP = " << betaP << endl;
+ Pout << "drag = " << drag << endl;
+ }
//Set value fields and write the probe
if(probeIt_)
@@ -153,7 +248,8 @@ void GidaspowDrag::setForce() const
#include "setupProbeModelfields.H"
vValues.append(drag); //first entry must the be the force
vValues.append(Ur);
- sValues.append(KslLag);
+ sValues.append(Rep);
+ sValues.append(betaP);
sValues.append(voidfraction);
particleCloud_.probeM().writeProbe(index, sValues, vValues);
}
@@ -162,7 +258,21 @@ void GidaspowDrag::setForce() const
// set force on particle
if(treatExplicit_) for(int j=0;j<3;j++) expForces()[index][j] += drag[j];
else for(int j=0;j<3;j++) impForces()[index][j] += drag[j];
- for(int j=0;j<3;j++) DEMForces()[index][j] += drag[j];
+
+ // set Cd
+ if(implDEM_)
+ {
+ for(int j=0;j<3;j++) fluidVel()[index][j]=Ufluid[j];
+
+ if (modelType_=="B" && cellI > -1)
+ Cds()[index][0] = Vs*betaP/voidfraction*scaleDrag_;
+ else
+ Cds()[index][0] = Vs*betaP*scaleDrag_;
+
+ }else{
+ for(int j=0;j<3;j++) DEMForces()[index][j] += drag[j];
+ }
+
//}// end if mask
}// end loop particles
}
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
index c8c0ef1..978ca69 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
@@ -29,6 +29,8 @@ Description
and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER).
Gidaspow drag law
+ - only valid for low-Reynolds number systems (Re_p<1000)
+ - including interpolation of the velocity to the exact position
Class
GidaspowDrag
@@ -42,6 +44,7 @@ SourceFiles
#define GidaspowDrag_H
#include "forceModel.H"
+#include "interpolationCellPoint.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -69,8 +72,18 @@ private:
const volScalarField& rho_;
+ word voidfractionFieldName_;
+
+ const volScalarField& voidfraction_;
+
const scalar phi_;
+ bool interpolation_; // use interpolated field values
+
+ mutable scalar scaleDia_;
+
+ mutable scalar scaleDrag_;
+
public:
//- Runtime type information
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C
index 56652ce..9e104b9 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C
@@ -72,7 +72,8 @@ KochHillDrag::KochHillDrag
voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")),
voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)),
interpolation_(false),
- scale_(1.)
+ scaleDia_(1.),
+ scaleDrag_(1.)
{
//Append the field names to be probed
particleCloud_.probeM().initialize(typeName, "kochHillDrag.logDat");
@@ -96,7 +97,9 @@ KochHillDrag::KochHillDrag
particleCloud_.checkCG(true);
if (propsDict_.found("scale"))
- scale_=scalar(readScalar(propsDict_.lookup("scale")));
+ scaleDia_=scalar(readScalar(propsDict_.lookup("scale")));
+ if (propsDict_.found("scaleDrag"))
+ scaleDrag_=scalar(readScalar(propsDict_.lookup("scaleDrag")));
}
@@ -110,11 +113,11 @@ KochHillDrag::~KochHillDrag()
void KochHillDrag::setForce() const
{
- if (scale_ > 1)
- Info << "KochHill using scale = " << scale_ << endl;
- else if (cg() > 1){
- scale_=cg();
- Info << "KochHill using scale from liggghts cg = " << scale_ << endl;
+ if (scaleDia_ > 1)
+ Info << "KochHill using scale = " << scaleDia_ << endl;
+ else if (particleCloud_.cg() > 1){
+ scaleDia_=particleCloud_.cg();
+ Info << "KochHill using scale from liggghts cg = " << scaleDia_ << endl;
}
// get viscosity field
@@ -155,6 +158,7 @@ void KochHillDrag::setForce() const
betaP = 0;
Vs = 0;
Ufluid =vector(0,0,0);
+ voidfraction=0;
if (cellI > -1) // particle Found
{
@@ -186,7 +190,7 @@ void KochHillDrag::setForce() const
if (magUr > 0)
{
// calc particle Re Nr
- Rep = ds/scale_*voidfraction*magUr/(nuf+SMALL);
+ Rep = ds/scaleDia_*voidfraction*magUr/(nuf+SMALL);
// calc model coefficient F0
scalar F0=0.;
@@ -205,14 +209,14 @@ void KochHillDrag::setForce() const
// calc model coefficient F3
scalar F3 = 0.0673+0.212*volumefraction+0.0232/pow(voidfraction,5);
- //Calculate F in the formulation of van der Hoef et al. (JFM 528:233-254)
+ //Calculate F
scalar F = voidfraction * (F0 + 0.5*F3*Rep);
// calc drag model coefficient betaP
- betaP = 18.*nuf*rho/(ds/scale_*ds/scale_)*voidfraction*F;
+ betaP = 18.*nuf*rho/(ds/scaleDia_*ds/scaleDia_)*voidfraction*F;
// calc particle's drag
- drag = Vs*betaP*Ur;
+ drag = Vs*betaP*Ur*scaleDrag_;
if (modelType_=="B")
drag /= voidfraction;
@@ -225,11 +229,12 @@ void KochHillDrag::setForce() const
Pout << "Us = " << Us << endl;
Pout << "Ur = " << Ur << endl;
Pout << "ds = " << ds << endl;
- Pout << "ds/scale = " << ds/scale_ << endl;
+ Pout << "ds/scale = " << ds/scaleDia_ << endl;
Pout << "rho = " << rho << endl;
Pout << "nuf = " << nuf << endl;
Pout << "voidfraction = " << voidfraction << endl;
Pout << "Rep = " << Rep << endl;
+ Pout << "betaP = " << betaP << endl;
Pout << "drag = " << drag << endl;
}
@@ -254,10 +259,10 @@ void KochHillDrag::setForce() const
{
for(int j=0;j<3;j++) fluidVel()[index][j]=Ufluid[j];
- if (modelType_=="B")
- Cds()[index][0] = Vs*betaP/voidfraction;
+ if (modelType_=="B" && cellI > -1)
+ Cds()[index][0] = Vs*betaP/voidfraction*scaleDrag_;
else
- Cds()[index][0] = Vs*betaP;
+ Cds()[index][0] = Vs*betaP*scaleDrag_;
}else{
for(int j=0;j<3;j++) DEMForces()[index][j] += drag[j];
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.H b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.H
index a1750c7..8937a45 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.H
@@ -80,7 +80,9 @@ private:
bool interpolation_; // use interpolated field values
- mutable scalar scale_;
+ mutable scalar scaleDia_;
+
+ mutable scalar scaleDrag_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.C b/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.C
index 996daed..d92e225 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.C
@@ -63,10 +63,11 @@ LaEuScalarTemp::LaEuScalarTemp
:
forceModel(dict,sm),
propsDict_(dict.subDict(typeName + "Props")),
+ verbose_(false),
tempFieldName_(propsDict_.lookup("tempFieldName")),
tempField_(sm.mesh().lookupObject (tempFieldName_)),
voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")),
- voidfractionField_(sm.mesh().lookupObject (voidfractionFieldName_)),
+ voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)),
maxSource_(1e30),
velFieldName_(propsDict_.lookup("velFieldName")),
U_(sm.mesh().lookupObject (velFieldName_)),
@@ -77,7 +78,8 @@ LaEuScalarTemp::LaEuScalarTemp
lambda_(readScalar(propsDict_.lookup("lambda"))),
Cp_(readScalar(propsDict_.lookup("Cp"))),
densityFieldName_(propsDict_.lookup("densityFieldName")),
- rho_(sm.mesh().lookupObject (densityFieldName_))
+ rho_(sm.mesh().lookupObject (densityFieldName_)),
+ interpolation_(false)
{
allocateMyArrays();
@@ -86,6 +88,11 @@ LaEuScalarTemp::LaEuScalarTemp
maxSource_=readScalar(propsDict_.lookup ("maxSource"));
Info << "limiting eulerian source field to: " << maxSource_ << endl;
}
+ if (propsDict_.found("interpolation")) interpolation_=true;
+ if (propsDict_.found("verbose")) verbose_=true;
+
+Info << "verbose_" << verbose_ << endl;
+
particleCloud_.checkCG(false);
}
@@ -132,56 +139,75 @@ void LaEuScalarTemp::manipulateScalarField(volScalarField& EuField) const
#endif
// calc La based heat flux
- vector Us;
- scalar magUr;
- scalar alpha;
- scalar rs;
- scalar As;
- scalar nuf;
- scalar Rep;
- scalar Pr;
+ vector position(0,0,0);
+ scalar voidfraction(1);
+ vector Ufluid(0,0,0);
+ scalar Tfluid(0);
+ label cellI=0;
+ vector Us(0,0,0);
+ scalar ds(0);
+ scalar nuf(0);
+ scalar magUr(0);
+ scalar As(0);
+ scalar Rep(0);
+ scalar Pr(0);
+ scalar Nup(0);
scalar n = 3.5; // model parameter
- scalar Nup;
+
+ interpolationCellPoint voidfractionInterpolator_(voidfraction_);
+ interpolationCellPoint UInterpolator_(U_);
+ interpolationCellPoint TInterpolator_(tempField_);
for(int index = 0;index < particleCloud_.numberOfParticles(); ++index)
{
//if(particleCloud_.regionM().inRegion()[index][0])
//{
- label cellI = particleCloud_.cellIDs()[index][0];
-
+ cellI = particleCloud_.cellIDs()[index][0];
if(cellI >= 0)
{
+ if(interpolation_)
+ {
+ position = particleCloud_.position(index);
+ voidfraction = voidfractionInterpolator_.interpolate(position,cellI);
+ Ufluid = UInterpolator_.interpolate(position,cellI);
+ Tfluid = TInterpolator_.interpolate(position,cellI);
+ }else
+ {
+ voidfraction = voidfraction_[cellI];
+ Ufluid = U_[cellI];
+ Tfluid = tempField_[cellI];
+ }
+
// calc relative velocity
Us = particleCloud_.velocity(index);
- magUr = mag(U_[cellI]-Us);
- alpha = voidfractionField_[cellI];
- rs = particleCloud_.radius(index);
- As = 4*rs*rs*M_PI;
+ magUr = mag(Ufluid-Us);
+ ds = 2*particleCloud_.radius(index);
+ As = ds*ds*M_PI;
nuf = nufField[cellI];
- Rep = 2*rs*magUr/nuf;
+ Rep = ds*magUr/nuf;
Pr = Cp_*nuf*rho_[cellI]/lambda_;
if (Rep < 200)
{
- Nup = 2+0.6*pow(alpha,n)*sqrt(Rep)*pow(Pr,0.33);
+ Nup = 2+0.6*pow(voidfraction,n)*sqrt(Rep)*pow(Pr,0.33);
}
else if (Rep < 1500)
{
- Nup = 2+0.5*pow(alpha,n)*sqrt(Rep)*pow(Pr,0.33)
- +0.02*pow(alpha,n)*pow(Rep,0.8)*pow(Pr,0.33);
+ Nup = 2+0.5*pow(voidfraction,n)*sqrt(Rep)*pow(Pr,0.33)
+ +0.02*pow(voidfraction,n)*pow(Rep,0.8)*pow(Pr,0.33);
}
else
{
- Nup = 2+0.000045*pow(alpha,n)*pow(Rep,1.8);
+ Nup = 2+0.000045*pow(voidfraction,n)*pow(Rep,1.8);
}
- scalar h = lambda_*Nup/(2*rs);
+ scalar h = lambda_*Nup/(ds);
// calc convective heat flux [W]
- scalar partHeatFlux = h * As * (tempField_[cellI] - partTemp_[index][0]);
+ scalar partHeatFlux = h * As * (Tfluid - partTemp_[index][0]);
partHeatFlux_[index][0] = partHeatFlux;
- /*if(index == 101)
+ if(verbose_ && index >=0 && index <2)
{
Info << "partHeatFlux = " << partHeatFlux << endl;
Info << "magUr = " << magUr << endl;
@@ -190,10 +216,10 @@ void LaEuScalarTemp::manipulateScalarField(volScalarField& EuField) const
Info << "Rep = " << Rep << endl;
Info << "Pr = " << Pr << endl;
Info << "Nup = " << Nup << endl;
- Info << "alpha = " << alpha << endl;
+ Info << "voidfraction = " << voidfraction << endl;
Info << "partTemp_[index][0] = " << partTemp_[index][0] << endl ;
- Info << "ptempField_[cellI] = " << tempField_[cellI] << endl ;
- }*/
+ Info << "Tfluid = " << Tfluid << endl ;
+ }
}
//}
}
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.H b/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.H
index f96c933..fe72dc0 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/LaEuScalarTemp/LaEuScalarTemp.H
@@ -46,6 +46,7 @@ SourceFiles
#include "forceModel.H"
#include "averagingModel.H"
+#include "interpolationCellPoint.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -64,13 +65,15 @@ private:
dictionary propsDict_;
+ bool verbose_;
+
word tempFieldName_;
const volScalarField& tempField_; // ref to temperature field
word voidfractionFieldName_;
- const volScalarField& voidfractionField_; // ref to voidfraction field
+ const volScalarField& voidfraction_; // ref to voidfraction field
scalar maxSource_; // max (limited) value of src field
@@ -94,6 +97,8 @@ private:
const volScalarField& rho_; // ref to fluid density field
+ bool interpolation_; // use interpolated field values
+
void allocateMyArrays() const;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/checkCouplingInterval/checkCouplingInterval.C b/src/lagrangian/cfdemParticle/subModels/forceModel/checkCouplingInterval/checkCouplingInterval.C
index 6d61e0e..97ad879 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/checkCouplingInterval/checkCouplingInterval.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/checkCouplingInterval/checkCouplingInterval.C
@@ -99,7 +99,7 @@ void checkCouplingInterval::setForce() const
if (cellI > -1) // particle Found
{
- scaledRad = particleCloud_.radius(index)/cg();
+ scaledRad = particleCloud_.radius(index)/particleCloud_.cg();
tauP = rhoP_*4*scaledRad*scaledRad/
(18 * nufField[cellI] * rho_[cellI]);
minTauP = min(minTauP,tauP);
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C
index d4b94e3..d87a304 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C
@@ -85,8 +85,8 @@ forceModel::forceModel
),
coupleForce_(true),
modelType_(sm.modelType()),
- cg_(1.),
- probeIt_(sm.probeM().active())
+ probeIt_(sm.probeM().active()),
+ requiresEx_(false)
{}
@@ -130,6 +130,21 @@ void forceModel::manipulateScalarField(volScalarField& field) const
Info << "no scalar manipulation done" << endl;
// do nothing
}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+void forceModel::repartitionImExForces() const
+{
+ if(particleCloud_.imExSplitFactor()<1.0)
+ {
+ Info << "Will re-partition split of implicit and explicit forces: alpha = "
+ << particleCloud_.imExSplitFactor() << endl;
+ // Update implicit particle
+ expParticleForces_ += (1.0-particleCloud_.imExSplitFactor())*impParticleForces_;
+ impParticleForces_ *= particleCloud_.imExSplitFactor();
+ }
+}
+
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H
index 82ebb0a..8a47479 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H
@@ -75,9 +75,9 @@ protected:
const word modelType_;
- mutable scalar cg_;
-
bool probeIt_;
+
+ bool requiresEx_; //requires a orientation vector
public:
@@ -150,17 +150,12 @@ public:
inline const bool& coupleForce() const { return coupleForce_;};
- inline const scalar cg() const { return cg_; };
-
- void const setCG(double cg) const
- {
- cg_ = cg;
- Info << "cg is set to: " << cg_ << endl;
- };
-
void const setImpDEMdrag() const {particleCloud_.impDEMdrag_=true;};
-
-
+
+ virtual inline bool& requiresEx() { return requiresEx_;};
+
+ //Repartition Implixit/Explicit forces
+ void repartitionImExForces() const;
};
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/noDrag/noDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/noDrag/noDrag.C
index 1bafc1f..e3073a2 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/noDrag/noDrag.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/noDrag/noDrag.C
@@ -88,16 +88,28 @@ void noDrag::setForce() const
{
// Do nothing
Info << "noDrag::setForce" << endl;
+ label cellI=0;
for(int index = 0;index < particleCloud_.numberOfParticles(); ++index)
{
- // set force on particle
- if(!keepCFDForce_)
+ cellI = particleCloud_.cellIDs()[index][0];
+ if (cellI > -1) // particle Found
{
- if(treatExplicit_) for(int j=0;j<3;j++) expForces()[index][j] = 0.;
- else for(int j=0;j<3;j++) impForces()[index][j] = 0.;
- }
- if(noDEMForce_)for(int j=0;j<3;j++) DEMForces()[index][j] = 0.;
-
+ // set force on particle
+ if(!keepCFDForce_)
+ {
+ if(treatExplicit_) for(int j=0;j<3;j++) expForces()[index][j] = 0.;
+ else for(int j=0;j<3;j++) impForces()[index][j] = 0.;
+ }
+ if(noDEMForce_)
+ {
+ for(int j=0;j<3;j++) DEMForces()[index][j] = 0.;
+ if(particleCloud_.impDEMdrag())
+ {
+ Cds()[index][0] = 0.;
+ for(int j=0;j<3;j++) fluidVel()[index][j] = 0.;
+ }
+ }
+ }
}
}
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.C b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.C
index c154b6f..c13c59e 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.C
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.C
@@ -69,7 +69,6 @@ execute::execute
command_(""),
scalarList_(0),
labelList_(0),
- runTimeModifiable_(true),
timeStamp_(false)
{
// define dictionary
@@ -87,73 +86,12 @@ execute::execute
// read list of labels
if(propsDict_.found("labels")) labelList_ = labelList(propsDict_.lookup("labels"));
- bool addBlank = true; // std no blanks after each word
- fileName add;
- label numberCount=0; // nr of scalars inserted to command
- label labelCount=0; // nr of labels inserted to command
+ // check if verbose
+ if (propsDict_.found("verbose")) verbose_=true;
- forAll(commandList_,i)
- {
- add = word(commandList_[i]);
-
- //- handle symbols
- if (add == "$couplingInterval")
- {
- char h[50];
- sprintf(h,"%d",particleCloud_.dataExchangeM().couplingInterval());
- add = h;
- }
- else if (add=="dot") add = ".";
- else if (add=="dotdot") add = "..";
- else if (add=="slash") add = "/";
- else if (add=="noBlanks") // no blanks after the following words
- {
- add = "";
- addBlank = false;
- }else if (add=="blanks") // add a blank here and after the following words
- {
- add = "";
- addBlank = true;
- }else if (add=="timeStamp") // next command will be a number read from scalarList_
- {
- add = "";
- timeStamp_=true;
- }else if (add=="number") // next command will be a number read from scalarList_
- {
- if (!propsDict_.found("scalars"))
- {
- FatalError<<"you want to use a number in the command\n - specify a scalar list with all numbers"
- << abort(FatalError);
-
- }
- char h[50];
- sprintf(h,"%f",scalarList_[numberCount]);
- add = h;
- numberCount ++;
- }else if (add=="label") // next command will be a number read from scalarList_
- {
- if (!propsDict_.found("labels"))
- {
- FatalError<<"you want to use a label in the command\n - specify a label list with all numbers"
- << abort(FatalError);
-
- }
- char h[50];
- sprintf(h,"%d",labelList_[labelCount]);
- add = h;
- labelCount ++;
- }
-
- // compose command
- if (addBlank)
- {
- command_ += add + " ";
- }else
- {
- command_ += add;
- }
- }
+ parseCommandList(commandList_, labelList_, scalarList_, command_, propsDict_, timeStamp_);
Info << "liggghtsCommand " << command_ << endl;
+
strCommand_=string(command_);
checkTimeMode(propsDict_);
@@ -170,7 +108,7 @@ execute::~execute()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-const char* execute::command()
+const char* execute::command(int commandLine)
{
return strCommand_.c_str();
}
@@ -178,7 +116,7 @@ const char* execute::command()
bool execute::runCommand(int couplingStep)
{
if(timeStamp_) strCommand_=addTimeStamp(command_);
- if(runTimeModifiable_) checkTimeSettings(propsDict_);
+ checkTimeSettings(propsDict_);
return runThisCommand(couplingStep);
}
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.H b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.H
index 20c9f3b..1b73e65 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.H
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/execute/execute.H
@@ -71,8 +71,6 @@ private:
labelList labelList_;
- bool runTimeModifiable_;
-
bool timeStamp_;
public:
@@ -100,7 +98,7 @@ public:
word name(){return myName_;};
- const char* command();
+ const char* command(int);
bool runCommand(int);
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.C b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.C
index 55d98a2..ae85ed1 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.C
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.C
@@ -70,7 +70,9 @@ liggghtsCommandModel::liggghtsCommandModel
firstCouplingStep_(-1),
lastCouplingStep_(-1),
couplingStepInterval_(0),
- exactTiming_(false)
+ exactTiming_(false),
+ commandLines_(1),
+ verbose_(false)
{}
@@ -150,15 +152,18 @@ void liggghtsCommandModel::checkTimeSettings(const dictionary& propsDict)
lastCouplingStep_ =1;
couplingStepInterval_ =1;
}
- nextRun_ = firstCouplingStep_;
- Info << "firstCouplingStep = " << firstCouplingStep_ << endl;
- Info << "lastCouplingStep = " << lastCouplingStep_ << endl;
- Info << "couplingStepInterval = " << couplingStepInterval_ << endl;
+ if(verbose_){
+ Info << "firstCouplingStep = " << firstCouplingStep_ << endl;
+ Info << "lastCouplingStep = " << lastCouplingStep_ << endl;
+ Info << "couplingStepInterval = " << couplingStepInterval_ << endl;
+ Info << "nextRun = " << nextRun_ << endl;
+ }
}
bool liggghtsCommandModel::runThisCommand(int couplingStep)
{
+ if(verbose_) Info << "couplingStep = " << couplingStep << endl;
bool runIt=false;
if(
(!runEveryWriteStep_ && firstCouplingStep_ <= couplingStep && lastCouplingStep_ >= couplingStep) ||
@@ -194,7 +199,7 @@ DynamicList liggghtsCommandModel::executionsWithinPeriod(scalar TSstart,
DynamicList executions(0);
// current TS within active period
- if(startTime_=TSstart )
+ if(startTime_+SMALLTSstart-SMALL )
{
Info << "working time within this TS" << endl;
@@ -212,10 +217,10 @@ DynamicList liggghtsCommandModel::executionsWithinPeriod(scalar TSstart,
t -= timeInterval_;
}
// check if first exec found within TS
- if(TSstart <= t && t < TSend)
+ if(TSstart < t + SMALL && t +SMALL < TSend)
{
// check for more executions
- while (t <= endTime_ && TSend - t > SMALL)
+ while (t < endTime_ + SMALL && TSend - t > SMALL)
{
executions.append(t);
t += timeInterval_;
@@ -232,6 +237,74 @@ DynamicList liggghtsCommandModel::executionsWithinPeriod(scalar TSstart,
return executions;
}
+
+void liggghtsCommandModel::parseCommandList(wordList& commandList,labelList& labelList,scalarList& scalarList,word& command, dictionary& propsDict, bool timeStamp)
+{
+ bool addBlank = true; // std no blanks after each word
+ fileName add;
+ label numberCount=0; // nr of scalars inserted to command
+ label labelCount=0; // nr of labels inserted to command
+
+ forAll(commandList,i)
+ {
+ add = word(commandList[i]);
+
+ //- handle symbols
+ if (add == "$couplingInterval")
+ {
+ char h[50];
+ sprintf(h,"%d",particleCloud_.dataExchangeM().couplingInterval());
+ add = h;
+ }
+ else if (add=="dot") add = ".";
+ else if (add=="dotdot") add = "..";
+ else if (add=="slash") add = "/";
+ else if (add=="noBlanks") // no blanks after the following words
+ {
+ add = "";
+ addBlank = false;
+ }else if (add=="blanks") // add a blank here and after the following words
+ {
+ add = "";
+ addBlank = true;
+ }else if (add=="timeStamp") // next command will be a number read from labelList
+ {
+ add = "";
+ timeStamp=true;
+ }else if (add=="number") // next command will be a number read from labelList
+ {
+ /*if (!propsDict.found("scalars"))
+ {
+ FatalError<<"you want to use a number in the command\n - specify a scalar list with all numbers"
+ << abort(FatalError);
+ }*/
+ char h[50];
+ sprintf(h,"%f",scalarList[numberCount]);
+ add = h;
+ numberCount ++;
+ }else if (add=="label") // next command will be a number read from labelList
+ {
+ /*if (!propsDict.found("labels"))
+ {
+ FatalError<<"you want to use a label in the command\n - specify a label list with all numbers"
+ << abort(FatalError);
+ }*/
+ char h[50];
+ sprintf(h,"%d",labelList[labelCount]);
+ add = h;
+ labelCount ++;
+ }
+
+ // compose command
+ if (addBlank)
+ {
+ command += add + " ";
+ }else
+ {
+ command += add;
+ }
+ }
+}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.H b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.H
index 394108a..cba3288 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.H
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/liggghtsCommandModel/liggghtsCommandModel.H
@@ -89,6 +89,10 @@ protected:
bool exactTiming_;
+ label commandLines_;
+
+ bool verbose_;
+
public:
//- Runtime type information
@@ -140,7 +144,7 @@ public:
// Member Functions
- virtual const char* command()=0;
+ virtual const char* command(int)=0;
void checkTimeMode(dictionary&);
@@ -166,6 +170,9 @@ public:
bool exactTiming(){return exactTiming_;};
+ label commandLines(){return commandLines_;};
+
+ void parseCommandList(wordList&, labelList&, scalarList&, word&, dictionary&, bool=false);
};
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.C b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.C
index 2bf614e..3605ce9 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.C
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.C
@@ -79,6 +79,8 @@ readLiggghtsData::readLiggghtsData
exactTiming_=true;
Info << "exactTiming==" << exactTiming_ << endl;
+ if (propsDict_.found("verbose")) verbose_=true;
+
// read first index of data file to be injected
insertionNr_=readScalar(propsDict_.lookup("startIndex"));
@@ -110,7 +112,7 @@ readLiggghtsData::~readLiggghtsData()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-const char* readLiggghtsData::command()
+const char* readLiggghtsData::command(int commandLine)
{
char h[50];
sprintf(h,"_%d",insertionNr_);
@@ -123,6 +125,7 @@ const char* readLiggghtsData::command()
bool readLiggghtsData::runCommand(int couplingStep)
{
+ checkTimeSettings(propsDict_);
return runThisCommand(couplingStep);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.H b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.H
index fd25724..345d2c4 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.H
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/readLiggghtsData/readLiggghtsData.H
@@ -93,7 +93,7 @@ public:
word name(){return myName_;};
- const char* command();
+ const char* command(int);
bool runCommand(int);
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.C b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.C
index 283aafc..2969a05 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.C
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.C
@@ -72,6 +72,9 @@ runLiggghts::runLiggghts
{
propsDict_=dictionary(dict.subDict(myName));
preNo_=Switch(propsDict_.lookup("preNo"));
+
+ // check if verbose
+ if (propsDict_.found("verbose")) verbose_=true;
}
runEveryCouplingStep_=true;
@@ -90,7 +93,7 @@ runLiggghts::~runLiggghts()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-const char* runLiggghts::command()
+const char* runLiggghts::command(int commandLine)
{
return strCommand_.c_str();
}
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.H b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.H
index e226c84..39aaa3e 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.H
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/runLiggghts/runLiggghts.H
@@ -88,7 +88,7 @@ public:
// Member Functions
- const char* command();
+ const char* command(int);
string createCommand(word="",int=0,word="",word="",word="",word="");
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.C b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.C
index 9f9c94b..4d63958 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.C
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.C
@@ -73,6 +73,9 @@ writeLiggghts::writeLiggghts
{
propsDict_=dictionary(dict.subDict(typeName + "Props"));
+ // check if verbose
+ if (propsDict_.found("verbose")) verbose_=true;
+
if(propsDict_.found("writeLast"))
{
writeLast_=Switch(propsDict_.lookup("writeLast"));
@@ -112,7 +115,7 @@ writeLiggghts::~writeLiggghts()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-const char* writeLiggghts::command()
+const char* writeLiggghts::command(int commandLine)
{
return strCommand_.c_str();
}
diff --git a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.H b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.H
index d1bbf3b..c6e1fdc 100644
--- a/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.H
+++ b/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.H
@@ -93,7 +93,7 @@ public:
// Member Functions
- const char* command();
+ const char* command(int);
bool runCommand(int);
diff --git a/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.C b/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.C
index b3c38d4..f6a4d3b 100644
--- a/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.C
+++ b/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.C
@@ -91,17 +91,15 @@ label engineSearch::findCell
vector position;
for(int index = 0;index < size; ++index)
{
- cellIDs[index][0]=-1;
-
- //if(mask[index][0] && particleCloud_.radius(index) > SMALL)
if(particleCloud_.radius(index) > SMALL)
{
// create pos vector
for(int i=0;i<3;i++) position[i] = positions[index][i];
- // find cell
- cellIDs[index][0] =searchEngine_.findCell(position,cellIDs[index][0],treeSearch_);
+ // find cell using tree search if switched on
+ cellIDs[index][0] = searchEngine_.findCell(position,-1,treeSearch_);
}
+ else cellIDs[index][0] = -1;
}
return 1;
}
@@ -112,7 +110,6 @@ label engineSearch::findSingleCell
label& oldCellID
) const
{
- // find cell
return searchEngine_.findCell(position,oldCellID,treeSearch_);
}
diff --git a/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.H b/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.H
index 2f09e32..b52f2bc 100644
--- a/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.H
+++ b/src/lagrangian/cfdemParticle/subModels/locateModel/engineSearch/engineSearch.H
@@ -61,10 +61,12 @@ private:
dictionary propsDict_;
- Switch faceDecomp_;
+ //Switch faceDecomp_;
Switch treeSearch_;
+protected:
+
meshSearch searchEngine_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/locateModel/standardSearch/standardSearch.C b/src/lagrangian/cfdemParticle/subModels/locateModel/standardSearch/standardSearch.C
index 7bc800d..11d3008 100644
--- a/src/lagrangian/cfdemParticle/subModels/locateModel/standardSearch/standardSearch.C
+++ b/src/lagrangian/cfdemParticle/subModels/locateModel/standardSearch/standardSearch.C
@@ -82,9 +82,6 @@ label standardSearch::findCell
vector position;
for(int index = 0;index < size; ++index)
{
-
- cellIDs[index][0]=-1;
-
//if(mask[index][0] && particleCloud_.radius(index) > SMALL)
if(particleCloud_.radius(index) > SMALL)
{
@@ -98,6 +95,7 @@ label standardSearch::findCell
cellIDs[index][0] = particleCloud_.mesh().findCell(position, polyMesh::FACEPLANES);
#endif
}
+ else cellIDs[index][0]=-1;
}
return 1;
diff --git a/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.H b/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.H
index 73f1d30..6d07f23 100644
--- a/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.H
+++ b/src/lagrangian/cfdemParticle/subModels/probeModel/particleProbe/particleProbe.H
@@ -51,7 +51,7 @@ namespace Foam
{
/*---------------------------------------------------------------------------*\
- Class noDrag Declaration
+ Class particleProbe Declaration
\*---------------------------------------------------------------------------*/
class particleProbe
diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C
index c1adbc0..17844f7 100644
--- a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C
+++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.C
@@ -67,11 +67,15 @@ constDiffSmoothing::constDiffSmoothing
upperLimit_(readScalar(propsDict_.lookup("upperLimit"))),
smoothingLength_(dimensionedScalar("smoothingLength",dimensionSet(0,1,0,0,0,0,0), readScalar(propsDict_.lookup("smoothingLength")))),
smoothingLengthReferenceField_(dimensionedScalar("smoothingLengthReferenceField",dimensionSet(0,1,0,0,0,0,0), readScalar(propsDict_.lookup("smoothingLength")))),
- DT_("DT", dimensionSet(0,2,-1,0,0), 0.)
+ DT_("DT", dimensionSet(0,2,-1,0,0), 0.),
+ verbose_(false)
{
- if(propsDict_.found("smoothingLengthReferenceField"))
- smoothingLengthReferenceField_.value() = double(readScalar(propsDict_.lookup("smoothingLengthReferenceField")));
+ if(propsDict_.found("verbose"))
+ verbose_ = true;
+
+ if(propsDict_.found("smoothingLengthReferenceField"))
+ smoothingLengthReferenceField_.value() = double(readScalar(propsDict_.lookup("smoothingLengthReferenceField")));
}
@@ -87,28 +91,6 @@ bool constDiffSmoothing::doSmoothing() const
return true;
}
-/*void constDiffSmoothing::dSmoothing(volScalarField& dSmooth) const
-{
-
- tmp dSmooth0
- (
- new volScalarField
- (
- IOobject
- (
- "dSmooth",
- particleCloud_.mesh().time().timeName(),
- particleCloud_.mesh(),
- IOobject::NO_READ,
- IOobject::NO_WRITE
- ),
- particleCloud_.mesh(),
- smoothingLength_
- )
- );
-
- dSmooth.internalField() = dSmooth0;
-}*/
void Foam::constDiffSmoothing::smoothen(volScalarField& fieldSrc) const
{
@@ -134,13 +116,26 @@ void Foam::constDiffSmoothing::smoothen(volScalarField& fieldSrc) const
field[cellI]=max(lowerLimit_,min(upperLimit_,field[cellI]));
}
- // get data from working field
+ // get data from working field - will copy only values at new time
fieldSrc=field;
fieldSrc.correctBoundaryConditions();
+
+ if(verbose_)
+ {
+ Info << "min/max(fieldoldTime) (unsmoothed): " << min(field.oldTime()) << tab << max(field.oldTime()) << endl;
+ Info << "min/max(fieldSrc): " << min(fieldSrc) << tab << max(fieldSrc) << endl;
+ Info << "min/max(fieldSrc.oldTime): " << min(fieldSrc.oldTime()) << tab << max(fieldSrc.oldTime()) << endl;
+ }
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-void Foam::constDiffSmoothing::smoothen(volVectorField& field) const
+void Foam::constDiffSmoothing::smoothen(volVectorField& fieldSrc) const
{
+ // transfer data to working field to not mess up ddt
+ volVectorField field=fieldSrc;
+ field.correctBoundaryConditions();
+ field.oldTime()=fieldSrc;
+ field.oldTime().correctBoundaryConditions();
+
double deltaT = field.mesh().time().deltaTValue();
DT_.value() = smoothingLength_.value() * smoothingLength_.value() / deltaT;
@@ -149,19 +144,36 @@ void Foam::constDiffSmoothing::smoothen(volVectorField& field) const
(
fvm::ddt(field)
-fvm::laplacian(DT_, field)
- );
+ );
+
+ // get data from working field
+ fieldSrc=field;
+ fieldSrc.correctBoundaryConditions();
+
+ if(verbose_)
+ {
+ Info << "min/max(fieldoldTime) (unsmoothed): " << min(field.oldTime()) << tab << max(field.oldTime()) << endl;
+ Info << "min/max(fieldSrc): " << min(fieldSrc) << tab << max(fieldSrc) << endl;
+ Info << "min/max(fieldSrc.oldTime): " << min(fieldSrc.oldTime()) << tab << max(fieldSrc.oldTime()) << endl;
+ }
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-void Foam::constDiffSmoothing::smoothenReferenceField(volVectorField& field) const
+void Foam::constDiffSmoothing::smoothenReferenceField(volVectorField& fieldSrc) const
{
- double sourceStrength = 1e5; //Should be a large numbe to keep reference values constant
+ // transfer data to working field to not mess up ddt
+ volVectorField field=fieldSrc;
+ field.correctBoundaryConditions();
+ field.oldTime()=fieldSrc;
+ field.oldTime().correctBoundaryConditions();
+
+ double sourceStrength = 1e5; //large number to keep reference values constant
dimensionedScalar deltaT = field.mesh().time().deltaT();
DT_.value() = smoothingLengthReferenceField_.value()
* smoothingLengthReferenceField_.value() / deltaT.value();
- tmp NLarge
+ tmp NLarge
(
new volScalarField
(
@@ -180,21 +192,32 @@ void Foam::constDiffSmoothing::smoothenReferenceField(volVectorField& field) con
//loop over particles and map max particle diameter to Euler Grid
- for(int cellI = 0; cellI < field.mesh().nCells(); cellI++)
+ forAll(field,cellI)
{
- if ( mag(field.oldTime().internalField()[cellI]) > 0) // have a vector in the OLD field, so keep it!
- {
- NLarge()[cellI] = sourceStrength;
- }
+ if ( mag(field.oldTime().internalField()[cellI]) > 0.0f) // have a vector in the OLD field, so keep it!
+ NLarge()[cellI] = sourceStrength;
}
// do the smoothing
solve
(
- fvm::ddt(field) == fvm::laplacian( DT_, field)
- + NLarge() / deltaT * field.oldTime() //add source to keep cell values constant
- - fvm::Sp( NLarge() / deltaT, field) //add sink to keep cell values constant
- );
+ fvm::ddt(field)
+ -fvm::laplacian( DT_, field)
+ ==
+ NLarge() / deltaT * field.oldTime() //add source to keep cell values constant
+ -fvm::Sp( NLarge() / deltaT, field) //add sink to keep cell values constant
+ );
+
+ // get data from working field
+ fieldSrc=field;
+ fieldSrc.correctBoundaryConditions();
+
+ if(verbose_)
+ {
+ Info << "min/max(fieldoldTime) (unsmoothed): " << min(field.oldTime()) << tab << max(field.oldTime()) << endl;
+ Info << "min/max(fieldSrc): " << min(fieldSrc) << tab << max(fieldSrc) << endl;
+ Info << "min/max(fieldSrc.oldTime): " << min(fieldSrc.oldTime()) << tab << max(fieldSrc.oldTime()) << endl;
+ }
}
diff --git a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H
index b93bdbf..2fc23ed 100644
--- a/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H
+++ b/src/lagrangian/cfdemParticle/subModels/smoothingModel/constDiffSmoothing/constDiffSmoothing.H
@@ -65,6 +65,7 @@ private:
dimensionedScalar smoothingLength_;
dimensionedScalar smoothingLengthReferenceField_;
mutable dimensionedScalar DT_;
+ bool verbose_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.C
index ec5b110..31b35a4 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.C
@@ -66,18 +66,16 @@ GaussVoidFraction::GaussVoidFraction
voidFractionModel(dict,sm),
propsDict_(dict.subDict(typeName + "Props")),
alphaMin_(readScalar(propsDict_.lookup("alphaMin"))),
- alphaLimited_(0),
- scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol")))
+ alphaLimited_(0)
{
Info << "\n\n W A R N I N G - do not use in combination with differentialRegion model! \n\n" << endl;
Info << "\n\n W A R N I N G - this model does not yet work properly! \n\n" << endl;
//reading maxCellsPerParticle from dictionary
maxCellsPerParticle_=readLabel(propsDict_.lookup("maxCellsPerParticle"));
- if(scaleUpVol_ < 1){ FatalError<< "scaleUpVol shloud be > 1."<< abort(FatalError); }
if(alphaMin_ > 1 || alphaMin_ < 0.01){ FatalError<< "alphaMin shloud be > 1 and < 0.01." << abort(FatalError); }
- if (propsDict_.found("weight"))
- setWeight(readScalar(propsDict_.lookup("weight")));
+
+ checkWeightNporosity(propsDict_);
}
@@ -95,6 +93,11 @@ void GaussVoidFraction::setvoidFraction(double** const& mask,double**& voidfract
voidfractionNext_.internalField()=1;
+ scalar radius(-1);
+ scalar volume(0);
+ scalar scaleVol= weight();
+ scalar scaleRadius = pow(porosity(),1/3);
+
for(int index=0; index< particleCloud_.numberOfParticles(); index++)
{
//if(mask[index][0])
@@ -108,17 +111,15 @@ void GaussVoidFraction::setvoidFraction(double** const& mask,double**& voidfract
cellsPerParticle_[index][0]=1.0;
//collecting data
- scalar pi = M_PI;
label particleCenterCellID=particleCloud_.cellIDs()[index][0];
- scalar radius = particleCloud_.radii()[index][0];
- //Info << "physical radius" << radius << endl;
- scalar volume = 4./3.*radius*radius*radius*pi*weight();
- radius = radius*pow(scaleUpVol_,0.3333);
- //Info << "fictuous radius" << radius << endl;
+ radius = particleCloud_.radii()[index][0];
+ volume = 4.188790205*radius*radius*radius*scaleVol;
+ radius *= scaleRadius;
+
vector positionCenter=particleCloud_.position(index);
- scalar core;
- scalar dist;
+ scalar core;
+ scalar dist;
if (particleCenterCellID >= 0)
{
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.H
index 36ee94d..23aee91 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.H
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/GaussVoidFraction/GaussVoidFraction.H
@@ -24,8 +24,8 @@ License
along with CFDEMcoupling; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-Description
- This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
+Description
+ This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER).
Gaussian distributed particle voidfraction model
@@ -63,9 +63,7 @@ private:
const scalar alphaMin_; //NP min value of voidFraction
- mutable bool alphaLimited_;
-
- const scalar scaleUpVol_; //NP scaling radius, keeping volume of particle
+ mutable bool alphaLimited_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
index fab7706..795eab1 100755
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
@@ -199,7 +199,7 @@ void IBVoidFraction::setvoidFraction(double** const& mask,double**& voidfraction
}
}
}
- }
+ } //end particle partially overlapping with cell
//generating list with cell and subcells
buildLabelHashSet(radius, minPeriodicParticlePos, particleCenterCellID, hashSett, true);
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.C
index e853d0f..0f79264 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.C
@@ -66,18 +66,15 @@ bigParticleVoidFraction::bigParticleVoidFraction
voidFractionModel(dict,sm),
propsDict_(dict.subDict(typeName + "Props")),
alphaMin_(readScalar(propsDict_.lookup("alphaMin"))),
- alphaLimited_(0),
- scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol")))
+ alphaLimited_(0)
{
Info << "\n\n W A R N I N G - do not use in combination with differentialRegion model! \n\n" << endl;
Info << "\n\n W A R N I N G - this model does not yet work properly! \n\n" << endl;
//reading maxCellsPerParticle from dictionary
maxCellsPerParticle_=readLabel(propsDict_.lookup("maxCellsPerParticle"));
-
- if(scaleUpVol_ < 1){ FatalError<< "scaleUpVol shloud be > 1."<< abort(FatalError); }
if(alphaMin_ > 1 || alphaMin_ < 0.01){ FatalError<< "alphaMin shloud be > 1 and < 0.01." << abort(FatalError); }
- if (propsDict_.found("weight"))
- setWeight(readScalar(propsDict_.lookup("weight")));
+
+ checkWeightNporosity(propsDict_);
}
@@ -95,6 +92,11 @@ void bigParticleVoidFraction::setvoidFraction(double** const& mask,double**& voi
voidfractionNext_.internalField()=1;
+ scalar radius(-1);
+ scalar volume(0);
+ scalar scaleVol= weight();
+ scalar scaleRadius = pow(porosity(),1/3);
+
for(int index=0; index< particleCloud_.numberOfParticles(); index++)
{
//if(mask[index][0])
@@ -108,14 +110,10 @@ void bigParticleVoidFraction::setvoidFraction(double** const& mask,double**& voi
cellsPerParticle_[index][0]=1.0;
//collecting data
- scalar pi = M_PI;
label particleCenterCellID=particleCloud_.cellIDs()[index][0];
- scalar radius = particleCloud_.radii()[index][0];
- //Info << "physical radius" << radius << endl;
-
- scalar volume = 4./3.*radius*radius*radius*3.1415*weight();
- radius = radius*pow(scaleUpVol_,0.3333);
- //Info << "fictuous radius" << radius << endl;
+ radius = particleCloud_.radii()[index][0];
+ volume = 4.188790205*radius*radius*radius*scaleVol;
+ radius *= scaleRadius;
vector positionCenter=particleCloud_.position(index);
if (particleCenterCellID >= 0)
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.H
index 85cd0c0..e4a56ba 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.H
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/bigParticleVoidFraction/bigParticleVoidFraction.H
@@ -58,11 +58,9 @@ class bigParticleVoidFraction
private:
dictionary propsDict_;
- const scalar alphaMin_; //NP min value of voidFraction
+ const scalar alphaMin_; // min value of voidFraction
- mutable bool alphaLimited_;
-
- const scalar scaleUpVol_; //NP scaling radius, keeping volume of particle
+ mutable bool alphaLimited_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/centreVoidFraction/centreVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/centreVoidFraction/centreVoidFraction.C
index 760262e..9538020 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/centreVoidFraction/centreVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/centreVoidFraction/centreVoidFraction.C
@@ -65,9 +65,8 @@ centreVoidFraction::centreVoidFraction
alphaMin_(readScalar(propsDict_.lookup("alphaMin"))),
alphaLimited_(0)
{
- Info << "centreVoidFraction constructor done" << endl;
- if (propsDict_.found("weight"))
- setWeight(readScalar(propsDict_.lookup("weight")));
+ checkWeightNporosity(propsDict_);
+ if(porosity()!=1) FatalError << "porosity not used in centreVoidFraction" << abort(FatalError);
}
@@ -83,6 +82,11 @@ void centreVoidFraction::setvoidFraction(double** const& mask,double**& voidfrac
{
reAllocArrays();
+ scalar radius(-1);
+ scalar volume(0);
+ scalar cellVol(0);
+ scalar scaleVol= weight();
+
for(int index=0; index< particleCloud_.numberOfParticles(); index++)
{
//if(mask[index][0])
@@ -95,14 +99,14 @@ void centreVoidFraction::setvoidFraction(double** const& mask,double**& voidfrac
if (cellI >= 0) // particel centre is in domain
{
- scalar ds = 2*particleCloud_.radii()[index][0];
- scalar cellVolume=voidfractionNext_.mesh().V()[cellI];
- scalar particleVolume= ds*ds*ds/6.*3.1415*weight();
+ cellVol = voidfractionNext_.mesh().V()[cellI];
+ radius = particleCloud_.radii()[index][0];
+ volume = 4.188790205*radius*radius*radius*scaleVol;
- // store particleVolume for each particle
- particleVolumes[index][0] = particleVolume;
+ // store volume for each particle
+ particleVolumes[index][0] = volume;
- voidfractionNext_[cellI] -= particleVolume/cellVolume;
+ voidfractionNext_[cellI] -= volume/cellVol;
if(voidfractionNext_[cellI] < alphaMin_ )
{
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C
index 59d7ac4..3719503 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C
@@ -69,20 +69,18 @@ dividedVoidFraction::dividedVoidFraction
alphaMin_(readScalar(propsDict_.lookup("alphaMin"))),
alphaLimited_(0),
tooMuch_(0.0),
- scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol"))),
interpolation_(false)
{
maxCellsPerParticle_ = 29;
- if(scaleUpVol_ > 2 || scaleUpVol_ < 1){ FatalError<< "scaleUpVol should be > 1 and < 2 !!!" << abort(FatalError); }
if(alphaMin_ > 1 || alphaMin_ < 0.01){ FatalError<< "alphaMin should be < 1 and > 0.01 !!!" << abort(FatalError); }
if (propsDict_.found("interpolation")){
interpolation_=true;
Warning << "interpolation for dividedVoidFraction does not yet work correctly!" << endl;
Info << "Using interpolated voidfraction field - do not use this in combination with interpolation in drag model!"<< endl;
}
- if (propsDict_.found("weight"))
- setWeight(readScalar(propsDict_.lookup("weight")));
+
+ checkWeightNporosity(propsDict_);
if (propsDict_.found("verbose")) verbose_=true;
}
@@ -104,7 +102,10 @@ void dividedVoidFraction::setvoidFraction(double** const& mask,double**& voidfra
vector position(0,0,0);
label cellID=-1;
scalar radius(-1);
+ scalar volume(0);
scalar cellVol(0);
+ scalar scaleVol= weight();
+ scalar scaleRadius = pow(porosity(),1/3);
for(int index=0; index< particleCloud_.numberOfParticles(); index++)
{
@@ -113,7 +114,6 @@ void dividedVoidFraction::setvoidFraction(double** const& mask,double**& voidfra
//if(mask[index][0])
//{
// reset
-
for(int subcell=0;subcell voidfractionInterpolator_(voidfractionNext_);
- scalar voidfractionAtPos(0);
+ //scalar voidfractionAtPos(0);
for(int index=0; index< particleCloud_.numberOfParticles(); index++)
{
/*if(interpolation_)
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H
index b73c775..7fb26fd 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H
@@ -61,13 +61,11 @@ private:
bool verbose_;
- const scalar alphaMin_; //NP min value of voidFraction
+ const scalar alphaMin_; // min value of voidFraction
mutable bool alphaLimited_;
- mutable scalar tooMuch_; //NP particle volume which is lost due to voidFraction limitation
-
- const scalar scaleUpVol_; //NP scaling radius, keeping volume of particle
+ mutable scalar tooMuch_; // particle volume which is lost due to voidFraction limitation
bool interpolation_;
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.C
index 1b89df2..c600606 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.C
@@ -85,7 +85,8 @@ voidFractionModel::voidFractionModel
),
cellsPerParticle_(NULL),
maxCellsPerParticle_(1),
- weight_(1.)
+ weight_(1.),
+ porosity_(1.)
{
particleCloud_.dataExchangeM().allocateArray(cellsPerParticle_,1,maxCellsPerParticle_);
}
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.H
index 88af7bd..9f76616 100644
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.H
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/voidFractionModel/voidFractionModel.H
@@ -73,6 +73,8 @@ protected:
mutable scalar weight_;
+ mutable scalar porosity_;
+
// Protected member functions
public:
@@ -128,10 +130,16 @@ public:
inline volScalarField& voidFractionNext()const { return voidfractionNext_; }
- inline void setWeight(scalar weight)const { weight_ = weight; }
-
inline scalar weight()const { return weight_; }
+ inline scalar porosity()const { return porosity_; }
+
+ inline void checkWeightNporosity(dictionary& propsDict) const
+ {
+ if (propsDict.found("weight")) weight_ = readScalar(propsDict.lookup("weight"));
+ if (propsDict.found("porosity")) porosity_ = readScalar(propsDict.lookup("porosity"));
+ };
+
void resetVoidFractions() const;
//void undoVoidFractions(double**const&) const;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/0/U b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/0/U
index 9bd6c98..5fc0e4e 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/0/U
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/0/U
@@ -55,24 +55,6 @@ boundaryField
uniformValue table
(
(0.000 (0 0 0.002))
- /*(0.010 (0 0 0.002))
- (0.011 (0 0 0.004))
- (0.020 (0 0 0.004))
- (0.021 (0 0 0.006))
- (0.030 (0 0 0.006))
- (0.031 (0 0 0.008))
- (0.040 (0 0 0.008))
- (0.041 (0 0 0.010))
- (0.050 (0 0 0.010))
- (0.051 (0 0 0.012))
- (0.060 (0 0 0.012))
- (0.061 (0 0 0.014))
- (0.070 (0 0 0.014))
- (0.071 (0 0 0.016))
- (0.080 (0 0 0.016))
- (0.081 (0 0 0.018))
- (0.090 (0 0 0.018))
- (0.091 (0 0 0.020))*/
(0.100 (0 0 0.020))
);
}
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties
index 79209a5..aa9fa97 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties
@@ -61,7 +61,8 @@ forceModels
//Archimedes
//volWeightedAverage
//totalMomentumExchange
- particleCellVolume
+ //particleCellVolume
+ //fieldTimeAverage
);
momCoupleModels
@@ -107,7 +108,7 @@ gradPForceProps
densityFieldName "rho";
voidfractionFieldName "voidfraction";
velocityFieldName "U";
- //interpolation;
+ interpolation;
}
viscForceProps
@@ -139,8 +140,12 @@ totalMomentumExchangeProps
}
GidaspowDragProps
{
+ verbose;
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
+ interpolation;
+ phi 1;
}
DiFeliceDragProps
{
@@ -155,6 +160,7 @@ KochHillDragProps
velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction";
+ interpolation;
}
BeetstraDragProps
@@ -198,7 +204,7 @@ twoWayFilesProps
centreProps
{
- alphaMin 0.10;
+ alphaMin 0.1;
}
engineProps
@@ -222,7 +228,6 @@ dividedProps
twoWayMPIProps
{
- //maxNumberOfParticles 10100;
liggghtsPath "../DEM/in.liggghts_resume";
}
twoWayM2MProps
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/liggghtsCommands b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/liggghtsCommands
index 4ecd5aa..a5ffcae 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/liggghtsCommands
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/liggghtsCommands
@@ -25,7 +25,7 @@ FoamFile
liggghtsCommandModels
(
- runLiggghts
+ runLiggghts
);
// ************************************************************************* //
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/octave/totalPressureDrop.m b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/octave/totalPressureDrop.m
index 233a52f..b6ec7d7 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/octave/totalPressureDrop.m
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/octave/totalPressureDrop.m
@@ -30,7 +30,7 @@ phip = 1 % sphericity
epsilon = 0.451335 % void fraction
Ustart = 0.002
Uend = 0.02
-timeStepSize = 0.001; % time interval of pressure data
+timeStepSize = 0.0005; % time interval of pressure data
Tstart = 0;
Tend = t_sim(length(t_sim));
deltaU=(Uend-Ustart)/((Tend-Tstart)/timeStepSize);
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict
index 14f3feb..55a2adb 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict
@@ -25,7 +25,7 @@ stopAt endTime;
endTime 0.1;
-deltaT 0.001;
+deltaT 0.0005;
writeControl adjustableRunTime;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/funkySetFieldsDict b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/funkySetFieldsDict
old mode 100755
new mode 100644
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/fvSolution b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/fvSolution
index 46c6e11..d6fb7a2 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/fvSolution
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/fvSolution
@@ -41,7 +41,7 @@ solvers
relTol 0;
}
- "(voidfraction|Us|Ksl|dSmoothing)"
+ "(voidfraction|Us|Ksl|dSmoothing|UsNext|voidfractionNext)"
{
solver PCG;
preconditioner DIC;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_init b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_init
index 35b91f5..e6f325c 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_init
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_init
@@ -38,7 +38,7 @@ fix cylwalls all wall/gran model hertz tangential history primitive type 1 zcyli
#particle distributions and insertion
region bc cylinder z 0.0 0.0 0.012 0. 0.055 units box
-fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 200 radius constant 0.0005
+fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 2000 radius constant 0.0005
fix pdd1 all particledistribution/discrete 1. 1 pts1 1.0
fix ins all insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0. -1. insert_every once overlapcheck yes all_in yes particles_in_region 10000 region bc
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_resume b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_resume
index 4ef8bab..47fd139 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_resume
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/in.liggghts_resume
@@ -65,7 +65,7 @@ compute_modify thermo_temp dynamic yes
#insert the first particles so that dump is not empty
dump myDump all stl 1 post/dump_*.stl
#run 1
-dump dmp all custom 5000 ../DEM/post/dump*.liggghts_restart id type type x y z vx vy vz fx fy fz f_dragforce[1] f_dragforce[2] f_dragforce[3] radius
+dump dmp all custom 5000 ../DEM/post/dump*.liggghts_restart id type type x y z vx vy vz fx fy fz f_dragforce[1] f_dragforce[2] f_dragforce[3] radius
undump myDump
run 1
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/liggghts.restart b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/liggghts.restart
index 9960558..93e0dd4 100644
Binary files a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/liggghts.restart and b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/liggghts.restart differ
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/post/dummy b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/post/dummy
index ebf63df..e69de29 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/post/dummy
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/DEM/post/dummy
@@ -1 +0,0 @@
-dummyfile
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh
index a99bb5d..de2c30b 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh
@@ -21,7 +21,7 @@ logfileName="log_$headerText"
solverName="cfdemSolverPiso"
nrProcs="4"
machineFileName="none" # yourMachinefileName | none
-debugMode="off" # on | off| strictdebugMode="off" # on | off| strict
+debugMode="off" # on | off| strict # on | off| strict
testHarnessPath="$CFDEM_TEST_HARNESS_PATH"
runOctave="true"
postproc="false"
@@ -82,22 +82,10 @@ fi
#- clean up case
echo "deleting data at: $casePath :\n"
-rm -r $casePath/CFD/0.*
-rm -r $casePath/CFD/callgrind.*
-rm -r $casePath/CFD/*.out
-rm -r $casePath/CFD/log.*
-rm -r $casePath/CFD/octave/octave-core
-rm -r $casePath/CFD/VTK
-rm -r $casePath/CFD/processor*
-rm -r $casePath/CFD/couplingFiles/*
-rm -r $casePath/DEM/post/*
-rm -r $casePath/DEM/log.*
-rm -r $casePath/DEM/liggghts.restartCFDEM*
-rm -r $casePath/CFD/probes
-rm -r $casePath/CFD/postProcessing
-rm -r $casePath/CFD/lagrangian
+source $WM_PROJECT_DIR/bin/tools/CleanFunctions
+cd $casePath/CFD
+cleanCase
rm -r $casePath/CFD/clockData
+rm -r $casePath/DEM/post/*
+(cd $casePath/DEM/post && touch dummy)
echo "done"
-
-#- preserve post directory
-echo "dummyfile" >> $casePath/DEM/post/dummy
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties
index 2dd8f3d..558e491 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_cgs/CFD/constant/couplingProperties
@@ -130,6 +130,7 @@ DiFeliceDragProps
velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction";
+ granVelFieldName "Us";
}
KochHillDragProps
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh
index 2f14335..9141759 100755
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh
@@ -97,22 +97,12 @@ if [ $postproc == "true" ]
fi
#- clean up case
-rm -rf $casePath/CFD/0.*
-rm -r $casePath/CFD/callgrind.*
-rm -r $casePath/CFD/*.out
+echo "deleting data at: $casePath :\n"
+source $WM_PROJECT_DIR/bin/tools/CleanFunctions
+cd $casePath/CFD
+cleanCase
rm -r $casePath/CFD/clockData
-rm -rf $casePath/CFD/processor*
-rm -r $casePath/CFD/VTK
-rm -rf $casePath/CFD/patchAverage_pressureDrop
-rm -rf $casePath/CFD/probes
-rm -rf $casePath/CFD/postProcessing
-rm -rf $casePath/CFD/particles
-rm -r $casePath/CFD/log.*
-rm -r $casePath/CFD/lagrangian
-rm $casePath/log.liggghts
+rm -r $casePath/DEM/post/*
rm $casePath/DEM/liggghts.restartCFDEM*
-rm $casePath/DEM/post/dump.*
-rm -r $casePath/DEM/log.*
-
-#- preserve post directory
-echo "dummyfile" >> $casePath/DEM/post/dummy
+(cd $casePath/DEM/post && touch dummy)
+echo "done"
\ No newline at end of file
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/U b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/U
index 2c2d334..9bd6c98 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/U
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/U
@@ -55,7 +55,7 @@ boundaryField
uniformValue table
(
(0.000 (0 0 0.002))
- (0.010 (0 0 0.002))
+ /*(0.010 (0 0 0.002))
(0.011 (0 0 0.004))
(0.020 (0 0 0.004))
(0.021 (0 0 0.006))
@@ -72,9 +72,9 @@ boundaryField
(0.080 (0 0 0.016))
(0.081 (0 0 0.018))
(0.090 (0 0 0.018))
- (0.091 (0 0 0.020))
+ (0.091 (0 0 0.020))*/
(0.100 (0 0 0.020))
- );
+ );
}
outlet
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/p b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/p
index d111e6b..be1cbf5 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/p
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/0/p
@@ -35,8 +35,9 @@ boundaryField
outlet
{
//type zeroGradient;
+
type fixedValue;
- value uniform 100000;
+ value uniform 1.0e5;
}
}
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init
index 9b3a346..f5336a0 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_init
@@ -25,41 +25,43 @@ FoamFile
//===========================================================================//
// sub-models & settings
-verbous;
+
modelType "A"; // A or B
couplingInterval 100;
-voidFractionModel divided;
+voidFractionModel divided;//centre;//
-locateModel engine;
+locateModel engine;//turboEngineM2M;//
meshMotionModel noMeshMotion;
regionModel allRegion;
-IOModel "basicIO";
+IOModel basicIO;
probeModel off;
-dataExchangeModel twoWayMPI;//twoWayFiles;//oneWayVTK;//
+dataExchangeModel twoWayMPI;//twoWayM2M;//twoWayFiles;//oneWayVTK;//
averagingModel dense;//dilute;//
-clockModel off;
+clockModel standardClock;//off;
-smoothingModel off;
+smoothingModel off;// localPSizeDiffSmoothing;// constDiffSmoothing; //
forceModels
(
//GidaspowDrag
- DiFeliceDrag
- //KochHillDrag
+ //BeetstraDrag
+ //DiFeliceDrag
+ KochHillDrag
gradPForce
viscForce
//Archimedes
//volWeightedAverage
//totalMomentumExchange
+ //particleCellVolume
);
momCoupleModels
@@ -72,6 +74,21 @@ turbulenceModelType "RASProperties";//"LESProperties";//
//===========================================================================//
// sub-model properties
+localPSizeDiffSmoothingProps
+{
+ lowerLimit 0.1;
+ upperLimit 1e10;
+ dSmoothingLength 1.5e-3;
+ Csmoothing 1.0;
+}
+
+constDiffSmoothingProps
+{
+ lowerLimit 0.1;
+ upperLimit 1e10;
+ smoothingLength 1.5e-3;
+}
+
implicitCoupleProps
{
velFieldName "U";
@@ -110,7 +127,7 @@ volWeightedAverageProps
);
upperThreshold 0.999;
lowerThreshold 0;
- verbous;
+ verbose;
}
totalMomentumExchangeProps
{
@@ -122,8 +139,11 @@ totalMomentumExchangeProps
}
GidaspowDragProps
{
+ verbose;
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
+ phi 1;
}
DiFeliceDragProps
{
@@ -134,8 +154,25 @@ DiFeliceDragProps
KochHillDragProps
{
+ //verbose;
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
+}
+
+BeetstraDragProps
+{
+ velFieldName "U";
+ densityFieldName "rho";
+ gravityFieldName "g";
+ rhoParticle 2000.;
+ voidfractionFieldName "voidfraction";
+ interpolation ;
+ useFilteredDragModel ;
+ useParcelSizeDependentFilteredDrag ;
+ k 0.05;
+ aLimit 0.0;
+// verbose ;
}
virtualMassForceProps
@@ -144,6 +181,13 @@ virtualMassForceProps
densityFieldName "rho";
}
+particleCellVolumeProps
+{
+ upperThreshold 0.999;
+ lowerThreshold 0.;
+ verbose;
+}
+
oneWayVTKProps
{
couplingFilename "vtk_out%4.4d.vtk";
@@ -165,13 +209,25 @@ engineProps
treeSearch true;
}
+turboEngineM2MProps
+{
+ turboEngineProps
+ {
+ treeSearch true;
+ }
+}
+
dividedProps
{
- alphaMin 0.1;
+ alphaMin 0.01;
scaleUpVol 1.0;
}
twoWayMPIProps
+{
+ liggghtsPath "../DEM/in.liggghts_resume";
+}
+twoWayM2MProps
{
maxNumberOfParticles 10100;
liggghtsPath "../DEM/in.liggghts_resume";
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart
index c711c15..311b8ac 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/couplingProperties_restart
@@ -25,41 +25,43 @@ FoamFile
//===========================================================================//
// sub-models & settings
-verbous;
+
modelType "A"; // A or B
couplingInterval 100;
-voidFractionModel divided;
+voidFractionModel divided;//centre;//
-locateModel engine;
+locateModel engine;//turboEngineM2M;//
meshMotionModel noMeshMotion;
regionModel allRegion;
-IOModel "basicIO";
+IOModel basicIO;
probeModel off;
-dataExchangeModel twoWayMPI;//twoWayFiles;//oneWayVTK;//
+dataExchangeModel twoWayMPI;//twoWayM2M;//twoWayFiles;//oneWayVTK;//
averagingModel dense;//dilute;//
-clockModel off;
+clockModel standardClock;//off;//
-smoothingModel off;
+smoothingModel off;// localPSizeDiffSmoothing;// constDiffSmoothing; //
forceModels
(
//GidaspowDrag
- DiFeliceDrag
- //KochHillDrag
+ //BeetstraDrag
+ //DiFeliceDrag
+ KochHillDrag
gradPForce
viscForce
//Archimedes
//volWeightedAverage
//totalMomentumExchange
+ //particleCellVolume
);
momCoupleModels
@@ -72,6 +74,21 @@ turbulenceModelType "RASProperties";//"LESProperties";//
//===========================================================================//
// sub-model properties
+localPSizeDiffSmoothingProps
+{
+ lowerLimit 0.1;
+ upperLimit 1e10;
+ dSmoothingLength 1.5e-3;
+ Csmoothing 1.0;
+}
+
+constDiffSmoothingProps
+{
+ lowerLimit 0.1;
+ upperLimit 1e10;
+ smoothingLength 1.5e-3;
+}
+
implicitCoupleProps
{
velFieldName "U";
@@ -110,7 +127,7 @@ volWeightedAverageProps
);
upperThreshold 0.999;
lowerThreshold 0;
- verbous;
+ verbose;
}
totalMomentumExchangeProps
{
@@ -122,8 +139,11 @@ totalMomentumExchangeProps
}
GidaspowDragProps
{
+ verbose;
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
+ phi 1;
}
DiFeliceDragProps
{
@@ -134,8 +154,25 @@ DiFeliceDragProps
KochHillDragProps
{
+ //verbose;
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
+}
+
+BeetstraDragProps
+{
+ velFieldName "U";
+ densityFieldName "rho";
+ gravityFieldName "g";
+ rhoParticle 2000.;
+ voidfractionFieldName "voidfraction";
+ interpolation ;
+ useFilteredDragModel ;
+ useParcelSizeDependentFilteredDrag ;
+ k 0.05;
+ aLimit 0.0;
+// verbose ;
}
virtualMassForceProps
@@ -144,6 +181,13 @@ virtualMassForceProps
densityFieldName "rho";
}
+particleCellVolumeProps
+{
+ upperThreshold 0.999;
+ lowerThreshold 0.;
+ verbose;
+}
+
oneWayVTKProps
{
couplingFilename "vtk_out%4.4d.vtk";
@@ -165,9 +209,17 @@ engineProps
treeSearch true;
}
+turboEngineM2MProps
+{
+ turboEngineProps
+ {
+ treeSearch true;
+ }
+}
+
dividedProps
{
- alphaMin 0.1;
+ alphaMin 0.01;
scaleUpVol 1.0;
}
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_init b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_init
index 07d5447..292da9a 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_init
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_init
@@ -29,6 +29,10 @@ liggghtsCommandModels
writeLiggghts
);
+runLiggghtsProps
+{
+ preNo false;
+}
//- optional
writeLiggghtsProps
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_restart
index 7431b21..4ecd5aa 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_restart
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/constant/liggghtsCommands_restart
@@ -27,5 +27,9 @@ liggghtsCommandModels
(
runLiggghts
);
-
// ************************************************************************* //
+
+/*runLiggghtsProps
+{
+ preNo false;
+}*/
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict
index 672e8e7..680381e 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict
@@ -23,13 +23,13 @@ startTime 0.05;
stopAt endTime;
-endTime 0.1;//0.01;
+endTime 0.1;
deltaT 0.001;
writeControl adjustableRunTime;
-writeInterval 0.01;//0.01;
+writeInterval 0.01;
purgeWrite 0;
@@ -49,7 +49,7 @@ adjustTimeStep no;
maxCo 0.1;
-//libs ( "libgroovyBC.so" );
+//libs ( "libgroovyBC.so" "libfiniteVolumeCFDEM.so");
functions
(
@@ -87,7 +87,7 @@ functions
);
// Fields to be probed
- fields ( p U voidfraction volAverage_voidfraction);
+ fields ( p U voidfraction volAverage_voidfraction voidfractionNext voidfractionPrev);
// Write at same frequency as fields
outputControl timeStep;//outputTime;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_init b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_init
index 02f3633..1d2f9b5 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_init
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_init
@@ -23,13 +23,13 @@ startTime 0;
stopAt endTime;
-endTime 0.05;//0.01;
+endTime 0.05;
deltaT 0.001;
writeControl adjustableRunTime;
-writeInterval 0.01;//0.01;
+writeInterval 0.01;
purgeWrite 0;
@@ -49,7 +49,7 @@ adjustTimeStep no;
maxCo 0.1;
-//libs ( "libgroovyBC.so" );
+//libs ( "libgroovyBC.so" "libfiniteVolumeCFDEM.so");
functions
(
@@ -87,7 +87,7 @@ functions
);
// Fields to be probed
- fields ( p U voidfraction volAverage_voidfraction);
+ fields ( p U voidfraction volAverage_voidfraction voidfractionNext voidfractionPrev);
// Write at same frequency as fields
outputControl timeStep;//outputTime;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_restart
index 672e8e7..680381e 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_restart
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/controlDict_restart
@@ -23,13 +23,13 @@ startTime 0.05;
stopAt endTime;
-endTime 0.1;//0.01;
+endTime 0.1;
deltaT 0.001;
writeControl adjustableRunTime;
-writeInterval 0.01;//0.01;
+writeInterval 0.01;
purgeWrite 0;
@@ -49,7 +49,7 @@ adjustTimeStep no;
maxCo 0.1;
-//libs ( "libgroovyBC.so" );
+//libs ( "libgroovyBC.so" "libfiniteVolumeCFDEM.so");
functions
(
@@ -87,7 +87,7 @@ functions
);
// Fields to be probed
- fields ( p U voidfraction volAverage_voidfraction);
+ fields ( p U voidfraction volAverage_voidfraction voidfractionNext voidfractionPrev);
// Write at same frequency as fields
outputControl timeStep;//outputTime;
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/decomposeParDict b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/decomposeParDict
index 21bbeef..4de1407 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/decomposeParDict
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/decomposeParDict
@@ -17,7 +17,7 @@ FoamFile
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-numberOfSubdomains 2;
+numberOfSubdomains 4;
//- Keep owner and neighbour on same processor for faces in zones:
// preserveFaceZones (heater solid1 solid3);
@@ -30,7 +30,7 @@ numberOfSubdomains 2;
simpleCoeffs
{
- n (1 1 2);
+ n (2 2 1);
delta 0.001;
}
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/funkySetFieldsDict b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/funkySetFieldsDict
old mode 100755
new mode 100644
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/fvSolution b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/fvSolution
index 955f5b1..46c6e11 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/fvSolution
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/CFD/system/fvSolution
@@ -17,7 +17,7 @@ FoamFile
solvers
{
- p
+ "(p)"
{
solver PCG;
preconditioner DIC;
@@ -33,7 +33,7 @@ solvers
relTol 0;
}
- U
+ "(U|k|epsilon|R|nuTilda)"
{
solver PBiCG;
preconditioner DILU;
@@ -41,34 +41,10 @@ solvers
relTol 0;
}
- k
+ "(voidfraction|Us|Ksl|dSmoothing)"
{
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- epsilon
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- R
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- nuTilda
- {
- solver PBiCG;
- preconditioner DILU;
+ solver PCG;
+ preconditioner DIC;
tolerance 1e-05;
relTol 0;
}
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_init b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_init
index 327f3ec..e6f325c 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_init
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_init
@@ -1,5 +1,5 @@
# Pour granular particles into chute container, then induce flow
-echo both
+echo both
atom_style granular
atom_modify map array
communicate single vel yes
@@ -36,12 +36,9 @@ fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplan
fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 0.0553
fix cylwalls all wall/gran model hertz tangential history primitive type 1 zcylinder 0.01385 0. 0.
-#cfd coupling
-#fix cfd all couple/cfd
-
#particle distributions and insertion
region bc cylinder z 0.0 0.0 0.012 0. 0.055 units box
-fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 200 radius constant 0.0005
+fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 2000 radius constant 0.0005
fix pdd1 all particledistribution/discrete 1. 1 pts1 1.0
fix ins all insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0. -1. insert_every once overlapcheck yes all_in yes particles_in_region 10000 region bc
@@ -49,7 +46,6 @@ fix ins all insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0
#apply nve integration to all particles that are inserted as single particles
fix integr all nve/sphere
-
#screen output
compute 1 all erotate/sphere
thermo_style custom step atoms ke c_1 vol
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_restart
index 915dca8..5dc462e 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_restart
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_restart
@@ -1,5 +1,5 @@
# Pour granular particles into chute container, then induce flow
-echo both
+
atom_style granular
atom_modify map array
communicate single vel yes
@@ -8,10 +8,9 @@ boundary m m m
newton off
units si
-processors 2 1 1
+processors 2 2 1
#read the restart file
-#read_restart ../DEM/liggghts.restartCFDEM
read_restart ../DEM/liggghts.restartCFDEM_0.050000
#do not do this here, the simulation box is in the restart file!
@@ -36,8 +35,6 @@ pair_coeff * *
timestep 0.00001
fix gravi all gravity 9.81 vector 0.0 0.0 -1.0
-#walls
-#walls
fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0.0
fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 0.0553
fix cylwalls all wall/gran model hertz tangential history primitive type 1 zcylinder 0.01385 0. 0.
@@ -56,11 +53,11 @@ fix integr all nve/sphere
compute centerOfMass all com
#compute total dragforce
-#compute dragtotal all reduce sum f_dragforce[1] f_dragforce[2] f_dragforce[3]
+compute dragtotal all reduce sum f_dragforce[1] f_dragforce[2] f_dragforce[3]
#screen output
compute 1 all erotate/sphere
-thermo_style custom step atoms ke c_1 vol c_centerOfMass[3] #c_dragtotal[1] c_dragtotal[2] c_dragtotal[3]
+thermo_style custom step atoms ke c_1 vol c_centerOfMass[3] c_dragtotal[1] c_dragtotal[2] c_dragtotal[3]
thermo 10
thermo_modify lost ignore norm no
compute_modify thermo_temp dynamic yes
@@ -68,7 +65,7 @@ compute_modify thermo_temp dynamic yes
#insert the first particles so that dump is not empty
dump myDump all stl 1 post/dump_*.stl
#run 1
-dump dmp all custom 5000 ../DEM/post/dump.liggghts_restart id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius
+dump dmp all custom 5000 ../DEM/post/dump*.liggghts_restart id type type x y z vx vy vz fx fy fz f_dragforce[1] f_dragforce[2] f_dragforce[3] radius
undump myDump
run 1
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_resume b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_resume
index 421eb45..4ef8bab 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_resume
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/in.liggghts_resume
@@ -8,7 +8,7 @@ boundary m m m
newton off
units si
-processors 2 1 1
+processors 2 2 1
#read the restart file
read_restart ../DEM/liggghts.restart
@@ -35,7 +35,6 @@ pair_coeff * *
timestep 0.00001
fix gravi all gravity 9.81 vector 0.0 0.0 -1.0
-#walls
fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0.0
fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 0.0553
fix cylwalls all wall/gran model hertz tangential history primitive type 1 zcylinder 0.01385 0. 0.
@@ -54,11 +53,11 @@ fix integr all nve/sphere
compute centerOfMass all com
#compute total dragforce
-#compute dragtotal all reduce sum f_dragforce[1] f_dragforce[2] f_dragforce[3]
+compute dragtotal all reduce sum f_dragforce[1] f_dragforce[2] f_dragforce[3]
#screen output
compute 1 all erotate/sphere
-thermo_style custom step atoms ke c_1 vol c_centerOfMass[3] #c_dragtotal[1] c_dragtotal[2] c_dragtotal[3]
+thermo_style custom step atoms ke c_1 vol c_centerOfMass[3] c_dragtotal[1] c_dragtotal[2] c_dragtotal[3]
thermo 10
thermo_modify lost ignore norm no
compute_modify thermo_temp dynamic yes
@@ -66,7 +65,7 @@ compute_modify thermo_temp dynamic yes
#insert the first particles so that dump is not empty
dump myDump all stl 1 post/dump_*.stl
#run 1
-dump dmp all custom 5000 ../DEM/post/dump.liggghts_restart id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius
+dump dmp all custom 5000 ../DEM/post/dump*.liggghts_restart id type type x y z vx vy vz fx fy fz f_dragforce[1] f_dragforce[2] f_dragforce[3] radius
undump myDump
run 1
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/liggghts.restart b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/liggghts.restart
index 9960558..93e0dd4 100644
Binary files a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/liggghts.restart and b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/liggghts.restart differ
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy
index 3233706..e69de29 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy
@@ -1,60 +0,0 @@
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
-dummyfile
diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh
index 237dcdf..75edf29 100644
--- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh
+++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh
@@ -19,12 +19,13 @@ logpath=$casePath
headerText="run_parallel_cfdemSolverPiso_ErgunTestMPI_CFDDEM"
logfileName="log_$headerText"
solverName="cfdemSolverPiso"
-nrProcs="2"
+nrProcs="4"
machineFileName="none" # yourMachinefileName | none
debugMode="off" # on | off| strict
+reconstuctCase="true" # true | false
testHarnessPath="$CFDEM_TEST_HARNESS_PATH"
#--------------------------------------------------------------------------------#
#- call function to run a parallel CFD-DEM case
-parCFDDEMrun $logpath $logfileName $casePath $headerText $solverName $nrProcs $machineFileName $debugMode
+parCFDDEMrun $logpath $logfileName $casePath $headerText $solverName $nrProcs $machineFileName $debugMode $reconstuctCase
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Ksl b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Ksl
index b501045..690d914 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Ksl
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Ksl
@@ -21,15 +21,11 @@ internalField uniform 0;
boundaryField
{
- atmosphere
+ "(inlet|outlet|walls)"
{
type zeroGradient;
+ value uniform 0;
}
- walls
- {
- type zeroGradient;
- }
-
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/U b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/U
index 759f856..1ffff65 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/U
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/U
@@ -21,7 +21,12 @@ internalField uniform (0 0 0);
boundaryField
{
- atmosphere
+ inlet
+ {
+ type fixedValue;
+ value uniform (0 0 0);
+ }
+ outlet
{
type zeroGradient;
value uniform (0 0 0);
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Us b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Us
index 7b6db84..cb32a85 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Us
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/Us
@@ -21,13 +21,10 @@ internalField uniform (0 0 0);
boundaryField
{
- atmosphere
- {
- type zeroGradient;
- }
- walls
+ "(inlet|outlet|walls)"
{
type zeroGradient;
+ value uniform (0 0 0);
}
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/k b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/k
index ce29ae1..3def2c4 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/k
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/k
@@ -26,12 +26,18 @@ boundaryField
value uniform 0;
}
- atmosphere
+ inlet
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
+ outlet
+ {
+ type outletInlet;
+ outletValue uniform 0;
+ value uniform 0;
+ }
}
// ************************************************************************* //
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/nuSgs b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/nuSgs
index f9d5d25..36c4dca 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/nuSgs
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/nuSgs
@@ -20,12 +20,7 @@ internalField uniform 0;
boundaryField
{
- walls
- {
- type zeroGradient;
- }
-
- atmosphere
+ ".*"
{
type zeroGradient;
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/p b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/p
index 912e62e..9b54c93 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/p
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/p
@@ -25,18 +25,20 @@ boundaryField
type zeroGradient;
value uniform 0;
}
-
- atmosphere
+ inlet
{
- /* type totalPressure;
+ type zeroGradient;
+ value uniform 0;
+ }
+ outlet
+ {
+ type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rho;
psi none;
gamma 1;
- value uniform 0;*/
- type fixedValue;
value uniform 0;
}
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/rho b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/rho
index efbcf07..a494e61 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/rho
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/rho
@@ -20,16 +20,10 @@ internalField uniform 10;
boundaryField
{
- walls
+ "(inlet|outlet|walls)"
{
type zeroGradient;
- value uniform 1;
- }
-
- atmosphere
- {
- type zeroGradient;
- value uniform 1;
+ value uniform 10;
}
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/voidfraction b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/voidfraction
index 5eefab7..83c35c4 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/voidfraction
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/0/voidfraction
@@ -20,19 +20,10 @@ internalField uniform 1;
boundaryField
{
- walls
- {
- type zeroGradient;
- }
-
- obstacle
- {
- type zeroGradient;
- }
-
- atmosphere
+ "(inlet|outlet|walls)"
{
type zeroGradient;
+ value uniform 1;
}
}
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties
index 8e1267e..50e6c9d 100755
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties
@@ -46,9 +46,9 @@ dataExchangeModel twoWayMPI;//twoWayFiles;//oneWayVTK;//
averagingModel dense;//dilute;//
-clockModel standardClock;//off; //
+clockModel off; //standardClock;//
-smoothingModel off; //constDiffSmoothing; //
+smoothingModel constDiffSmoothing; //off;//
//useDDTvoidfraction;
@@ -93,6 +93,8 @@ DiFeliceDragProps
velFieldName "U";
densityFieldName "rho";
voidfractionFieldName "voidfraction";
+ granVelFieldName "Us";
+ verbose;
}
SchillerNaumannDragProps
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/polyMesh/blockMeshDict b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/polyMesh/blockMeshDict
index 451afcc..ff086d7 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/polyMesh/blockMeshDict
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/polyMesh/blockMeshDict
@@ -30,8 +30,10 @@ vertices
blocks
(
- //hex (0 1 2 3 4 5 6 7) (5 25 5) simpleGrading (1 1 1) // regular grid
- hex (0 1 2 3 4 5 6 7) (25 25 25) simpleGrading (1 1 1) // irrregular grid
+ hex (0 1 2 3 4 5 6 7) (5 25 5) simpleGrading (1 1 1) // regular grid
+ //hex (0 1 2 3 4 5 6 7) (25 125 25) simpleGrading (1 1 1) // irrregular fine grid
+ //hex (0 1 2 3 4 5 6 7) (25 25 25) simpleGrading (1 1 1) // irrregular coarse grid
+ //hex (0 1 2 3 4 5 6 7) (10 25 10) simpleGrading (1 1 1) // irrregular grid (ratio 2)
);
edges
@@ -40,15 +42,18 @@ edges
patches
(
- patch atmosphere
+ patch inlet
(
(3 7 6 2)
)
+ patch outlet
+ (
+ (1 5 4 0)
+ )
wall walls
(
(0 4 7 3)
(2 6 5 1)
- (1 5 4 0)
(0 3 2 1)
(4 5 6 7)
)
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/system/fvSolution b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/system/fvSolution
index 937527d..96a1d5c 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/system/fvSolution
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/system/fvSolution
@@ -33,7 +33,7 @@ solvers
relTol 0;
}
- U
+ "(U|k|epsilon|R|nuTilda)"
{
solver PBiCG;
preconditioner DILU;
@@ -41,50 +41,13 @@ solvers
relTol 0;
}
- k
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- epsilon
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- R
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- nuTilda
- {
- solver PBiCG;
- preconditioner DILU;
- tolerance 1e-05;
- relTol 0;
- }
-
- voidfraction
+ "(voidfraction|Ksl|UsNext|voidfractionNext)"
{
solver PCG;
preconditioner DIC;
tolerance 1e-09;
relTol 1e-06;
}
-
- Ksl
- {
- $voidfraction
- }
}
PISO
diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh
index 6612744..5d20182 100644
--- a/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh
+++ b/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh
@@ -29,7 +29,7 @@ postproc="false"
#--------------------------------------------------------------------------------#
#- call function to run a parallel CFD-DEM case
-parCFDDEMrun $logpath $logfileName $casePath $headerText $solverName $nrProcs $machineFileName $debugMode
+parCFDDEMrun $logpath $logfileName $casePath $headerText $solverName $nrProcs $machineFileName $debugMode "true"
if [ $runOctave == "true" ]
then