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/cfdemSolverIB/cfdemSolverIB.C b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C index 912cb6c8..f61f03dd 100755 --- a/applications/solvers/cfdemSolverIB/cfdemSolverIB.C +++ b/applications/solvers/cfdemSolverIB/cfdemSolverIB.C @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) fvVectorMatrix UEqn ( - fvm::ddt(U) + fvm::ddt(voidfraction,U) + fvm::div(phi, U) + turbulence->divDevReff(U) ); @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) fvScalarMatrix pEqn ( - fvm::laplacian(rUA, p) == fvc::div(phi) + fvm::laplacian(rUA, p) == fvc::div(phi) + fvc::ddt(voidfraction) ); pEqn.setReference(pRefCell, pRefValue); @@ -157,7 +157,8 @@ int main(int argc, char *argv[]) turbulence->correct(); Info << "particleCloud.calcVelocityCorrection() " << endl; - particleCloud.calcVelocityCorrection(p,U,phiIB); + volScalarField voidfractionNext=mesh.lookupObject("voidfractionNext"); + particleCloud.calcVelocityCorrection(p,U,phiIB,voidfractionNext); runTime.write(); diff --git a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C index 352236d7..c14cba22 100644 --- a/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C +++ b/applications/solvers/cfdemSolverPiso/cfdemSolverPiso.C @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) #include "solverDebugInfo.H" particleCloud.clockM().stop("Coupling"); - particleCloud.clockM().start(10,"Flow"); + particleCloud.clockM().start(16,"Flow"); // Pressure-velocity PISO corrector { // Momentum predictor @@ -94,16 +94,15 @@ int main(int argc, char *argv[]) - fvm::Sp(Ksl/rho,U) ); + if (modelType=="B") + UEqn == - fvc::grad(p) + Ksl/rho*Us; + else + UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us; + UEqn.relax(); if (momentumPredictor) - { - //solve UEqn - if (modelType=="B") - solve(UEqn == - fvc::grad(p) + Ksl/rho*Us); - else - solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us); - } + solve(UEqn); // --- PISO loop @@ -114,15 +113,15 @@ int main(int argc, char *argv[]) { volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA)); + volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction); U = rUA*UEqn.H(); - phi = fvc::interpolate(U*voidfraction) & mesh.Sf(); - //+ fvc::ddtPhiCorr(rUA, U, phi) + phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() ) + + fvc::ddtPhiCorr(rUAvoidfraction, U, phi); surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf()); surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS); - volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction); if (modelType=="A") rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction); @@ -156,7 +155,7 @@ int main(int argc, char *argv[]) } // end non-orthogonal corrector loop - #include "continuityErrs.H" + #include "continuityErrorPhiPU.H" if (modelType=="B") U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA; diff --git a/applications/solvers/cfdemSolverPisoMS/Make/files b/applications/solvers/cfdemSolverPisoMS/Make/files new file mode 100644 index 00000000..3d58796c --- /dev/null +++ b/applications/solvers/cfdemSolverPisoMS/Make/files @@ -0,0 +1,3 @@ +cfdemSolverPisoMS.C + +EXE=$(FOAM_USER_APPBIN)/cfdemSolverPisoMS diff --git a/applications/solvers/cfdemSolverPisoMS/Make/options b/applications/solvers/cfdemSolverPisoMS/Make/options new file mode 100644 index 00000000..17268a09 --- /dev/null +++ b/applications/solvers/cfdemSolverPisoMS/Make/options @@ -0,0 +1,16 @@ +EXE_INC = \ + -I$(CFDEM_SRC_DIR)/lnInclude \ + -I ../cfdemSolverPiso \ + -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(CFDEM_SRC_DIR)/cfdTools \ + +EXE_LIBS = \ + -L$(FOAM_USER_LIBBIN)\ + -lincompressibleRASModels \ + -lincompressibleLESModels \ + -lincompressibleTransportModels \ + -lfiniteVolume \ + -l$(CFDEM_LIB_NAME) diff --git a/applications/solvers/cfdemSolverPisoMS/cfdemSolverPisoMS.C b/applications/solvers/cfdemSolverPisoMS/cfdemSolverPisoMS.C new file mode 100644 index 00000000..65eeb8f3 --- /dev/null +++ b/applications/solvers/cfdemSolverPisoMS/cfdemSolverPisoMS.C @@ -0,0 +1,191 @@ +/*---------------------------------------------------------------------------*\ + 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 + cfdemSolverPisoMS + +Description + Transient solver for incompressible flow. + Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected. + The code is an evolution of the solver pisoFoam in OpenFOAM(R) 1.6, + where additional functionality for CFD-DEM coupling is added. +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "singlePhaseTransportModel.H" +#include "turbulenceModel.H" + +#include "cfdemCloudMS.H" +#include "implicitCouple.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + + #include "initContinuityErrs.H" + + // create cfdemCloud + #include "readGravitationalAcceleration.H" + cfdemCloudMS particleCloud(mesh); + + #include "checkModelType.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.loop()) + { + Info<< "Time = " << runTime.timeName() << nl << endl; + + #include "readPISOControls.H" + #include "CourantNo.H" + + // do particle stuff + Info << "- evolve()" << endl; + particleCloud.evolve(voidfraction,Us,U); + + Info << "update Ksl.internalField()" << endl; + Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource(); + Ksl.correctBoundaryConditions(); + + // debug info + //Info << "totaldragforceEuler calculus" << endl; + //vector totaldragforceEuler(0,0,0); + //forAll(Ksl,cellI) + //{ + // totaldragforceEuler += Ksl[cellI]*(Us[cellI]-U[cellI])/rho[cellI] * Ksl.mesh().V()[cellI]; + //} + //Pout <<"totaldragforceEuler = "<< mag(totaldragforceEuler) << endl; + //Pout << "dv/dt =" << sum(fvc::ddt(voidfraction)) << endl; + //----------- + + // Pressure-velocity PISO corrector + { + // Momentum predictor + fvVectorMatrix UEqn + ( + fvm::ddt(voidfraction,U) + + fvm::div(phi, U) +// + turbulence->divDevReff(U) + + particleCloud.divVoidfractionTau(U, voidfraction) + == + - fvm::Sp(Ksl/rho,U) + ); + + UEqn.relax(); + + if (momentumPredictor) + { + //solve UEqn + if (modelType=="B") + solve(UEqn == - fvc::grad(p) + Ksl/rho*Us); + else + solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us); + } + + // --- PISO loop + + //for (int corr=0; corrcorrect(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C index 86656e0c..2fdd14c5 100644 --- a/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C +++ b/applications/solvers/cfdemSolverPisoScalar/cfdemSolverPisoScalar.C @@ -126,14 +126,14 @@ int main(int argc, char *argv[]) { volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA)); + volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction); U = rUA*UEqn.H(); - phi = fvc::interpolate(U*voidfraction) & mesh.Sf(); - //+ fvc::ddtPhiCorr(rUA, U, phi) + phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() ) + + fvc::ddtPhiCorr(rUAvoidfraction, U, phi); surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf()); surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS); - volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction); if (modelType=="A") rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction); @@ -167,7 +167,7 @@ int main(int argc, char *argv[]) } // end non-orthogonal corrector loop - #include "continuityErrs.H" + #include "continuityErrorPhiPU.H" if (modelType=="B") U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA; diff --git a/doc/CFDEMcoupling_Manual.html b/doc/CFDEMcoupling_Manual.html index 148ce0c3..19e9fc60 100644 --- a/doc/CFDEMcoupling_Manual.html +++ b/doc/CFDEMcoupling_Manual.html @@ -162,6 +162,21 @@ In order to get the latest code version, please use the git repository at http:/

Reasonable example settings for the "couplingProperties" dictionary are given in the tutorial cases.

+
modelType 
+
+

"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their appliccability", JFM. "A" requres the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". +

+
couplingInterval 
+
+

The coupling interval determines the time passing between two CFD-DEM data exchanges. +

+

A useful procedure would be: +1) Set the DEM TS in the in.xxx according to the needs of the pure DEM problem. +2) Set the "couplingInterval", which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling. +3) Choose the CFD timestep in the controlDict. it must be equal or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!". +

+

Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s. +


