mirror of
https://github.com/ParticulateFlow/CFDEMcoupling-PFM.git
synced 2025-12-08 06:37:44 +00:00
release on 2012-07-30_10-43-02
This commit is contained in:
82
README
82
README
@ -1,82 +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 Silicon Graphics
|
||||
International Corp. This offering is not affiliated, approved or endorsed by
|
||||
Silicon Graphics International Corp., the producer of the OpenFOAM(R) software
|
||||
and owner of the OpenFOAM(R) trademark.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
@ -50,13 +50,11 @@ int main(int argc, char *argv[])
|
||||
#include "createTime.H"
|
||||
#include "createMesh.H"
|
||||
#include "createFields.H"
|
||||
|
||||
#include "initContinuityErrs.H"
|
||||
|
||||
// create cfdemCloud
|
||||
#include "readGravitationalAcceleration.H"
|
||||
cfdemCloud particleCloud(mesh);
|
||||
|
||||
#include "checkModelType.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -1,33 +1,34 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
Copyright (C) 2009-2012 JKU, Linz
|
||||
Copyright (C) 2012- DCS Computing GmbH,Linz
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
This file is part of CFDEMcoupling.
|
||||
|
||||
OpenFOAM 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 2 of the License, or (at your
|
||||
option) any later version.
|
||||
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.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
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 OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
along with CFDEMcoupling. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Application
|
||||
cfdemPostproc
|
||||
|
||||
Description
|
||||
Tool for DEM->CFD (Lagrange->Euler) mapping to calculate local voidfraction
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fvCFD.H"
|
||||
|
||||
3
applications/utilities/writeUfluid/Make/files
Normal file
3
applications/utilities/writeUfluid/Make/files
Normal file
@ -0,0 +1,3 @@
|
||||
writeUfluid.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/writeUfluid
|
||||
10
applications/utilities/writeUfluid/Make/options
Normal file
10
applications/utilities/writeUfluid/Make/options
Normal file
@ -0,0 +1,10 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lgenericPatchFields \
|
||||
-llagrangian
|
||||
25
applications/utilities/writeUfluid/createFields.H
Normal file
25
applications/utilities/writeUfluid/createFields.H
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
IOdictionary propsDict
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"particleTrackProperties",
|
||||
runTime.constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ_IF_MODIFIED
|
||||
)
|
||||
);
|
||||
|
||||
const word cloudName(propsDict.lookup("cloudName"));
|
||||
|
||||
//label sampleFrequency(readLabel(propsDict.lookup("sampleFrequency")));
|
||||
|
||||
// outputMode: compositeFile, filePerTrack
|
||||
//word outputmode(propsDict.lookup("outputMode"))
|
||||
|
||||
//label maxPositions(readLabel(propsDict.lookup("maxPositions")));
|
||||
|
||||
// outputFormat: raw, vtk
|
||||
//word outputFormat(propsDict.lookup("outputFormat"));
|
||||
|
||||
|
||||
25
applications/utilities/writeUfluid/particleTrackProperties
Normal file
25
applications/utilities/writeUfluid/particleTrackProperties
Normal file
@ -0,0 +1,25 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 2.1.x |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object particleTrackProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
cloudName cfdemCloud1;
|
||||
|
||||
sampleFrequency 1;
|
||||
|
||||
maxPositions 1000000;
|
||||
|
||||
maxPositions 20000;
|
||||
// ************************************************************************* //
|
||||
99
applications/utilities/writeUfluid/writeUfluid.C
Normal file
99
applications/utilities/writeUfluid/writeUfluid.C
Normal file
@ -0,0 +1,99 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
Copyright (C) 2009-2012 JKU, Linz
|
||||
Copyright (C) 2012- DCS Computing GmbH,Linz
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of CFDEMcoupling.
|
||||
|
||||
CFDEMcoupling is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with CFDEMcoupling. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Application
|
||||
writeUfluidwriteUfluid
|
||||
|
||||
Description
|
||||
Writes the the cell center fluid velocity to particles in the lagrangian
|
||||
time directory.
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "Cloud.H"
|
||||
#include "IOdictionary.H"
|
||||
#include "fvCFD.H"
|
||||
#include "fvMesh.H"
|
||||
#include "Time.H"
|
||||
#include "timeSelector.H"
|
||||
#include "OFstream.H"
|
||||
#include "passiveParticleCloud.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
timeSelector::addOptions();
|
||||
#include "addRegionOption.H"
|
||||
|
||||
#include "setRootCase.H"
|
||||
|
||||
#include "createTime.H"
|
||||
instantList timeDirs = timeSelector::select0(runTime, args);
|
||||
#include "createMesh.H"
|
||||
#include "createFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int nParticle=0;
|
||||
forAll(timeDirs, timeI)
|
||||
{
|
||||
runTime.setTime(timeDirs[timeI], timeI);
|
||||
Info<< "Time = " << runTime.timeName() << endl;
|
||||
IOobject UHeader
|
||||
(
|
||||
"U",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
if (UHeader.headerOk())
|
||||
{
|
||||
volVectorField U(UHeader,mesh);
|
||||
passiveParticleCloud myCloud(mesh, cloudName);
|
||||
myCloud.write();
|
||||
nParticle = myCloud.size();
|
||||
IOField<vector> Ufluid(myCloud.fieldIOobject("Ufluid",IOobject::NO_READ),nParticle);
|
||||
label i = 0;
|
||||
forAllConstIter(passiveParticleCloud, myCloud, iter)
|
||||
{
|
||||
Ufluid[i]=U[iter().cell()];
|
||||
i++;
|
||||
}
|
||||
Ufluid.write();
|
||||
}
|
||||
else
|
||||
{
|
||||
Info << "velocity field not found" << endl;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -189,32 +189,33 @@ listing below of styles within certain commands.
|
||||
</P>
|
||||
<DIV ALIGN=center><TABLE BORDER=1 >
|
||||
<TR ALIGN="center"><TD ><A HREF = "IOModel.html">IOModel</A></TD><TD ><A HREF = "IOModel_basicIO.html">IOModel_basicIO</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "IOModel_noIO.html">IOModel_noIO</A></TD><TD ><A HREF = "averagingModel.html">averagingModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "averagingModel_dilute.html">averagingModel_dilute</A></TD><TD ><A HREF = "cfdemSolverIB.html">cfdemSolverIB</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "cfdemSolverPiso.html">cfdemSolverPiso</A></TD><TD ><A HREF = "cfdemSolverPisoScalar.html">cfdemSolverPisoScalar</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "clockModel.html">clockModel</A></TD><TD ><A HREF = "clockModel_noClock.html">clockModel_noClock</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "clockModel_standardClock.html">clockModel_standardClock</A></TD><TD ><A HREF = "dataExchangeModel.html">dataExchangeModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_noDataExchange.html">dataExchangeModel_noDataExchange</A></TD><TD ><A HREF = "dataExchangeModel_oneWayVTK.html">dataExchangeModel_oneWayVTK</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_twoWayFiles.html">dataExchangeModel_twoWayFiles</A></TD><TD ><A HREF = "dataExchangeModel_twoWayMPI.html">dataExchangeModel_twoWayMPI</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel.html">forceModel</A></TD><TD ><A HREF = "forceModel_Archimedes.html">forceModel_Archimedes</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_ArchimedesIB.html">forceModel_ArchimedesIB</A></TD><TD ><A HREF = "forceModel_DiFeliceDrag.html">forceModel_DiFeliceDrag</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_GidaspowDrag.html">forceModel_GidaspowDrag</A></TD><TD ><A HREF = "forceModel_KochHillDrag.html">forceModel_KochHillDrag</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_LaEuScalarTemp.html">forceModel_LaEuScalarTemp</A></TD><TD ><A HREF = "forceModel_MeiLift.html">forceModel_MeiLift</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_SchillerNaumannDrag.html">forceModel_SchillerNaumannDrag</A></TD><TD ><A HREF = "forceModel_ShirgaonkarIB.html">forceModel_ShirgaonkarIB</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_gradPForce.html">forceModel_gradPForce</A></TD><TD ><A HREF = "forceModel_noDrag.html">forceModel_noDrag</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_virtualMassForce.html">forceModel_virtualMassForce</A></TD><TD ><A HREF = "forceModel_viscForce.html">forceModel_viscForce</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel.html">liggghtsCommandModel</A></TD><TD ><A HREF = "liggghtsCommandModel_execute.html">liggghtsCommandModel_execute</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_readLiggghtsData.html">liggghtsCommandModel_readLiggghtsData</A></TD><TD ><A HREF = "liggghtsCommandModel_runLiggghts.html">liggghtsCommandModel_runLiggghts</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_writeLiggghts.html">liggghtsCommandModel_writeLiggghts</A></TD><TD ><A HREF = "locateModel.html">locateModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "locateModel_engineSearch.html">locateModel_engineSearch</A></TD><TD ><A HREF = "locateModel_engineSearchIB.html">locateModel_engineSearchIB</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "locateModel_standardSearch.html">locateModel_standardSearch</A></TD><TD ><A HREF = "locateModel_turboEngineSearch.html">locateModel_turboEngineSearch</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "meshMotionModel.html">meshMotionModel</A></TD><TD ><A HREF = "meshMotionModel_noMeshMotion.html">meshMotionModel_noMeshMotion</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel.html">momCoupleModel</A></TD><TD ><A HREF = "momCoupleModel_explicitCouple.html">momCoupleModel_explicitCouple</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel_implicitCouple.html">momCoupleModel_implicitCouple</A></TD><TD ><A HREF = "momCoupleModel_noCouple.html">momCoupleModel_noCouple</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "regionModel.html">regionModel</A></TD><TD ><A HREF = "regionModel_allRegion.html">regionModel_allRegion</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel.html">voidfractionModel</A></TD><TD ><A HREF = "voidFractionModel_GaussVoidFraction.html">voidfractionModel_GaussVoidFraction</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_IBVoidFraction.html">voidfractionModel_IBVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_bigParticleVoidFraction.html">voidfractionModel_bigParticleVoidFraction</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_centreVoidFraction.html">voidfractionModel_centreVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_dividedVoidFraction.html">voidfractionModel_dividedVoidFraction</A>
|
||||
<TR ALIGN="center"><TD ><A HREF = "IOModel_noIO.html">IOModel_noIO</A></TD><TD ><A HREF = "IOModel_trackIO.html">IOModel_trackIO</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "averagingModel.html">averagingModel</A></TD><TD ><A HREF = "averagingModel_dilute.html">averagingModel_dilute</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "cfdemSolverIB.html">cfdemSolverIB</A></TD><TD ><A HREF = "cfdemSolverPiso.html">cfdemSolverPiso</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "cfdemSolverPisoScalar.html">cfdemSolverPisoScalar</A></TD><TD ><A HREF = "clockModel.html">clockModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "clockModel_noClock.html">clockModel_noClock</A></TD><TD ><A HREF = "clockModel_standardClock.html">clockModel_standardClock</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel.html">dataExchangeModel</A></TD><TD ><A HREF = "dataExchangeModel_noDataExchange.html">dataExchangeModel_noDataExchange</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_oneWayVTK.html">dataExchangeModel_oneWayVTK</A></TD><TD ><A HREF = "dataExchangeModel_twoWayFiles.html">dataExchangeModel_twoWayFiles</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_twoWayMPI.html">dataExchangeModel_twoWayMPI</A></TD><TD ><A HREF = "forceModel.html">forceModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_Archimedes.html">forceModel_Archimedes</A></TD><TD ><A HREF = "forceModel_ArchimedesIB.html">forceModel_ArchimedesIB</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_DiFeliceDrag.html">forceModel_DiFeliceDrag</A></TD><TD ><A HREF = "forceModel_GidaspowDrag.html">forceModel_GidaspowDrag</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_KochHillDrag.html">forceModel_KochHillDrag</A></TD><TD ><A HREF = "forceModel_LaEuScalarTemp.html">forceModel_LaEuScalarTemp</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_MeiLift.html">forceModel_MeiLift</A></TD><TD ><A HREF = "forceModel_SchillerNaumannDrag.html">forceModel_SchillerNaumannDrag</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_ShirgaonkarIB.html">forceModel_ShirgaonkarIB</A></TD><TD ><A HREF = "forceModel_gradPForce.html">forceModel_gradPForce</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_noDrag.html">forceModel_noDrag</A></TD><TD ><A HREF = "forceModel_virtualMassForce.html">forceModel_virtualMassForce</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "forceModel_viscForce.html">forceModel_viscForce</A></TD><TD ><A HREF = "liggghtsCommandModel.html">liggghtsCommandModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_execute.html">liggghtsCommandModel_execute</A></TD><TD ><A HREF = "liggghtsCommandModel_readLiggghtsData.html">liggghtsCommandModel_readLiggghtsData</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_runLiggghts.html">liggghtsCommandModel_runLiggghts</A></TD><TD ><A HREF = "liggghtsCommandModel_writeLiggghts.html">liggghtsCommandModel_writeLiggghts</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "locateModel.html">locateModel</A></TD><TD ><A HREF = "locateModel_engineSearch.html">locateModel_engineSearch</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "locateModel_engineSearchIB.html">locateModel_engineSearchIB</A></TD><TD ><A HREF = "locateModel_standardSearch.html">locateModel_standardSearch</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "locateModel_turboEngineSearch.html">locateModel_turboEngineSearch</A></TD><TD ><A HREF = "meshMotionModel.html">meshMotionModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "meshMotionModel_noMeshMotion.html">meshMotionModel_noMeshMotion</A></TD><TD ><A HREF = "momCoupleModel.html">momCoupleModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel_explicitCouple.html">momCoupleModel_explicitCouple</A></TD><TD ><A HREF = "momCoupleModel_implicitCouple.html">momCoupleModel_implicitCouple</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel_noCouple.html">momCoupleModel_noCouple</A></TD><TD ><A HREF = "regionModel.html">regionModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "regionModel_allRegion.html">regionModel_allRegion</A></TD><TD ><A HREF = "voidFractionModel.html">voidfractionModel</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_GaussVoidFraction.html">voidfractionModel_GaussVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_IBVoidFraction.html">voidfractionModel_IBVoidFraction</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_bigParticleVoidFraction.html">voidfractionModel_bigParticleVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_centreVoidFraction.html">voidfractionModel_centreVoidFraction</A></TD></TR>
|
||||
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_dividedVoidFraction.html">voidfractionModel_dividedVoidFraction</A>
|
||||
</TD></TR></TABLE></DIV>
|
||||
|
||||
</HTML>
|
||||
|
||||
Binary file not shown.
@ -368,6 +368,28 @@ Reasonable example settings for the "liggghtsCommands" dictionary are given in t
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -398,6 +420,7 @@ listing below of styles within certain commands.
|
||||
"IOModel"_IOModel.html,
|
||||
"IOModel_basicIO"_IOModel_basicIO.html,
|
||||
"IOModel_noIO"_IOModel_noIO.html,
|
||||
"IOModel_trackIO"_IOModel_trackIO.html,
|
||||
"averagingModel"_averagingModel.html,
|
||||
"averagingModel_dilute"_averagingModel_dilute.html,
|
||||
"cfdemSolverIB"_cfdemSolverIB.html,
|
||||
|
||||
32
doc/IOModel_trackIO.html
Normal file
32
doc/IOModel_trackIO.html
Normal file
@ -0,0 +1,32 @@
|
||||
<HTML>
|
||||
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
|
||||
</CENTER>
|
||||
|
||||
|
||||
|
||||
|
||||
<HR>
|
||||
|
||||
<H3>IOModel_trackIO command
|
||||
</H3>
|
||||
<P><B>Syntax:</B>
|
||||
</P>
|
||||
<P>Defined in couplingProperties dictionary.
|
||||
</P>
|
||||
<PRE>IOModel "trackIO";
|
||||
</PRE>
|
||||
<P><B>Examples:</B>
|
||||
</P>
|
||||
<PRE>IOModel "trackIO";
|
||||
</PRE>
|
||||
<P><B>Description:</B>
|
||||
</P>
|
||||
<P>The basic IO-model writes particle positions, velocities, index and radii to files. The output directories ($casePath/CFD/$timestep) are created automatically. Data is written every write time of the CFD simulation.
|
||||
</P>
|
||||
<P><B>Restrictions:</B> None.
|
||||
</P>
|
||||
<P><B>Related commands:</B>
|
||||
</P>
|
||||
<P><A HREF = "IOModel.html">IOModel</A>
|
||||
</P>
|
||||
</HTML>
|
||||
29
doc/IOModel_trackIO.txt
Normal file
29
doc/IOModel_trackIO.txt
Normal file
@ -0,0 +1,29 @@
|
||||
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
|
||||
|
||||
:link(lws,http://www.cfdem.com)
|
||||
:link(lc,CFDEMcoupling_Manual.html#comm)
|
||||
|
||||
:line
|
||||
|
||||
IOModel_trackIO command :h3
|
||||
|
||||
[Syntax:]
|
||||
|
||||
Defined in couplingProperties dictionary.
|
||||
|
||||
IOModel "trackIO"; :pre
|
||||
|
||||
[Examples:]
|
||||
|
||||
IOModel "trackIO"; :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
The basic IO-model writes particle positions, velocities, index and radii to files. The output directories ($casePath/CFD/$timestep) are created automatically. Data is written every write time of the CFD simulation.
|
||||
|
||||
[Restrictions:] None.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"IOModel"_IOModel.html
|
||||
|
||||
@ -137,6 +137,18 @@ Alternatively you can run each tutorial using the <I>Allrun.sh</I> scripts in th
|
||||
<P>If you want to run your own cases, please do so in $CFDEM_PROJECT_USER_DIR/run which is automatically being generated. E.g. copy one of the tutorial cases there, adapt it to your needs.
|
||||
Changes in $CFDEM_TUT_DIR will be lost after every <I>git stash</I>!
|
||||
</P>
|
||||
<P><B>Additional Installations:</B>
|
||||
</P>
|
||||
<P>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:
|
||||
</P>
|
||||
<PRE>sudo apt-get install python-numpy
|
||||
</PRE>
|
||||
<P>You can pull the latest version of lpp with:
|
||||
</P>
|
||||
<PRE>cd $HOME/LIGGGHTS
|
||||
</PRE>
|
||||
<PRE>git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/lpp mylpp
|
||||
</PRE>
|
||||
<P><B>Troubleshooting:</B>
|
||||
</P>
|
||||
<UL><LI>toubles with git clone?
|
||||
|
||||
Binary file not shown.
@ -123,6 +123,17 @@ In case questions concerning the installation arise, please feel free to contact
|
||||
If you want to run your own cases, please do so in $CFDEM_PROJECT_USER_DIR/run which is automatically being generated. E.g. copy one of the tutorial cases there, adapt it to your needs.
|
||||
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:
|
||||
|
||||
sudo apt-get install python-numpy :pre
|
||||
|
||||
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
|
||||
|
||||
[Troubleshooting:]
|
||||
|
||||
toubles with git clone? :ulb,l
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
cfdemCloud = cfdemCloud
|
||||
forceModels = subModels/forceModel
|
||||
forceModelsMS = subModels/forceModelMS
|
||||
IOModels = subModels/IOModel
|
||||
voidFractionModels = subModels/voidFractionModel
|
||||
locateModels = subModels/locateModel
|
||||
@ -13,33 +14,53 @@ liggghtsCommandModels = subModels/liggghtsCommandModel
|
||||
|
||||
$(cfdemCloud)/cfdemCloud.C
|
||||
derived/cfdemCloudIB/cfdemCloudIB.C
|
||||
derived/cfdemCloudMS/cfdemCloudMS.C
|
||||
|
||||
$(forceModels)/forceModel/forceModel.C
|
||||
$(forceModels)/forceModel/newForceModel.C
|
||||
$(forceModels)/noDrag/noDrag.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)/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)/KochHillDragNLift/KochHillDragNLift.C
|
||||
$(forceModels)/solidsPressureForce/solidsPressureForce.C
|
||||
$(forceModels)/periodicPressure/periodicPressure.C
|
||||
$(forceModels)/averageSlipVel/averageSlipVel.C
|
||||
|
||||
$(forceModelsMS)/forceModelMS/forceModelMS.C
|
||||
$(forceModelsMS)/forceModelMS/newForceModelMS.C
|
||||
$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C
|
||||
|
||||
$(IOModels)/IOModel/IOModel.C
|
||||
$(IOModels)/IOModel/newIOModel.C
|
||||
$(IOModels)/noIO/noIO.C
|
||||
$(IOModels)/basicIO/basicIO.C
|
||||
$(IOModels)/trackIO/trackIO.C
|
||||
$(IOModels)/sophIO/sophIO.C
|
||||
|
||||
$(voidFractionModels)/voidFractionModel/voidFractionModel.C
|
||||
$(voidFractionModels)/voidFractionModel/newVoidFractionModel.C
|
||||
$(voidFractionModels)/centreVoidFraction/centreVoidFraction.C
|
||||
$(voidFractionModels)/dividedVoidFraction/dividedVoidFraction.C
|
||||
$(voidFractionModels)/dividedVoidFractionMS/dividedVoidFractionMS.C
|
||||
$(voidFractionModels)/bigParticleVoidFraction/bigParticleVoidFraction.C
|
||||
$(voidFractionModels)/GaussVoidFraction/GaussVoidFraction.C
|
||||
$(voidFractionModels)/IBVoidFraction/IBVoidFraction.C
|
||||
@ -55,16 +76,19 @@ $(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
|
||||
$(regionModels)/differentialRegion/differentialRegion.C
|
||||
|
||||
$(dataExchangeModels)/dataExchangeModel/dataExchangeModel.C
|
||||
$(dataExchangeModels)/dataExchangeModel/newDataExchangeModel.C
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
word CFDEMversion="cfdem-2.4.2";
|
||||
word CFDEMversion="cfdem-2.4.3";
|
||||
|
||||
Info << "\ncfdem version: " << CFDEMversion << "\n" << endl;
|
||||
|
||||
|
||||
@ -233,6 +233,8 @@ public:
|
||||
|
||||
inline double ** expForces() const;
|
||||
|
||||
inline double ** DEMForces() const;
|
||||
|
||||
inline double ** radii() const;
|
||||
|
||||
inline double ** voidfractions() const;
|
||||
|
||||
@ -74,6 +74,11 @@ inline double ** cfdemCloud::expForces() const
|
||||
return expForces_;
|
||||
}
|
||||
|
||||
inline double ** cfdemCloud::DEMForces() const
|
||||
{
|
||||
return DEMForces_;
|
||||
}
|
||||
|
||||
inline double ** cfdemCloud::radii() const
|
||||
{
|
||||
return radii_;
|
||||
|
||||
@ -557,3 +557,18 @@ trackMem()
|
||||
done | /usr/bin/sort -n -k2 >> $fileName
|
||||
}
|
||||
|
||||
#========================================#
|
||||
#- remove brackets from file
|
||||
removeBracketsFromFile()
|
||||
{
|
||||
#--------------------------------------------------------------------------------#
|
||||
#- define variables
|
||||
oldFileName="$1"
|
||||
newFileName="$oldFileName""_noBrackets"
|
||||
#--------------------------------------------------------------------------------#
|
||||
|
||||
sed -e 's/[(,)]//g' $oldFileName > $newFileName
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -55,6 +55,15 @@ fileName IOModel::createTimeDir(fileName path) const
|
||||
return timeDirPath;
|
||||
}
|
||||
|
||||
fileName IOModel::createLagrangianDir(fileName path) const
|
||||
{
|
||||
fileName lagrangianDirPath(path/"lagrangian");
|
||||
mkDir(lagrangianDirPath,0777);
|
||||
fileName cfdemCloudDirPath(lagrangianDirPath/"cfdemCloud1");
|
||||
mkDir(cfdemCloudDirPath,0777);
|
||||
return cfdemCloudDirPath;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
|
||||
@ -112,6 +112,8 @@ public:
|
||||
virtual void dumpDEMdata() const;
|
||||
|
||||
fileName createTimeDir(fileName) const;
|
||||
|
||||
fileName createLagrangianDir(fileName) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -63,7 +63,8 @@ basicIO::basicIO
|
||||
IOModel(dict,sm),
|
||||
//propsDict_(dict.subDict(typeName + "Props")),
|
||||
dirName_("particles"),
|
||||
path_("dev/null")
|
||||
path_("dev/null"),
|
||||
lagPath_("dev/null")
|
||||
{
|
||||
//if (propsDict_.found("dirName")) dirName_=word(propsDict_.lookup("dirName"));
|
||||
path_ = buildFilePath(dirName_);
|
||||
@ -86,13 +87,13 @@ void basicIO::dumpDEMdata() const
|
||||
if (time_.outputTime())
|
||||
{
|
||||
// make time directory
|
||||
fileName lagPath=createTimeDir(path_);
|
||||
lagPath=createTimeDir(fileName(lagPath/"lagrangian"));
|
||||
lagPath_=createTimeDir(path_);
|
||||
lagPath_=createTimeDir(fileName(lagPath_/"lagrangian"));
|
||||
|
||||
// stream data to file
|
||||
streamDataToPath(lagPath, particleCloud_.positions(), particleCloud_.numberOfParticles(), "positions","vector","Cloud<passiveParticle>","0");
|
||||
streamDataToPath(lagPath, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "v","vector","vectorField","");
|
||||
streamDataToPath(lagPath, particleCloud_.radii(), particleCloud_.numberOfParticles(), "r","scalar","scalarField","");
|
||||
streamDataToPath(lagPath_, particleCloud_.positions(), particleCloud_.numberOfParticles(), "positions","vector","Cloud<passiveParticle>","0");
|
||||
streamDataToPath(lagPath_, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "v","vector","vectorField","");
|
||||
streamDataToPath(lagPath_, particleCloud_.radii(), particleCloud_.numberOfParticles(), "r","scalar","scalarField","");
|
||||
}
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -111,7 +112,7 @@ fileName basicIO::buildFilePath(word dirName) const
|
||||
|
||||
void basicIO::streamDataToPath(fileName path, double** array,int n,word name,word type,word className,word finaliser) const
|
||||
{
|
||||
vector position;
|
||||
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";
|
||||
@ -123,8 +124,8 @@ void basicIO::streamDataToPath(fileName path, double** array,int n,word name,wor
|
||||
if (type=="scalar"){
|
||||
*fileStream << array[index][0] << " \n";
|
||||
}else {
|
||||
for(int i=0;i<3;i++) position[i] = array[index][i];
|
||||
*fileStream <<"( "<< position[0] <<" "<<position[1]<<" "<<position[2]<<" ) "<< finaliser << " \n";
|
||||
for(int i=0;i<3;i++) vec[i] = array[index][i];
|
||||
*fileStream <<"( "<< vec[0] <<" "<<vec[1]<<" "<<vec[2]<<" ) "<< finaliser << " \n";
|
||||
}
|
||||
}
|
||||
*fileStream << ")\n";
|
||||
|
||||
@ -63,10 +63,12 @@ private:
|
||||
|
||||
fileName path_;
|
||||
|
||||
|
||||
// Member Functions
|
||||
fileName buildFilePath(word) const;
|
||||
|
||||
protected:
|
||||
mutable fileName lagPath_;
|
||||
|
||||
void streamDataToPath(fileName,double**,int,word,word type,word className,word finaliser) const;
|
||||
|
||||
public:
|
||||
|
||||
146
src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.C
Normal file
146
src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.C
Normal file
@ -0,0 +1,146 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright 2009-2012 JKU Linz
|
||||
Copyright 2012- DCS Computing GmbH, Linz
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of CFDEMcoupling.
|
||||
|
||||
CFDEMcoupling is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with CFDEMcoupling; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
|
||||
and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER).
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "error.H"
|
||||
|
||||
#include "trackIO.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(trackIO, 0);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
IOModel,
|
||||
trackIO,
|
||||
dictionary
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
trackIO::trackIO
|
||||
(
|
||||
const dictionary& dict,
|
||||
cfdemCloud& sm
|
||||
)
|
||||
:
|
||||
IOModel(dict,sm),
|
||||
//propsDict_(dict.subDict(typeName + "Props")),
|
||||
dirName_(""),
|
||||
path_("dev/null"),
|
||||
lagPath_("dev/null")
|
||||
{
|
||||
//if (propsDict_.found("dirName")) dirName_=word(propsDict_.lookup("dirName"));
|
||||
path_ = buildFilePath(dirName_);
|
||||
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
trackIO::~trackIO()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
// Public Member Functions
|
||||
|
||||
void trackIO::dumpDEMdata() const
|
||||
{
|
||||
if (time_.outputTime())
|
||||
{
|
||||
// make time directory
|
||||
lagPath_=createTimeDir(path_);
|
||||
lagPath_=createLagrangianDir(fileName(lagPath_));
|
||||
|
||||
// stream data to file
|
||||
streamDataToPath(lagPath_, particleCloud_.positions(), particleCloud_.numberOfParticles(), "positions","position","Cloud<passiveParticle>","0");
|
||||
streamDataToPath(lagPath_, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "v","vector","vectorField","");
|
||||
streamDataToPath(lagPath_, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "origId","label","labelField","");
|
||||
streamDataToPath(lagPath_, particleCloud_.velocities(), particleCloud_.numberOfParticles(), "origProcId","origProcId","labelField","");
|
||||
streamDataToPath(lagPath_, particleCloud_.radii(), particleCloud_.numberOfParticles(), "r","scalar","scalarField","");
|
||||
}
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Private Member Functions
|
||||
|
||||
fileName trackIO::buildFilePath(word dirName) const
|
||||
{
|
||||
// create file structure
|
||||
fileName path("."/dirName);
|
||||
OFstream* stubFile = new OFstream(fileName(path/"particles.foam"));
|
||||
delete stubFile;
|
||||
return path;
|
||||
}
|
||||
|
||||
void trackIO::streamDataToPath(fileName path, double** array,int n,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 << n <<"\n";
|
||||
if(type!="origProcId")*fileStream << "(\n";
|
||||
else if(type=="origProcId")*fileStream <<"{0}"<< "\n";
|
||||
|
||||
for(int index = 0;index < n; ++index)
|
||||
{
|
||||
if (type=="scalar"){
|
||||
*fileStream << array[index][0] << finaliser << " \n";
|
||||
}else if (type=="position"){
|
||||
for(int i=0;i<3;i++) vec[i] = array[index][i];
|
||||
// You may need to use these two lines if you have cyclics
|
||||
// if(vec[0]<0)vec[0]+=0.12;if(vec[0]>0.12)vec[0]-=0.12;
|
||||
// if(vec[1]<0)vec[1]+=0.06;if(vec[1]>0.06)vec[1]-=0.06;
|
||||
*fileStream <<"( "<< vec[0] <<" "<<vec[1]<<" "<<vec[2]<<" ) "<< finaliser << " \n";
|
||||
}else if (type=="label"){
|
||||
*fileStream << index << finaliser << " \n";
|
||||
}else if (type=="vector"){
|
||||
for(int i=0;i<3;i++) vec[i] = array[index][i];
|
||||
*fileStream <<"( "<< vec[0] <<" "<<vec[1]<<" "<<vec[2]<<" ) " << finaliser << " \n";
|
||||
}
|
||||
}
|
||||
if(type!="origProcId")*fileStream << ")\n";
|
||||
delete fileStream;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
107
src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.H
Normal file
107
src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.H
Normal file
@ -0,0 +1,107 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
CFDEMcoupling - Open Source CFD-DEM coupling
|
||||
|
||||
CFDEMcoupling is part of the CFDEMproject
|
||||
www.cfdem.com
|
||||
Christoph Goniva, christoph.goniva@cfdem.com
|
||||
Copyright 2009-2012 JKU Linz
|
||||
Copyright 2012- DCS Computing GmbH, Linz
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of CFDEMcoupling.
|
||||
|
||||
CFDEMcoupling is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
CFDEMcoupling is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with CFDEMcoupling; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
|
||||
and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER).
|
||||
|
||||
Class
|
||||
trackIO
|
||||
|
||||
SourceFiles
|
||||
trackIO.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef trackIO_H
|
||||
#define trackIO_H
|
||||
|
||||
#include "IOModel.H"
|
||||
#include "interpolationCellPoint.H"
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class noDrag Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class trackIO
|
||||
:
|
||||
public IOModel
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
//dictionary propsDict_;
|
||||
|
||||
word dirName_;
|
||||
|
||||
fileName path_;
|
||||
|
||||
// Member Functions
|
||||
fileName buildFilePath(word) const;
|
||||
|
||||
protected:
|
||||
mutable fileName lagPath_;
|
||||
|
||||
void streamDataToPath(fileName,double**,int,word,word type,word className,word finaliser) const;
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("trackIO");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
trackIO
|
||||
(
|
||||
const dictionary& dict,
|
||||
cfdemCloud& sm
|
||||
);
|
||||
|
||||
// Destructor
|
||||
|
||||
~trackIO();
|
||||
|
||||
|
||||
// Member Functions
|
||||
void dumpDEMdata() const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -75,6 +75,8 @@ KochHillDrag::KochHillDrag
|
||||
if (propsDict_.found("verbose")) verbose_=true;
|
||||
if (propsDict_.found("treatExplicit")) treatExplicit_=true;
|
||||
if (propsDict_.found("interpolation")) interpolation_=true;
|
||||
if (propsDict_.found("scale"))
|
||||
scale_=scalar(readScalar(propsDict_.lookup("scale")));
|
||||
}
|
||||
|
||||
|
||||
@ -154,7 +156,7 @@ void KochHillDrag::setForce
|
||||
if (magUr > 0)
|
||||
{
|
||||
// calc particle Re Nr
|
||||
Rep = ds*voidfraction*magUr/(nuf+SMALL);
|
||||
Rep = ds/scale_*voidfraction*magUr/(nuf+SMALL);
|
||||
|
||||
// calc model coefficient F0
|
||||
scalar F0=0.;
|
||||
@ -170,7 +172,7 @@ void KochHillDrag::setForce
|
||||
scalar F3 = 0.0673+0.212*volumefraction+0.0232/pow(voidfraction,5);
|
||||
|
||||
// calc model coefficient beta
|
||||
scalar beta = 18*nuf*rho*voidfraction*voidfraction*volumefraction/(ds*ds)*
|
||||
scalar beta = 18*nuf*rho*voidfraction*voidfraction*volumefraction/(ds/scale_*ds/scale_)*
|
||||
(F0 + 0.5*F3*Rep);
|
||||
|
||||
// calc particle's drag
|
||||
@ -180,12 +182,13 @@ void KochHillDrag::setForce
|
||||
drag /= voidfraction;
|
||||
}
|
||||
|
||||
if(verbose_ && index >100 && index <102)
|
||||
if(verbose_ && index >=0 && index <2)
|
||||
{
|
||||
Info << "index = " << index << endl;
|
||||
Info << "Us = " << Us << endl;
|
||||
Info << "Ur = " << Ur << endl;
|
||||
Info << "ds = " << ds << endl;
|
||||
Info << "ds/scale = " << ds/scale_ << endl;
|
||||
Info << "rho = " << rho << endl;
|
||||
Info << "nuf = " << nuf << endl;
|
||||
Info << "voidfraction = " << voidfraction << endl;
|
||||
|
||||
@ -83,7 +83,8 @@ forceModel::forceModel
|
||||
dimensionedVector("zero", dimensionSet(1,1,-2,0,0), vector(0,0,0)) // N
|
||||
),
|
||||
coupleForce_(true),
|
||||
modelType_(sm.modelType())
|
||||
modelType_(sm.modelType()),
|
||||
scale_(1.)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@ -72,6 +72,8 @@ protected:
|
||||
|
||||
const word modelType_;
|
||||
|
||||
scalar scale_;
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
|
||||
@ -161,7 +161,7 @@ void gradPForce::setForce
|
||||
else
|
||||
force = -Vs*gradP;
|
||||
|
||||
if(verbose_ && index >0 && index <2)
|
||||
if(verbose_ && index >=0 && index <2)
|
||||
{
|
||||
Info << "index = " << index << endl;
|
||||
Info << "gradP = " << gradP << endl;
|
||||
|
||||
@ -133,7 +133,7 @@ tmp<volVectorField> explicitCouple::expMomSource() const
|
||||
// calc fNext
|
||||
forAll(fNext_,cellI)
|
||||
{
|
||||
fNext_[cellI] = particleCloud_.forceM(0).expParticleForces()[cellI] / particleCloud_.mesh().V()[cellI];
|
||||
fNext_[cellI] = arrayToField(cellI);
|
||||
|
||||
// limiter
|
||||
for (int i=0;i<3;i++)
|
||||
@ -162,6 +162,11 @@ void Foam::explicitCouple::resetMomSourceField() const
|
||||
fNext_.internalField() = vector::zero;
|
||||
}
|
||||
|
||||
inline vector Foam::explicitCouple::arrayToField(label cellI) const
|
||||
{
|
||||
return particleCloud_.forceM(0).expParticleForces()[cellI] / particleCloud_.mesh().V()[cellI];
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
@ -64,6 +64,8 @@ private:
|
||||
|
||||
vector fLimit_; // limit for for exchange field
|
||||
|
||||
virtual inline vector arrayToField(label) const;
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
@ -88,6 +90,7 @@ public:
|
||||
tmp<volVectorField> expMomSource() const;
|
||||
|
||||
void resetMomSourceField() const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -64,6 +64,11 @@ tmp<volVectorField> momCoupleModel::expMomSource() const
|
||||
return tsource;
|
||||
}
|
||||
|
||||
void momCoupleModel::setSourceField(volVectorField & a) const
|
||||
{
|
||||
//do nothing;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
|
||||
@ -115,6 +115,8 @@ public:
|
||||
virtual tmp<volVectorField> expMomSource() const;
|
||||
|
||||
virtual void resetMomSourceField() const=0;
|
||||
|
||||
virtual void setSourceField(volVectorField &) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -17,3 +17,4 @@ dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
dummyfile
|
||||
|
||||
@ -38,7 +38,7 @@ meshMotionModel noMeshMotion;
|
||||
|
||||
regionModel allRegion;
|
||||
|
||||
IOModel basicIO;
|
||||
IOModel basicIO; //trackIO; //
|
||||
|
||||
dataExchangeModel twoWayMPI;//twoWayFiles;//oneWayVTK;//
|
||||
|
||||
@ -90,6 +90,7 @@ KochHillDragProps
|
||||
{
|
||||
velFieldName "U";
|
||||
densityFieldName "rho";
|
||||
voidfractionFieldName "voidfraction";
|
||||
}
|
||||
|
||||
MeiLiftProps
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 2.1.x |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "constant";
|
||||
object particleTrackProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
cloudName cfdemCloud1;
|
||||
|
||||
sampleFrequency 1;
|
||||
|
||||
maxPositions 10;
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user