From ef08058ce6e085bfbaa2d1226aac6206ff892b2e Mon Sep 17 00:00:00 2001
From: goniva
Date: Tue, 11 Mar 2014 15:15:12 +0100
Subject: [PATCH] release on 2014-03-11_15-15-12
---
README | 81 ------------------
.../solvers/cfdemSolverIB/cfdemSolverIB.C | 19 +++-
doc/CFDEMcoupling_Manual.pdf | Bin 511619 -> 511914 bytes
doc/forceModel_GidaspowDrag.html | 4 +
doc/forceModel_GidaspowDrag.txt | 3 +
doc/githubAccess_public.html | 31 ++++---
doc/githubAccess_public.pdf | Bin 362495 -> 362749 bytes
doc/githubAccess_public.txt | 31 ++++---
src/lagrangian/cfdemParticle/Make/files | 37 ++++++--
.../cfdemParticle/cfdTools/versionInfo.H | 4 +-
.../cfdemParticle/cfdemCloud/cfdemCloudI.H | 10 +++
.../derived/cfdemCloudIB/cfdemCloudIB.C | 46 ++++++----
.../derived/cfdemCloudIB/cfdemCloudIB.H | 3 +
.../cfdemParticle/etc/OFversion/OFversion.H | 2 +-
.../etc/compileCFDEMcoupling_sol.sh | 9 +-
.../etc/compileCFDEMcoupling_src.sh | 2 +
src/lagrangian/cfdemParticle/etc/functions.sh | 31 ++++++-
.../cfdemParticle/etc/library-list.txt | 10 +++
.../cfdemParticle/etc/solver-list.txt | 10 ++-
.../cfdemParticle/etc/tutorial-list.txt | 41 +++++++--
.../forceModel/GidaspowDrag/GidaspowDrag.C | 22 ++++-
.../forceModel/GidaspowDrag/GidaspowDrag.H | 4 +
.../forceModel/gradPForce/gradPForce.C | 11 ++-
.../forceModel/gradPForce/gradPForce.H | 2 +
.../forceModel/viscForce/viscForce.C | 11 ++-
.../forceModel/viscForce/viscForce.H | 2 +
.../IBVoidFraction/IBVoidFraction.C | 12 +--
.../CFD/constant/couplingProperties | 2 -
.../cfdemSolverPimple/ErgunTestMPI/Allrun.sh | 2 -
.../CFD/octave/totalPressureDrop.m | 2 +-
.../ErgunTestMPI/DEM/post/dummy | 1 +
.../ErgunTestCG/DEM/liggghts.restart | Bin 604924 -> 0 bytes
.../DEM/liggghts.restart_coarseGraining_2 | Bin 0 -> 862301 bytes
.../CFD/constant/couplingProperties | 3 +
.../ErgunTestMPI_cgs/parCFDDEMrun.sh | 1 +
.../ErgunTestMPI_restart/DEM/post/dummy | 2 +
36 files changed, 282 insertions(+), 169 deletions(-)
delete mode 100755 README
delete mode 100644 tutorials/cfdemSolverPiso/ErgunTestCG/DEM/liggghts.restart
create mode 100644 tutorials/cfdemSolverPiso/ErgunTestCG/DEM/liggghts.restart_coarseGraining_2
diff --git a/README b/README
deleted file mode 100755
index fd2ca756..00000000
--- a/README
+++ /dev/null
@@ -1,81 +0,0 @@
-/*---------------------------------------------------------------------------*\
- CFDEMcoupling - Open Source CFD-DEM coupling
-
- CFDEMcoupling is part of the CFDEMproject
- www.cfdem.com
- Christoph Goniva, christoph.goniva@cfdem.com
- Copyright 2009-2012 JKU Linz
- Copyright 2012- DCS Computing GmbH, Linz
--------------------------------------------------------------------------------
-License
- This file is part of CFDEMcoupling.
-
- CFDEMcoupling is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3 of the License, or (at your
- option) any later version.
-
- CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with CFDEMcoupling; if not, write to the Free Software Foundation,
- Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Description
- This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
- and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER).
-\*---------------------------------------------------------------------------*/
-
-
-CFDEM coupling provides an open source parallel coupled CFD-DEM framework
-combining the strengths of LIGGGHTS DEM code and the Open Source
-CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand
-standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM
-code LIGGGHTS. In this toolbox the particle representation within the
-CFD solver is organized by "cloud" classes. Key functionalities are organised
-in sub-models (e.g. force models, data exchange models, etc.) which can easily
-be selected and combined by dictionary settings.
-
-The coupled solvers run fully parallel on distributed-memory clusters.
-
-Features are:
-
-- its modular approach allows users to easily implement new models
-- its MPI parallelization enables to use it for large scale problems
-- the "forum"_lws on CFD-DEM gives the possibility to exchange with other
- users / developers
-- the use of GIT allows to easily update to the latest version
-- basic documentation is provided
-
-The file structure:
-
-- "src" directory including the source files of the coupling toolbox and models
-- "applications" directory including the solver files for coupled CFD-DEM simulations
-- "doc" directory including the documentation of CFDEMcoupling
-- "tutorials" directory including basic tutorial cases showing the functionality
-
-
-
-Details on installation are given on the "www.cfdem.com"
-
-The functionality of this CFD-DEM framwork is described via "tutorial cases" showing
-how to use different solvers and models.
-
-CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -
-Discrete Element Method (DEM) coupling.
-
-CFDEMcoupling is an open-source code, distributed freely under the terms of the
-GNU Public License (GPL).
-
-Core development of CFDEMcoupling is done by
-Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
-
-
-\*---------------------------------------------------------------------------*/
-(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group.
-This offering is not affiliated, approved or endorsed by ESI Group,
-the producer of the OpenFOAMĀ® software and owner of the OpenFOAMĀ® trade mark.
-\*---------------------------------------------------------------------------*/
diff --git a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
index 834d0962..2df2a46e 100755
--- a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
+++ b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C
@@ -51,8 +51,11 @@ Contributions
#include "dynamicFvMesh.H" //dyM
#include "cellSet.H"
-#include "meshToMeshNew.H"
-#include "fvIOoptionList.H"
+
+#if defined(version22)
+ #include "meshToMeshNew.H"
+ #include "fvIOoptionList.H"
+#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -68,7 +71,9 @@ int main(int argc, char *argv[])
#include "initContinuityErrs.H"
- #include "createFvOptions.H"
+ #if defined(version22)
+ #include "createFvOptions.H"
+ #endif
// create cfdemCloud
#include "readGravitationalAcceleration.H"
@@ -102,13 +107,17 @@ int main(int argc, char *argv[])
fvm::ddt(voidfraction,U)
+ fvm::div(phi, U)
+ turbulence->divDevReff(U)
+ #if defined(version22)
==
fvOptions(U)
+ #endif
);
UEqn.relax();
+ #if defined(version22)
fvOptions.constrain(UEqn);
+ #endif
if (momentumPredictor)
{
@@ -126,7 +135,9 @@ int main(int argc, char *argv[])
adjustPhi(phi, U, p);
+ #if defined(version22)
fvOptions.relativeFlux(phi);
+ #endif
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
@@ -172,7 +183,9 @@ int main(int argc, char *argv[])
volScalarField voidfractionNext=mesh.lookupObject("voidfractionNext");
particleCloud.calcVelocityCorrection(p,U,phiIB,voidfractionNext);
+ #if defined(version22)
fvOptions.correct(U);
+ #endif
runTime.write();
diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf
index 9cc04e71d9a168f9d4275e7ee356d304af5a5bbc..6a57831fe1a46e6bdbb3840cf453b3f49ba9f1c8 100644
GIT binary patch
delta 15942
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
delta 15740
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
@@ -28,6 +29,8 @@ GidaspowDragProps
density = name of the finite volume gravity field
+voidfraction = name of the finite volume voidfraction field
+
phi = drag correction factor (in doubt 1)
@@ -42,6 +45,7 @@ GidaspowDragProps
{
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
}
Description:
diff --git a/doc/forceModel_GidaspowDrag.txt b/doc/forceModel_GidaspowDrag.txt
index 9a5af514..a4e5718f 100644
--- a/doc/forceModel_GidaspowDrag.txt
+++ b/doc/forceModel_GidaspowDrag.txt
@@ -19,11 +19,13 @@ GidaspowDragProps
\{
velFieldName "U";
densityFieldName "density";
+ voidfractionFieldName "voidfraction";
phi "scalar";
\}; :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
:ule
@@ -37,6 +39,7 @@ GidaspowDragProps
\{
velFieldName "U";
densityFieldName "rho";
+ voidfractionFieldName "voidfraction";
\} :pre
[Description:]
diff --git a/doc/githubAccess_public.html b/doc/githubAccess_public.html
index b3e3a316..2ca41186 100644
--- a/doc/githubAccess_public.html
+++ b/doc/githubAccess_public.html
@@ -17,8 +17,8 @@
Description:
-This routine describes how to setup a github account and pull repositories of the CFDEMproject.
-After setting some environment variables LIGGGHTS and CFDEMcoupling can be compiled
+
This routine describes how to setup 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:
@@ -30,7 +30,7 @@ After setting some environment variables LIGGGHTS and CFDEMcoupling can be compi
set environment variables
-compile LIGGGHTS and CFDEMcoupling
+compile LIGGGHTS(R) and CFDEM(R)coupling
run your own cases
@@ -38,7 +38,7 @@ After setting some environment variables LIGGGHTS and CFDEMcoupling can be compi
git clone the desired repository:
-If not already done, open a terminal and create a directory for LIGGGHTS in $HOME:
+
If not already done, open a terminal and create a directory for LIGGGHTS(R) in $HOME:
cd
@@ -50,7 +50,7 @@ After setting some environment variables LIGGGHTS and CFDEMcoupling can be compi
git clone git://github.com/CFDEMproject/LIGGGHTS-PUBLIC.git LIGGGHTS-PUBLIC
-If not already done, open a terminal and create a directory for CFDEMcoupling in $HOME:
+
If not already done, open a terminal and create a directory for CFDEM(R)coupling in $HOME:
cd
@@ -58,9 +58,9 @@ After setting some environment variables LIGGGHTS and CFDEMcoupling can be compi
cd CFDEM
-Make sure that OpenFOAM(R)-2.1.x is already set up correctly!
+
Make sure that OpenFOAM(R) is already set up correctly!
-To clone the public CFDEMcoupling repository, open a terminal and execute:
+
To clone the public CFDEM(R)coupling repository, open a terminal and execute:
git clone git://github.com/CFDEMproject/CFDEMcoupling-PUBLIC.git CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION
@@ -117,13 +117,13 @@ $CFDEM_LIGGGHTS_SRC_DIR
to get some information if the paths are set correctly.
-Compile LIGGGHTS and CFDEMcoupling:
+
Compile LIGGGHTS(R) and CFDEM(R)coupling:
-If above settings were done correctly, you can compile LIGGGHTS by typing:
+
If above settings were done correctly, you can compile LIGGGHTS(R) by typing:
cfdemCompLIG
-and you can then compile CFDEMcoupling by typing:
+
and you can then compile CFDEM(R)coupling by typing:
cfdemCompCFDEM
@@ -149,6 +149,17 @@ 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:
+
+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.
+
+The supported OpenFOAM(R) and LIGGGHTS(R) versions are stated in:
+src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
+
+For using other versions you can manipulate:
+src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
+(still not all functionality might work then!)
+
Troubleshooting:
- toubles with git clone?
diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf
index 73add382640054237ca9f3da01a12bb1c72f2fcc..e02000ae659b65943f75357ed44802afdb3487b6 100644
GIT binary patch
delta 4272
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
diff --git a/doc/githubAccess_public.txt b/doc/githubAccess_public.txt
index c547bf8f..35e80d06 100644
--- a/doc/githubAccess_public.txt
+++ b/doc/githubAccess_public.txt
@@ -11,8 +11,8 @@ githubAccess_public :h3
[Description:]
-This routine describes how to setup a github account and pull repositories of the CFDEMproject.
-After setting some environment variables LIGGGHTS and CFDEMcoupling can be compiled
+This routine describes how to setup 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:]
@@ -21,13 +21,13 @@ Basically the following steps have to be performed:
{git clone} the desired repository :ulb,l
update your repositories by {git pull} :l
set environment variables :l
-compile LIGGGHTS and CFDEMcoupling :l
+compile LIGGGHTS(R) and CFDEM(R)coupling :l
run your own cases :l
:ule
[{git clone} the desired repository:]
-If not already done, open a terminal and create a directory for LIGGGHTS in $HOME:
+If not already done, open a terminal and create a directory for LIGGGHTS(R) in $HOME:
cd :pre
mkdir LIGGGHTS :pre
@@ -37,15 +37,15 @@ To clone the public LIGGGHTS repository, open a terminal and execute:
git clone git://github.com/CFDEMproject/LIGGGHTS-PUBLIC.git LIGGGHTS-PUBLIC :pre,h6
-If not already done, open a terminal and create a directory for CFDEMcoupling in $HOME:
+If not already done, open a terminal and create a directory for CFDEM(R)coupling in $HOME:
cd :pre
mkdir CFDEM :pre
cd CFDEM :pre
-Make sure that OpenFOAM(R)-2.1.x is already set up correctly!
+Make sure that OpenFOAM(R) is already set up correctly!
-To clone the public CFDEMcoupling repository, open a terminal and execute:
+To clone the public CFDEM(R)coupling repository, open a terminal and execute:
git clone git://github.com/CFDEMproject/CFDEMcoupling-PUBLIC.git CFDEMcoupling-PUBLIC-$WM_PROJECT_VERSION :pre,h6
@@ -103,13 +103,13 @@ cfdemSysTest :pre
to get some information if the paths are set correctly.
-[Compile LIGGGHTS and CFDEMcoupling:]
+[Compile LIGGGHTS(R) and CFDEM(R)coupling:]
-If above settings were done correctly, you can compile LIGGGHTS by typing:
+If above settings were done correctly, you can compile LIGGGHTS(R) by typing:
cfdemCompLIG :pre
-and you can then compile CFDEMcoupling by typing:
+and you can then compile CFDEM(R)coupling by typing:
cfdemCompCFDEM :pre
@@ -134,6 +134,17 @@ 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:]
+
+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.
+
+The supported OpenFOAM(R) and LIGGGHTS(R) versions are stated in:
+src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
+
+For using other versions you can manipulate:
+src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
+(still not all functionality might work then!)
+
[Troubleshooting:]
toubles with git clone? :ulb,l
diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files
index 92a7d09f..ac634f14 100644
--- a/src/lagrangian/cfdemParticle/Make/files
+++ b/src/lagrangian/cfdemParticle/Make/files
@@ -6,7 +6,6 @@ voidFractionModels = subModels/voidFractionModel
locateModels = subModels/locateModel
meshMotionModels = subModels/meshMotionModel
momCoupleModels = subModels/momCoupleModel
-regionModels = subModels/regionModel
dataExchangeModels = subModels/dataExchangeModel
averagingModels = subModels/averagingModel
clockModels = subModels/clockModel
@@ -15,6 +14,7 @@ smoothingModels = subModels/smoothingModel
probeModels = subModels/probeModel
$(cfdemCloud)/cfdemCloud.C
+derived/cfdemCloudBiDisperse/cfdemCloudBiDisperse.C
derived/cfdemCloudIB/cfdemCloudIB.C
derived/cfdemCloudMS/cfdemCloudMS.C
@@ -23,26 +23,44 @@ $(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)/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)/solidsPressureForce/solidsPressureForce.C
+$(forceModels)/periodicPressure/periodicPressure.C
+$(forceModels)/periodicPressureControl/periodicPressureControl.C
+$(forceModels)/averageSlipVel/averageSlipVel.C
$(forceModels)/particleCellVolume/particleCellVolume.C
-$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
-$(forceModels)/volWeightedAverage/volWeightedAverage.C
$(forceModelsMS)/forceModelMS/forceModelMS.C
$(forceModelsMS)/forceModelMS/newForceModelMS.C
$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C
+$(forceModelsMS)/GidaspowDragMS/GidaspowDragMS.C
+$(forceModelsMS)/noDragMS/noDragMS.C
$(probeModels)/probeModel/probeModel.C
$(probeModels)/probeModel/newProbeModel.C
@@ -60,10 +78,12 @@ $(voidFractionModels)/voidFractionModel/voidFractionModel.C
$(voidFractionModels)/voidFractionModel/newVoidFractionModel.C
$(voidFractionModels)/centreVoidFraction/centreVoidFraction.C
$(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C
+$(voidFractionModels)/dividedVoidFractionBiDi/dividedVoidFractionBiDi.C
$(voidFractionModels)/dividedVoidFractionMS/dividedVoidFractionMS.C
$(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C
$(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C
$(voidFractionModels)/IBVoidFraction/IBVoidFraction.C
+$(voidFractionModels)/weightedNeigbhorsVoidFraction/weightedNeigbhorsVoidFraction.C
$(locateModels)/locateModel/locateModel.C
$(locateModels)/locateModel/newLocateModel.C
@@ -73,21 +93,18 @@ $(locateModels)/turboEngineSearch/turboEngineSearch.C
$(locateModels)/turboEngineSearchM2M/turboEngineSearchM2M.C
$(locateModels)/engineSearchIB/engineSearchIB.C
-
$(meshMotionModels)/meshMotionModel/meshMotionModel.C
$(meshMotionModels)/meshMotionModel/newMeshMotionModel.C
$(meshMotionModels)/noMeshMotion/noMeshMotion.C
+$(meshMotionModels)/DEMdrivenMeshMotion/DEMdrivenMeshMotion.C
$(momCoupleModels)/momCoupleModel/momCoupleModel.C
$(momCoupleModels)/momCoupleModel/newMomCoupleModel.C
$(momCoupleModels)/explicitCouple/explicitCouple.C
+$(momCoupleModels)/explicitCoupleSource/explicitCoupleSource.C
$(momCoupleModels)/implicitCouple/implicitCouple.C
$(momCoupleModels)/noCouple/noCouple.C
-$(regionModels)/regionModel/regionModel.C
-$(regionModels)/regionModel/newRegionModel.C
-$(regionModels)/allRegion/allRegion.C
-
$(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C
$(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C
$(dataExchangeModels)/oneWayVTK/oneWayVTK.C
@@ -100,6 +117,7 @@ $(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
@@ -117,5 +135,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/cfdTools/versionInfo.H b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
index 683bf4ec..213b21c0 100755
--- a/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
+++ b/src/lagrangian/cfdemParticle/cfdTools/versionInfo.H
@@ -1,6 +1,6 @@
-word CFDEMversion="cfdem-2.6.0";
+word CFDEMversion="cfdem-2.6.1";
word compatibleLIGGGHTSversion="3.0.0";
-word OFversion="2.2.x-commit-7c405a31b2f7299f5e2669fa18fb251ea219dd03";
+word OFversion="2.2.x-commit-61b850bc107bdd60bbf1bf9a6417b9faf701d128";
Info << "\nCFDEMcoupling version: " << CFDEMversion << "\n" << endl;
Info << "\n, compatible to LIGGGHTS version: " << compatibleLIGGGHTSversion << "\n" << endl;
diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
index d13046fe..698ac718 100644
--- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
+++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H
@@ -30,6 +30,16 @@ Description
\*---------------------------------------------------------------------------*/
+#include "momCoupleModel.H"
+#include "smoothingModel.H"
+#include "meshMotionModel.H"
+#include "averagingModel.H"
+#include "clockModel.H"
+#include "IOModel.H"
+#include "voidFractionModel.H"
+#include "locateModel.H"
+#include "probeModel.H"
+
namespace Foam
{
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
index 6b889dfa..3fafc2e2 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C
@@ -55,8 +55,17 @@ cfdemCloudIB::cfdemCloudIB
cfdemCloud(mesh),
angularVelocities_(NULL),
pRefCell_(readLabel(mesh.solutionDict().subDict("PISO").lookup("pRefCell"))),
- pRefValue_(readScalar(mesh.solutionDict().subDict("PISO").lookup("pRefValue")))
-{}
+ pRefValue_(readScalar(mesh.solutionDict().subDict("PISO").lookup("pRefValue"))),
+ haveEvolvedOnce_(false),
+ skipLagrangeToEulerMapping_(false)
+{
+
+ if(this->couplingProperties().found("skipLagrangeToEulerMapping"))
+ {
+ Info << "Will skip lagrange-to-Euler mapping..." << endl;
+ skipLagrangeToEulerMapping_=true;
+ }
+}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@@ -95,20 +104,25 @@ bool Foam::cfdemCloudIB::evolve()
Info << "\n timeStepFraction() = " << dataExchangeM().timeStepFraction() << endl;
doCouple=true;
- if(verbose_) Info << "- getDEMdata()" << endl;
- getDEMdata();
- Info << "nr particles = " << numberOfParticles() << endl;
-
- // search cellID of particles
- if(verbose_) Info << "- findCell()" << endl;
- locateM().findCell(NULL,positions_,cellIDs_,numberOfParticles());
- if(verbose_) Info << "findCell done." << endl;
-
- // set void fraction field
- if(verbose_) Info << "- setvoidFraction()" << endl;
- voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_);
- if(verbose_) Info << "setvoidFraction done." << endl;
+// Info << "skipLagrangeToEulerMapping_: " << skipLagrangeToEulerMapping_
+// << " haveEvolvedOnce_: " << haveEvolvedOnce_ << endl;
+ if(!skipLagrangeToEulerMapping_ || !haveEvolvedOnce_)
+ {
+ if(verbose_) Info << "- getDEMdata()" << endl;
+ getDEMdata();
+ Info << "nr particles = " << numberOfParticles() << endl;
+
+ // search cellID of particles
+ if(verbose_) Info << "- findCell()" << endl;
+ locateM().findCell(NULL,positions_,cellIDs_,numberOfParticles());
+ if(verbose_) Info << "findCell done." << endl;
+ // set void fraction field
+ if(verbose_) Info << "- setvoidFraction()" << endl;
+ voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_);
+ if(verbose_) Info << "setvoidFraction done." << endl;
+ }
+
// set particles forces
if(verbose_) Info << "- setForce(forces_)" << endl;
for(int index = 0;index < numberOfParticles_; ++index){
@@ -124,6 +138,8 @@ bool Foam::cfdemCloudIB::evolve()
// write DEM data
if(verbose_) Info << " -giveDEMdata()" << endl;
giveDEMdata();
+
+ haveEvolvedOnce_=true;
}
Info << "evolve done." << endl;
diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H
index 06756b3d..cb4ee36d 100644
--- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H
+++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H
@@ -61,6 +61,9 @@ protected:
mutable double **angularVelocities_;
label pRefCell_;
scalar pRefValue_;
+
+ mutable bool haveEvolvedOnce_;
+ mutable bool skipLagrangeToEulerMapping_;
public:
diff --git a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
index 864dd64f..e9f19982 100644
--- a/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
+++ b/src/lagrangian/cfdemParticle/etc/OFversion/OFversion.H
@@ -7,7 +7,7 @@
//#define comp // if comp is on - you must use Make/options_comp!
//define multi sphere
-#define multisphere
+//#define multisphere
// features of 2.1 work also in 2.2
#if defined(version22)
diff --git a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
index 29388637..5ba8f061 100755
--- a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
+++ b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_sol.sh
@@ -39,6 +39,10 @@ echo ""
if [ ! -f "$CWD/$whitelist" ];then
echo "$whitelist does not exist in $CWD"
else
+
+ #--------------------------------------------------------------------------------#
+ logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
+
NLINES=`wc -l < $CWD/$whitelist`
COUNT=0
@@ -71,12 +75,13 @@ else
#--------------------------------------------------------------------------------#
#- 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"
+ parallel="false"
#--------------------------------------------------------------------------------#
- compileSolver $logpath $logfileName $casePath $headerText
+ compileSolver $logpath $logfileName $casePath $headerText $parallel
#echo "did the solvers compile correcty? - press enter to proceed."
#read
diff --git a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_src.sh b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_src.sh
index 003e65df..a763dace 100755
--- a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_src.sh
+++ b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling_src.sh
@@ -60,6 +60,8 @@ mkdir -p $logDir
casePath="$path"
headerText="$logfileName""-$NOW"
#--------------------------------------------------------------------------------#
+ # remove old log file
+ rm "$logpath/$logfileName"*
compileLib $logpath $logfileName $casePath $headerText
done
diff --git a/src/lagrangian/cfdemParticle/etc/functions.sh b/src/lagrangian/cfdemParticle/etc/functions.sh
index b2b6a741..aa98e483 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
@@ -306,6 +313,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
@@ -443,7 +470,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
diff --git a/src/lagrangian/cfdemParticle/etc/library-list.txt b/src/lagrangian/cfdemParticle/etc/library-list.txt
index 27e798d4..e34c2541 100644
--- a/src/lagrangian/cfdemParticle/etc/library-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/library-list.txt
@@ -1 +1,11 @@
lagrangian/cfdemParticle/dir
+
+#====================================================='
+#- RADL
+fvOptions/dir
+cylPorousMedia/dir
+
+#====================================================='
+#- other
+finiteVolume/dir
+
diff --git a/src/lagrangian/cfdemParticle/etc/solver-list.txt b/src/lagrangian/cfdemParticle/etc/solver-list.txt
index 803579e7..c7a142c0 100644
--- a/src/lagrangian/cfdemParticle/etc/solver-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/solver-list.txt
@@ -1,5 +1,11 @@
-cfdemSolverPimple/dir
-cfdemSolverPisoMS/dir
cfdemSolverPiso/dir
cfdemSolverIB/dir
cfdemSolverPisoScalar/dir
+cfdemSolverPimpleImEx/dir
+cfdemSolverIBInterLubrication/dir
+cfdemSolverIBScalar/dir
+cfdemSolverInterDyM/dir
+cfdemSolverBubble/dir
+cfdemSolverPimple/dir
+cfdemSolverPisoMS/dir
+cfdemSolverPimpleDyM_22x/dir
diff --git a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
index c8f69535..69188edc 100644
--- a/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
+++ b/src/lagrangian/cfdemParticle/etc/tutorial-list.txt
@@ -6,23 +6,46 @@
# Christoph Goniva - June. 2011, DCS Computing GmbH
#===================================================================#
-cfdemSolverPiso/settlingTestMPI/dir
+#cfdemSolverPiso/settlingTestMPI/dir
+#cfdemSolverPiso/ErgunTestMPI/dir
+#cfdemSolverPiso/ErgunTestMPI_cgs/dir
+#cfdemSolverPiso/ErgunTestMPI_restart/dir
+#cfdemSolverIB/twoSpheresGlowinskiMPI/dir
+#cfdemSolverPisoScalar/packedBedTemp/dir
-cfdemSolverPiso/ErgunTestMPI/dir
+#===================================================================#
+# RADL
+#cfdemSolverPimpleImEx/settlingTestMPI/dir
+#cfdemSolverPimpleImEx/crossFlow/dir
+cfdemSolverIB/periodicCase/dir
+cfdemSolverIB/cfdemIBPeriodicCubicalBox_fullyPeriodic/dir
+#cfdemSolverIBInterLubrication/twoCoatedParticlesRelMotion_smallTest/dir
+#cfdemSolverIBScalar/cfdemIBPeriodicCubicalBoxScalar/dir
-cfdemSolverPiso/ErgunTestMPI_cgs/dir
+#===================================================================#
+# NesteJacobs
+#Projects/Neste/cfdemSolverBubble/3pFBreactor/dir
+#Projects/Neste/cfdemSolverInterDyM/3pFBreactor/dir
-cfdemSolverPiso/ErgunTestMPI_restart/dir
+#===================================================================#
+# not in release:
-cfdemSolverIB/twoSpheresGlowinskiMPI/dir
+#cfdemSolverPiso/settlingTestBigParticleMPI/dir
+#cfdemSolverPiso/ErgunTestCG/dir
+#cfdemSolverPiso/ErgunTestM2M/dir
+#cfdemSolverPiso/HopperEmptying/dir
-cfdemSolverPisoScalar/packedBedTemp/dir
+#cfdemSolverPisoMS/settlingTestMPI/dir
+#cfdemSolverPisoMS/ErgunTestMPI/dir
+#cfdemSolverPimple/ErgunTestMPI/dir
+#cfdemSolverInterDyM/twoPhaseSettlingTest/dir
+#cfdemSolverInterDyM/ErgunTestMPI/dir
+#cfdemSolverInterDyM/granularPiston/dir
+#cfdemSolverInterDyM/sugarNcoffee/dir
-cfdemSolverPiso/ErgunTestCG/dir
-
-cfdemSolverPimple/ErgunTestMPI/dir
+#cfdemSolverBubble/ErgunTestMPI_pureLiquid/dir
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
index bd7337ad..533f2d44 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.C
@@ -68,14 +68,16 @@ GidaspowDrag::GidaspowDrag
U_(sm.mesh().lookupObject (velFieldName_)),
densityFieldName_(propsDict_.lookup("densityFieldName")),
rho_(sm.mesh().lookupObject (densityFieldName_)),
+ voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")),
+ voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)),
phi_(readScalar(propsDict_.lookup("phi")))
{
//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("Urel");
+ particleCloud_.probeM().scalarFields_.append("KslLag");
+ particleCloud_.probeM().scalarFields_.append("voidfraction");
particleCloud_.probeM().writeHeader();
if (propsDict_.found("verbose")) verbose_=true;
@@ -116,7 +118,7 @@ void GidaspowDrag::setForce() const
vector Ur = U_[cellI]-Us;
scalar magUr = mag(Ur);
scalar ds = 2*particleCloud_.radius(index)*phi_;
- scalar voidfraction = particleCloud_.voidfraction(index);
+ scalar voidfraction = voidfraction_[cellI];
scalar rho = rho_[cellI];
scalar nuf = nufField[cellI];
scalar CdMagUrLag=0;//Cd of the very particle
@@ -146,6 +148,18 @@ void GidaspowDrag::setForce() const
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 << "rho = " << rho << endl;
+ Pout << "nuf = " << nuf << endl;
+ Pout << "voidfraction = " << voidfraction << endl;
+ Pout << "drag = " << drag << endl;
+ }
//Set value fields and write the probe
if(probeIt_)
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
index c8c0ef1b..edd8a4f7 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/GidaspowDrag/GidaspowDrag.H
@@ -69,6 +69,10 @@ private:
const volScalarField& rho_;
+ word voidfractionFieldName_;
+
+ const volScalarField& voidfraction_;
+
const scalar phi_;
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C
index 4bddbff0..810349aa 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C
@@ -71,6 +71,7 @@ gradPForce::gradPForce
rho_(sm.mesh().lookupObject (densityFieldName_)),
useRho_(false),
useU_(false),
+ addedMassCoeff_(0.0),
interpolation_(false)
{
if (modelType_ == "B")
@@ -84,6 +85,12 @@ gradPForce::gradPForce
if (propsDict_.found("verbose")) verbose_=true;
if (propsDict_.found("treatExplicit")) treatExplicit_=true;
if (propsDict_.found("useU")) useU_=true;
+ if (propsDict_.found("useAddedMass"))
+ {
+ addedMassCoeff_ = readScalar(propsDict_.lookup("useAddedMass"));
+ Info << "gradP will also include added mass with coefficient: " << addedMassCoeff_ << endl;
+ Info << "WARNING: use fix nve/sphere/addedMass in LIGGGHTS input script to correctly account for added mass effects!" << endl;
+ }
if (propsDict_.found("interpolation"))
{
Info << "using interpolated value of pressure gradient." << endl;
@@ -160,9 +167,9 @@ void gradPForce::setForce() const
// calc particle's pressure gradient force
if (useRho_)
- force = -Vs*gradP*rho;
+ force = -Vs*gradP*rho*(1.0+addedMassCoeff_);
else
- force = -Vs*gradP;
+ force = -Vs*gradP*(1.0+addedMassCoeff_);
if(verbose_ && index >=0 && index <2)
{
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.H b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.H
index 053d92ad..85ffe188 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.H
@@ -81,6 +81,8 @@ private:
bool useU_; // if false: substitution p=0.5*rho*U^2
+ mutable double addedMassCoeff_; //added mass coefficient
+
bool interpolation_; // use interpolated field values
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.C
index 85a47d93..f1bee224 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.C
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.C
@@ -67,6 +67,7 @@ viscForce::viscForce
U_(sm.mesh().lookupObject (velocityFieldName_)),
densityFieldName_(propsDict_.lookup("densityFieldName")),
rho_(sm.mesh().lookupObject (densityFieldName_)),
+ addedMassCoeff_(0.0),
interpolation_(false)
{
if (modelType_ == "B")
@@ -79,6 +80,14 @@ viscForce::viscForce
}
if (propsDict_.found("verbose")) verbose_=true;
if (propsDict_.found("treatExplicit")) treatExplicit_=true;
+
+ if (propsDict_.found("useAddedMass"))
+ {
+ addedMassCoeff_ = readScalar(propsDict_.lookup("useAddedMass"));
+ Info << "viscForce will also include added mass with coefficient: " << addedMassCoeff_ << endl;
+ Info << "WARNING: use fix nve/sphere/addedMass in LIGGGHTS input script to correctly account for added mass effects!" << endl;
+ }
+
if (propsDict_.found("interpolation"))
{
Info << "using interpolated value of pressure gradient." << endl;
@@ -158,7 +167,7 @@ void viscForce::setForce() const
// calc the contribution of the deviatoric stress
// to the generalized buoyancy force
- force = -Vs*divTau;
+ force = -Vs*divTau*(1.0+addedMassCoeff_);
if(verbose_ && index >0 && index <2)
{
diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.H b/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.H
index 14120e1a..2632fbd7 100644
--- a/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.H
+++ b/src/lagrangian/cfdemParticle/subModels/forceModel/viscForce/viscForce.H
@@ -69,6 +69,8 @@ private:
const volScalarField& rho_;
+ mutable double addedMassCoeff_; //added mass coefficient
+
bool interpolation_; // use interpolated field values
public:
diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
index 25888f09..fab7706a 100755
--- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
+++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/IBVoidFraction/IBVoidFraction.C
@@ -127,7 +127,7 @@ void IBVoidFraction::setvoidFraction(double** const& mask,double**& voidfraction
vector cellCentrePosition = particleCloud_.mesh().C()[particleCenterCellID];
scalar centreDist=mag(cellCentrePosition-positionCenter);
- vector minPeriodicParticlePos;
+ vector minPeriodicParticlePos=positionCenter;
if(checkPeriodicCells_) //consider minimal distance to all periodic images of this particle
{
centreDist = minPeriodicDistance(cellCentrePosition, positionCenter, globalBb,
@@ -158,11 +158,6 @@ void IBVoidFraction::setvoidFraction(double** const& mask,double**& voidfraction
else if(centreDistradius)
{
//compute lambda
- if(!checkPeriodicCells_) //set if no periodic check of cells
- {
- minPeriodicParticlePos = positionCenter;
- }
-
scalar a = (vertexPosition - cellCentrePosition)
& (vertexPosition - cellCentrePosition);
scalar b = 2. * (vertexPosition - cellCentrePosition)
@@ -185,11 +180,6 @@ void IBVoidFraction::setvoidFraction(double** const& mask,double**& voidfraction
else if(centreDist>radius && centreVertexDistOahVe7?V!|MPnFxsT6%=FWMabM86sb7$rbgTY_~l7EiAQPF|nVUm_BOifMA
z?Clg*>f6~H+e)e^Dl4i+gv3Vw`dcdL9UdAH7~<)HNqLzzne|@;AhA|7ZJgA+GT3)jKH69;o
z`B5u?T0zv#L9Gzk{yLX`lxJ9Mh-VZ-nEc14U;l^vh>(B3gc1Gq5A+d3?OfD~Gdsvu
z0)3x{+WG&}CyBmGp;r2T`ee{|S=25d+l%uycH3Os3K#zO9s8v-=Ko*x-*-%&{62oX
z|KUn6Yq*&FerAVnj`!LMYzg_D`B}>RLbeM3^Ih?OzAOFDcjf>2K1qIzkd45uD@&^5fi=aw@xEGqhbQRLwsX=
zLnA^wV|x3&7fiG3lnrRQ&g
zd!G3#wrH4BGU0YO^-HFVRLe4>UO!|0%%ze~^x^eSDOiV#GdBIpYN?)Y?0O1@;@$7a
z4XU(75h4uapJ$b84PBN{;7i(Z88`A
zW@QUEy(khiD$j+BO}*>unR1mUpx^&37oTVuK7WQP>^wX&;xA8!J_%mW*~
z>F9gC_eAy$#yhUv{dv;e2wccq`pV{j6md`3_e2ivhj6>#Ps)~l!GAgeEipVXL)DoO
zy___8=>*anLkD+NU@JNI(*yhd@=)TiS1!yvqy9OQX>aoUzvcKdSN`+E^9`R|L=IR%
zfzyJ~#dFjlYxt2fo?itpI=$Qvt*ljD(uEaHpYx+F^fPQ1Ipr(2sufb>|7~xCTMywT
z5N=8@^fit`QE=9>HS(8aFgVwvBV;22XszL1zVpkKD4aw$>X@??YGEHfmxF8$x5j?l>>3ZV!q+~LpP2)rEjO#rV&cMA)8Y!7msndEybSj4YAQOH
zp^3FzwaVb*;isLSkv((OmOp8PM}o4hzBqUXDyq%=;JT~(-}WjFm7<|A`nyR*Z_syLIzPO5y5qs(Q9fK?
zuJg6H;u-Z=?%o~a^V!h&Q{$m39(r8Wx^2)B1{9s`-#$D0|H>7yo>s1jl53;Iisn#A
zn}ZK%1;W!w^Xgy!f8_Fc!l$Tmn+KOJ+w0Ih{1q;1nB)*yqD&(fhTrJASESryj!m-0
zu2oCVhPJOHFRf8Q@r)5nE0;;s#O-hcEtr>l4p%$GgMD7+w8?p=B&{FJOl`LlpL-U*
z<5Eg5Ykmn$
uj_5vVL#Zxqnw
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