1.5 "liggghtsCommands" dictionary diff --git a/doc/CFDEMcoupling_Manual.pdf b/doc/CFDEMcoupling_Manual.pdf index 351b314f..aaa1d0ac 100644 Binary files a/doc/CFDEMcoupling_Manual.pdf and b/doc/CFDEMcoupling_Manual.pdf differ diff --git a/doc/CFDEMcoupling_Manual.txt b/doc/CFDEMcoupling_Manual.txt index ebc3abb7..301a6840 100644 --- a/doc/CFDEMcoupling_Manual.txt +++ b/doc/CFDEMcoupling_Manual.txt @@ -131,6 +131,21 @@ In "sub-model properties" sub-dictionaries might be defined to specify model spe Reasonable example settings for the "couplingProperties" dictionary are given in the tutorial cases. +modelType :pre + +"modelType" refers to the formulation of the equations to be solved. Choose "A" or "B", according to Zhou et al. (2010): "Discrete particle simulation of particle-fluid flow: model formulations and their appliccability", JFM. "A" requres the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes". + +couplingInterval :pre + +The coupling interval determines the time passing between two CFD-DEM data exchanges. + +A useful procedure would be: +1) Set the DEM TS in the in.xxx according to the needs of the pure DEM problem. +2) Set the "couplingInterval", which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling. +3) Choose the CFD timestep in the controlDict. it must be equal or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!". + +Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s. + :line 1.5 "liggghtsCommands" dictionary :h4,link(1_5) @@ -404,6 +419,14 @@ Reasonable example settings for the "liggghtsCommands" dictionary are given in t + + + + + + + + diff --git a/doc/forceModel_KochHillDrag.html b/doc/forceModel_KochHillDrag.html index 1f860081..0edc8238 100644 --- a/doc/forceModel_KochHillDrag.html +++ b/doc/forceModel_KochHillDrag.html @@ -31,7 +31,7 @@ KochHillDragProps
  • voidfraction = name of the finite volume voidfraction field -
  • interpolation = flag to use interolate interpolated voidfraction and fluid velocity values (normally off) +
  • interpolation = flag to use interpolated voidfraction and fluid velocity values (normally off) diff --git a/doc/forceModel_KochHillDrag.txt b/doc/forceModel_KochHillDrag.txt index 39e88529..fb67f9f7 100644 --- a/doc/forceModel_KochHillDrag.txt +++ b/doc/forceModel_KochHillDrag.txt @@ -26,7 +26,7 @@ KochHillDragProps {U} = name of the finite volume fluid velocity field :ulb,l {density} = name of the finite volume gravity field :l {voidfraction} = name of the finite volume voidfraction field :l -{interpolation} = flag to use interolate interpolated voidfraction and fluid velocity values (normally off) :l +{interpolation} = flag to use interpolated voidfraction and fluid velocity values (normally off) :l :ule [Examples:] diff --git a/doc/githubAccess_public.pdf b/doc/githubAccess_public.pdf index 47c73839..4b0b8cc6 100644 Binary files a/doc/githubAccess_public.pdf and b/doc/githubAccess_public.pdf differ diff --git a/doc/voidFractionModel_dividedVoidFraction.html b/doc/voidFractionModel_dividedVoidFraction.html index 9b019a9e..a07c2403 100644 --- a/doc/voidFractionModel_dividedVoidFraction.html +++ b/doc/voidFractionModel_dividedVoidFraction.html @@ -18,12 +18,15 @@ dividedProps { alphaMin number1; scaleUpVol number2; + interpolation; }
    • number1 = mininmum limit for voidfraction
    • number2 = diameter of the particle's representation is artificially increased according to number2 * Vparticle, volume remains unaltered! +
    • interpolation = flag to interpolate voidfraction to particle positions (normally off) +

    Examples: diff --git a/doc/voidFractionModel_dividedVoidFraction.txt b/doc/voidFractionModel_dividedVoidFraction.txt index f3b56050..4c59e90d 100644 --- a/doc/voidFractionModel_dividedVoidFraction.txt +++ b/doc/voidFractionModel_dividedVoidFraction.txt @@ -16,10 +16,12 @@ dividedProps \{ alphaMin number1; scaleUpVol number2; + interpolation; \} :pre {number1} = mininmum limit for voidfraction :ulb,l {number2} = diameter of the particle's representation is artificially increased according to {number2} * Vparticle, volume remains unaltered! :l +{interpolation} = flag to interpolate voidfraction to particle positions (normally off) :l :ule [Examples:] diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files index 4188c2c5..94a1da27 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,34 +14,56 @@ 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)/BeetstraDrag/multiphaseFlowBasic/multiphaseFlowBasic.C +$(forceModels)/BeetstraDrag/BeetstraDrag.C +$(forceModels)/LaEuScalarLiquid/LaEuScalarLiquid.C $(forceModels)/LaEuScalarTemp/LaEuScalarTemp.C +$(forceModels)/LaEuScalarDust/LaEuScalarDust.C $(forceModels)/virtualMassForce/virtualMassForce.C $(forceModels)/gradPForce/gradPForce.C +$(forceModels)/gradULiftForce/gradULiftForce.C $(forceModels)/viscForce/viscForce.C $(forceModels)/MeiLift/MeiLift.C +$(forceModels)/KochHillDragNLift/KochHillDragNLift.C +$(forceModels)/solidsPressureForce/solidsPressureForce.C +$(forceModels)/periodicPressure/periodicPressure.C +$(forceModels)/periodicPressureControl/periodicPressureControl.C +$(forceModels)/averageSlipVel/averageSlipVel.C + +$(forceModelsMS)/forceModelMS/forceModelMS.C +$(forceModelsMS)/forceModelMS/newForceModelMS.C +$(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 @@ -52,20 +75,22 @@ $(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 $(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 diff --git a/src/lagrangian/cfdemParticle/Make/options b/src/lagrangian/cfdemParticle/Make/options index 61f61a93..e24e4695 100644 --- a/src/lagrangian/cfdemParticle/Make/options +++ b/src/lagrangian/cfdemParticle/Make/options @@ -24,4 +24,4 @@ LIB_LIBS = \ -llagrangian \ -lmpi_cxx \ -L$(CFDEM_LIGGGHTS_SRC_DIR) \ - -l$(CFDEM_LIGGGHTS_LIB_NAME) \ + -l$(CFDEM_LIGGGHTS_LIB_NAME) diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C index cfd72e07..52f22f9f 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C @@ -372,34 +372,41 @@ bool Foam::cfdemCloud::evolve Info << "\n Coupling..." << endl; doCouple=true; + clockM().start(5,"defineRegion"); if(verbose_) Info << "- defineRegion()" << endl; regionM().defineRegion(); if(verbose_) Info << "defineRegion done." << endl; + clockM().stop("defineRegion"); // reset vol Fields + clockM().start(6,"resetVolFields"); if(verbose_) Info << "- resetVolFields()" << endl; regionM().resetVolFields(Us); if(verbose_) Info << "resetVolFields done." << endl; + clockM().stop("resetVolFields"); if(verbose_) Info << "- getDEMdata()" << endl; - clockM().start(4,"getDEMdata"); + clockM().start(7,"getDEMdata"); getDEMdata(); - clockM().stop(); + clockM().stop("getDEMdata"); if(verbose_) Info << "- getDEMdata done." << endl; // search cellID of particles - clockM().start(5,"findCell"); + clockM().start(8,"findCell"); if(verbose_) Info << "- findCell()" << endl; findCells(); if(verbose_) Info << "findCell done." << endl; clockM().stop("findCell"); // set void fraction field + clockM().start(9,"setvoidFraction"); if(verbose_) Info << "- setvoidFraction()" << endl; voidFractionM().setvoidFraction(regionM().inRegion(),voidfractions_,particleWeights_,particleVolumes_); if(verbose_) Info << "setvoidFraction done." << endl; + clockM().stop("setvoidFraction"); // set particles velocity field + clockM().start(10,"setVectorAverage"); if(verbose_) Info << "- setVectorAverage(Us,velocities_,weights_)" << endl; averagingM().setVectorAverage ( @@ -410,15 +417,18 @@ bool Foam::cfdemCloud::evolve regionM().inRegion() ); if(verbose_) Info << "setVectorAverage done." << endl; + clockM().stop("setVectorAverage"); // set particles forces + clockM().start(11,"setForce"); if(verbose_) Info << "- setForce(forces_)" << endl; setForces(); if(verbose_) Info << "setForce done." << endl; + clockM().stop("setForce"); // get next force field + clockM().start(12,"setParticleForceField"); if(verbose_) Info << "- setParticleForceField()" << endl; - averagingM().setVectorSum ( forceM(0).impParticleForces(), @@ -433,12 +443,12 @@ bool Foam::cfdemCloud::evolve particleWeights_, regionM().inRegion() ); - if(verbose_) Info << "- setParticleForceField done." << endl; + clockM().stop("setParticleForceField"); // write DEM data if(verbose_) Info << " -giveDEMdata()" << endl; - clockM().start(6,"giveDEMdata"); + clockM().start(13,"giveDEMdata"); giveDEMdata(); clockM().stop("giveDEMdata"); @@ -450,6 +460,7 @@ bool Foam::cfdemCloud::evolve }//end dataExchangeM().couple() Info << "\n timeStepFraction() = " << dataExchangeM().timeStepFraction() << endl; + clockM().start(14,"interpolateEulerFields"); // update voidFractionField alpha.internalField() = voidFractionM().voidFractionInterp(); alpha.correctBoundaryConditions(); @@ -457,12 +468,16 @@ bool Foam::cfdemCloud::evolve // update particle velocity Field Us.internalField() = averagingM().UsInterp(); Us.correctBoundaryConditions(); + clockM().stop("interpolateEulerFields"); if(verbose_){ #include "debugInfo.H" } + + clockM().start(15,"dumpDEMdata"); // do particle IO IOM().dumpDEMdata(); + clockM().stop("dumpDEMdata"); }//end ignore return doCouple; diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C index c4ef7b98..cf854805 100644 --- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C +++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.C @@ -141,7 +141,8 @@ void Foam::cfdemCloudIB::calcVelocityCorrection ( volScalarField& p, volVectorField& U, - volScalarField& phiIB + volScalarField& phiIB, + volScalarField& voidfraction ) { label cellI=0; @@ -174,7 +175,7 @@ void Foam::cfdemCloudIB::calcVelocityCorrection } // make field divergence free - solve(fvm::laplacian(phiIB) == fvc::div(U)); + solve(fvm::laplacian(phiIB) == fvc::div(U) + fvc::ddt(voidfraction)); U=U-fvc::grad(phiIB); U.correctBoundaryConditions(); diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H index 099f2fcd..46d4ad7f 100644 --- a/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H +++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudIB/cfdemCloudIB.H @@ -82,7 +82,7 @@ public: bool evolve(); - void calcVelocityCorrection(volScalarField&,volVectorField&,volScalarField&); // this could be moved to an IB mom couple model + void calcVelocityCorrection(volScalarField&,volVectorField&,volScalarField&,volScalarField&); // this could be moved to an IB mom couple model // Access vector angularVelocity(int); diff --git a/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C new file mode 100644 index 00000000..1c42284c --- /dev/null +++ b/src/lagrangian/cfdemParticle/derived/cfdemCloudMS/cfdemCloudMS.C @@ -0,0 +1,273 @@ +/*---------------------------------------------------------------------------*\ + 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 "cfdemCloudMS.H" +#include "voidFractionModel.H" +#include "forceModelMS.H" +#include "regionModel.H" +#include "locateModel.H" +#include "dataExchangeModel.H" + +//#include "mpi.h" // only for debug reason +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +cfdemCloudMS::cfdemCloudMS +( + const fvMesh& mesh +) +: + cfdemCloud(mesh), + positionsCM_(NULL), + velocitiesCM_(NULL), + cellIDsCM_(NULL), + bodies_(NULL), + nrigids_(NULL), + exCM_(NULL), + eyCM_(NULL), + ezCM_(NULL), + VclumpCM_(NULL), + SclumpCM_(NULL), + scalingCM_(NULL), + typeCM_(NULL), + Cclump_ex_(NULL), + Cclump_ey_(NULL), + impForcesCM_(NULL), + expForcesCM_(NULL), + DEMForcesCM_(NULL), + numberOfClumps_(-1), + numberOfClumpsChanged_(false), + forceModels_(couplingProperties_.lookup("forceModelsMS")) +{ + forceModel_ = new autoPtr[nrForceModels()]; + for (int i=0;i* forceModel_; + +// Private member functions + void getDEMdata(); + void giveDEMdata(); + bool reAllocArrays() const; + void setNumberOfParticles(int); + void findCells(); + void setForces(); + +public: + + // Constructors + + //- Construct from components + cfdemCloudMS + ( + const fvMesh& mesh + ); + + // Destructor + + virtual ~cfdemCloudMS(); + + + // Member Functions + // Access + + vector positionCM(int); + + vector velocityCM(int); + + label cellIDCM(int); + + label body(int); + + label nrigid(int); + + inline double **& positionsCM() const; + + inline double **& velocitiesCM() const; + + inline double **& impForcesCM() const; + + inline double **& expForcesCM() const; + + inline double **& DEMForcesCM() const; + + inline int numberOfClumps() const; + + inline bool numberOfClumpsChanged() const; + + const forceModel& forceM(int); + + int nrForceModels(); + + bool evolve(volScalarField&,volVectorField&,volVectorField&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "cfdemCloudMSI.H" + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/etc/bashrc b/src/lagrangian/cfdemParticle/etc/bashrc index c3924c69..5a808aeb 100755 --- a/src/lagrangian/cfdemParticle/etc/bashrc +++ b/src/lagrangian/cfdemParticle/etc/bashrc @@ -46,6 +46,19 @@ export CFDEM_LIB_NAME=lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION #- path to test harness export CFDEM_TEST_HARNESS_PATH=$CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION +#------------------------------------------------------------------------------ +#- settings for lpp postproc tool +#------------------------------------------------------------------------------ + +#- nr of procs for lpp tool +export CFDEM_LPP_NPROCS=1 + +#- nr of procs for lpp tool +export CFDEM_LPP_CHUNKSIZE=1 + +#- shortcut to run lpp +alias lpp='python -i $CFDEM_LPP_DIR/lpp.py --cpunum $CFDEM_LPP_NPROCS --chunksize $CFDEM_LPP_CHUNKSIZE' + #------------------------------------------------------------------------------ #- aliases for easy navigation (no changes necessary) #------------------------------------------------------------------------------ @@ -96,9 +109,6 @@ export -f cfdemLiggghts cfdemLiggghtsPar() { mpirun -np $2 $CFDEM_LIGGGHTS_SRC_DIR/lmp_$CFDEM_LIGGGHTS_MAKEFILE_NAME < $1; } export -f cfdemLiggghtsPar -#- shortcut to run lpp -alias lpp='python -i $CFDEM_LPP_DIR/lpp.py' - # check if the directory exists if [ -d "$CFDEM_PROJECT_USER_DIR" ]; then : diff --git a/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh b/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh index 4ad12e71..92bee98c 100755 --- a/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh +++ b/src/lagrangian/cfdemParticle/etc/cfdemSystemTest.sh @@ -25,6 +25,7 @@ checkDirComment "$CFDEM_LIGGGHTS_SRC_DIR" '$CFDEM_LIGGGHTS_SRC_DIR' "yes" checkDirComment "$CFDEM_PROJECT_DIR" '$CFDEM_PROJECT_DIR' "yes" checkDirComment "$CFDEM_PROJECT_USER_DIR" '$CFDEM_PROJECT_USER_DIR' "no" checkDirComment "$CFDEM_SRC_DIR" '$CFDEM_SRC_DIR' "yes" +checkDirComment "$CFDEM_LIGGGHTS_SRC_DIR" '$CFDEM_LIGGGHTS_SRC_DIR' "yes" checkDirComment "$CFDEM_LPP_DIR" '$CFDEM_LPP_DIR' "yes" checkDirComment "$CFDEM_PIZZA_DIR" '$CFDEM_PIZZA_DIR' "no" checkDirComment "$CFDEM_TEST_HARNESS_PATH" '$CFDEM_TEST_HARNESS_PATH' "no" diff --git a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling.sh b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling.sh index ce63ff43..30e6e775 100755 --- a/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling.sh +++ b/src/lagrangian/cfdemParticle/etc/compileCFDEMcoupling.sh @@ -26,8 +26,9 @@ logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir" logfileName="log_compileCFDEMcoupling_src" #alternative: logfileName="log_compileLIGGGHTS_$NOW" casePath="$CFDEM_SRC_DIR" headerText="$logfileName""-$NOW" +#doClean="$1" # "" | "noClean" #--------------------------------------------------------------------------------# -compileLib $logpath $logfileName $casePath $headerText +compileLib $logpath $logfileName $casePath $headerText #$doClean #================================================================================# # compile solvers @@ -42,7 +43,7 @@ do casePath="$CFDEM_SOLVER_DIR/$solverName" headerText="$logfileName""_$solverName""-$NOW" #--------------------------------------------------------------------------------# - compileSolver $logpath $logfileName $casePath $headerText + compileSolver $logpath $logfileName $casePath $headerText #$doClean done echo "Note: the list of solvers compiled might be incomplete." diff --git a/src/lagrangian/cfdemParticle/etc/cshrc b/src/lagrangian/cfdemParticle/etc/cshrc index a1eb980f..6af88645 100755 --- a/src/lagrangian/cfdemParticle/etc/cshrc +++ b/src/lagrangian/cfdemParticle/etc/cshrc @@ -46,6 +46,19 @@ setenv CFDEM_LIB_NAME lagrangianCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION #- path to test harness setenv CFDEM_TEST_HARNESS_PATH $CFDEM_PROJECT_USER_DIR/log/logFilesCFDEM-$CFDEM_VERSION-$WM_PROJECT_VERSION +#------------------------------------------------------------------------------ +#- settings for lpp postproc tool +#------------------------------------------------------------------------------ + +#- nr of procs for lpp tool +setenv CFDEM_LPP_NPROCS 4 + +#- nr of procs for lpp tool +setenv CFDEM_LPP_CHUNKSIZE 1 + +#- shortcut to run lpp +alias lpp 'python -i $CFDEM_LPP_DIR/lpp.py --cpunum $CFDEM_LPP_NPROCS --chunksize $CFDEM_LPP_CHUNKSIZE \!:1' + #------------------------------------------------------------------------------ #- aliases for easy navigation (no changes necessary) #------------------------------------------------------------------------------ diff --git a/src/lagrangian/cfdemParticle/etc/functions.sh b/src/lagrangian/cfdemParticle/etc/functions.sh index 1801478c..57df6e6b 100755 --- a/src/lagrangian/cfdemParticle/etc/functions.sh +++ b/src/lagrangian/cfdemParticle/etc/functions.sh @@ -18,6 +18,7 @@ compileLib() logfileName="$2" casePath="$3" headerText="$4" + #doClean="$5" #--------------------------------------------------------------------------------# #- clean up old log file @@ -36,8 +37,10 @@ compileLib() echo 2>&1 | tee -a $logpath/$logfileName #- wclean and wmake - rmdepall 2>&1 | tee -a $logpath/$logfileName - wclean 2>&1 | tee -a $logpath/$logfileName + #if [ $doClean != "noClean" ]; then + rmdepall 2>&1 | tee -a $logpath/$logfileName + wclean 2>&1 | tee -a $logpath/$logfileName + #fi wmake libso 2>&1 | tee -a $logpath/$logfileName #- keep terminal open @@ -56,6 +59,7 @@ compileSolver() logfileName="$2" casePath="$3" headerText="$4" + #doClean="$5" #--------------------------------------------------------------------------------# #- clean up old log file @@ -74,8 +78,10 @@ compileSolver() echo 2>&1 | tee -a $logpath/$logfileName #- wclean and wmake - rmdepall 2>&1 | tee -a $logpath/$logfileName - wclean 2>&1 | tee -a $logpath/$logfileName + #if [ $doClean != "noClean" ]; then + rmdepall 2>&1 | tee -a $logpath/$logfileName + wclean 2>&1 | tee -a $logpath/$logfileName + #fi wmake 2>&1 | tee -a $logpath/$logfileName #- keep terminal open @@ -118,6 +124,47 @@ compileLIGGGHTS() } #==================================# +#==================================# +#- function to compile a lammps lib + +compileLMPlib() +{ + #--------------------------------------------------------------------------------# + #- define variables + logpath="$1" + logfileName="$2" + headerText="$3" + makeFileName="$4" + libraryPath="$5" + #--------------------------------------------------------------------------------# + + #- clean up old log file + rm $logpath/$logfileName + + #- change path + cd $libraryPath + + #- header + echo 2>&1 | tee -a $logpath/$logfileName + echo "// $headerText //" 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + + #- write path + pwd 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + + #- clean up + echo "make clean" 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + make -f $makeFileName clean 2>&1 | tee -a $logpath/$logfileName + + #- compile + echo "make" 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + make -f $makeFileName 2>&1 | tee -a $logpath/$logfileName +} +#==================================# + #==================================# #- function to run a DEM case @@ -156,6 +203,50 @@ DEMrun() } #==================================# +#==================================# +#- function to run a DEM case in parallel + +parDEMrun() +{ + #--------------------------------------------------------------------------------# + #- define variables + logpath="$1" + logfileName="$2" + casePath="$3" + headerText="$4" + solverName="$5" + nrProcs="$6" + machineFileName="$7" + debugMode="$8" + #--------------------------------------------------------------------------------# + + #- clean up old log file + rm $logpath/$logfileName + + #- change path + cd $casePath/DEM + + #- header + echo 2>&1 | tee -a $logpath/$logfileName + echo "// $headerText //" 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + + #- write path + pwd 2>&1 | tee -a $logpath/$logfileName + echo 2>&1 | tee -a $logpath/$logfileName + + #- run applictaion + if [ $machineFileName == "none" ]; then + mpirun -np $nrProcs $debugMode $CFDEM_LIGGGHTS_SRC_DIR/$CFDEM_LIGGGHTS_LIB_NAME < $solverName 2>&1 | tee -a $logpath/$logfileName + else + mpirun -machinefile $machineFileName -np $nrProcs $debugMode $CFDEM_LIGGGHTS_SRC_DIR/$CFDEM_LIGGGHTS_LIB_NAME < $solverName 2>&1 | tee -a $logpath/$logfileName + fi + + #- keep terminal open (if started in new terminal) + #read +} +#==================================# + #==================================# #- function to run a CFD case diff --git a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C index a1da55fe..8081f3c1 100644 --- a/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C +++ b/src/lagrangian/cfdemParticle/subModels/dataExchangeModel/twoWayMPI/twoWayMPI.C @@ -267,7 +267,9 @@ bool Foam::twoWayMPI::couple() const setNumberOfParticles(newNpart); // re-allocate arrays of cloud + particleCloud_.clockM().start(4,"LIGGGHTS_reallocArrays"); particleCloud_.reAllocArrays(); + particleCloud_.clockM().stop("LIGGGHTS_reallocArrays"); } return coupleNow; diff --git a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C index 5f77c195..53b9004b 100644 --- a/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C +++ b/src/lagrangian/cfdemParticle/subModels/forceModel/KochHillDrag/KochHillDrag.C @@ -75,6 +75,8 @@ KochHillDrag::KochHillDrag if (propsDict_.found("verbose")) verbose_=true; if (propsDict_.found("treatExplicit")) treatExplicit_=true; if (propsDict_.found("interpolation")) interpolation_=true; + + // Note: dprim=ds/scale_ if (propsDict_.found("scale")) scale_=scalar(readScalar(propsDict_.lookup("scale"))); } @@ -126,7 +128,6 @@ void KochHillDrag::setForce { if(mask[index][0]) { - cellI = particleCloud_.cellIDs()[index][0]; drag = vector(0,0,0); @@ -137,6 +138,10 @@ void KochHillDrag::setForce position = particleCloud_.position(index); voidfraction = voidfractionInterpolator_.interpolate(position,cellI); Ufluid = UInterpolator_.interpolate(position,cellI); + //Ensure interpolated void fraction to be meaningful + // Info << " --> voidfraction: " << voidfraction << endl; + if(voidfraction>1.00) voidfraction = 1.00; + if(voidfraction<0.40) voidfraction = 0.40; }else { voidfraction = particleCloud_.voidfraction(index); @@ -162,8 +167,12 @@ void KochHillDrag::setForce scalar F0=0.; if(volumefraction < 0.4) { - F0 = (1+3*sqrt((volumefraction)/2)+135/64*volumefraction*log(volumefraction)+16.14*volumefraction)/ - (1+0.681*volumefraction-8.48*sqr(volumefraction)+8.16*volumefraction*volumefraction*volumefraction); + F0 = (1+3*sqrt((volumefraction)/2)+135/64*volumefraction*log(volumefraction) + +16.14*volumefraction + )/ + (1+0.681*volumefraction-8.48*sqr(volumefraction) + +8.16*volumefraction*volumefraction*volumefraction + ); } else { F0 = 10*volumefraction/(voidfraction*voidfraction*voidfraction); } @@ -171,12 +180,14 @@ void KochHillDrag::setForce // calc model coefficient F3 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/scale_*ds/scale_)* - (F0 + 0.5*F3*Rep); + //Calculate F in the formulation of van der Hoef et al. (JFM 528:233-254) + scalar F = voidfraction * (F0 + 0.5*F3*Rep); + + // calc drag model coefficient betaP + scalar betaP = 18.*nuf*rho/(ds/scale_*ds/scale_)*voidfraction*F; // calc particle's drag - drag = Vs*beta/volumefraction*Ur; + drag = Vs*betaP*Ur; if (modelType_=="B") drag /= voidfraction; diff --git a/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.C b/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.C new file mode 100644 index 00000000..42ff59dd --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.C @@ -0,0 +1,232 @@ +/*---------------------------------------------------------------------------*\ + 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 "DiFeliceDragMS.H" +#include "addToRunTimeSelectionTable.H" + +//#include "mpi.h" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(DiFeliceDragMS, 0); + +addToRunTimeSelectionTable +( + forceModelMS, + DiFeliceDragMS, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +DiFeliceDragMS::DiFeliceDragMS +( + const dictionary& dict, + cfdemCloudMS& sm +) +: + forceModelMS(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + verbose_(false), + velFieldName_(propsDict_.lookup("velFieldName")), + U_(sm.mesh().lookupObject (velFieldName_)), + densityFieldName_(propsDict_.lookup("densityFieldName")), + rho_(sm.mesh().lookupObject (densityFieldName_)), + voidfractionFieldName_(propsDict_.lookup("voidfractionFieldName")), + voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)), + interpolation_(false), + //sphereToClump_(readScalar(propsDict_.lookup("sphereToClump"))) + dH_(readScalar(propsDict_.lookup("hydraulicDiameter"))) +{ + if (propsDict_.found("verbose")) verbose_=true; + if (propsDict_.found("treatExplicit")) treatExplicit_=true; + if (propsDict_.found("interpolation")) + { + Info << "using interpolated value of U." << endl; + interpolation_=true; + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +DiFeliceDragMS::~DiFeliceDragMS() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void DiFeliceDragMS::setForce +( + double** const& mask, + double**& impForces, + double**& expForces, + double**& DEMForces +) const +{ + // get viscosity field + #ifdef comp + const volScalarField& nufField = cloudRefMS().turbulence().mu() / rho_; + #else + const volScalarField& nufField = cloudRefMS().turbulence().nu(); + #endif + + interpolationCellPoint UInterpolator(U_); + interpolationCellPoint voidfractionInterpolator(voidfraction_); + vector U(0,0,0); + vector position(0,0,0); + scalar voidfraction(1); + vector Us(0,0,0); + vector Ur(0,0,0); + scalar ds(0); + scalar nuf(0); + scalar rho(0); + scalar magUr(0); + scalar Rep(0); + scalar Cd(0); + + cloudRefMS().resetArray(cloudRefMS().expForcesCM(),cloudRefMS().numberOfClumps(),3); + cloudRefMS().resetArray(cloudRefMS().impForcesCM(),cloudRefMS().numberOfClumps(),3); + + for(int index = 0;index < cloudRefMS().numberOfClumps(); index++) + { + + //if(mask[index][0]) // would have to be transformed from body ID to particle ID + //{ + vector drag(0,0,0); + label cellI = cloudRefMS().cellIDCM(index); + + if (cellI > -1) // particle Found + { + if(interpolation_) + { + position = cloudRefMS().positionCM(index); + U = UInterpolator.interpolate(position,cellI); + voidfraction = voidfractionInterpolator.interpolate(position,cellI); + }else + { + U = U_[cellI]; + voidfraction = voidfraction_[cellI]; + } + + Us = cloudRefMS().velocityCM(index); + Ur = U-Us; + //ds = 2*cloudRefMS().radius(index)/sphereToClump_; // scale from particle diameter + ds = dH_; // use dict defined diameter + + nuf = nufField[cellI]; + rho = rho_[cellI]; + magUr = mag(Ur); + Rep = 0; + Cd = 0; + scalar phi(0); + scalar phiN(0); + + if (magUr > 0) + { + // calc particle Re Nr + Rep = ds*voidfraction*magUr/nuf; + + // calc fluid drag Coeff +// phi=1; //AsurfAequi/Asurf; +// phiN=1; //AcrosssecAequi/Acrosssec; + // paper uses different Re definition!? +// Cd=8/(Rep*sqrt(phiN))+16/(Rep*sqrt(phi))+3/(sqrt(Rep)*pow(phi,0.75))+0.42*pow(10,(-0.4*pow(log(phi),0.2)))/phiN; + + // calc fluid drag Coeff + Cd = sqr(0.63 + 4.8/sqrt(Rep)); + + // calc model coefficient Xi + scalar Xi = 3.7 - 0.65 * exp(-sqr(1.5-log10(Rep))/2); + + // calc particle's drag + drag = 0.125*Cd*rho*M_PI*ds*ds*pow(voidfraction,(2-Xi))*magUr*Ur; + + if (modelType_=="B") + drag /= voidfraction; + } + + if(verbose_ && index >=0 && index <10) + { + Info << "index = " << index << endl; + Info << "Us = " << Us << endl; + Info << "Ur = " << Ur << endl; + Info << "ds = " << ds << endl; + Info << "rho = " << rho << endl; + Info << "nuf = " << nuf << endl; + Info << "voidfraction = " << voidfraction << endl; + Info << "Rep = " << Rep << endl; + Info << "Cd = " << Cd << endl; + Info << "drag = " << drag << endl; + } + } + // set force on bodies + if(treatExplicit_) for(int j=0;j<3;j++) cloudRefMS().expForcesCM()[index][j] += drag[j]; + else for(int j=0;j<3;j++) cloudRefMS().impForcesCM()[index][j] += drag[j]; + //} + } + + // set force on particles + int nrigidC(-1); + label ind(-1); + for(int index = 0;index < cloudRefMS().numberOfParticles(); index++) + { + if (particleCloud_.cellIDs()[index][0] > -1) // particle Found + { + ind=cloudRefMS().body(index); + nrigidC=cloudRefMS().nrigid(ind); + + if (nrigidC <= 0) + { + Warning <<"A BUG occurred in DiFeliceDragMS::setForce!!! nrigidC = " << nrigidC <<", ind = " << ind <<", index=" << index <<"\n" << endl; + nrigidC = 1000; + } + if(treatExplicit_) for(int j=0;j<3;j++) expForces[index][j] += cloudRefMS().expForcesCM()[ind][j] / nrigidC; + else for(int j=0;j<3;j++) impForces[index][j] += cloudRefMS().impForcesCM()[ind][j] / nrigidC; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.H b/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.H new file mode 100644 index 00000000..06669379 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModelMS/DiFeliceDragMS/DiFeliceDragMS.H @@ -0,0 +1,121 @@ +/*---------------------------------------------------------------------------*\ + 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 + DiFeliceDragMS + +SourceFiles + DiFeliceDragMS.C + +\*---------------------------------------------------------------------------*/ + +#ifndef DiFeliceDragMS_H +#define DiFeliceDragMS_H + +#include "cfdemCloudMS.H" +#include "forceModelMS.H" +#include "interpolationCellPoint.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class DiFeliceDragMS Declaration +\*---------------------------------------------------------------------------*/ + +class DiFeliceDragMS +: + public forceModelMS +{ +private: + dictionary propsDict_; + + bool verbose_; + + word velFieldName_; + + const volVectorField& U_; + + word densityFieldName_; + + const volScalarField& rho_; + + word voidfractionFieldName_; + + const volScalarField& voidfraction_; + + bool interpolation_; // use interpolated U field values + + //scalar sphereToClump_; // ratio of sphere radius to clump radius + + scalar dH_; // hydraulic diameter + +public: + + //- Runtime type information + TypeName("DiFeliceDragMS"); + + + // Constructors + + //- Construct from components + DiFeliceDragMS + ( + const dictionary& dict, + cfdemCloudMS& sm + ); + + // Destructor + + ~DiFeliceDragMS(); + + + // Member Functions + void setForce + ( + double** const& mask, + double**&, + double**&, + double**& + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.C b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.C new file mode 100644 index 00000000..731a6640 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.C @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------*\ + 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 "forceModelMS.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(forceModelMS, 0); + +defineRunTimeSelectionTable(forceModelMS, dictionary); + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +forceModelMS::forceModelMS +( + const dictionary& dict, + cfdemCloudMS& sm +) +: + forceModel(dict,sm), + particleCloudMS_(sm) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +forceModelMS::~forceModelMS() +{} + +// * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // +cfdemCloudMS& forceModelMS::cloudRefMS() const +{ + return particleCloudMS_; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.H b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.H new file mode 100644 index 00000000..e5c2aed0 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/forceModelMS.H @@ -0,0 +1,124 @@ +/*---------------------------------------------------------------------------*\ + 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 + forceModelMS + +SourceFiles + forceModelMS.C + +\*---------------------------------------------------------------------------*/ + +#ifndef forceModelMS_H +#define forceModelMS_H + +#include "fvCFD.H" +#include "cfdemCloudMS.H" +#include "forceModel.H" +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +/*---------------------------------------------------------------------------*\ + Class forceModelMS Declaration +\*---------------------------------------------------------------------------*/ + +class forceModelMS +: + public forceModel +{ + +protected: + + cfdemCloudMS& particleCloudMS_; + + +public: + + //- Runtime type information + TypeName("forceModelMS"); + + // Declare runtime constructor selection table + + declareRunTimeSelectionTable + ( + autoPtr, + forceModelMS, + dictionary, + ( + const dictionary& dict, + cfdemCloudMS& sm + ), + (dict,sm) + ); + + + // Constructors + + //- Construct from components + forceModelMS + ( + const dictionary& dict, + cfdemCloudMS& sm + ); + + + // Destructor + + virtual ~forceModelMS(); + + + // Selector + + static autoPtr New + ( + const dictionary& dict, + cfdemCloudMS& sm, + word forceType + ); + + + // Member Functions + + + // Access + cfdemCloudMS& cloudRefMS() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/newForceModelMS.C b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/newForceModelMS.C new file mode 100644 index 00000000..aee7f803 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/forceModelMS/forceModelMS/newForceModelMS.C @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + 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 "forceModelMS.H" +#include "DiFeliceDrag.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +autoPtr forceModelMS::New +( + const dictionary& dict, + cfdemCloudMS& sm, + word forceType +) +{ + Info<< "Selecting forceModelMS " + << forceType << endl; + + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(forceType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalError + << "forceModelMS::New(const dictionary&, const spray&) : " + << endl + << " unknown forceModelType type " + << forceType + << ", constructor not in hash table" << endl << endl + << " Valid forceModelMS types are :" + << endl; + Info<< dictionaryConstructorTablePtr_->toc() + << abort(FatalError); + } + + return autoPtr(cstrIter()(dict,sm)); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C index f50b63f9..d6b2d2d7 100644 --- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C +++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.C @@ -69,12 +69,18 @@ dividedVoidFraction::dividedVoidFraction alphaMin_(readScalar(propsDict_.lookup("alphaMin"))), alphaLimited_(0), tooMuch_(0.0), - scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol"))) + scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol"))), + interpolation_(false) { maxCellsPerParticle_ = 29; if(scaleUpVol_ > 1.3 || scaleUpVol_ < 1){ FatalError<< "scaleUpVol shloud be > 1 and < 1.3 !!!" << abort(FatalError); } if(alphaMin_ > 1 || alphaMin_ < 0.01){ FatalError<< "alphaMin shloud be > 1 and < 0.01 !!!" << abort(FatalError); } + if (propsDict_.found("interpolation")){ + interpolation_=true; + Warning << "interpolation for dividedVoidFraction does not yet work correctly!" << endl; + Info << "Using interpolated voidfraction field - do not use this in combination with interpolation in drag model!"<< endl; + } } @@ -90,6 +96,12 @@ void dividedVoidFraction::setvoidFraction(double** const& mask,double**& voidfra { reAllocArrays(); + scalar pi = M_PI; + vector position(0,0,0); + label cellID=-1; + scalar radius(-1); + scalar cellVol(0); + for(int index=0; index< particleCloud_.numberOfParticles(); index++) { if(mask[index][0]) @@ -101,14 +113,12 @@ void dividedVoidFraction::setvoidFraction(double** const& mask,double**& voidfra } cellsPerParticle_[index][0]=1; - - scalar pi = M_PI; - vector position = particleCloud_.position(index); - label cellID = particleCloud_.cellIDs()[index][0]; - scalar radius = particleCloud_.radii()[index][0]; + position = particleCloud_.position(index); + cellID = particleCloud_.cellIDs()[index][0]; + radius = particleCloud_.radii()[index][0]; scalar volume = 4./3.*radius*radius*radius*3.1415; radius = radius*pow(scaleUpVol_,1/3); - scalar cellVol(0); + cellVol=0; //--variables for sub-search int nPoints = 29; @@ -195,20 +205,53 @@ void dividedVoidFraction::setvoidFraction(double** const& mask,double**& voidfra if(index == particleCloud_.numberOfParticles()-1) Info << "Total particle volume neglected: " << tooMuch_<< endl; }// end loop all particles - // bring voidfraction from Eulerian Field to particle array + // bring voidfraction from Eulerian Field to particle arra +// interpolationCellPoint voidfractionInterpolator_(voidfractionNext_); + scalar voidfractionAtPos(0); for(int index=0; index< particleCloud_.numberOfParticles(); index++) { - for(int subcell=0;subcell= 0) + label cellI = particleCloud_.cellIDs()[index][0]; + if(cellI >= 0) { - voidfractions[index][subcell] = voidfractionNext_[cellID]; + position = particleCloud_.position(index); + voidfractionAtPos=voidfractionInterpolator_.interpolate(position,cellI); + }else{ + voidfractionAtPos=-1; } - else + + for(int subcell=0;subcell= 0) + { + if(voidfractionAtPos > 0) + voidfractions[index][subcell] = voidfractionAtPos; + else + voidfractions[index][subcell] = voidfractionNext_[cellID]; + } + else + { + voidfractions[index][subcell] = -1.; + } + } + } + else*/ + { + for(int subcell=0;subcell= 0) + { + voidfractions[index][subcell] = voidfractionNext_[cellID]; + } + else + { + voidfractions[index][subcell] = -1.; + } } } } diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H index 7f4c6ccd..8e793adc 100644 --- a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H +++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFraction/dividedVoidFraction.H @@ -40,6 +40,7 @@ SourceFiles #define dividedVoidFraction_H #include "voidFractionModel.H" +#include "interpolationCellPoint.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -66,6 +67,8 @@ private: const scalar scaleUpVol_; //NP scaling radius, keeping volume of particle + bool interpolation_; + public: //- Runtime type information diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.C b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.C new file mode 100644 index 00000000..deb62e94 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.C @@ -0,0 +1,223 @@ +/*---------------------------------------------------------------------------*\ + 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 "dividedVoidFractionMS.H" +#include "addToRunTimeSelectionTable.H" +#include "locateModel.H" +#include "regionModel.H" +#include "dataExchangeModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(dividedVoidFractionMS, 0); + +addToRunTimeSelectionTable +( + voidFractionModel, + dividedVoidFractionMS, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +dividedVoidFractionMS::dividedVoidFractionMS +( + const dictionary& dict, + cfdemCloud& sm +) +: + voidFractionModel(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + alphaMin_(readScalar(propsDict_.lookup("alphaMin"))), + alphaLimited_(0), + tooMuch_(0.0), + scaleUpVol_(readScalar(propsDict_.lookup("scaleUpVol"))), + clumpVol_(readScalar(propsDict_.lookup("clumpVol"))), + nrigid_(readScalar(propsDict_.lookup("nrigid"))) +{ + maxCellsPerParticle_ = 29; + + if(scaleUpVol_ > 1.3 || scaleUpVol_ < 1){ FatalError<< "scaleUpVol shloud be > 1 and < 1.3 !!!" << abort(FatalError); } + if(alphaMin_ > 1 || alphaMin_ < 0.01){ FatalError<< "alphaMin shloud be > 1 and < 0.01 !!!" << abort(FatalError); } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +dividedVoidFractionMS::~dividedVoidFractionMS() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void dividedVoidFractionMS::setvoidFraction(double** const& mask,double**& voidfractions,double**& particleWeights,double**& particleVolumes) const +{ + reAllocArrays(); + + for(int index=0; index< particleCloud_.numberOfParticles(); index++) + { + if(mask[index][0]) + { + // reset + for(int subcell=0;subcell= 0) // particel centre is in domain + { + cellVol = particleCloud_.mesh().V()[cellID]; + + //NP for 2 different radii + for(scalar r = 0.623926*radius;r < radius;r+=0.293976*radius) + { + //NP try 8 subpoint derived from spherical coordinates + for (scalar zeta=pi/4.;zeta<(2.*pi);zeta+=(pi/2.)) + { + for (scalar theta=(pi/4.);theta29 || cellsSet<0) + { + Info << "ERROR cellsSet =" << cellsSet << endl; + } + + //NP set source for particle center; source 1/nPts+weight of all subpoints that have not been found + scalar centreWeight = 1./nPoints*(nPoints-cellsSet); + + // update voidfraction for each particle read + scalar newAlpha = voidfractionNext_[cellID]- volume*centreWeight/cellVol; + if(newAlpha > alphaMin_) voidfractionNext_[cellID] = newAlpha; + else + { + voidfractionNext_[cellID] = alphaMin_; + tooMuch_ += (alphaMin_-newAlpha) * cellVol; + } + + // store cellweight for each particle --- this should be done for subpoints as well!! + particleWeights[index][0] += centreWeight; + + // store particleVolume for each particle + particleVolumes[index][0] += volume*centreWeight; + + /*//OUTPUT + if (index==0) + { + Info << "centre cellID = " << cellID << endl; + Info << "cellsPerParticle_=" << cellsPerParticle_[index][0] << endl; + + for(int i=0;i= 0) + { + voidfractions[index][subcell] = voidfractionNext_[cellID]; + } + else + { + voidfractions[index][subcell] = -1.; + } + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.H b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.H new file mode 100644 index 00000000..a83be07a --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/voidFractionModel/dividedVoidFractionMS/dividedVoidFractionMS.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + 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 + dividedVoidFractionMS + +SourceFiles + dividedVoidFractionMS.C + +\*---------------------------------------------------------------------------*/ + +#ifndef dividedVoidFractionMS_H +#define dividedVoidFractionMS_H + +#include "voidFractionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class noDrag Declaration +\*---------------------------------------------------------------------------*/ + +class dividedVoidFractionMS +: + public voidFractionModel +{ + +private: + dictionary propsDict_; + + const scalar alphaMin_; //NP min value of voidFraction + + mutable bool alphaLimited_; + + mutable scalar tooMuch_; //NP particle volume which is lost due to voidFraction limitation + + const scalar scaleUpVol_; //NP scaling radius, keeping volume of particle + + const scalar clumpVol_; + + const int nrigid_; + +public: + + //- Runtime type information + TypeName("dividedMS"); + + + // Constructors + + //- Construct from components + dividedVoidFractionMS + ( + const dictionary& dict, + cfdemCloud& sm + ); + + // Destructor + + ~dividedVoidFractionMS(); + + + // Member Functions + void setvoidFraction(double** const& ,double**&, double**&, double**&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/parCFDDEMrun.sh index 81a03c31..fa4eab31 100644 --- a/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverIB/twoSpheresGlowinskiMPI/parCFDDEMrun.sh @@ -21,7 +21,7 @@ logfileName="log_$headerText" solverName="cfdemSolverIB" nrProcs="8" machineFileName="none" # yourMachinefileName | none -debugMode="off" # on | off +debugMode="off" # on | off | prof testHarnessPath="$CFDEM_TEST_HARNESS_PATH" runOctave="true" postproc="false" @@ -66,6 +66,8 @@ cp ../../$logfileName $testHarnessPath #- clean up case echo "deleting data at: $casePath" rm -r $casePath/CFD/0.* +rm -r $casePath/CFD/callgrind.* +rm -r $casePath/CFD/*.out rm -r $casePath/CFD/VTK rm -r $casePath/CFD/couplingFiles/* rm -r $casePath/CFD/processor* diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties index 57cb0155..e3c815b4 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/constant/couplingProperties @@ -49,8 +49,8 @@ clockModel standardClock;//off; forceModels ( //GidaspowDrag - DiFeliceDrag - //KochHillDrag + //DiFeliceDrag + KochHillDrag gradPForce viscForce //Archimedes @@ -132,6 +132,7 @@ KochHillDragProps { velFieldName "U"; densityFieldName "rho"; + voidfractionFieldName "voidfraction"; } virtualMassForceProps diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict index c0b2fc33..84219dac 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/CFD/system/controlDict @@ -29,7 +29,7 @@ deltaT 0.001; writeControl adjustableRunTime; -writeInterval 0.001;//0.01; +writeInterval 0.01; purgeWrite 0; diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh index 6dd01b35..fd0426d6 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI/parCFDDEMrun.sh @@ -21,7 +21,7 @@ logfileName="log_$headerText" solverName="cfdemSolverPiso" nrProcs="8" machineFileName="none" # yourMachinefileName | none -debugMode="off" # on | off +debugMode="off" # on | off | prof testHarnessPath="$CFDEM_TEST_HARNESS_PATH" runOctave="true" postproc="false" @@ -83,6 +83,8 @@ fi #- clean up case echo "deleting data at: $casePath :\n" rm -r $casePath/CFD/0.* +rm -r $casePath/CFD/callgrind.* +rm -r $casePath/CFD/*.out rm -r $casePath/CFD/log.* rm -r $casePath/CFD/octave/octave-core rm -r $casePath/CFD/VTK diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh index ddc6c75f..90d8d867 100755 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/Allrun.sh @@ -98,6 +98,8 @@ fi #- clean up case rm -rf $casePath/CFD/0.* +rm -r $casePath/CFD/callgrind.* +rm -r $casePath/CFD/*.out rm -r $casePath/CFD/clockData rm -rf $casePath/CFD/processor* rm -r $casePath/CFD/VTK diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy index 5e4682fa..cf58c55e 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/DEM/post/dummy @@ -23,3 +23,5 @@ dummyfile dummyfile dummyfile dummyfile +dummyfile +dummyfile diff --git a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh index 792491ee..5443c574 100644 --- a/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverPiso/ErgunTestMPI_restart/parCFDDEMrun.sh @@ -21,7 +21,7 @@ logfileName="log_$headerText" solverName="cfdemSolverPiso" nrProcs="2" machineFileName="none" # yourMachinefileName | none -debugMode="off" # on | off +debugMode="off" # on | off | prof testHarnessPath="$CFDEM_TEST_HARNESS_PATH" #--------------------------------------------------------------------------------# diff --git a/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh index 6782a588..961943e6 100644 --- a/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverPiso/settlingTestMPI/parCFDDEMrun.sh @@ -21,7 +21,7 @@ logfileName="log_$headerText" solverName="cfdemSolverPiso" nrProcs="2" machineFileName="none" # yourMachinefileName | none -debugMode="off" # on | off +debugMode="off" # on | off | prof testHarnessPath="$CFDEM_TEST_HARNESS_PATH" runOctave="true" postproc="false" @@ -78,6 +78,8 @@ fi #- clean up case echo "deleting data at: $casePath :\n" rm -r $casePath/CFD/0.* +rm -r $casePath/CFD/callgrind.* +rm -r $casePath/CFD/*.out rm -r $casePath/CFD/log.* rm -r $casePath/CFD/octave/octave-core rm -r $casePath/CFD/VTK diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/Allrun.sh b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/Allrun.sh new file mode 100755 index 00000000..c326910d --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/Allrun.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +#===================================================================# +# allrun script for testcase as part of test routine +# run settlingTest +# Christoph Goniva - Sept. 2010 +#===================================================================# + +#- define variables +casePath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" +pizzaPath="$CFDEM_PIZZA_DIR" +postproc="false" +nrPostProcProcessors=2 + +# check if mesh was built +if [ -d "$casePath/CFD/constant/polyMesh/boundary" ]; then + echo "mesh was built before - using old mesh" +else + echo "mesh needs to be built" + cd $casePath/CFD + blockMesh +fi + +#- run parallel CFD-DEM in new terminal +gnome-terminal --title='cfdemSolverPisoMS ErgunTestMPI CFD' -e "bash $casePath/parCFDDEMrun.sh" + +if [ $postproc == "true" ] + then + + #- keep terminal open (if started in new terminal) + echo "simulation finisehd? ...press enter to proceed" + read + + #- get VTK data from liggghts dump file + cd $casePath/DEM + python $pizzaPath/pizza.py -f pizzaScriptRestart + + #- get VTK data from CFD sim + cd $casePath/CFD + #foamToVTK #- serial run of foamToVTK + source $CFDEM_SRC_DIR/etc/functions.sh #- include functions + pseudoParallelRun "foamToVTK" $nrPostProcProcessors #- pseudo parallel run of foamToVTK + + #- start paraview + paraview + + #- keep terminal open (if started in new terminal) + echo "...press enter to clean up case" + echo "press Ctr+C to keep data" + read + + #- clean up case + echo "deleting data at: $casePath" + rm -r $casePath/CFD/0.* + rm -r $casePath/CFD/VTK + rm -r $casePath/CFD/couplingFiles/* + rm -r $casePath/DEM/post/* + rm -r $casePath/DEM/log.* + rm -r $casePath/log_* + echo "done" + +fi diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Ksl b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Ksl new file mode 100644 index 00000000..f44ecabe --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Ksl @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Ksl; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + wall + { + type zeroGradient; + //type fixedValue; + //value uniform 0; + } + inlet + { + type zeroGradient; + } + outlet + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/U b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/U new file mode 100644 index 00000000..959b298e --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/U @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0.1); + +boundaryField +{ + + wall + { + //type fixedValue; + //value uniform (0 0 0); + type slip; + } + + inlet + { + /*type flowRateInletVelocity; + flowRate 0.001; + value uniform (0 0 0);*/ + +/* type fixedValue; + value uniform (0 0 0.1);*/ + + //type zeroGradient; + + /*// superficial velocity BC + type groovyBC; + variables "Usup=vector(0,0,2);alpha=voidfraction;tEnd=0.1;"; // should be used with zeroGradient voidfraction + valueExpression "((time() < tEnd) ? Usup/alpha*(time()/tEnd) : Usup/alpha)"; + value uniform (0 0 0);*/ + + /*// 2.0.x, ext + type timeVaryingUniformFixedValue; + fileName "steps_0p1s"; + outOfBounds clamp; + value uniform (0 0 0);*/ + + // 2.1.x + type uniformFixedValue; + uniformValue table + ( + (0.000 (0 0 0.)) + (0.099 (0 0 2)) + (0.100 (0 0 2)) + ); + } + outlet + { + /*type fluxCorrectedVelocity; //inletOutlet; + value uniform (0 0 0); + inletValue uniform (0 0 0);*/ + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Us b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Us new file mode 100644 index 00000000..1af9a050 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/Us @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object Us; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + wall + { + type zeroGradient; + //type fixedValue; + //value uniform (1 0 0); + } + inlet + { + type zeroGradient; + //type fixedValue; + //value uniform (1 0 0);; + } + outlet + { + type zeroGradient; + //type fixedValue; + //value uniform (1 0 0); + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/epsilon b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/epsilon new file mode 100644 index 00000000..37ffab5e --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/epsilon @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.003; + +boundaryField +{ + wall + { + type epsilonWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; + value uniform 0.003; + } + outlet + { + type inletOutlet; + inletValue uniform 0.003; + value uniform 0.003; + } + inlet + { + /*type turbulentMixingLengthDissipationRateInlet; + mixingLength 0.005; + value uniform 0.003;*/ + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/k b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/k new file mode 100644 index 00000000..bbf04afb --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/k @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.001; + +boundaryField +{ + wall + { + type kqRWallFunction; + value uniform 0.001; + } + outlet + { + type inletOutlet; + inletValue uniform 0.001; + value uniform 0.001; + } + inlet + { + /*type turbulentIntensityKineticEnergyInlet; + intensity 0.05; + value uniform 0.001;*/ + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/nut b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/nut new file mode 100644 index 00000000..dcd36c89 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/nut @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + wall + { + type nutWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/p b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/p new file mode 100644 index 00000000..d111e6be --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/p @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 1.0e5; + +boundaryField +{ + + wall + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + //type fixedValue; + //value uniform 100000; + } + outlet + { + //type zeroGradient; + type fixedValue; + value uniform 100000; + } +} + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/rho b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/rho new file mode 100644 index 00000000..bc2244f6 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/rho @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rho; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 5; + +boundaryField +{ + + wall + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + outlet + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/voidfraction b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/voidfraction new file mode 100644 index 00000000..3fdf6da6 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/0/voidfraction @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object voidfraction; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 1; + +boundaryField +{ + wall + { + type zeroGradient; + } + outlet + { + type fixedValue; + value uniform 1; + } + inlet + { + type fixedValue; + value uniform 1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/RASProperties b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/RASProperties new file mode 100644 index 00000000..daec1829 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/RASProperties @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel laminar; + +turbulence off; + +printCoeffs on; + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/couplingProperties b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/couplingProperties new file mode 100644 index 00000000..62a18661 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/couplingProperties @@ -0,0 +1,177 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object couplingProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +//===========================================================================// +// sub-models & settings +verbose; + +modelType B; // A or B + +couplingInterval 100; + +voidFractionModel dividedMS; + +locateModel engine; + +meshMotionModel noMeshMotion; + +regionModel allRegion; + +IOModel basicIO; + +dataExchangeModel twoWayMPI;//twoWayFiles;//oneWayVTK;// + +averagingModel dense;//dilute;// + +clockModel off; + +forceModels +( + off + Archimedes + volWeightedAverage +); + +forceModelsMS +( + DiFeliceDragMS +); + +momCoupleModels +( + implicitCouple +); + +turbulenceModelType RASProperties;//LESProperties;// + +//===========================================================================// +// sub-model properties + +implicitCoupleProps +{ + velFieldName "U"; + granVelFieldName "Us"; + voidfractionFieldName "voidfraction"; +} + +ArchimedesProps +{ + densityFieldName "rho"; + gravityFieldName "g"; +} +gradPForceProps +{ + pFieldName "p"; + densityFieldName "rho"; + velocityFieldName "U"; + interpolation; +} + +viscForceProps +{ + velocityFieldName "U"; + densityFieldName "rho"; + interpolation; +} +volWeightedAverageProps +{ + scalarFieldNames + ( + voidfraction + ); + vectorFieldNames + ( + ); + upperThreshold 0.999; + lowerThreshold 0; + verbose; +} +totalMomentumExchangeProps +{ + implicitMomExFieldName "Ksl"; + explicitMomExFieldName "none"; + fluidVelFieldName "U"; + granVelFieldName "Us"; + densityFieldName "rho"; +} + +DiFeliceDragMSProps +{ + velFieldName "U"; + densityFieldName "rho"; + voidfractionFieldName "voidfraction"; + hydraulicDiameter 0.002; + verbose; +} + +oneWayVTKProps +{ + couplingFilename "vtk_out%4.4d.vtk"; + maxNumberOfParticles 30000; +} + +twoWayFilesProps +{ + maxNumberOfParticles 10100; +} + +centreProps +{ + alphaMin 0.10; +} + +dividedMSProps +{ + alphaMin 0.05; + scaleUpVol 1.0; + clumpVol 1.8433e-9; // this is particles volume, not clump! + nrigid 10; +} + +bigParticleProps +{ + alphaMin 0.05; + scaleUpVol 50.0; + maxCellsPerParticle 1000; +} + +GaussProps +{ + maxCellsPerParticle 5000; + alphaMin 0.05; + scaleUpVol 10.0; +} + +engineProps +{ + treeSearch true; +} + +twoWayMPIProps +{ + maxNumberOfParticles 101000; + liggghtsPath "../DEM/in.liggghts_init"; +} +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/g b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/g new file mode 100644 index 00000000..51944e7a --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/g @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value ( 0 0 0 ); + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/liggghtsCommands b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/liggghtsCommands new file mode 100644 index 00000000..7431b210 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/liggghtsCommands @@ -0,0 +1,31 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object liggghtsCommands; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +liggghtsCommandModels +( + runLiggghts +); + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/polyMesh/blockMeshDict b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/polyMesh/blockMeshDict new file mode 100644 index 00000000..812a89c1 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/polyMesh/blockMeshDict @@ -0,0 +1,154 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.0 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ +version 2.0; +format ascii; +class dictionary; +object blockMeshDict; +} +// ************************************ + + + + + + + meshGenApp blockMesh; + convertToMeters 1; + + //64 mm column diameter + //15 cm length + + + + //Width of middle square section + + + + + //how many cells in the square section + //how many cells from square section to perimeter + // how many cells from top to bottom + + vertices + ( + ( 0.0069 0.0069 0.0 ) // Vertex fiveoclocksqb = 0 + (-0.0069 0.0069 0.0 ) // Vertex sevenoclocksqb = 1 + (-0.0069 -0.0069 0.0 ) // Vertex elevenoclocksqb = 2 + ( 0.0069 -0.0069 0.0 ) // Vertex oneoclocksqb = 3 + + ( 0.00975807358913172 0.00975807357161699 0.0 ) // Vertex fiveoclockcb = 4 + (-0.00975807358913172 0.00975807357161699 0.0) // Vertex sevenoclockcb = 5 + (-0.00975807358913172 -0.00975807357161699 0.0) // Vertex elevenoclockcb = 6 + ( 0.00975807358913172 -0.00975807357161699 0.0) // Vertex oneoclockcb = 7 + + ( 0.0069 0.0069 0.0553) // Vertex fiveoclocksqt = 8 + (-0.0069 0.0069 0.0553) // Vertex sevenoclocksqt = 9 + (-0.0069 -0.0069 0.0553) // Vertex elevenoclocksqt = 10 + ( 0.0069 -0.0069 0.0553) // Vertex oneoclocksqt = 11 + + ( 0.00975807358913172 0.00975807357161699 0.0553) // Vertex fiveoclockct = 12 + (-0.00975807358913172 0.00975807357161699 0.0553) // Vertex sevenoclockct = 13 + (-0.00975807358913172 -0.00975807357161699 0.0553) // Vertex elevenoclockct = 14 + ( 0.00975807358913172 -0.00975807357161699 0.0553) // Vertex oneoclockct = 15 + ); + + blocks + ( + //square block + hex ( + 2 3 0 1 + 10 11 8 9 + ) + (4 4 12) + simpleGrading (1 1 1) + + //slice1 + hex ( + 1 0 4 5 + 9 8 12 13 + ) + (4 2 12) + simpleGrading (1 1 1) + + //slice2 + hex ( + 6 2 1 5 + 14 10 9 13 + ) + ( 2 4 12) +simpleGrading (1 1 1) + + //slice3 + hex ( + 6 7 3 2 + 14 15 11 10 + ) + (4 2 12) +simpleGrading (1 1 1) + + //slice4 + hex ( + 3 7 4 0 + 11 15 12 8 + ) + (2 4 12) +simpleGrading (1 1 1) + + ); + + + //create the quarter circles + edges + ( + arc 4 5 (0.0 0.0138 0.0 ) + arc 5 6 (-0.0138 0.0 0.0) + arc 6 7 (0.0 -0.0138 0.0 ) + arc 7 4 (0.0138 0.0 0.0) + + arc 12 13 (0.0 0.0138 0.0553 ) + arc 13 14 (-0.0138 0.0 0.0553 ) + arc 14 15 (0.0 -0.0138 0.0553 ) + arc 15 12 (0.0138 0.0 0.0553 ) + + ); + + patches + ( + patch inlet + ( + (0 3 2 1) + (0 4 7 3) + (4 0 1 5) + (1 2 6 5) + (3 7 6 2) + ) + + patch outlet + ( + (8 11 10 9) + (8 12 15 11) + (12 8 9 13) + (9 10 14 13) + (11 15 14 10) + ) + + wall wall + ( + (5 4 12 13) + (5 13 14 6) + (6 14 15 7) + (7 15 12 4) + ) + +); + +mergePatchPairs +( +); diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/transportProperties b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/transportProperties new file mode 100644 index 00000000..6eb551de --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/transportProperties @@ -0,0 +1,37 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +nu nu [ 0 2 -1 0 0 0 0 ] 1.5e-05; + +CrossPowerLawCoeffs +{ + nu0 nu0 [ 0 2 -1 0 0 0 0 ] 1e-06; + nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06; + m m [ 0 0 1 0 0 0 0 ] 1; + n n [ 0 0 0 0 0 0 0 ] 1; +} + +BirdCarreauCoeffs +{ + nu0 nu0 [ 0 2 -1 0 0 0 0 ] 1e-06; + nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06; + k k [ 0 0 1 0 0 0 0 ] 0; + n n [ 0 0 0 0 0 0 0 ] 1; +} +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/turbulenceProperties b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/turbulenceProperties new file mode 100644 index 00000000..f6753662 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/clumpProperties.m b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/clumpProperties.m new file mode 100644 index 00000000..8d74c1cb --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/clumpProperties.m @@ -0,0 +1,29 @@ +clc; +close all; +clear; + +%========================================================================== +%m-file to calculate the properties of the imported clump +%========================================================================== + +fprintf('\n sphere10.multisphere:\n') + +rhoC=440 +scaling=1e-3 +nP=10 +rP=0.3530494 +VP=nP*(2*rP*scaling)^3*pi/6 +dH=2*scaling +VC=dH^3*pi/6 +rhoP=rhoC*VC/VP + +% -0.3301476 -3.4959164E-008 0.5563700 0.3530494 +% 0.5421265 -3.2849375E-008 0.3530494 0.3530494 +% 0.0822932 0.5358442 0.3530495 0.3530494 +% 0.0822932 -0.5358442 0.3530494 0.3530494 +% -0.5126716 -0.3946047 -2.9544078E-009 0.3530494 +% -0.5126715 0.3946047 -1.7513663E-008 0.3530494 +% 0.0822932 0.5358442 -0.3530494 0.3530494 +% 0.0822932 -0.5358442 -0.3530495 0.3530494 +% 0.5421264 -3.9639417E-008 -0.3530495 0.3530494 +% -0.3301475 -1.5302462E-008 -0.5563700 0.3530494 diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/loaddata.m b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/loaddata.m new file mode 100644 index 00000000..9897140c --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/loaddata.m @@ -0,0 +1,69 @@ +function [data,colname]=loaddata(filename,columns,headerlines) + +% data = loaddata(filename,columns,headerlines) +% data = loaddata(filename,0,headerlines): automatc detection of +% columns by word count in first headerline or first data line +% (if headerline==0), separated by blanks or tabs +% columns=-1: write colum assignment code lines +% works only if headerline>0 and colnames separated by +% not more than 1 blank! +% columns=-2: columns separated by 2 blanks (fluent/scheme auswertung-instat.scm) +% [data, colname] = loaddata(filename,0,headerlines) +% colname = cell string array of column names from headerline + +fprintf(1,'loading %s ... ', filename); +f=fopen(filename,'r'); +if f==-1 + fprintf(1,'\n*** error: could not open "%s" ...\n', filename); + data=[]; +else + for i=1:headerlines + if i==1 s=fgets(f); else fgets(f); end + end + if headerlines==0 + s=fgets(f); frewind(f); + end + if columns<=0 % & headerlines>=1 + fprintf(1,'\n'); + fprintf(1,' %s',s); + pos = findstr(sprintf('\t'),s); % trennzeichenpositionen in zeile suchen + if length(pos)>0 + endpos=length(s); + %if isspace(s(endpos-1)) endpos=endpos-1; end + pos = [0 pos(1,:) endpos]; % anfangs- und endposition hinzufügen + elseif columns==-2 % spalteneinträge durch 2 blanks getrennt (fluent/scheme) + pos=[0]; + for i=1:length(s)-1 + if isspace(s(i)) & isspace(s(i+1)) + pos(end+1)=i+1; + end + end + pos(end+1)=length(s); + else % spalteneinträge durch blanks getrennt + %pos = findstr(' ',s); % trennzeichenpositionen in zeile suchen + pos=[]; + word=0; + for i=1:length(s) + if isspace(s(i)) + word=0; + elseif ~word + word=1; + pos(end+1)=i-1; + end + end + pos(end+1)=length(s); + end + if headerlines>=1 + for i=1:length(pos)-1 % alle spalten + colname{i}=s(pos(i)+1:pos(i+1)-1); + if columns==-1 fprintf(' = data(strmatch(''%s'',colname),:); %% column %d\n', colname{i},i); end + if columns==-2 fprintf('%% column %d: %s\n', i, colname{i}); end + end + end + columns = length(pos)-1; + fprintf(1,' total: %d columns ',columns); + end + data=fscanf(f,'%f',[columns,inf]); + fclose(f); + fprintf(1,'done.\n'); +end diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/totalPressureDrop.m b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/totalPressureDrop.m new file mode 100644 index 00000000..e03adcd6 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/octave/totalPressureDrop.m @@ -0,0 +1,104 @@ +close all; +clear; +clc; + +%====================================% +% simulation data 1 +%====================================% +%path = '../probes/0/p'; +path = '../probes/0/p'; +columns=22; +headerlines=4; +data = loaddata(path,columns,headerlines); +data=transpose(data); +[x,y]=size(data) +dp_sim = (data(:,2)-data(:,y))/10000; +t_sim = data(:,1); +%fprintf('final pressureDrop of sim = %f Pa\n',dp_sim(length(dp_sim)) ) + +%====================================% +% analytical calculation +%====================================% + +%=================== +% Ergun Equation +%=================== +fprintf('\ncalc Ergun eqn:\n') + +% calc density of clump +% Note: for drag calc the clump diameter is used-> reduced density of clump +dp = 0.002 % clump diameter +ds_=0.001*0.3530494*2 % diameter of sphere +ns_=10; % nr of spheres per clump +rhos_=1000; % density of spheres +VclumpToVbody=ns_*(ds_/dp)^3 % ratio of the tot volume of the spheres to the volume of the body with d_ +rhoP = VclumpToVbody*rhos_ % density of clump + +nP_=2500; % nr of clumps +phip = 1 % sphericity +Ustart = 0. +Uend = 2 +timeStepSize = 0.001; % time interval of pressure data +Tstart = 0; +Tend = t_sim(length(t_sim)); +deltaU=(Uend-Ustart)/((Tend-Tstart)/timeStepSize); +U = Ustart+deltaU:deltaU:Uend; % velocity over time +L = 0.0212; % length of bed filled with particles +D = 0.0276; % diameter of bed + +% calc epsilon from bedheight +%Vpartiles=dp^3*pi/6*nP_; % tot clump vol +Vpartiles=ds_^3*pi/6*nP_*ns_; % tot particle vol +Vfilled=D^2*pi/4*L; %volume filled with particles +epsilon = 1-Vpartiles/Vfilled % void fraction + +%epsilon = 0.656968 + +Ua = U / epsilon; % physical velocity +rhoG = 5 % density in kg/m3 +nuG = 1.5*10^-5 % kinemat Visk in m2/s +muG = nuG*rhoG % dynam visc in Pa s + +dpErgun= L * ( + 150*((1-epsilon)^2/epsilon^3)*((muG.*U)/(phip*dp)^2) + +1.75*((1-epsilon)/epsilon^3)*((rhoG.*U.^2)/(phip*dp)) + )/10000/rhoG; + +fprintf('NOTE: this pressure is divided by density (according to CFD solver)\n') +fprintf('so the result does not depend on pressure\n') + +%fprintf('final pressure drop (Ergun eqn)= %f Pa\n',dpErgun) + +%================================== +% min fluidization velocity in m/s +%================================== +%rhoP = 2000 % particle density in kg/m3 +g = 9.81 % gravity m/s2 +Umf = dp^2*(rhoP-rhoG)*g/(150*muG)*(epsilon^3*phip^2)/(1-epsilon) +ReMF = Umf*dp*rhoG/muG % must be <20 !!! +%Umf = sqrt(phip*dp^2/1.75*(rhoP-rhoG)/rhoG*g*epsilon^3) % Re>1000 + +dpUmf= L * ( + 150*((1-epsilon)^2/epsilon^3)*((muG.*Umf)/(phip*dp)^2) + +1.75*((1-epsilon)/epsilon^3)*((rhoG.*Umf.^2)/(phip*dp)) + )/10000/rhoG; + +%====================================% +% plot data +%====================================% + +fig=figure(1) +plot(U,dpErgun,U,dp_sim,[Umf,Uend],dpUmf*ones(1,2)) +title("Ergun pressure drop vs. simulation") +a=strcat("analytical (Ergun), Umf=",num2str(Umf),", dpUmf=",num2str(dpUmf)); +legend(a,"simulation") +xlabel("velocity in [m/s]") +ylabel("pressure drop [bar]") +axis([0,Uend,0,dpErgun(length(dpErgun))]) + +%print('cfdemSolverPiso_settlingTest.eps','-deps2') +print -color "cfdemSolverPisoMS_ErgunTestMPI.eps" +replot; +SimName="ErgunTestMPI_sphereOfSpheres" +print(fig,strcat("figure_",SimName,".png")); + diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/steps_0p1s b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/steps_0p1s new file mode 100644 index 00000000..cc5e250c --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/steps_0p1s @@ -0,0 +1,28 @@ +( + (0.000 (0 0 0.002)) + (0.099 (0 0 0.30)) + (0.100 (0 0 0.30)) +) + +/*( + (0.000 (0 0 0.002)) + (0.010 (0 0 0.002)) + (0.011 (0 0 0.004)) + (0.020 (0 0 0.004)) + (0.021 (0 0 0.006)) + (0.030 (0 0 0.006)) + (0.031 (0 0 0.008)) + (0.040 (0 0 0.008)) + (0.041 (0 0 0.010)) + (0.050 (0 0 0.010)) + (0.051 (0 0 0.012)) + (0.060 (0 0 0.012)) + (0.061 (0 0 0.014)) + (0.070 (0 0 0.014)) + (0.071 (0 0 0.016)) + (0.080 (0 0 0.016)) + (0.081 (0 0 0.018)) + (0.090 (0 0 0.018)) + (0.091 (0 0 0.020)) + (0.100 (0 0 0.020)) +)*/ diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict new file mode 100644 index 00000000..32dc4714 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict @@ -0,0 +1,117 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application pisoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.1; + +deltaT 0.001; + +writeControl adjustableRunTime; + +writeInterval 0.001; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +maxCo 0.1; + +//libs ("libOpenFOAM.so" "libgroovyBC.so"); + +functions +( + + probes + { + type probes; + // Where to load it from + functionObjectLibs ( "libsampling.so" ); + // Name of the directory for probe data + name probes; + probeLocations + ( + (0 0 0.0001) + (0 0 0.0026) + (0 0 0.0051) + (0 0 0.0076) + (0 0 0.0101) + (0 0 0.0126) + (0 0 0.0151) + (0 0 0.0176) + (0 0 0.0201) + (0 0 0.0226) + (0 0 0.0251) + (0 0 0.0276) + (0 0 0.0301) + (0 0 0.0326) + (0 0 0.0351) + (0 0 0.0375) + (0 0 0.0401) + (0 0 0.0426) + (0 0 0.0451) + (0 0 0.0476) + (0 0 0.0529) + ); + + // Fields to be probed + fields ( p U voidfraction volAverage_voidfraction); + + // Write at same frequency as fields + outputControl timeStep;//outputTime; + outputInterval 1; + } + + /*pressureDrop + { + type patchAverage; + functionObjectLibs + ( + "libsimpleFunctionObjects.so" + ); + verbose true; + patches + ( + inlet + outlet + ); + fields + ( + p + ); + factor 1; + }*/ +); +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict.foam b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict.foam new file mode 100644 index 00000000..d63da257 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/controlDict.foam @@ -0,0 +1,117 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application pisoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.1;//0.01; + +deltaT 0.001; + +writeControl adjustableRunTime; + +writeInterval 0.001;//0.05; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +maxCo 0.1; + +libs ("libOpenFOAM.so" "libgroovyBC.so"); + +functions +( + + probes + { + type probes; + // Where to load it from + functionObjectLibs ( "libsampling.so" ); + // Name of the directory for probe data + name probes; + probeLocations + ( + (0 0 0.0001) + (0 0 0.0026) + (0 0 0.0051) + (0 0 0.0076) + (0 0 0.0101) + (0 0 0.0126) + (0 0 0.0151) + (0 0 0.0176) + (0 0 0.0201) + (0 0 0.0226) + (0 0 0.0251) + (0 0 0.0276) + (0 0 0.0301) + (0 0 0.0326) + (0 0 0.0351) + (0 0 0.0375) + (0 0 0.0401) + (0 0 0.0426) + (0 0 0.0451) + (0 0 0.0476) + (0 0 0.0529) + ); + + // Fields to be probed + fields ( p U voidfraction volAverage_voidfraction); + + // Write at same frequency as fields + outputControl timeStep;//outputTime; + outputInterval 1; + } + + /*pressureDrop + { + type patchAverage; + functionObjectLibs + ( + "libsimpleFunctionObjects.so" + ); + verbose true; + patches + ( + inlet + outlet + ); + fields + ( + p + ); + factor 1; + }*/ +); +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/decomposeParDict b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/decomposeParDict new file mode 100644 index 00000000..21bbeef3 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 2; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +//method scotch; +// method hierarchical; + method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (1 1 2); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/funkySetFieldsDict b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/funkySetFieldsDict new file mode 100755 index 00000000..39414dd5 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/funkySetFieldsDict @@ -0,0 +1,33 @@ +FoamFile +{ + version 2.0; + format ascii; + + root "/.automount/werner/Werner/bgschaid/bgschaid-foamStuff/DepositionTests"; + case "neutralTest"; + instance "system"; + local ""; + + class dictionary; + object funkySetFieldsDict; +} + +expressions +( + init + { + field voidfraction; + expression "1"; + valuePatches 2(inlet outlet); // set value 1 at those patches + } + setGamma + { + field voidfraction; + expression "0.43"; + //condition "pow(pow(pos().x-0.2,2) + pow(pos().y-0,2)+ pow(pos().z-0,2),0.5) < 0.04"; + condition "pos().z < 0.01467 && pos().z > 0.0"; + keepPatches true; + //valuePatches 1(inlet); // set value 1 at those patches + } + +); diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSchemes b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSchemes new file mode 100644 index 00000000..fac85f68 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSchemes @@ -0,0 +1,76 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; + grad(U) Gauss linear; +} + +divSchemes +{ + default Gauss linear; + div(phi,U) Gauss limitedLinearV 1; + div(phi,k) Gauss limitedLinear 1; + div(phi,epsilon) Gauss limitedLinear 1; + div(phi,R) Gauss limitedLinear 1; + div(R) Gauss linear; + div(phi,nuTilda) Gauss limitedLinear 1; + div((viscousTerm*dev(grad(U).T()))) Gauss linear; + div((nu*dev(grad(U).T()))) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; + laplacian(viscousTerm,U) Gauss linear corrected; + laplacian(nu,U) Gauss linear corrected; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian((voidfraction2|A(U)),p) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; + laplacian(DnuTildaEff,nuTilda) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; + interpolate(U) linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSolution b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSolution new file mode 100644 index 00000000..955f5b14 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/CFD/system/fvSolution @@ -0,0 +1,86 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0.1; + } + + pFinal + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + nuTilda + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } +} + +PISO +{ + nCorrectors 4; + nNonOrthogonalCorrectors 1; + pRefCell 0; + pRefValue 0; +} + + +// ************************************************************************* // diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/in.liggghts_init b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/in.liggghts_init new file mode 100755 index 00000000..5c802383 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/in.liggghts_init @@ -0,0 +1,74 @@ +echo both + +# Pour granular particles into chute container + +atom_style hybrid granular molecular +atom_modify map array sort 0 0 +communicate single vel yes + +boundary m m m +newton off + +units si + +region reg block -0.015 0.015 -0.015 0.015 -0.001 0.0554 units box +create_box 1 reg + +neighbor 0.001 bin +neigh_modify delay 0 + +mass 1 1.0 + +#Material properties required for new pair styles + +fix m1 all property/global youngsModulus peratomtype 5.e6 +fix m2 all property/global poissonsRatio peratomtype 0.45 +fix m3 all property/global coefficientRestitution peratomtypepair 1 0.3 +fix m4 all property/global coefficientFriction peratomtypepair 1 0.5 + +#pair style +pair_style gran/hertz/history 1 0 #Hertzian without cohesion +pair_coeff * * + +#timestep, gravity +timestep 0.00001 +fix gravi all gravity 9.81 vector 0.0 0.0 -1.0 + +#walls +fix zwalls all wall/gran/hertz/history 1 0 zplane 0.0 0.0553 1 +fix cylwalls all wall/gran/hertz/history 1 0 zcylinder 0.01385 1 + + +#============================ +#distributions for insertion +fix pts1 all particletemplate/multisphere 1 atom_type 1 density constant 1000 nspheres 10 ntry 1000000 spheres file ../DEM/sphere10.multisphere scale 0.001 type 1 +fix pdd1 all particledistribution/discrete 1. 1 pts1 1.0 + +#region and insertion +group rigid_group region reg +region bc cylinder z 0.0 0.0 0.012 0.001 0.05 units box + +fix ins rigid_group insert/pack seed 100001 distributiontemplate pdd1 vel constant 0. 0. 0. insert_every once overlapcheck yes region bc ntry_mc 10000 particles_in_region 2500 # volumefraction_region 0.01 # + +#integrator for multisphere rigid bodies +fix integr rigid_group rigid/multisphere +#============================ + +#cfd coupling +fix cfd all couple/cfd couple_every 100000 mpi +fix cfd2 all couple/cfd/force/multisphere + + +#screen output +compute 1 all erotate/sphere +thermo_style custom step atoms ke c_1 vol +thermo 1000 +thermo_modify lost ignore norm no +compute_modify thermo_temp dynamic yes + +#insert the first particles so that dump is not empty +run 1 +dump dmp all custom 5000 ../DEM/post/dump.liggghts_init id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius + +run 80000 upto +#write_restart liggghts.restart diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/liggghts.restart b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/liggghts.restart new file mode 100644 index 00000000..e85ec540 Binary files /dev/null and b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/liggghts.restart differ diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/post/dummy b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/post/dummy new file mode 100644 index 00000000..bd18d4f7 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/post/dummy @@ -0,0 +1,4 @@ +dummyfile +dummyfile +dummyfile +dummyfile diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/sphere10.multisphere b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/sphere10.multisphere new file mode 100755 index 00000000..2c805a72 --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/DEM/sphere10.multisphere @@ -0,0 +1,10 @@ +-0.3301476 -3.4959164E-008 0.5563700 0.3530494 +0.5421265 -3.2849375E-008 0.3530494 0.3530494 +0.0822932 0.5358442 0.3530495 0.3530494 +0.0822932 -0.5358442 0.3530494 0.3530494 +-0.5126716 -0.3946047 -2.9544078E-009 0.3530494 +-0.5126715 0.3946047 -1.7513663E-008 0.3530494 +0.0822932 0.5358442 -0.3530494 0.3530494 +0.0822932 -0.5358442 -0.3530495 0.3530494 +0.5421264 -3.9639417E-008 -0.3530495 0.3530494 +-0.3301475 -1.5302462E-008 -0.5563700 0.3530494 \ No newline at end of file diff --git a/tutorials/cfdemSolverPisoMS/ErgunTestMPI/parCFDDEMrun.sh b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/parCFDDEMrun.sh new file mode 100644 index 00000000..6333f23b --- /dev/null +++ b/tutorials/cfdemSolverPisoMS/ErgunTestMPI/parCFDDEMrun.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +#===================================================================# +# allrun script for testcase as part of test routine +# run settlingTest CFD part +# Christoph Goniva - Feb. 2011 +#===================================================================# + +#- source CFDEM env vars +. ~/.bashrc + +#- include functions +source $CFDEM_SRC_DIR/etc/functions.sh + +#--------------------------------------------------------------------------------# +#- define variables +casePath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" +logpath=$casePath +headerText="run_parallel_cfdemSolverPisoMS_ErgunTestMPI_CFDDEM" +logfileName="log_$headerText" +solverName="cfdemSolverPisoMS" +nrProcs="2" +machineFileName="none" # yourMachinefileName | none +debugMode="off" # on | off +testHarnessPath="$CFDEM_TEST_HARNESS_PATH" + +cleanUp="true" +#--------------------------------------------------------------------------------# + +#- call function to run a parallel CFD-DEM case +parCFDDEMrun $logpath $logfileName $casePath $headerText $solverName $nrProcs $machineFileName $debugMode + +#------------------------------# +# octave + +#- change path +cd octave + +#- rmove old graph +rm cfdemSolverPisoMS_ErgunTestMPI.eps + +#- run octave +octave totalPressureDrop.m + +#- show plot +evince cfdemSolverPisoMS_ErgunTestMPI.eps +#------------------------------# + +#- copy log file to test harness +cp ../../$logfileName $testHarnessPath +cp cfdemSolverPisoMS_ErgunTestMPI.eps $testHarnessPath + +if [ $cleanUp == "true" ] + then + #- clean up case + cd .. + rm -rf 0.* + rm -rf processor* + rm -rf particles + rm -rf patchAverage_pressureDrop + rm -rf probes + rm log.liggghts + rm ../DEM/post/dump.* +fi + + +#- preserve post directory +echo "dummyfile" >> $casePath/DEM/post/dummy diff --git a/tutorials/cfdemSolverPisoScalar/packedBedTemp/parCFDDEMrun.sh b/tutorials/cfdemSolverPisoScalar/packedBedTemp/parCFDDEMrun.sh index 0b0af6d4..63ada777 100644 --- a/tutorials/cfdemSolverPisoScalar/packedBedTemp/parCFDDEMrun.sh +++ b/tutorials/cfdemSolverPisoScalar/packedBedTemp/parCFDDEMrun.sh @@ -21,7 +21,7 @@ logfileName="log_$headerText" solverName="cfdemSolverPisoScalar" nrProcs="2" machineFileName="none" # yourMachinefileName | none -debugMode="off" # on | off +debugMode="off" # on | off | prof testHarnessPath="$CFDEM_TEST_HARNESS_PATH" runOctave="true" postproc="false" @@ -85,6 +85,8 @@ fi #- clean up case echo "deleting data at: $casePath : ???\n" rm -r $casePath/CFD/0.* +rm -r $casePath/CFD/callgrind.* +rm -r $casePath/CFD/*.out rm -r $casePath/CFD/octave/*.eps rm -r $casePath/CFD/octave/octave-core rm -r $casePath/CFD/VTK