From 9efd3b591ae24d15ad0843bd988f45049dfd9308 Mon Sep 17 00:00:00 2001 From: cfdem Date: Tue, 17 Jul 2012 16:12:17 +0200 Subject: [PATCH] release on 2012-07-17_16-12-17 --- README | 82 ----------- doc/CFDEMcoupling_Manual.html | 16 +-- doc/CFDEMcoupling_Manual.pdf | Bin 505110 -> 507350 bytes doc/CFDEMcoupling_Manual.txt | 1 + doc/githubAccess_public.pdf | Bin 361661 -> 361661 bytes doc/locateModel_turboEngineSearch.html | 56 ++++++++ doc/locateModel_turboEngineSearch.txt | 49 +++++++ src/lagrangian/cfdemParticle/Make/files | 19 +++ .../turboEngineSearch/turboEngineSearch.C | 136 ++++++++++++++++++ .../turboEngineSearch/turboEngineSearch.H | 117 +++++++++++++++ 10 files changed, 386 insertions(+), 90 deletions(-) delete mode 100644 README create mode 100644 doc/locateModel_turboEngineSearch.html create mode 100644 doc/locateModel_turboEngineSearch.txt create mode 100644 src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.C create mode 100644 src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.H 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/doc/CFDEMcoupling_Manual.html b/doc/CFDEMcoupling_Manual.html index 00b2ab32..175b3086 100644 --- a/doc/CFDEMcoupling_Manual.html +++ b/doc/CFDEMcoupling_Manual.html @@ -207,14 +207,14 @@ listing below of styles within certain commands. liggghtsCommandModel_readLiggghtsDataliggghtsCommandModel_runLiggghts liggghtsCommandModel_writeLiggghtslocateModel locateModel_engineSearchlocateModel_engineSearchIB -locateModel_standardSearchmeshMotionModel -meshMotionModel_noMeshMotionmomCoupleModel -momCoupleModel_explicitCouplemomCoupleModel_implicitCouple -momCoupleModel_noCoupleregionModel -regionModel_allRegionvoidfractionModel -voidfractionModel_GaussVoidFractionvoidfractionModel_IBVoidFraction -voidfractionModel_bigParticleVoidFractionvoidfractionModel_centreVoidFraction -voidfractionModel_dividedVoidFraction +locateModel_standardSearchlocateModel_turboEngineSearch +meshMotionModelmeshMotionModel_noMeshMotion +momCoupleModelmomCoupleModel_explicitCouple +momCoupleModel_implicitCouplemomCoupleModel_noCouple +regionModelregionModel_allRegion +voidfractionModelvoidfractionModel_GaussVoidFraction +voidfractionModel_IBVoidFractionvoidfractionModel_bigParticleVoidFraction +voidfractionModel_centreVoidFractionvoidfractionModel_dividedVoidFraction diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf index 88bf3701d9eb5a56f085009787ab239f9680fe6f..718fba148012c60856652c06cccfcde517e84a11 100644 GIT binary patch delta 42069 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 Hp9uLM+Sjwq delta 40196 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 delta 105 zcmdnnDYmy$Y(h7ysi~QPN#lgp35=~1m|7<=w@zT$I)U|kvy+jLxuId2Wm1YknqjI@ gl7+chl6k77sim=DqNTBgX_}o4Ar;dXwy??o055+aVE_OC diff --git a/doc/locateModel_turboEngineSearch.html b/doc/locateModel_turboEngineSearch.html new file mode 100644 index 00000000..a6367e6a --- /dev/null +++ b/doc/locateModel_turboEngineSearch.html @@ -0,0 +1,56 @@ + +
CFDEMproject WWW Site - CFDEM Commands +
+ + + + +
+ +

locateModel_turboEngineSearch command +

+

Syntax: +

+

Defined in couplingProperties dictionary. +

+
locateModel turboEngine;
+turboEngineProps
+{
+    faceDecomp switch1;
+    treeSearch switch2;
+} 
+
+
  • switch1 = time to start the averaging (default 0) + +
  • switch2 = names of the finite volume scalar fields to be temporally averaged + + +
+

Examples: +

+
locateModel turboEngine;
+turboEngineProps
+{
+    faceDecomp false;
+    treeSearch false;
+} 
+
+

Description: +

+

The locateModel "turboEngine" locates the CFD cell and cellID corresponding to a given position. The algorithm is improved compared to engine search to show better parallel performance. +

+

The turboEngineSearch locate Model can be used with different settings to use different algorithms: +

+
  • faceDecomp false; treeSearch false; will execute some geometric (linear) search using the last known cellID (recommended) + +
  • faceDecomp false; treeSearch true; will use a recursive tree structure to find the cell. + + +
+

Restrictions: none. +

+

Related commands: +

+

locateModel +

+ diff --git a/doc/locateModel_turboEngineSearch.txt b/doc/locateModel_turboEngineSearch.txt new file mode 100644 index 00000000..72425788 --- /dev/null +++ b/doc/locateModel_turboEngineSearch.txt @@ -0,0 +1,49 @@ +"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c + +:link(lws,http://www.cfdem.com) +:link(lc,CFDEMcoupling_Manual.html#comm) + +:line + +locateModel_turboEngineSearch command :h3 + +[Syntax:] + +Defined in couplingProperties dictionary. + +locateModel turboEngine; +turboEngineProps +\{ + faceDecomp switch1; + treeSearch switch2; +\} :pre + +{switch1} = time to start the averaging (default 0) :ulb,l +{switch2} = names of the finite volume scalar fields to be temporally averaged :l +:ule + +[Examples:] + +locateModel turboEngine; +turboEngineProps +\{ + faceDecomp false; + treeSearch false; +\} :pre + +[Description:] + +The locateModel "turboEngine" locates the CFD cell and cellID corresponding to a given position. The algorithm is improved compared to engine search to show better parallel performance. + +The turboEngineSearch locate Model can be used with different settings to use different algorithms: + +faceDecomp false; treeSearch false; will execute some geometric (linear) search using the last known cellID (recommended) :ulb,l +faceDecomp false; treeSearch true; will use a recursive tree structure to find the cell. :l +:ule + +[Restrictions:] none. + +[Related commands:] + +"locateModel"_locateModel.html + diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files index d97f4781..276ddec6 100644 --- a/src/lagrangian/cfdemParticle/Make/files +++ b/src/lagrangian/cfdemParticle/Make/files @@ -1,5 +1,6 @@ cfdemCloud = cfdemCloud forceModels = subModels/forceModel +forceModelsMS = subModels/forceModelMS IOModels = subModels/IOModel voidFractionModels = subModels/voidFractionModel locateModels = subModels/locateModel @@ -13,23 +14,37 @@ 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 + +$(forceModelsMS)/forceModelMS/forceModelMS.C +$(forceModelsMS)/forceModelMS/newForceModelMS.C +$(forceModelsMS)/DiFeliceDragMS/DiFeliceDragMS.C $(IOModels)/IOModel/IOModel.C $(IOModels)/IOModel/newIOModel.C @@ -40,6 +55,7 @@ $(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 @@ -48,12 +64,14 @@ $(locateModels)/locateModel/locateModel.C $(locateModels)/locateModel/newLocateModel.C $(locateModels)/standardSearch/standardSearch.C $(locateModels)/engineSearch/engineSearch.C +$(locateModels)/turboEngineSearch/turboEngineSearch.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 @@ -64,6 +82,7 @@ $(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 diff --git a/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.C b/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.C new file mode 100644 index 00000000..5b336561 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.C @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + 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 "turboEngineSearch.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(turboEngineSearch, 0); + +addToRunTimeSelectionTable +( + locateModel, + turboEngineSearch, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +turboEngineSearch::turboEngineSearch +( + const dictionary& dict, + cfdemCloud& sm +) +: + locateModel(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + treeSearch_(propsDict_.lookup("treeSearch")), + #ifdef version16ext + searchEngine_(particleCloud_.mesh(),false), //(particleCloud_.mesh(),faceDecomp_) + #elif defined(version21) + searchEngine_(particleCloud_.mesh(),polyMesh::FACEPLANES), // FACEPLANES or FACECENTRETETS; FACEDIAGTETS not stable + #endif + bb_(particleCloud_.mesh().points(),false) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +turboEngineSearch::~turboEngineSearch() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +label turboEngineSearch::findCell +( + double** const& mask, + double**& positions, + double**& cellIDs, + int size +) const +{ + bool first=true; + vector position; + for(int index = 0;index < size; ++index) + { + cellIDs[index][0]=-1; + + if(mask[index][0] && particleCloud_.radius(index) > SMALL) + { + // create pos vector + for(int i=0;i<3;i++) position[i] = positions[index][i]; + + // find cell + if(first) + { + cellIDs[index][0] =searchEngine_.findCell(position,cellIDs[index][0],treeSearch_); + first=false; + } + else + { + if(bb_.contains(position)) + cellIDs[index][0] =searchEngine_.findCell(position,cellIDs[index][0],treeSearch_); + else + cellIDs[index][0] =-1; + } + } + } + + return 1; +} + +label turboEngineSearch::findSingleCell +( + vector& position, + label& oldCellID +) const +{ + // find cell + return searchEngine_.findCell(position,oldCellID,treeSearch_); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.H b/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.H new file mode 100644 index 00000000..570a1605 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/locateModel/turboEngineSearch/turboEngineSearch.H @@ -0,0 +1,117 @@ +/*---------------------------------------------------------------------------*\ + 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 + turboEngineSearch + +SourceFiles + turboEngineSearch.C + +\*---------------------------------------------------------------------------*/ + +#ifndef turboEngineSearch_H +#define turboEngineSearch_H + +#include "locateModel.H" + +#include "meshSearch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class noDrag Declaration +\*---------------------------------------------------------------------------*/ + +class turboEngineSearch +: + public locateModel +{ + +private: + + dictionary propsDict_; + + Switch faceDecomp_; + + Switch treeSearch_; + + meshSearch searchEngine_; + + boundBox bb_; + +public: + + //- Runtime type information + TypeName("turboEngine"); + + + // Constructors + + //- Construct from components + turboEngineSearch + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + ~turboEngineSearch(); + + + // Member Functions + label findCell + ( + double** const& mask, + double**& positions, + double**& cellIDs, + int size + ) const; + + label findSingleCell + ( + vector& position, + label& oldCellID + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //