mirror of
https://github.com/ParticulateFlow/CFDEMcoupling-PFM.git
synced 2025-12-08 06:37:44 +00:00
release on 2013-04-30_18-46-52
This commit is contained in:
81
README
Normal file
81
README
Normal file
@ -0,0 +1,81 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright 2009-2012 JKU Linz
|
||||
Copyright 2012- DCS Computing GmbH, Linz
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of CFDEMcoupling.
|
||||
|
||||
CFDEMcoupling is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with CFDEMcoupling; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
|
||||
and OpenFOAM. Note: this code is not part of OpenFOAM (see DISCLAIMER).
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
CFDEM coupling provides an open source parallel coupled CFD-DEM framework
|
||||
combining the strengths of LIGGGHTS DEM code and the Open Source
|
||||
CFD package OpenFOAM(R)(*). The CFDEMcoupling toolbox allows to expand
|
||||
standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM
|
||||
code LIGGGHTS. In this toolbox the particle representation within the
|
||||
CFD solver is organized by "cloud" classes. Key functionalities are organised
|
||||
in sub-models (e.g. force models, data exchange models, etc.) which can easily
|
||||
be selected and combined by dictionary settings.
|
||||
|
||||
The coupled solvers run fully parallel on distributed-memory clusters.
|
||||
|
||||
Features are:
|
||||
|
||||
- its modular approach allows users to easily implement new models
|
||||
- its MPI parallelization enables to use it for large scale problems
|
||||
- the "forum"_lws on CFD-DEM gives the possibility to exchange with other
|
||||
users / developers
|
||||
- the use of GIT allows to easily update to the latest version
|
||||
- basic documentation is provided
|
||||
|
||||
The file structure:
|
||||
|
||||
- "src" directory including the source files of the coupling toolbox and models
|
||||
- "applications" directory including the solver files for coupled CFD-DEM simulations
|
||||
- "doc" directory including the documentation of CFDEMcoupling
|
||||
- "tutorials" directory including basic tutorial cases showing the functionality
|
||||
|
||||
|
||||
|
||||
Details on installation are given on the "www.cfdem.com"
|
||||
|
||||
The functionality of this CFD-DEM framwork is described via "tutorial cases" showing
|
||||
how to use different solvers and models.
|
||||
|
||||
CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -
|
||||
Discrete Element Method (DEM) coupling.
|
||||
|
||||
CFDEMcoupling is an open-source code, distributed freely under the terms of the
|
||||
GNU Public License (GPL).
|
||||
|
||||
Core development of CFDEMcoupling is done by
|
||||
Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
|
||||
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group.
|
||||
This offering is not affiliated, approved or endorsed by ESI Group,
|
||||
the producer of the OpenFOAM® software and owner of the OpenFOAM® trade mark.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
@ -137,7 +137,7 @@ int main(int argc, char *argv[])
|
||||
// Pressure corrector
|
||||
fvScalarMatrix pEqn
|
||||
(
|
||||
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + fvc::ddt(voidfraction)
|
||||
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
|
||||
);
|
||||
pEqn.setReference(pRefCell, pRefValue);
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -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
|
||||
@ -21,20 +20,33 @@ $(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)/fieldTimeAverage/fieldTimeAverage.C
|
||||
$(forceModels)/fieldBound/fieldBound.C
|
||||
$(forceModels)/volWeightedAverage/volWeightedAverage.C
|
||||
$(forceModels)/totalMomentumExchange/totalMomentumExchange.C
|
||||
$(forceModels)/KochHillDrag/KochHillDrag.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)/viscForce/viscForce.C
|
||||
$(forceModels)/MeiLift/MeiLift.C
|
||||
$(forceModels)/fieldTimeAverage/fieldTimeAverage.C
|
||||
$(forceModels)/volWeightedAverage/volWeightedAverage.C
|
||||
$(forceModels)/KochHillDragNLift/KochHillDragNLift.C
|
||||
$(forceModels)/solidsPressureForce/solidsPressureForce.C
|
||||
$(forceModels)/periodicPressure/periodicPressure.C
|
||||
$(forceModels)/periodicPressureControl/periodicPressureControl.C
|
||||
$(forceModels)/averageSlipVel/averageSlipVel.C
|
||||
|
||||
$(forceModelsMS)/forceModelMS/forceModelMS.C
|
||||
$(forceModelsMS)/forceModelMS/newForceModelMS.C
|
||||
@ -64,21 +76,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
|
||||
@ -104,4 +113,4 @@ $(liggghtsCommandModels)/runLiggghts/runLiggghts.C
|
||||
$(liggghtsCommandModels)/writeLiggghts/writeLiggghts.C
|
||||
$(liggghtsCommandModels)/readLiggghtsData/readLiggghtsData.C
|
||||
|
||||
LIB = $(FOAM_USER_LIBBIN)/lib$(CFDEM_LIB_NAME)
|
||||
LIB = $(CFDEM_LIB_DIR)/lib$(CFDEM_LIB_NAME)
|
||||
|
||||
@ -148,7 +148,6 @@ void Foam::cfdemCloudMS::giveDEMdata()
|
||||
{
|
||||
for(int i=0;i<3;i++){
|
||||
impForcesCM()[index][i] += expForcesCM()[index][i] + DEMForcesCM()[index][i];
|
||||
Info << "index=" << index << " ,impForcesCM()[index][i]=" << impForcesCM()[index][i] << endl;
|
||||
}
|
||||
}
|
||||
if(forceM(0).coupleForce()) dataExchangeM().giveData("dragforce","vector-multisphere",impForcesCM());
|
||||
@ -254,9 +253,8 @@ label Foam::cfdemCloudMS::body(int index)
|
||||
|
||||
label Foam::cfdemCloudMS::nrigid(int index)
|
||||
{
|
||||
// return nrigids_[0][index];
|
||||
Warning << "Foam::cfdemCloudMS::nrigid: assuming all clumps are equal - LIGGGHTS' nrigid is not transferred correctly! " << endl;
|
||||
return nrigids_[0][0];
|
||||
return nrigids_[0][index];
|
||||
// return nrigids_[0][0];
|
||||
}
|
||||
|
||||
const forceModel& Foam::cfdemCloudMS::forceM(int i)
|
||||
|
||||
@ -214,7 +214,7 @@ public:
|
||||
{
|
||||
if (particleCloud_.mesh().time().value()-particleCloud_.mesh().time().startTime().value()
|
||||
- ((1+couplingStep_)*(DEMts_*couplingInterval_))
|
||||
+ SMALL > 0) // Chr 27.03.2013 : first coupling after DEMts_*couplingInterval_
|
||||
+ 1e-10 > 0) // Chr 27.03.2013 : first coupling after DEMts_*couplingInterval_
|
||||
// > particleCloud_.mesh().time().deltaT().value()/2) // Chr 27.03.2013
|
||||
{
|
||||
return true;
|
||||
|
||||
@ -207,18 +207,15 @@ void DiFeliceDragMS::setForce() const
|
||||
ind=cloudRefMS().body(index);
|
||||
nrigidC=cloudRefMS().nrigid(ind);
|
||||
|
||||
cloudRefMS().impForcesCM();
|
||||
Warning <<"A BUG occurred in DiFeliceDragMS::setForce!!! nrigidC = " << nrigidC <<", ind = " << ind <<", index=" << index <<"\n" << endl;
|
||||
|
||||
if (nrigidC <= 0)
|
||||
{
|
||||
Warning <<"A BUG occurred in DiFeliceDragMS::setForce!!! nrigidC = " << nrigidC <<", ind = " << ind <<", index=" << index <<"\n" << endl;
|
||||
Warning <<"A BUG occurred in DiFeliceDragMS::setForce!!! nrigidC = "
|
||||
<< nrigidC <<", ind = " << ind <<", index=" << index <<"\n" << endl;
|
||||
nrigidC = 1000;
|
||||
}
|
||||
if(treatExplicit_) for(int j=0;j<3;j++) expForces()[index][j] += cloudRefMS().expForcesCM()[ind][j] / nrigidC;
|
||||
else{
|
||||
for(int j=0;j<3;j++){
|
||||
Info << "j=" << j << "ind=" << ind << endl;
|
||||
impForces()[index][j] += cloudRefMS().impForcesCM()[ind][j] / nrigidC;
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@ FoamFile
|
||||
|
||||
//===========================================================================//
|
||||
// sub-models & settings
|
||||
verbose;
|
||||
//verbose;
|
||||
|
||||
modelType B; // A or B
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@ clc;
|
||||
%====================================%
|
||||
% simulation data 1
|
||||
%====================================%
|
||||
rhoG = 5 % density in kg/m3
|
||||
%path = '../probes/0/p';
|
||||
path = '../probes/0/p';
|
||||
columns=22;
|
||||
@ -12,7 +13,7 @@ headerlines=4;
|
||||
data = loaddata(path,columns,headerlines);
|
||||
data=transpose(data);
|
||||
[x,y]=size(data)
|
||||
dp_sim = (data(:,2)-data(:,y))/10000;
|
||||
dp_sim = (data(:,2)-data(:,y))*rhoG;
|
||||
t_sim = data(:,1);
|
||||
%fprintf('final pressureDrop of sim = %f Pa\n',dp_sim(length(dp_sim)) )
|
||||
|
||||
@ -55,14 +56,13 @@ epsilon = 1-Vpartiles/Vfilled % void fraction
|
||||
%epsilon = 0.656968
|
||||
|
||||
Ua = U / epsilon; % physical velocity
|
||||
rhoG = 5 % density in kg/m3
|
||||
nuG = 1.5*10^-5 % kinemat Visk in m2/s
|
||||
muG = nuG*rhoG % dynam visc in Pa s
|
||||
|
||||
dpErgun= L * (
|
||||
150*((1-epsilon)^2/epsilon^3)*((muG.*U)/(phip*dp)^2)
|
||||
+1.75*((1-epsilon)/epsilon^3)*((rhoG.*U.^2)/(phip*dp))
|
||||
)/10000/rhoG;
|
||||
);
|
||||
|
||||
fprintf('NOTE: this pressure is divided by density (according to CFD solver)\n')
|
||||
fprintf('so the result does not depend on pressure\n')
|
||||
@ -92,7 +92,7 @@ ReMF
|
||||
dpUmf= L * (
|
||||
150*((1-epsilon)^2/epsilon^3)*((muG.*Umf)/(phip*dp)^2)
|
||||
+1.75*((1-epsilon)/epsilon^3)*((rhoG.*Umf.^2)/(phip*dp))
|
||||
)/10000/rhoG;
|
||||
);
|
||||
|
||||
%====================================%
|
||||
% plot data
|
||||
@ -104,7 +104,7 @@ title("Ergun pressure drop vs. simulation")
|
||||
a=strcat("analytical (Ergun), Umf=",num2str(Umf),", dpUmf=",num2str(dpUmf));
|
||||
legend(a,"simulation")
|
||||
xlabel("velocity in [m/s]")
|
||||
ylabel("pressure drop [bar]")
|
||||
ylabel("pressure drop [Pa]")
|
||||
axis([0,Uend,0,dpErgun(length(dpErgun))])
|
||||
|
||||
%print('cfdemSolverPiso_settlingTest.eps','-deps2')
|
||||
|
||||
@ -47,7 +47,7 @@ fix pdd1 all particledistribution/discrete 1. 1 pts1 1.0
|
||||
group rigid_group region reg
|
||||
region bc cylinder z 0.0 0.0 0.012 0.001 0.055 units box
|
||||
|
||||
fix ins rigid_group insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0. 0. insert_every once overlapcheck yes region bc ntry_mc 10000 particles_in_region 1 #2500 # volumefraction_region 0.01 #
|
||||
fix ins rigid_group insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0. 0. insert_every once overlapcheck yes region bc ntry_mc 10000 particles_in_region 2500 # volumefraction_region 0.01 #
|
||||
|
||||
#integrator for multisphere rigid bodies
|
||||
fix integr rigid_group multisphere
|
||||
|
||||
@ -35,3 +35,14 @@ dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
|
||||
@ -21,7 +21,7 @@ logfileName="log_$headerText"
|
||||
solverName="cfdemSolverPisoMS"
|
||||
nrProcs="2"
|
||||
machineFileName="none" # yourMachinefileName | none
|
||||
debugMode="on" # on | off
|
||||
debugMode="off" # on | off
|
||||
testHarnessPath="$CFDEM_TEST_HARNESS_PATH"
|
||||
|
||||
cleanUp="true"
|
||||
|
||||
Reference in New Issue
Block a user