From 6677dfbc43e43cf86b5f6e531397be6f30ae9551 Mon Sep 17 00:00:00 2001 From: cfdem Date: Mon, 30 Jul 2012 10:43:03 +0200 Subject: [PATCH] release on 2012-07-30_10-43-02 --- README | 82 ---------- .../solvers/cfdemSolverPiso/cfdemSolverPiso.C | 2 - .../utilities/cfdemPostproc/cfdemPostproc.C | 29 ++-- applications/utilities/writeUfluid/Make/files | 3 + .../utilities/writeUfluid/Make/options | 10 ++ .../utilities/writeUfluid/createFields.H | 25 +++ .../writeUfluid/particleTrackProperties | 25 +++ .../utilities/writeUfluid/writeUfluid.C | 99 ++++++++++++ doc/CFDEMcoupling_Manual.html | 53 +++---- doc/CFDEMcoupling_Manual.pdf | Bin 507230 -> 509488 bytes doc/CFDEMcoupling_Manual.txt | 23 +++ doc/IOModel_trackIO.html | 32 ++++ doc/IOModel_trackIO.txt | 29 ++++ doc/githubAccess_public.html | 12 ++ doc/githubAccess_public.pdf | Bin 361661 -> 361900 bytes doc/githubAccess_public.txt | 11 ++ src/lagrangian/cfdemParticle/Make/files | 24 +++ .../cfdemParticle/cfdTools/versionInfo.H | 2 +- .../cfdemParticle/cfdemCloud/cfdemCloud.H | 2 + .../cfdemParticle/cfdemCloud/cfdemCloudI.H | 5 + src/lagrangian/cfdemParticle/etc/functions.sh | 15 ++ .../subModels/IOModel/IOModel/IOModel.C | 9 ++ .../subModels/IOModel/IOModel/IOModel.H | 2 + .../subModels/IOModel/basicIO/basicIO.C | 19 +-- .../subModels/IOModel/basicIO/basicIO.H | 4 +- .../subModels/IOModel/trackIO/trackIO.C | 146 ++++++++++++++++++ .../subModels/IOModel/trackIO/trackIO.H | 107 +++++++++++++ .../forceModel/KochHillDrag/KochHillDrag.C | 9 +- .../forceModel/forceModel/forceModel.C | 3 +- .../forceModel/forceModel/forceModel.H | 2 + .../forceModel/gradPForce/gradPForce.C | 2 +- .../explicitCouple/explicitCouple.C | 7 +- .../explicitCouple/explicitCouple.H | 3 + .../momCoupleModel/momCoupleModel.C | 5 + .../momCoupleModel/momCoupleModel.H | 2 + .../ErgunTestMPI_restart/DEM/post/dummy | 1 + .../CFD/constant/couplingProperties | 3 +- .../CFD/constant/particleTrackProperties | 23 +++ 38 files changed, 688 insertions(+), 142 deletions(-) delete mode 100644 README create mode 100644 applications/utilities/writeUfluid/Make/files create mode 100644 applications/utilities/writeUfluid/Make/options create mode 100644 applications/utilities/writeUfluid/createFields.H create mode 100644 applications/utilities/writeUfluid/particleTrackProperties create mode 100644 applications/utilities/writeUfluid/writeUfluid.C create mode 100644 doc/IOModel_trackIO.html create mode 100644 doc/IOModel_trackIO.txt create mode 100644 src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.C create mode 100644 src/lagrangian/cfdemParticle/subModels/IOModel/trackIO/trackIO.H create mode 100644 tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/particleTrackProperties diff --git a/README b/README deleted file mode 100644 index a677e0a8..00000000 --- a/README +++ /dev/null @@ -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. -\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C index 4fc1d08b..352236d7 100644 --- a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C +++ b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C @@ -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" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/cfdemPostproc/cfdemPostproc.C b/applications/utilities/cfdemPostproc/cfdemPostproc.C index 69bc5d3d..04400a96 100644 --- a/applications/utilities/cfdemPostproc/cfdemPostproc.C +++ b/applications/utilities/cfdemPostproc/cfdemPostproc.C @@ -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 . Application cfdemPostproc Description Tool for DEM->CFD (Lagrange->Euler) mapping to calculate local voidfraction - \*---------------------------------------------------------------------------*/ #include "fvCFD.H" diff --git a/applications/utilities/writeUfluid/Make/files b/applications/utilities/writeUfluid/Make/files new file mode 100644 index 00000000..26244494 --- /dev/null +++ b/applications/utilities/writeUfluid/Make/files @@ -0,0 +1,3 @@ +writeUfluid.C + +EXE = $(FOAM_APPBIN)/writeUfluid diff --git a/applications/utilities/writeUfluid/Make/options b/applications/utilities/writeUfluid/Make/options new file mode 100644 index 00000000..0bc784e4 --- /dev/null +++ b/applications/utilities/writeUfluid/Make/options @@ -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 diff --git a/applications/utilities/writeUfluid/createFields.H b/applications/utilities/writeUfluid/createFields.H new file mode 100644 index 00000000..c5316d89 --- /dev/null +++ b/applications/utilities/writeUfluid/createFields.H @@ -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")); + + diff --git a/applications/utilities/writeUfluid/particleTrackProperties b/applications/utilities/writeUfluid/particleTrackProperties new file mode 100644 index 00000000..b2caae7a --- /dev/null +++ b/applications/utilities/writeUfluid/particleTrackProperties @@ -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; +// ************************************************************************* // diff --git a/applications/utilities/writeUfluid/writeUfluid.C b/applications/utilities/writeUfluid/writeUfluid.C new file mode 100644 index 00000000..cde6c88f --- /dev/null +++ b/applications/utilities/writeUfluid/writeUfluid.C @@ -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 . + +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 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; +} + + +// ************************************************************************* // diff --git a/doc/CFDEMcoupling_Manual.html b/doc/CFDEMcoupling_Manual.html index 175b3086..148ce0c3 100644 --- a/doc/CFDEMcoupling_Manual.html +++ b/doc/CFDEMcoupling_Manual.html @@ -189,32 +189,33 @@ listing below of styles within certain commands.

- - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +
IOModelIOModel_basicIO
IOModel_noIOaveragingModel
averagingModel_dilutecfdemSolverIB
cfdemSolverPisocfdemSolverPisoScalar
clockModelclockModel_noClock
clockModel_standardClockdataExchangeModel
dataExchangeModel_noDataExchangedataExchangeModel_oneWayVTK
dataExchangeModel_twoWayFilesdataExchangeModel_twoWayMPI
forceModelforceModel_Archimedes
forceModel_ArchimedesIBforceModel_DiFeliceDrag
forceModel_GidaspowDragforceModel_KochHillDrag
forceModel_LaEuScalarTempforceModel_MeiLift
forceModel_SchillerNaumannDragforceModel_ShirgaonkarIB
forceModel_gradPForceforceModel_noDrag
forceModel_virtualMassForceforceModel_viscForce
liggghtsCommandModelliggghtsCommandModel_execute
liggghtsCommandModel_readLiggghtsDataliggghtsCommandModel_runLiggghts
liggghtsCommandModel_writeLiggghtslocateModel
locateModel_engineSearchlocateModel_engineSearchIB
locateModel_standardSearchlocateModel_turboEngineSearch
meshMotionModelmeshMotionModel_noMeshMotion
momCoupleModelmomCoupleModel_explicitCouple
momCoupleModel_implicitCouplemomCoupleModel_noCouple
regionModelregionModel_allRegion
voidfractionModelvoidfractionModel_GaussVoidFraction
voidfractionModel_IBVoidFractionvoidfractionModel_bigParticleVoidFraction
voidfractionModel_centreVoidFractionvoidfractionModel_dividedVoidFraction +
IOModel_noIOIOModel_trackIO
averagingModelaveragingModel_dilute
cfdemSolverIBcfdemSolverPiso
cfdemSolverPisoScalarclockModel
clockModel_noClockclockModel_standardClock
dataExchangeModeldataExchangeModel_noDataExchange
dataExchangeModel_oneWayVTKdataExchangeModel_twoWayFiles
dataExchangeModel_twoWayMPIforceModel
forceModel_ArchimedesforceModel_ArchimedesIB
forceModel_DiFeliceDragforceModel_GidaspowDrag
forceModel_KochHillDragforceModel_LaEuScalarTemp
forceModel_MeiLiftforceModel_SchillerNaumannDrag
forceModel_ShirgaonkarIBforceModel_gradPForce
forceModel_noDragforceModel_virtualMassForce
forceModel_viscForceliggghtsCommandModel
liggghtsCommandModel_executeliggghtsCommandModel_readLiggghtsData
liggghtsCommandModel_runLiggghtsliggghtsCommandModel_writeLiggghts
locateModellocateModel_engineSearch
locateModel_engineSearchIBlocateModel_standardSearch
locateModel_turboEngineSearchmeshMotionModel
meshMotionModel_noMeshMotionmomCoupleModel
momCoupleModel_explicitCouplemomCoupleModel_implicitCouple
momCoupleModel_noCoupleregionModel
regionModel_allRegionvoidfractionModel
voidfractionModel_GaussVoidFractionvoidfractionModel_IBVoidFraction
voidfractionModel_bigParticleVoidFractionvoidfractionModel_centreVoidFraction
voidfractionModel_dividedVoidFraction
diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf index 598f4080cd30eccce02c73d76ed4dbb89f97dba2..2d19fcb4e59f64793d2b22f4c9cc223843463af1 100644 GIT binary patch delta 49515 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 f*6HbqYzc7m4+!yhb`hb2z-KW +
CFDEMproject WWW Site - CFDEM Commands +
+ + + + +
+ +

IOModel_trackIO command +

+

Syntax: +

+

Defined in couplingProperties dictionary. +

+
IOModel "trackIO"; 
+
+

Examples: +

+
IOModel "trackIO"; 
+
+

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 +

+ diff --git a/doc/IOModel_trackIO.txt b/doc/IOModel_trackIO.txt new file mode 100644 index 00000000..27ac1400 --- /dev/null +++ b/doc/IOModel_trackIO.txt @@ -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 + diff --git a/doc/githubAccess_public.html b/doc/githubAccess_public.html index 6327ba48..6d7b5274 100644 --- a/doc/githubAccess_public.html +++ b/doc/githubAccess_public.html @@ -137,6 +137,18 @@ Alternatively you can run each tutorial using the Allrun.sh scripts in th

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 
+
+

You can pull the latest version of lpp with: +

+
cd $HOME/LIGGGHTS 
+
+
git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/lpp mylpp 
+

Troubleshooting:

  • toubles with git clone? diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf index 115be5cd54ff8fe7a538bac60f2f95fcc43e5096..2113f61de194dd2dd4f23fe4749b5064e716509a 100644 GIT binary patch delta 1478 zcmV;%1v&b?i59Gj7LbSsGcYkQG%_=RkA;r`g^vP-j{}8|1htO^m3e1uNW{SG&YSn%%<%1`OC9`mY1pHS0fn2Bx4}ur>)^w~i(ZpI?a&(v zVuTJxc!=!R9SXu$7)O6{Ggh18W_C?y!PgUi+NW;U1-E+x1h+&U(N0wqikwU$a|#ik zW|GF!caz&tRYjKOYg+Bd>?7^4PeW_FF%BCYz8KqN^A%7`L zP9y)8VP!a{=Xt&~p>Jeqf;!GC6TsA}TJwKNB1=W-APwr$T4aBr1bpgK@VxAn$L~AT z?p}C3MtzkTsdHh{Cz>ty_oy8zX_{|y8nY_30WMb)NQoKYl756wzkmX?l~Tp1=Om!T|6p?4ky3POF)SAe!cY5v+eTB(dq0ru3Q zV=buInMCF79Jnm2M>Z%#_$bzL-vlyxaTJvm>;|RVoP1Bp@y-7=or(%NGfQYSv?77E zl3NbuvfQR7c`HDrD@$8l8oKS-P zwe)gne0-*rGA_dByqg`r{=`E($pQ?;RVK>>XTWZwX|X^s@Lks$7YNZz!YCY`-`u_3 zQ9TmcLvO?z2v;w9gJC0WyEpQ>Z@%9t7H97KeoC|`0DpXYp_Ne~q_$>clWdiKq}0w1 zZTEjo#hnBjtz?p79|?*vB)4ey+QzF)g^z4CNm^#|iRVo)z9X2)oHxvgzP8J(!cY{? zru(9`)v1x3al>m5(};Dzev^wc%NMIulXT#P5@U)IO5sBNJ3daT6;Dv#4l)$?7318! z*>B7C-KV!Vv$2QZ1~_}B5!Qb7*X>~*ex85aKg{MI9hX0u6RRJ2p1C0$ix9IP3`wn( zzNFLo|HH!#VTYJB#sEe2Kn$B~&e_yyjJ2L%H}JXfm5pN^<{vzICyhumH-L`1(B0bY zciwb5qroNL4&%Xb*b{hjvAmuHOAK`svK&wDgV}U8z6vIn#}MkwG44mpW9sAQh6sP_ zvCv>_&;Akd_+4UoZ^8li=jflYamqusb)mH+}`h1uHT%Hy|)DFfcG6 zZXgOUFfcGPHZU?dIUq1FFfcG6ZXgOUFfcGPHZU_dIhQAd1vp+dH8o{rHaBB3VrDcs zGh{V3WHdB0W;8i7H8W;1GGR16JT^5oWo0%uV=`i9G&wV5H8x~4G&5#2IWsjgW->Bi gG(KHEJ_>VmVRCeMa%E-;Gd3_bFgXe(B}Gq03NvlNF#rGn delta 1237 zcmV;`1SR5w2CMNc@WZX5P%ax8E9VO7PdFeupl4#5au(X(Nde{CIdVD~cxxT~V6h zXm5ZIOaJeLQr_g*Qfz-ldb7Qo-qKn6wGmIc)NY5vtxgYzn=D__UYEpKPIfJF;y5pr zpwZ-J{E_Q&t7N{S#h&bbi%-K)=YZMjbfc~-bO7@g{|)X-1!YPPN4B)uNTz^ah{C~$ zzXUI>!;GRR7M90W6gI8SMa3F4jV@R2T@X`}6@gN(YOP70O6q@ZJ*98kZbt5VLap{i z)N!n@l@%suR=x_gKM3L23C00Y(<=+d2#BXx*Gl0uXq^C2!HwM7g5*h~OKAjmO^c!? z)9D2Xr%)d<(62W-p-%Mw*ySrOUXfC~da|BqF2u5kXtZYe3h|Tq zNjxgH$dMySJE;^1kkW-EmLWPMUWM78hGGQ>IQ2s)ehLTwLG=`oUMNwlwRYJ*ksRZX zaSfW=a1dPVnj8>U==+yYxjm>1ZS|vp+aHMdbEns@#<2!&bp}!U>U&N0d=~E49yck) zaJlMRqpg4DT7}+ojT~w7Lee{L{I)2a4idvF))L!kGzH}eifC7G7{A@^n_R>xZJ|NMAJ^B?2c9$#(Zf z*Z!RI;r{oCZiHo0h0#5dH&ktRldB{d^oFiFf``Om%JJo5emhR*7)dlTAB|_}bTS=X zr{jO&F@*{_Lw&Jy7UN;TI2VOmktd4P>K_S@t^Tfdy|$~`Ven{3B7ddZDOfz-%|G4G z!DKr5^0PH%$fHmD!PTm6bh=5On*}zZLx=U4ME;^dJ5w4f5au5iY<$u0_mlo*?1{EQ zxmM_=_NpE!=i_BBJT`DJ%$=JNKvX>bcd#4YK3)GKO5H&c4F=sX%@> $fileName } +#========================================# +#- remove brackets from file +removeBracketsFromFile() +{ + #--------------------------------------------------------------------------------# + #- define variables + oldFileName="$1" + newFileName="$oldFileName""_noBrackets" + #--------------------------------------------------------------------------------# + + sed -e 's/[(,)]//g' $oldFileName > $newFileName +} + + + diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C index a3c29a5c..527a0c10 100644 --- a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C +++ b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.C @@ -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 diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.H b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.H index b8e0c7b0..dc70faf8 100644 --- a/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.H +++ b/src/lagrangian/cfdemParticle/subModels/IOModel/IOModel/IOModel.H @@ -112,6 +112,8 @@ public: virtual void dumpDEMdata() const; fileName createTimeDir(fileName) const; + + fileName createLagrangianDir(fileName) const; }; diff --git a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C index 1f15853b..82805a0b 100644 --- a/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C +++ b/src/lagrangian/cfdemParticle/subModels/IOModel/basicIO/basicIO.C @@ -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","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","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] <<" "<","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] <<" "< 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; diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C index e54817b5..6800c514 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.C @@ -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.) {} diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H index cb76edd0..e1910f10 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/forceModel/forceModel.H @@ -72,6 +72,8 @@ protected: const word modelType_; + scalar scale_; + public: //- Runtime type information diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C index 86ca474e..c1b2db3f 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/gradPForce/gradPForce.C @@ -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; diff --git a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.C b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.C index 8a3d29cc..069565b3 100644 --- a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.C +++ b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.C @@ -133,7 +133,7 @@ tmp 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 diff --git a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.H b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.H index 6c7a1354..9ab43367 100644 --- a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.H +++ b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/explicitCouple/explicitCouple.H @@ -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 expMomSource() const; void resetMomSourceField() const; + }; diff --git a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.C b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.C index 048dc156..737f1618 100644 --- a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.C +++ b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.C @@ -64,6 +64,11 @@ tmp momCoupleModel::expMomSource() const return tsource; } +void momCoupleModel::setSourceField(volVectorField & a) const +{ + //do nothing; +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // Construct from components diff --git a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.H b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.H index 5b52db92..53aa3d7d 100644 --- a/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.H +++ b/src/lagrangian/cfdemParticle/subModels/momCoupleModel/momCoupleModel/momCoupleModel.H @@ -115,6 +115,8 @@ public: virtual tmp expMomSource() const; virtual void resetMomSourceField() const=0; + + virtual void setSourceField(volVectorField &) const; }; diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy index 23e8ce62..2dfe60a2 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy @@ -17,3 +17,4 @@ dummyfile dummyfile dummyfile dummyfile +dummyfile diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties index 7d200ed9..0003f94e 100755 --- a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/couplingProperties @@ -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 diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/particleTrackProperties b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/particleTrackProperties new file mode 100644 index 00000000..cd48fa8b --- /dev/null +++ b/tutorials/cfdemSolverPiso/settlingTestMPI/CFD/constant/particleTrackProperties @@ -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; +// ************************************************************************* //