1021 Commits
2.6.4 ... 19.02

Author SHA1 Message Date
8625396bea Merge pull request #80 from ParticulateFlow/release
Release 19.02
2019-02-22 15:57:02 +01:00
ec095a490c bump version number to 19.02 2019-02-21 15:05:54 +01:00
c441753ff9 clean up whitespaces
no tabs, no extra whitespaces!
2019-02-21 14:53:31 +01:00
c8eb21bedc clean up whitespaces
no tabs, no extra whitespaces!
2019-02-21 14:45:03 +01:00
77b8d587a1 clean up whitespaces 2019-02-21 14:32:14 +01:00
750dc74ce9 [DOC] fix minor typos 2019-02-21 14:26:56 +01:00
dfac4df0a9 [DOC] clean up 2019-02-21 14:06:04 +01:00
209fc5c78f clean up whitespaces 2019-02-21 14:05:36 +01:00
cd3bc3874a [DOC] update chemistry model documentation 2019-02-21 13:39:23 +01:00
edd77aa751 clean up whitespaces 2019-02-21 13:02:35 +01:00
73015cffde [DOC] add minimal description of solvers
provisional documentation, needs to be extended
2019-02-21 10:57:21 +01:00
3275a87e05 [DOC] fix formatting in documentation of one2one data exchange model 2019-02-21 10:55:09 +01:00
809519f937 [DOC] add link to one2one data exchange model documentation 2019-02-21 10:54:21 +01:00
581fae739b Fix application name and description of cfdemSolverRhoSimple 2019-02-21 10:40:52 +01:00
696d73b10b clean up whitespaces 2019-02-20 15:02:49 +01:00
5665e75005 clean up whitespaces 2019-02-20 14:47:42 +01:00
5bb94b9695 use spaces not tabs 2019-02-20 14:19:42 +01:00
8ec17ce965 Merge branch 'develop' of https://github.com/ParticulateFlow/CFDEMcoupling into develop 2019-01-03 14:14:10 +01:00
ebdc5253e6 HeattransferGunn with coarse graining for several types and parcels. 2019-01-03 14:13:27 +01:00
fa1c3dcae9 Merge pull request #76 from ParticulateFlow/feature/o2o
One-to-one communication (few-to-few?)
2018-12-05 07:55:37 +01:00
c3534493b6 Adapt o2o to untangling of getCG() by @danielque 2018-12-04 15:08:34 +01:00
46e58f4e7d Merge pull request #78 from ParticulateFlow/bugfix/implicit_heattransfer
Bugfix/implicit heattransfer: Respect thermodynamic reference temperature (resolves #77)
2018-12-04 10:02:19 +01:00
930b2a4158 bugfix: correct explicit part of heat source term for different thermodynamic temperature when using "sophisticated" thermodynamic models like JANAF. 2018-11-26 17:18:12 +01:00
51d10d7d0f remove superfluous method getNumberOfParticles. 2018-11-16 16:04:42 +01:00
e589f3876a remove dependency on duplicated library_cfd_coupling_one2one.* 2018-11-16 15:50:48 +01:00
fb63f86bec improve constness of setters in dataExchangeModel. 2018-11-16 15:21:58 +01:00
487f3f9614 pass label by ref rather than copying it. 2018-11-16 15:18:14 +01:00
4959ffc79f include suggestions by @danielque. 2018-11-16 15:15:31 +01:00
a68a15272b improve constness. 2018-11-16 10:25:34 +01:00
717b95ab0b add warning description to docu for O2O. 2018-11-16 10:21:39 +01:00
191d1b84a0 make merge from develop compile. 2018-11-16 10:21:01 +01:00
5e444722c9 extend documentation. cellIdComm is not mentioned on purpose, since no case with performance gains from it has been found so far. 2018-11-13 10:55:28 +01:00
27708dd9b7 Merge branch 'develop' into feature/o2o 2018-11-13 10:47:50 +01:00
15c9edf336 Merge pull request #75 from ParticulateFlow/feature/OF4x-multiphase
Feature/of4x multiphase
2018-10-23 09:59:41 +02:00
bd17bf0e49 Update the copyright info in surfaceTensionForce files 2018-10-16 09:19:54 +02:00
b5d5b56824 [DOC] fix up and add links to new documentation 2018-10-15 10:33:19 +02:00
f2f3230de0 clean up shell script files 2018-10-15 10:02:06 +02:00
1c44a3a09f remove bottleneck in locating particles by using appropriate container for cell ids. 2018-10-13 13:35:35 +02:00
62fe28535c add prerun scripts for testharness runs of cfdemSolverMultiphase 2018-10-12 16:36:09 +02:00
908de24636 add prerun script to damBreak case
prerun script for testharness
2018-10-12 14:39:33 +02:00
3858931124 Updated documentation 2018-10-12 10:32:06 +02:00
4acd0de949 Added documentation for surfaceTensionForce force model 2018-10-12 10:31:46 +02:00
eaa11b4781 Added option for arbitrary field name in surfaceTensionForce 2018-10-12 10:31:05 +02:00
50af8d451f Remove html files from doc 2018-10-11 16:11:40 +02:00
e2b1a2fa9f Untrack files that should not be tracked 2018-10-11 15:57:45 +02:00
0058f1af36 Update temporalSmoothing documentation 2018-10-11 15:06:49 +02:00
1202f655d7 Removed init of small_scale_hearth_drainage tutorial case 2018-10-11 15:06:23 +02:00
542261bbf8 Change notation in temporal smoothing model 2018-10-11 13:37:29 +02:00
dfd665c15f Update tutorial cases 2018-10-11 13:36:10 +02:00
146e783415 Merge 'develop' into feature/OF4x-multiphase 2018-10-11 13:10:33 +02:00
64512450a7 Merge pull request #74 from ParticulateFlow/master
Update from master
2018-10-09 13:31:39 +02:00
382c720b5c Merge pull request #73 from ParticulateFlow/release
CFDEMcoupling-PFM 18.10 release
2018-10-09 12:57:56 +02:00
288ddfaf86 make propsDict of noDrag model optional again
since all entries this propsDict are optional, it is only convenient to
make it optional
2018-10-09 09:59:35 +02:00
e4c26a3004 retain original behaviour 2018-10-09 09:49:11 +02:00
74ed993b1a simplify expression 2018-10-09 09:48:25 +02:00
3e1c09930b fix bug introduced in commit 2230f51421
wrong default value
2018-10-08 18:59:16 +02:00
ba9f28a5ff fix order of construction / destruction
dataExchangeModel is needed by the destructor of several models, thus
should be destroyed last and in further consequence must be constructed
first
2018-10-08 15:40:35 +02:00
4c785b952d [DOC] update chemistryModels docs
dictionary syntax for chemistry models has changed
2018-10-05 16:50:08 +02:00
844234b5e9 fix test cases for cfdemSolverRhoPimple
dictionary syntax for chemistry models has changed
2018-10-05 16:49:28 +02:00
b8ac908ea6 [DOC] fix link 2018-10-05 09:38:15 +02:00
af087b29b5 bump version number to 18.10 2018-10-04 12:29:52 +02:00
73d13652c6 [DOC] update manual 2018-10-04 11:00:05 +02:00
5cb044a62e remove obsolete heatTransferGunnImplicit class
use heatTransferGunn instead which allows for an explicit or an implicit
formulation
closes #71
2018-10-04 10:47:42 +02:00
ffe9014b66 Merge pull request #70 from ParticulateFlow/feature/constness
fix up const/mutable usage
2018-10-04 10:40:40 +02:00
91c22cd1e1 fix up some mutables in momCoupleModels 2018-10-04 10:42:10 +02:00
c7fd297b68 make couple() method of dataExchangeModel non-const
method modifies at least one member that can be observed from outside
(i.e. couplingStep_)
2018-10-03 13:13:22 +02:00
6e59b6bb54 Merge pull request #69 from ParticulateFlow/feature/adaptive_resolution_universe
unravel cfdemCloud and models
2018-10-03 13:00:47 +02:00
7a32a19679 clean up function specifiers in cfdemCloudEnergy 2018-10-03 12:27:24 +02:00
3538d29f53 Merge branch 'develop' into feature/adaptive_resolution_universe
# Resolved Conflicts:
#	src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C
2018-10-01 18:04:42 +02:00
2c46466a06 remove mutables from voidFractionModel classes 2018-10-01 17:56:04 +02:00
583e1ff3bb surviving without mutable
use proper function signatures
provide getters for (const and) non-const references
2018-10-01 16:49:07 +02:00
f7716a67a6 make some getter methods of liggghtsCommandModel const 2018-10-01 16:03:06 +02:00
304b7328c4 fix up some more mutable stuff in cfdemCloud and cfdemCloudIB 2018-10-01 16:01:50 +02:00
be2a4ad87b make some getter methods in cfdemCloud const 2018-10-01 15:34:21 +02:00
e25a25f294 remove unneeded mutable keywords in cfdemCloud 2018-10-01 15:33:32 +02:00
2c028ed37b remove unneeded conversion to bool 2018-10-01 15:31:13 +02:00
3ad0fa0ac7 make parameters of IOModel methods const
parameters do not get changed in any of these methods
2018-10-01 15:30:43 +02:00
33c81073a2 Merge pull request #67 from ParticulateFlow/feature/aLittleConstBeauty
Feature/a little const beauty
2018-10-01 14:03:04 +02:00
fea4ee326e mark some more members explicitly read-only 2018-10-01 13:54:44 +02:00
72351fb578 clean up some more const properties 2018-10-01 13:47:08 +02:00
6bcd54f549 Merge branch 'feature/aLittleConstBeauty' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/aLittleConstBeauty 2018-10-01 13:32:05 +02:00
779dca2401 clean up reading of settings some more 2018-10-01 13:31:32 +02:00
b88d8521bf Merge branch 'feature/aLittleConstBeauty' of github.com:ParticulateFlow/CFDEMcoupling into feature/aLittleConstBeauty 2018-10-01 11:13:08 +02:00
059f2356dd noDrag: fix the creation of the properties dictionary 2018-10-01 11:12:53 +02:00
6bcf8e76e4 fix bug introduced with merge of PR #66
forAll was intended replace the original for loop
2018-09-26 15:28:06 +02:00
982dcc07a7 Merge pull request #68 from ParticulateFlow/feature/SphinxDocumentation
Sphinx documentation for CFDEMcoupling
2018-09-26 14:18:54 +02:00
502e115581 Merge pull request #66 from ParticulateFlow/feature/PtrLists
Use PtrList for submodels instead of arrays of autoPtrs.
Resolves #61
2018-09-24 14:32:20 +02:00
1ab91a4dd3 Merge branch 'develop' into feature/aLittleConstBeauty 2018-09-24 13:48:07 +02:00
5d6714d5d2 addressed comments from review 2018-09-24 11:07:42 +02:00
2230f51421 changed back the handling of verbose flag 2018-09-24 10:20:30 +02:00
5c21513b64 Addressed comments brought up in review
Changed back the way the propsDict is read/constructed
Changed back the behaviour of verbose
2018-09-24 09:57:42 +02:00
4bfe6777f9 remove outdated pdf manual 2018-09-21 14:21:08 +02:00
00e260d6ca remove github access info that is not applicable to our version 2018-09-21 14:20:33 +02:00
573c51e52f use OF PtrList for submodels and iterators in energyCloud. 2018-09-13 15:58:08 +02:00
88e3bcf2dd use PtrLists for subModels. includes some cleanup for commandModel acessors. 2018-09-13 15:57:42 +02:00
9dcd9351c5 make fvOptions work in cfdemSolverPiso. 2018-08-07 09:08:42 +02:00
1b4a41a319 make fvOptions work in cfdemSolverPiso. 2018-08-06 15:56:11 +02:00
0aa659196b [DOC] fix conf.py start file settings for other doc formats 2018-07-27 16:33:43 +02:00
c89e0b792b [DOC] add installation instructions 2018-07-27 15:38:04 +02:00
cdd416ec0a [DOC] fix spelling 2018-07-26 13:04:30 +02:00
d9abd3df0b [DOC] update model options 2018-07-23 15:20:44 +02:00
84d05d7d3b fix error message 2018-07-23 12:26:43 +02:00
5259324950 fix error message 2018-07-23 12:25:15 +02:00
c47584d6de fix error message 2018-07-23 12:14:52 +02:00
9cf940661a fix comment 2018-07-23 10:25:00 +02:00
dbabe3285d [DOC] update force model options 2018-07-23 09:03:40 +02:00
5a50153347 [DOC] fix up special characters 2018-07-19 09:18:41 +02:00
d314aa0ae1 [DOC] clean up conf.py file 2018-07-18 15:48:28 +02:00
77419c4ee0 [DOC] fix up formatting of references 2018-07-18 15:44:02 +02:00
395bc08b6c [DOC] add sphinx setup and theme files 2018-07-18 14:58:15 +02:00
fa1369278b [DOC] add missing documentation 2018-07-18 14:56:31 +02:00
b1f35372e6 [DOC] add to description 2018-07-18 14:55:24 +02:00
ccbc2b9cba [DOC] add some missing documentation (partly from PUBLIC) 2018-07-18 14:54:12 +02:00
4c7fd88b28 [DOC] minor rewording 2018-07-18 14:52:28 +02:00
29278314c2 [DOC] formatting / fix links 2018-07-18 14:51:29 +02:00
df685b67ef [DOC] fix typos 2018-07-18 14:48:51 +02:00
466897a06c [DOC] add external links 2018-07-18 14:47:07 +02:00
8899c495d4 [DOC] fix bullet lists 2018-07-18 14:45:36 +02:00
c31a692499 [DOC] formatting: limit line length 2018-07-18 14:43:45 +02:00
b61db3f4a9 [DOC] homogenize formatting 2018-07-18 14:33:41 +02:00
61d7a88793 [DOC]fix up formatting for (IMPORTANT) NOTEs 2018-07-18 14:25:12 +02:00
b56390e3de [DOC] fix up typos and formatting of model syntax/example 2018-07-18 14:17:27 +02:00
26d30e122d [DOC] add cross-linking 2018-07-18 14:08:26 +02:00
2def3b2f97 [DOC] fix up model names 2018-07-18 13:50:07 +02:00
51d1af906a [DOC] fix top links for old html docs format 2018-07-18 13:43:11 +02:00
b6784afb1a [DOC] fix up OpenFOAM disclaimer 2018-07-18 13:36:48 +02:00
6b7c6eaa3b [DOC] fix actual model names 2018-07-18 13:25:19 +02:00
50eb58eb4e [DOC] fix links 2018-07-17 14:03:00 +02:00
eb32f2741d [DOC] remove superfluous lines 2018-07-17 14:01:20 +02:00
cf0f5b3e17 [DOC] split up main page 2018-07-17 13:59:11 +02:00
20b3102d1f [DOC] update gitignore file 2018-07-17 09:23:56 +02:00
a1e1fa8f16 [DOC] delete old html files 2018-07-17 09:23:22 +02:00
ea9ccabeee Merge pull request #60 from ParticulateFlow/feature/cfdemSolverRhoPimple
Feature/cfdem solver rho pimple
2018-07-10 13:16:32 +02:00
1a8b4aa5c2 clean up whitespaces
remove extra spaces, convert tabs to spaces
2018-07-05 16:25:40 +02:00
b5b04c0fb0 Fix functions according to comments
- fixed noChemistry model accordingly
- changed description in some files
2018-07-05 15:33:58 +02:00
963f1aa4bf Fix double& 2018-07-05 13:33:03 +02:00
a8e5493837 Fix according to comments 2018-07-05 13:29:35 +02:00
901e7fcede Rewrite in proper Englisch
- remove duplication
2018-07-05 13:29:20 +02:00
ace28b1674 Don't limit the molarfraction 2018-07-05 13:23:06 +02:00
3c33ef17bc Correct pressure relation 2018-07-05 13:22:14 +02:00
5ee4efcb24 remove linux64GccDPInt32Opt
from pull request comments
2018-07-05 13:19:14 +02:00
8d0661d83e Merge branch 'develop' into feature/o2o 2018-07-02 10:44:40 +02:00
9adbbac0eb Delete old tutorial cases
- New cases will be added shortly
2018-06-29 15:44:34 +02:00
7914dffb52 Documentation for chemistryModels 2018-06-29 15:14:19 +02:00
7f11ed31dd Merge branch 'develop' into feature/cfdemSolverRhoPimple 2018-06-29 14:42:50 +02:00
e67eb542b1 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2018-06-29 14:39:20 +02:00
bbb46df35c Check total negative molar fractions 2018-06-29 14:34:10 +02:00
24d05d696c Fix comments 2018-06-29 13:06:35 +02:00
972ee8eeb0 Check max and min h(e) 2018-06-29 12:32:42 +02:00
3f98108ab8 correctly destroy prev_cell_ids as suggested by @danielque. 2018-06-20 09:53:33 +02:00
a7bd3191a2 fix memory leak. 2018-06-19 15:39:42 +02:00
070fcbe15c communicate particle cell ids to liggghts and back.
this allows for use of a turboEngine-like locate section
with an initial guess for the cell.

to use this, add a
`fix             prev_cell_ids all property/atom prev_cell_ids scalar no
no no -1`
to the liggghts run script and set `useCellIdComm yes` in the
twoWayOne2OneProps section of the couplingProperties.

a check whether the particle is contained in the bounding box
of the domain is added regardless of the setting.
2018-06-19 12:45:46 +02:00
b2f5221076 Added check for adjustable timestep. 2018-06-06 11:25:39 +02:00
653237a641 [DOC] for forceModel pdCorrelation. 2018-06-04 16:30:25 +02:00
ec62d94d8f add description in header. 2018-06-04 16:30:25 +02:00
87c54c0fba [DOC] forceModel dSauter. 2018-06-04 16:30:25 +02:00
e08e63c38b also write pField. 2018-06-04 16:30:25 +02:00
2151dbf0f8 bugfix + switch to run on write time only. 2018-06-04 16:30:25 +02:00
8cd9ca56b9 bugfixing and simplification. 2018-06-04 16:30:25 +02:00
3361956058 build new model. 2018-06-04 16:30:25 +02:00
19f27d279d add postprocessing model for momentum-diameter correlation. 2018-06-04 16:30:25 +02:00
d29b467397 Look for static hold up only if fines are present. 2018-06-04 15:28:11 +02:00
09baa0d6d5 Merged with develop to get polydisp Beetstra etc. 2018-06-04 15:26:35 +02:00
4a030f15e2 Merge pull request #56 from ParticulateFlow/feature/cfdemSolverRhoSimple
Feature/cfdem solver rho simple
2018-05-22 15:26:32 +02:00
06633e9e4d Reset array where necessary. 2018-05-22 15:24:36 +02:00
0d7916746a Added return NULL to silence compiler. 2018-05-22 15:23:35 +02:00
c1cb77f08c Replaced hardcoded temperature limits with user-defined ones. 2018-05-22 09:42:24 +02:00
554577d0ba Some more improvements. 2018-05-18 14:30:42 +02:00
05fb204dc3 Some improvements based on helpful comments. 2018-05-18 14:10:35 +02:00
19dd9c9646 Beetstra drag model. For polydisp case, BeetstraDragPoly overrides functions for diameter. Effect of fines phase in terms of static hold-up field is included in BeetstraDragPoly. 2018-05-18 12:08:56 +02:00
e0530dcf5b Cleaned up solver, removed testing code. 2018-05-18 12:04:57 +02:00
7b59ed2ffa Fix sequence of arguments in function calculating drag. 2018-05-17 14:13:13 +02:00
500db10717 Forgot to set bool getParticleEffVolFactors. 2018-04-30 15:04:21 +02:00
e9a7a0f15a Beetstra drag mono can take multiple cg factors, added Beetstra drag poly for polydisp systems, including polydisp parcels and effect of fines phase. 2018-04-26 13:26:40 +02:00
948a909da8 Adapted Sauter mean diameter and void fraction models for eff. particle volume factor in case of polydisp. parcels. 2018-04-25 15:28:03 +02:00
29bf7f59ce ignore vscode project dirs. 2018-04-25 10:09:32 +02:00
bdfdb23cdd Some debugging (initialization of arrays etc.). 2018-04-23 14:15:34 +02:00
d8682c6a79 Some experiments to get more stability. 2018-04-19 15:07:24 +02:00
24c5c25f7c Specific heat and thermal conductivities for various species. 2018-04-16 11:44:48 +02:00
76ea1af1ab CFDEMcloud can now hold particle types and densities. Heat transfer model needs to know heat capacities to solve T eqn. 2018-04-13 11:19:08 +02:00
771dd7e6d0 Initial commit for cfdemSolverRhoSimple. New heat transfer model to treat granular temperature as field to be solved on a grid. 2018-04-12 11:06:46 +02:00
391a50e6dc Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2018-04-11 16:10:41 +02:00
d8a343181c check addition of molar fractions 2018-04-11 15:37:48 +02:00
09dba5d5d5 Additional options for treatment of Y fields. 2018-04-09 12:30:31 +02:00
5050ae1b5f change position of debug output. 2018-04-05 16:15:50 +02:00
278087b021 copy on-proc info rather than sending it via MPI. 2018-04-05 15:07:25 +02:00
072e11134a use safer way of offsetting in arrays. 2018-04-05 14:42:57 +02:00
d5d37233ef update .gitignore file for tutorials
* ignore any files in any DEM/post/ folder
* ignore any processor directories in CFD folders
* ignore all time directories except '0' in CFD folders
2018-04-04 17:30:35 +02:00
68a683e053 Merge pull request #52 from ParticulateFlow/master
update develop with release commits
2018-04-04 16:39:54 +02:00
ca5a69d8ad Merge pull request #51 from ParticulateFlow/release
CFDEMcoupling-PFM Release 18.03
version passed all regression tests
2018-04-04 16:37:20 +02:00
e66de2bbc9 bump version number to 18.03 2018-04-04 14:54:00 +02:00
0411ae0d80 clean up whitespaces 2018-04-04 14:46:53 +02:00
e7a3e8de8f clean up whitespaces 2018-04-04 12:48:53 +02:00
f4ae35eb88 send only when there is data to be sent. receive only when there is data to be received and only wait when you actually have something to receive. 2018-03-29 19:05:06 +02:00
0aa38589a3 add more verbosity. 2018-03-29 18:59:55 +02:00
ec8220c63b Remove more unnecessary output 2018-03-29 16:11:51 +02:00
3bd79f999b Set modeltype also when #include modeltype is executed in if statement. Create additionalChecks file for solver specific checks prior to simulation. 2018-03-29 15:16:01 +02:00
a2e3ad76ab cleanup comments 2018-03-29 14:10:59 +02:00
7ee394fb4c Fix memory leak_continuation
- didnt stage
2018-03-29 13:42:05 +02:00
c5622f9090 Fix memory leak
- remove double pointer pointer formatting
2018-03-29 13:40:33 +02:00
a1cfbdb958 Remove unnecessary output 2018-03-29 10:22:22 +02:00
afe1257367 Remove accidental random letter 2018-03-28 16:25:25 +02:00
7161b23c7f Free memory correctly 2018-03-28 14:30:58 +02:00
5a1dcb4048 Added option to skip checkModelType, can be useful to in some cases use Archimedes instead of gradPForce for stability reasons, which would generate an error otherwise 2018-03-28 14:27:27 +02:00
bc4f7254da Remove call to particleCloud for viscous term, dimension issue with modelType B because of the use of incompressible turbulence models 2018-03-28 14:09:45 +02:00
31b2e8d161 Missing comma added 2018-03-28 13:41:19 +02:00
f16ff451e8 Update license part of the files 2018-03-28 13:38:25 +02:00
5baa91df81 use shell script variable to indicate meaning of parameter 2018-03-27 17:55:51 +02:00
05907081c0 fix spelling of shell script variable 2018-03-27 17:54:14 +02:00
4063a2a103 fix reconstruction of twoSpheresGlowinskiMPI
fixes #42
2018-03-27 17:52:49 +02:00
67ef631a6c add -f option to rm in clean target of make files
avoid make error in clean installations
2018-03-27 15:26:39 +02:00
8754ca5952 replace vector(0,0,0) with vector::zero 2018-03-27 15:25:30 +02:00
148990499d clean up whitespaces
use spaces, not tabs
2018-03-27 14:43:04 +02:00
d1c115896f Add documentation for cfdemSolverMultiphase 2018-03-27 12:49:41 +02:00
9ad296a5e1 Add documentation for gradPForceSmooth 2018-03-27 12:49:20 +02:00
ee5150bb8a Added documentation for temporalSmoothing smoothing model 2018-03-27 10:28:05 +02:00
b540ddcde4 Throw error if temporalSmoothing is selected in couplingProperties 2018-03-27 10:27:10 +02:00
67b7607a79 Update variable names to be consistent with paper + cleanup 2018-03-27 10:26:20 +02:00
e20fe0ab91 Remove MRF from createFields 2018-03-26 13:10:17 +02:00
9d036344a6 Cleanup pEqn 2018-03-26 12:48:58 +02:00
b825513094 Added support for modelType B and Bfull 2018-03-26 12:37:37 +02:00
b80fb7a9c7 Removed maxAlphaCo because it's only used in adjustable time step 2018-03-22 14:18:59 +01:00
e38cc7e2ab Reinstate checkModelType and allow gradPForceSmooth to be used instead of gradPForce 2018-03-22 13:44:19 +01:00
0c7a77c582 Add warning if ddt(voidfraction) is ignored 2018-03-22 12:37:02 +01:00
9230212797 Reinstate ddt(voidfraction) from particle cloud and reformulate phiS 2018-03-22 12:36:23 +01:00
0b365aa6a5 Minor change, move rhoPhi and cleanup 2018-03-22 10:39:41 +01:00
9953a3af76 Added support for fvOptions and removed unsupported MRF stuff 2018-03-22 10:30:17 +01:00
dcc289ac71 added documentation for engineSearchMany2Many (#50), resolves #38. 2018-03-20 08:48:57 +01:00
e5bc651a5d added docu for one2one. 2018-03-15 14:47:36 +01:00
5ac5c3275c Give info only if verbose active 2018-03-15 14:09:26 +01:00
674853d616 Print out info only if verbose active 2018-03-15 14:07:10 +01:00
ae268bf137 added documentation for engineSearchMany2Many. 2018-03-14 16:40:52 +01:00
6e5bdc2bbd option for using a static processor map added. 2018-03-14 16:13:24 +01:00
fb448affa3 scatter located particle ids among receiving procs. 2018-03-14 13:15:27 +01:00
318469aa26 use total number of particles instead of maxtag. 2018-03-14 13:14:15 +01:00
e2f74d2892 do not free the comm on destruction. 2018-03-14 11:04:36 +01:00
47f38514a6 Changes in initialization of scalar list 2018-03-13 17:18:23 +01:00
e53753bfc8 Add coarse graining factor 2018-03-13 17:17:29 +01:00
e1472f5ed3 moved procmap creation temporarily moved to couple(). debug output added. 2018-03-10 17:48:25 +01:00
e6fed5eaf7 Added short description for the tutorial 2018-03-01 16:43:25 +01:00
ae6b1a7209 Cleanup 2018-03-01 16:42:07 +01:00
1a75b56f89 Fix run case 2018-03-01 16:27:27 +01:00
9e30c8934d Copy restart files to run case 2018-03-01 15:53:54 +01:00
25aede1f13 Fix init case 2018-03-01 15:45:05 +01:00
14ab34e1af Update to OF-4.x syntax for init case 2018-03-01 15:29:13 +01:00
86b31017e7 Copied tutorial from outdated feature/cfdemSolverMultiphase branch and started restructuring 2018-03-01 14:58:14 +01:00
9c95cfe2e1 Cleanup 2018-03-01 14:17:43 +01:00
a951310886 Print out information to log file only...
... if verbose is activated.
2018-02-26 14:01:20 +01:00
bc5ef31657 clean unnecessary comments 2018-02-26 14:00:17 +01:00
2fe1f88084 Merge pull request #37 from ParticulateFlow/feature/cleanUp
Feature/clean up
2018-02-26 09:02:33 +01:00
9304e403b1 Initial commit. Works, but validation pending. 2018-02-23 12:55:17 +01:00
145e5a97cc Cleanup tutorials from run time folders 2018-02-20 11:48:25 +01:00
c4157638c6 Unreacted Shrinking Core Cases from the experimental work of Hanel 2014 2018-02-20 10:54:20 +01:00
6a6b55d2a2 Remove old tutorial cases 2018-02-20 10:46:03 +01:00
8bdb0cefe5 Required Pressure is in Pascal 2018-02-09 14:10:16 +01:00
34897bad97 communicate pressure with DEM 2018-02-08 17:42:37 +01:00
13fe14abf7 Merge pull request #45 from ParticulateFlow/postProc
Post proc
2018-01-30 08:38:43 +01:00
5231566793 Minor cleaning up of cfdemPostproc. 2018-01-30 08:20:45 +01:00
424f21e734 Data exchange model oneWayVTK can now take files from dump custom/vtk and from LPP. 2018-01-30 08:07:24 +01:00
3b8db2aa53 Species order does not change mixture diffusion total
- Fixed initialization error
- Fixed species molar fractions for diffusant and diffuser gases
- Order of species does not have any effect anymore!
2018-01-29 15:34:01 +01:00
e447ca82db Allow to specify DEM dump interval to be read in from couplingProperties. 2018-01-29 15:08:16 +01:00
167ae77c3b Fix H2O molar weight 2018-01-29 09:51:05 +01:00
237df644d4 reduce use of sqrt 2017-12-05 12:21:08 +01:00
69e994a532 Delete allocated arrays 2017-11-20 17:09:15 +01:00
3918e451fc Change pressure units to bar
- Get rid of the pow function in equations.
2017-11-20 11:48:51 +01:00
8a4be85856 Merge remote-tracking branch 'refs/remotes/origin/feature/cfdemSolverRhoPimple' into feature/cfdemSolverRhoPimple 2017-11-08 16:28:34 +01:00
6106fc8710 Latest tutorial case, based on Diss. Hanel Experiments
- ISO 4695 Conditions
- CO + N2 inflow
- Checking single particle unreacted core model
2017-11-08 16:27:52 +01:00
bb94f760c0 remove unnecessary firend deffinition 2017-11-08 16:24:54 +01:00
b8f07097ce clean-up of tutorials
* removed all references to non-existent turboEngineM2M locateModel
* proper formatting of turboEngineProps dictionaries
2017-11-08 10:35:27 +01:00
2cad403f20 Added setScalarSumCentre which always uses particle-center-based cells. 2017-10-31 13:33:43 +01:00
be5b056d70 Added functionality to communicate available gas volume per particle. 2017-10-31 13:32:42 +01:00
210e047e15 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-10-30 10:55:51 +01:00
f59b266279 fixed reading of optional parameters; some formatting 2017-10-23 18:08:57 +02:00
963b717811 clean-up and pretty formatting of liggghtsCommandModel and its derived classes
removed an unused member "int stdInterval_" of the class runLiggghts
2017-10-23 17:39:18 +02:00
e329da4227 increase ignorance 2017-10-23 17:05:17 +02:00
7d8d3e115e code clean-up of liggghtsCommandModel and its derived classes
Done away with awful creation of sub-directories for the derived classes of "liggghtsCommandModel"
Followed standard OpenFOAM convention, which can be seen all-over OpenFOAM's sources.
Also fixed some parameter reading from the sub-directories.
2017-10-23 17:00:44 +02:00
fffc80bb33 cleaned-up reading of optional settings, e.g. the verbose boolean; minor style fixes
Made boolean Switches, which are defacto read-only, const variables.
Made increased use of OpenFOAM's own I/O methods for dictionaries, e.g. lookupOrDefault
for optional parameters
2017-10-23 16:59:33 +02:00
1d1ebd132f Merge pull request #36 from ParticulateFlow/feature/cleanUpDoxygenDocumentation
Feature/clean up doxygen documentation
2017-10-23 14:48:17 +02:00
2a11fd78e6 Doxygen setup: minor modifications
Now, environment variables are used, e.g. $CFDEM_VERSION. This closely
follows the set-up of OpenFOAM. Also, some settings were made similar
to OpenFOAM's setup.
2017-09-28 11:08:47 +02:00
95ba62b8e5 Initial commit for Doxygen setup 2017-09-27 17:08:45 +02:00
8f92ff2551 clean-up: remove all references to totalMomentumExchange force model
There is no force model "totalMomentumExchange". There are some references in
the tutorials and the doxygen files. All references to "totalMomentumExchange" have
been removed from the tutorials.
2017-09-27 15:44:15 +02:00
a12a5cbcfa increase ignorance
ignore the "lnInclude" directories
generalized .gitignore setting for build directories
2017-09-27 15:20:09 +02:00
3f4058206a clean-up: remove all references to RongDrag force model
There is no force model named "RongDrag", it is also not mentioned in the
documentation. Thus, it is safe to remove all references to it from the
tutorials.
2017-09-27 15:16:20 +02:00
cd425337dd clean-up: remove all references to DEMbasedDrag
There is force model named "DEMbasedDrag", thus all references to it
in the tutorials can be removed. It is not even mentioned in the
documentation.
2017-09-27 15:10:41 +02:00
8553d55f02 clean up: remove all references to localPSizeDiffSmoothing
The smoothing model "localPSizeDiffSmoothing" does not exist.
Thus, we can clear-out all references to it in the tutorials and
the documentation.
2017-09-27 14:55:03 +02:00
50df2a215b use cfdemCloud getter methods instead of defining some new in forceModel 2017-09-27 08:13:43 +02:00
375686831e Moved tutorials blockMeshDict file to /system 2017-09-22 10:58:50 +02:00
ff41603bc2 Updated tutorials with new /etc location 2017-09-22 10:57:49 +02:00
8054b35f8b Cleanup 2017-09-22 10:56:56 +02:00
bad73896c1 Updated cfdemSolverMultiphase Make/options 2017-09-22 10:55:09 +02:00
eb752cbdd6 Merge branch 'develop' into feature/OF4x-multiphase 2017-09-22 10:31:39 +02:00
ce309cae32 unravel setting of CG factor
do not obfuscate the code by setting CG of cfdemCloud in such a roundabout way:
just get CG from dataExchangeModel, then set it in cfdemCloud
2017-09-21 14:22:10 +02:00
fac3825a28 no need to print out field in verbose 2017-09-21 13:56:25 +02:00
2079017fc6 fix diffusion calculation error 2017-09-21 13:56:06 +02:00
b7562b76c6 comment molar fractions debug info
to be uncommented in the future
2017-09-21 13:55:30 +02:00
0ebaa0b2bd make getter methods const 2017-09-21 13:36:27 +02:00
3c4688826f remove unneeded myType() method
myType() just duplicates OpenFOAM's type() method
2017-09-14 09:27:49 +02:00
ae6902dbd6 Merge pull request #32 from ParticulateFlow/fix/blockMeshDictLocation
Moved blockMeshDict file to system folder
2017-09-13 15:43:17 +02:00
3ab97478a7 Merge branch 'master' into develop 2017-09-07 13:26:37 +02:00
d9e3e2a773 Update tutorial script
- No need for rdef (is deleted)
- Molarmasses must be in kg
- Consider every keyword required for sim to run
2017-09-06 17:54:55 +02:00
b3c451dbc9 Moved blockMeshDict file to system folder
Since OpenFOAM-3.0 it is the convention to put blockMeshDict into system
instead of constant/polyMesh
Having blockMeshDict in system is supported since OpenFOAM-2.3
2017-09-06 10:04:29 +02:00
b8921ec6ca Merge pull request #30 from ParticulateFlow/release
Release 17.08
2017-09-05 16:42:02 +02:00
3b5d46e7cb Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-09-04 15:16:40 +02:00
e4545b8be9 More info for debugging YEqn. 2017-09-04 15:16:20 +02:00
9814464fcf Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-09-04 15:11:51 +02:00
2adc864f0a use pre-increment 2017-09-04 14:59:24 +02:00
da37804145 More path correction for tutorial cases 2017-09-04 14:56:06 +02:00
027592cd95 fix functions.sh path for tutorial cases 2017-09-04 14:53:10 +02:00
ace0e60c8c Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-09-04 13:43:28 +02:00
4e7246381d Some changes for tutorial case with single shrinking particle. 2017-09-04 13:42:53 +02:00
f14ce1b7d2 Output mass source in separate line. 2017-09-04 13:40:55 +02:00
1e7fc386cc test case for unreacted shrinking core model 2017-09-04 13:40:35 +02:00
4bd7f6529e Fix original pressure equation, add alternative formulation. 2017-09-04 13:40:16 +02:00
ac4fa13745 Monitor mass changes. 2017-09-04 13:38:52 +02:00
69d4e6ff02 bump version number 2017-08-31 16:55:39 +02:00
2e14d14a60 Merge pull request #29 from ParticulateFlow/feature/cherry_pick_PUBLIC
Feature/cherry pick public
2017-08-31 16:19:05 +02:00
70617eb360 replace deprecated outputControl and outputInterval
replace with writeControl and writeInterval
2017-08-31 14:50:59 +02:00
c7ee75839b clean up LIGGGHTS scripts 2017-08-31 10:05:19 +02:00
006d9c7cd2 add comment 2017-08-31 09:57:12 +02:00
652e7b3f74 clean up whitespaces 2017-08-31 09:56:50 +02:00
557a9d3fad Changed boundary conditions for tutorial case and some numerical settings. 2017-08-30 19:16:21 +02:00
a761c22ede New path to source. 2017-08-30 14:46:25 +02:00
d1c8707c3e fix issue with voidfraction slightly > 1 in SyamlalThermCond 2017-08-30 13:18:31 +02:00
91b84ca607 fix calculation of timeStepFraction & voidfraction interpolation
merged from PUBLIC
2017-08-29 18:33:55 +02:00
777a50d8b6 Merge pull request #28 from ParticulateFlow/feature/cherry_pick_PUBLIC
Feature/cherry pick public
2017-08-29 10:36:09 +02:00
c4bb208a6a remove unneeded include and clean up whitespaces 2017-08-29 09:26:24 +02:00
dec9b7f959 pre-generate satellite points in engineSearchIB
mostly merged from PUBLIC
2017-08-29 09:15:16 +02:00
93faf28a9f use checkPeriodicCells flag from particleCloud 2017-08-28 17:57:45 +02:00
23616877fb use implicit type conversion 2017-08-28 16:02:58 +02:00
4e50b3e06c clean up whitespaces 2017-08-28 15:57:45 +02:00
8b3878de65 abort on Gauss void fraction model
merged from PUBLIC
2017-08-28 15:57:22 +02:00
f946c5765f use const variable from mathExtra.H 2017-08-28 15:51:02 +02:00
683fd04828 pre-calculate sqrt(3.0)
merged from PUBLIC
2017-08-28 15:42:13 +02:00
9650aff318 protect against division by zero
merged from PUBLIC
2017-08-28 15:41:44 +02:00
d5fbf402cb fix missing include 2017-08-28 15:37:16 +02:00
1b9f7020ac fix parameter in function call 2017-08-28 15:30:51 +02:00
68d9035225 clean up formatting, add some comments 2017-08-28 14:20:51 +02:00
2230dcaa57 rearrange code in MeiLift to save some operations 2017-08-28 12:32:11 +02:00
03ac321754 Merge with dev and corresponding changes. 2017-08-28 10:44:08 +02:00
fd1bffd0e8 Made pressure source term implicit, added debugging option of YEqn. 2017-08-28 07:46:38 +02:00
6e23baba7f fix Mei lift force
The equation was probably taken from the paper of Kurose and Komori
1999, which does not repoduce the original formula given by Mei 1992
correctly (which itself is missing a left parenthesis).
The correct formula can be looked up for example in Mei and Klausner
1994 or Loth and Dorgan 2009
2017-08-25 14:33:50 +02:00
42ecc8656a remove out-dated tutorial cases 2017-08-25 10:33:01 +02:00
bf0ff235b6 use proper data type for counters 2017-08-24 17:19:24 +02:00
e6d12f6790 make debug info live in separate block 2017-08-24 17:18:40 +02:00
9a1abb5f19 clean up whitespaces in mathExtra.H 2017-08-24 17:07:33 +02:00
8df363cf97 add some mathematical constants
cf. OpenFOAM mathematicalConstants.H
2017-08-24 17:06:23 +02:00
5b8072b11a Merge pull request #27 from ParticulateFlow/feature/cherry_pick_PUBLIC
Feature/cherry pick public
2017-08-24 16:17:53 +02:00
2e2701ccf7 remove unneeded parameter finaliser from IOModel::streamDataToPath 2017-08-24 09:58:01 +02:00
5e7b332dd9 clean up whitespaces 2017-08-23 18:02:29 +02:00
adc79029a1 use actual cell id of particles instead of dummy finaliser string 2017-08-23 18:01:22 +02:00
ad6a169ffd output position as position type instead of vector type 2017-08-23 18:00:00 +02:00
53d0988a4e IOModel::streamDataToPath - separate handling of position and vector
vector needs no finaliser
2017-08-23 17:58:41 +02:00
165a2b9611 no need for finalizer in case of 'label' 2017-08-23 17:55:57 +02:00
2e4c93f8ee use info from OFstream to create output file header 2017-08-23 17:52:51 +02:00
668b85582b simplify logic
don't waste any time if type == "origProcId"
2017-08-23 17:50:22 +02:00
6343a6a09c create OFstream on stack instead of heap 2017-08-23 17:45:58 +02:00
76b90cc3cc remove unnecessary copy to temp vector 2017-08-23 17:40:17 +02:00
bce10d17c1 clean up whitespaces 2017-08-23 17:36:22 +02:00
dd2e21be64 create OFstream on stack instead of heap 2017-08-23 17:35:08 +02:00
0aa8672ab1 Renaming diffusion coefficient values 2017-08-23 17:15:06 +02:00
67a5e7cc02 Carry T_exp outside of loop
- Depending on conditions it might be used for either loop
- Added extra comments for info
2017-08-23 17:12:35 +02:00
e1116e471b Merge pull request #26 from ParticulateFlow/feature/environment_setup
Feature/environment setup
2017-08-23 08:58:02 +02:00
67019b0c0b Merge branch 'feature/environment_setup' into feature/cherry_pick_PUBLIC 2017-08-22 15:55:47 +02:00
7ade0c27a7 Sourcing CFDEMcoupling: one-stop bashrc / cshrc
* a single bashrc / cshrc file for CFDEMcoupling, similar to OpenFOAM
* user-editable section on top, for:
- setting the versions of OpenFOAM and CFDEMcoupling
- setting installation paths
- setting user directory path
* allows to set/unset values from command-line parameters (important for
test harness installation)
* removed unused and deprecated environment variables
2017-08-22 14:36:12 +02:00
df1bf48938 clean up whitespaces in cfdemSystemTest.sh 2017-08-22 13:24:54 +02:00
a87ed03b61 display PATH env var in cfdemSysTest
We will add bin and library paths for cfdemcoupling binaries and
libraries in the future -> display PATH to see if they are set correctly
2017-08-22 13:23:30 +02:00
9f7c801fbe remove output of liggghts lib name in cfdemSysTest
with cmake compilation in place, it's always libliggghts.so
2017-08-22 13:19:57 +02:00
52eed4b351 remove check for pizza dir from cfdemSysTest
we don't use pizza anymore, just lpp
2017-08-22 13:18:09 +02:00
8f11235d08 update make options for compressible library
use same flags as for incompressible library
2017-08-22 13:15:13 +02:00
15b7c43839 remove unneeded environment variables
libraries do not exist or are never used
2017-08-22 10:41:35 +02:00
579264952f remove unneeded includes 2017-08-21 13:17:52 +02:00
116bf952ab remove commented out code 2017-08-21 13:17:26 +02:00
1213c90a50 clean up whitespaces and formatting 2017-08-21 13:09:33 +02:00
b2b3363104 add procBoundaryCorrection for dividedVoidfraction in case of engineIB 2017-08-21 12:40:10 +02:00
8b6222ba79 remove method no longer needed
using base class method
2017-08-21 12:34:45 +02:00
8e73260cb4 limit voidfractionNext and scale to values >= 0 2017-08-21 12:33:02 +02:00
777a9e06ec refactor IBVoidFraction class
move duplicate to separate function
2017-08-21 12:32:09 +02:00
4ac84930c5 add braces 2017-08-21 12:24:25 +02:00
10fd332943 correct boundary conditions of voidfraction field
correct BCs after modifying the voidfraction field
2017-08-21 12:23:41 +02:00
3dc7b6a150 pre-generate marker points in dividedVoidFraction class
generate marker points for unit sphere once and just scale these points
for each particle instead of constantly recalculating them
2017-08-18 11:35:30 +02:00
3f8885c9b7 add functions to get min dist of point to periodic particle image
add functions to voidFractionModel class to determine minimal distance
of a point to one of the periodic images of a particle
2017-08-17 17:13:16 +02:00
dc3f93f401 change cg incompatibility error to warning by default
added switch 'cgWarnOnly' to choose between warning (default) and error
2017-08-17 16:50:51 +02:00
5f123bb6a1 use flag from cfdemCloud for checking periodic cells in dividedVoidFraction class 2017-08-17 16:34:56 +02:00
123280958b use flag from cfdemCloud for checking periodic cells in IBVoidFraction class 2017-08-17 16:33:43 +02:00
1a98e6eaee determine necessity of periodic cell check in cfdemCloud class
only check for periodic cells in submodels if all boundary patches are
cyclic
2017-08-17 16:30:09 +02:00
807c6e30e7 fix memory leak
anything new shall be deleted;
2017-08-17 15:09:40 +02:00
1b51d5ce21 proper member initialization
allocating memory of zero size will produce useless pointer
set to NULL instead
2017-08-17 15:09:39 +02:00
fd6d9164c4 remove unneeded checks
according to standard, freeing a null pointer is a nop
some archaic C runtimes may have crashed on it in times long past
2017-08-17 15:09:39 +02:00
ec5ed28885 construct field as copy resetting name 2017-08-17 15:09:39 +02:00
df1be8e004 add trilinear void fraction source file to make file 2017-08-17 15:09:39 +02:00
a4bf2fdd42 add range check for imExSplitFactor value 2017-08-17 15:09:39 +02:00
ee06cc84cb construct field as copy resetting name 2017-08-17 15:09:39 +02:00
2c05e6e65f add trilinear void fraction model from PUBLIC 2017-08-17 15:09:39 +02:00
36d5805d2a shorter access methods 2017-08-17 15:09:39 +02:00
ab49a51003 const correctness 2017-08-17 15:09:39 +02:00
5563b9bd9c fix bug introduced in 13da1dd890
methods must have same const qualifier as in base class
2017-08-17 15:09:39 +02:00
14f5af4727 clean up whitespaces in tutorial run scripts 2017-08-16 15:43:41 +02:00
1fed0679a9 adjust tutorial run scripts to new etc location 2017-08-16 15:41:11 +02:00
d577248752 Added temporal smoothing to Make/files 2017-08-03 13:48:03 +02:00
134a511488 Reorginzied function objects and updated plot script 2017-07-28 13:25:32 +02:00
46567490e1 Cleanup of old function object syntax 2017-07-26 13:45:12 +02:00
35d35339d2 tankDrainage tutorial case updated to OpenFOAM-4.x 2017-07-26 12:55:46 +02:00
7320c1f5cf update case and decrease rhoMin
Case working fully with chemistry/diffusion/massTransfer terms
2017-07-18 15:31:09 +02:00
a1c47377fd cleanup and use noSlip 2017-07-18 15:29:27 +02:00
ca6dbf6f12 cleanup DEM scripts 2017-07-18 15:28:32 +02:00
28ddc53754 decrease rhoMin to avoid pressure divergence 2017-07-18 15:27:56 +02:00
bc2de27abf cleanup tutorial case 2017-07-18 15:27:36 +02:00
305b1a75a2 increase temperature 2017-07-18 15:27:05 +02:00
bf3e3260c4 cleanup 0 folder 2017-07-18 15:26:58 +02:00
3162ae65d1 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-07-14 13:08:50 +02:00
47c442ade1 add noise cancellation for molar fraction
Give screen output for pressure and volDiff
2017-07-14 13:07:16 +02:00
3cc5f288ff correct how Multicomp. mix diffusion for species is calculated 2017-07-12 12:05:55 +02:00
31e2cc5e8f Ensure no negative values (e.g. due to numerical noise) are communicated. 2017-07-11 14:57:44 +02:00
3fb41b3b41 Measure time used for gas-phase chemistry. 2017-07-11 10:19:06 +02:00
386487839f Adapted tutorial case: lower reaction rate, temperature limits. 2017-07-11 10:17:24 +02:00
a98ef63fa0 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-07-10 15:22:51 +02:00
077b355767 Adapted tutorial case for Arrhenius-shrinking particle. 2017-07-10 14:08:39 +02:00
23a2f0f450 change name of mole, and calc. of molar conc. in diffusion. 2017-07-10 13:25:39 +02:00
d520a8f642 Moved look-up of molar fraction fields in init() function because they do not exist at time of construction yet. 2017-07-10 11:32:15 +02:00
1a5f0f3cdf Adapted test cases to usage of molar fractions. 2017-07-06 14:39:27 +02:00
ccd45546f7 Use molar fractions instead of mass fractions. 2017-07-06 14:36:22 +02:00
847b8cb565 Changed name and calculation of molar concentration. 2017-07-06 14:35:49 +02:00
cc3e8f7495 cleanup 2017-07-03 14:15:53 +02:00
4a0b96191b Added functionality to temporally smoothen a vector field 2017-07-03 13:47:51 +02:00
f91b4e4266 Added smooth pressure force to 4.x 2017-07-03 09:55:39 +02:00
065373049d Added temporal smoothing model to 4.x 2017-07-03 09:55:04 +02:00
512f28c9a0 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-06-30 10:15:52 +02:00
9b6a643b0d Monitor total and current mass source. 2017-06-30 10:13:38 +02:00
349793270e Corrected dimensions. 2017-06-30 10:12:50 +02:00
0be782084d Changed solver to density-based thermodynamics. 2017-06-30 10:12:24 +02:00
29c417f018 Test case for shrinking particles and reactions within gas phase at fixed temperature and volume. 2017-06-30 10:09:42 +02:00
fb9b5e9b32 Changed settings in test case Shrinking_particle_model to density-based thermodynamics. 2017-06-30 08:08:23 +02:00
4a3496a48f change location where X array is defined 2017-06-29 15:22:08 +02:00
5cc0709fe1 add molar fraction as given property 2017-06-29 14:30:50 +02:00
069b824765 add default names to chem. models as not to repeat in coup. props. 2017-06-28 15:48:57 +02:00
e9f69b08ee Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-06-28 15:10:30 +02:00
e26032115c computes in case 2017-06-28 15:10:12 +02:00
34a05f9c14 Added post folder. 2017-06-27 10:28:53 +02:00
04991d42a0 Cleaning up test case. 2017-06-27 10:19:38 +02:00
ccf3da3ac6 Enforce sum_i Y_i = 1. 2017-06-27 10:09:44 +02:00
61e4c68486 Changed scope of rhoeps for monitoring purposes. 2017-06-27 10:08:07 +02:00
5d9a2384d3 Activate mass source terms from gas-solid reactions. 2017-06-27 10:05:04 +02:00
55bb185ef3 Cleaning up chemistry models. 2017-06-27 10:00:43 +02:00
c5e97bcc3c Eventually, mass sources need to be included. 2017-06-23 11:56:49 +02:00
44e78b5cc1 Replaced equal with correct non-equal sign. 2017-06-23 11:56:12 +02:00
ed0cbc50a7 Added missing time-step factor for source terms. Added possibility to execute species model only every Nth step. 2017-06-23 11:16:53 +02:00
0c0f6d5b10 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-06-23 10:05:20 +02:00
d65eb73516 modify force models acc. to cherry pick 2017-06-23 09:43:12 +02:00
93d3c2c163 add floating point limiation 2017-06-23 09:42:54 +02:00
ff4dcf804c Moved particle-fluid energy flux outside PIMPLE loop. Needs to be done only once per time step. 2017-06-23 08:53:49 +02:00
579054e9c2 Merge branch 'master' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2017-06-23 08:32:49 +02:00
9b1fab0f00 Auto write density 2017-06-22 12:35:33 +02:00
5c17f4b7a3 Fixed mixture viscosity calculation to avoid numerical difussion 2017-06-22 12:27:55 +02:00
03cb141cb3 add limitations for diff. 2017-06-22 11:55:46 +02:00
e488ef863f update tutorial case 2017-06-21 11:45:12 +02:00
347b83ee2a tot mol for various gases 2017-06-21 11:42:13 +02:00
96e4b8f454 testmerge 2017-06-20 16:05:10 +02:00
df221a2407 modified tot. binary. diffusion, add comments for future reference.
Changed the molar fraction calculation for stagnant species. Now only
considers the molar fractions other then the reactant gas.

Should be fixed when using multiple species.
Dcoeff calculation also should be resetted when using other gases.
2017-06-20 15:34:58 +02:00
e58aad0a2a fix units 2017-06-19 16:02:13 +02:00
072c27529c add limitation for Rep 2017-06-14 13:29:27 +02:00
2c73184e28 rewoke pressure transfer - no need/not used 2017-06-14 13:29:08 +02:00
feeca38458 free memory with dat. ex. model 2017-06-13 15:33:43 +02:00
98de197258 transfer nu and Rep data to DEM 2017-06-13 11:01:03 +02:00
42ad14182f add verbose functionality 2017-06-13 11:00:32 +02:00
61337dfe70 cleanup 2017-06-12 17:14:28 +02:00
9bd2fcf326 introduce enum for forceSubModel switches 2017-06-12 16:07:39 +02:00
fe24c2c7ed fix some more const madness 2017-06-12 15:44:29 +02:00
5a52141ed7 add verbose, change nu calculation 2017-06-12 15:13:53 +02:00
89c29fb9d5 free all. memory with dataExchangeModel, cleanup whitespaces 2017-06-12 15:13:12 +02:00
3d0225127c add verbose opt. 2017-06-12 13:28:37 +02:00
250f7e0c60 add props for mass transfer 2017-06-09 15:38:19 +02:00
d31288a36e add basics for mass tran. coeff. calculation 2017-06-09 15:37:02 +02:00
13da1dd890 make clock model indpendent of cfdemCloud
New version only depends on valid Foam::Time instance
2017-05-24 11:53:29 +02:00
04119c6934 update tutorial case 2017-05-23 09:49:22 +02:00
e745512252 some comments 2017-05-23 09:49:06 +02:00
c19b04e6d0 save local variable 2017-05-19 14:40:26 +02:00
e11697a9f2 fix some more const madness 2017-05-19 14:35:26 +02:00
ac4c80e148 fix some const madness
generally:
setter methods should not be const
getter methods are predestined candidates for const
2017-05-18 16:56:46 +02:00
232e8a75d0 use better name for volScalarField 2017-05-18 14:10:00 +02:00
e8f8f4668d disable some warnings in make options for compressible
use the default 7 hexadecimal digits as the abbreviated object name;
disable warnings about old-style casts, unused results and literal
suffix, since they are of little interest and mostly caused by external
libraries (mpi, c/c++ standard libraries)
(same as in 80aaf69748 and
9e478e23a6)
2017-05-18 14:08:33 +02:00
b2a089a444 fix some typos 2017-05-18 13:59:01 +02:00
b9cff039ad fix up probe model
remove internal vProbes and sProbes and corresponding getter functions
since the data structures are unsuitable and they are not used anywhere
else;
remove misleading const specifiers from methods and the excruciating
mutable specifiers;
use const references as parameters where appropriate;
2017-05-18 13:57:58 +02:00
3c0012294f update and fix SPM tutorial case 2017-05-16 15:10:36 +02:00
6a636658aa added grid coarsening/particle coarsening corrections to Beetstra drag model 2017-05-16 13:55:12 +02:00
9113908429 clean up whitespaces 2017-05-16 11:40:27 +02:00
a6875d8a4a use typename of force models for log file name 2017-05-16 09:37:50 +02:00
e84daeaf15 update Temperature in test_case 2017-05-12 13:34:02 +02:00
8a4fc7c3d4 fix dBinary, dCoeff scalar lists, add push to DEM 2017-05-12 12:46:33 +02:00
f8eb939de9 cleanup 2017-05-12 10:24:30 +02:00
1f82914428 calculate binary diffusion coefficient and mixture diffsuion coefficient 2017-05-12 10:24:15 +02:00
1e5bc6ef89 remove unneeded checks
delete NULL is a valid operation
2017-05-12 10:06:03 +02:00
d1dc21acb8 clean up whitespaces 2017-05-11 19:12:07 +02:00
dc8ca8b520 pass label by value instead of reference
index does not get modified; also avoid potential problems in case int
needs to be cast to a label of different size;
2017-05-11 19:10:12 +02:00
dfece32f5f clean up whitespaces 2017-05-11 18:21:53 +02:00
dd54ca1bba what has been allocated must be destroyed
new - delete
malloc - free
allocateArray - destroy
Programming 101: Don't mix them!
2017-05-11 18:00:54 +02:00
e265039fed remove superfluous namespace scoping 2017-05-11 17:02:38 +02:00
b04810f2c5 use proper data type 2017-05-11 16:38:11 +02:00
ea71689908 remove unused function 2017-05-11 16:27:02 +02:00
7673564896 fix up shortcuts for running LIGGGHTS 2017-05-11 15:23:36 +02:00
d78985fc83 remove dummy fields 2017-05-10 12:50:36 +02:00
f1eaed68e9 change volScalarField Smi fnction 2017-05-10 12:50:22 +02:00
b1bc6de4ff case to test diffusion coefficient 2017-05-10 11:45:38 +02:00
3f745df3db convert mass to mole fractions 2017-05-10 11:44:32 +02:00
1c91471ceb add totalMole field, hastables for molMass & diffVol 2017-05-09 15:27:20 +02:00
782cca6506 add dummy volScalarField, for testing 2017-05-09 12:04:07 +02:00
fa6b0ecf77 define and initialize variables 2017-05-08 17:24:11 +02:00
1b6dcc0183 define chemistry models in couplingProperties as list 2017-05-08 14:45:47 +02:00
d31a2f8fbb Smi read from 1st chem model / species 2017-05-08 14:44:57 +02:00
c02f3f15fa add diffusion_coefficient to lib 2017-05-08 14:10:56 +02:00
45af7ee546 Fixed tutorial errors 2017-05-03 13:27:25 +02:00
2f532af9bb update make options to include OFversion header location 2017-05-02 17:51:00 +02:00
4cbec2cffe adjust shell scripts to new etc location 2017-05-02 17:50:02 +02:00
2a77e96af0 rename dummy file to .gitignore 2017-05-02 16:51:28 +02:00
57a929dce2 move etc directory to CFDEM_PROJECT_DIR 2017-05-02 16:49:22 +02:00
833b1dc1d1 remove void test case 2017-05-02 14:57:23 +02:00
f0e1cbc94d Merge pull request #21 from ParticulateFlow/fix/uniformFixedValueVoidfractionBC
writing the value field inherited from fixedValue BC; fixing #20
2017-05-02 13:35:27 +02:00
1130005a52 update tutorial cases 2017-04-28 10:53:31 +02:00
514b6e8bab update tutorial case for USCM 2017-04-28 10:51:31 +02:00
d7ddb5face update tutorial to include pressure field name 2017-04-28 10:50:32 +02:00
7b156c5518 Consistent naming. 2017-04-27 14:45:15 +02:00
fba3a69243 writing the value field inherited from fixedValue BC; fixing #20 2017-04-25 14:47:07 +02:00
8dd1acfc83 Handling of hash table. 2017-04-20 17:59:54 +02:00
0ab701b246 Class that will calculate diffusion coefficients. 2017-04-20 17:37:48 +02:00
c0164b4f5a Latest tutorial case for 3layer Unreacted Core Model 2017-04-19 15:20:25 +02:00
0562ba1cd4 uncomment verbose 2017-04-18 09:14:36 +02:00
cb18593830 add CFDEM_LIGGGHTS_BIN_DIR to cfdemSysTest
path must not be empty for building LIGGGHTS via cmake (default)
resolves #19
2017-04-10 11:36:48 +02:00
176544c72f change order of vectors 2017-04-05 11:51:10 +02:00
9ffaeb32ac switch read direction 2017-03-28 16:04:28 +02:00
50bb355dbb working tutorial case for 3 layer shrink - only chem resist active 2017-03-27 10:51:51 +02:00
f84018214c add transfer of pressure at part. loc. 2017-03-27 10:49:33 +02:00
61ed3677bc cancel output of debug info 2017-03-27 10:49:01 +02:00
7e8d358911 add N2 props 2017-03-20 09:56:21 +01:00
6d007f7c97 minor changes, add rel layer radius output 2017-03-20 09:50:32 +01:00
69f93a1e27 Merge pull request #16 from ParticulateFlow/master
update develop with latest changes to master
2017-03-08 16:50:57 +01:00
b764943f04 Merge pull request #15 from ParticulateFlow/release
Release 17.02
2017-03-08 16:22:48 +01:00
95e35ef0e6 add post folder to DEM part 2017-03-08 15:47:06 +01:00
60e1f0c067 proper naming of output files
plotting z-positions and z-velocities, so name the output files say
'pos_z<something>' and 'vel_z<something>'
2017-03-08 15:41:28 +01:00
b6d0bbf31a update run.config 2017-03-07 18:01:56 +01:00
f932c15b2a update comment sign in output 2017-03-07 17:50:13 +01:00
7b05d10fbc add poition and velocity plots to run.config of twoSphereGlowinskiMPI 2017-03-07 17:40:37 +01:00
84c4b2945e restore original inlet settings 2017-03-07 16:16:31 +01:00
c3fa5607c6 restore uniformFixedValueVoidfractionFvPatchField 2017-03-07 16:15:59 +01:00
6fd271c377 ignore build folder 2017-03-06 09:33:58 +01:00
98cd5ce09f adjust run.config 2017-03-03 14:29:36 +01:00
97fd42e376 explicitly set liggghts log file 2017-03-02 18:42:30 +01:00
8efa366ded correct solver in testharness run config 2017-03-02 18:06:52 +01:00
307588ccc7 remove extra semicolons in controlDict files 2017-03-02 15:51:42 +01:00
3718b7326d make SPM tut case work with N 2017-03-02 15:42:59 +01:00
f92ab5b6a7 add comm for N field 2017-03-02 15:41:45 +01:00
ea66961ba6 add W, and N fields to solver 2017-03-02 15:41:23 +01:00
a628c856f9 minor clean-up of README 2017-03-02 12:59:48 +01:00
12f942a4b9 disable check for additional packages
we don't provide any additional packages ...
2017-03-02 12:58:45 +01:00
f2085bd900 bump version & clean up version strings 2017-03-02 12:57:05 +01:00
80aaf69748 use the default 7 hexadecimal digits as the abbreviated object name 2017-03-02 12:55:21 +01:00
0924b618f5 minor mods 2017-02-24 13:12:36 +01:00
3078b3af1b cleanup species 2017-02-24 09:42:58 +01:00
7f766b3afe added total mole field 2017-02-24 09:42:26 +01:00
cf3a6a5cbe changed molecular weight 2017-02-24 09:41:21 +01:00
44d111345d modify to include mole field 2017-02-23 16:13:32 +01:00
b85748ea3f added total mole field comm. 2017-02-23 16:13:10 +01:00
9b69b035d6 added calculation of mole field 2017-02-23 16:12:37 +01:00
4da55dd812 generate total mole field 2017-02-23 16:12:17 +01:00
2bee441cea fix compile message 2017-02-21 11:00:15 +01:00
4bfb965da8 Merge pull request #9 from ParticulateFlow/fix_up_make_options
Fix up make options
2017-02-21 10:38:55 +01:00
0b58fbae71 Merge pull request #6 from ParticulateFlow/feature/fines
Feature/fines pull request accepted under reserve:
Documentation is an essential component of any pull request.
2017-02-21 10:29:32 +01:00
6439975233 clean up whitespaces
nowadays editors could do this automatically ...
2017-02-21 10:21:43 +01:00
678bb3b2cf Added functionality to limit particle-fluid interaction on particles and monitor current maximum value. 2017-02-20 15:53:53 +01:00
27811fc5b6 Merge branch 'feature/fines' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2017-02-10 07:48:00 +01:00
ef509dcb72 Changed voidfraction limiting values. 2017-02-10 07:47:14 +01:00
956a3a3236 Allow negative voidfractions in dividedVoidFraction. Useful in combination with smoothing models at processor or periodic boundaries. 2017-02-09 17:28:11 +01:00
38712e6c33 fixed gas properties 2017-02-09 16:25:09 +01:00
368f2550d8 update 3layer tutorial to OF4X 2017-02-07 15:14:25 +01:00
b9bf777116 Update createFields for OF4x 2017-02-06 09:35:11 +01:00
c334ef1f7f Update tutorial to OF4x 2017-02-06 09:32:54 +01:00
c69faa5e98 fixed compile errors 2017-02-03 14:42:52 +01:00
8e96e7d59a resolving update issues solverpimplechem 2017-02-03 13:03:16 +01:00
f30f8fd62b removed cfdemSolverPisoTemp 2017-02-03 13:02:32 +01:00
4a24c35c67 modifed solver 2017-02-03 12:20:08 +01:00
daa24bcfda update 3layer tut case 2017-02-03 10:50:55 +01:00
d2d3af79a0 adding merge deleted files 2017-02-03 10:44:10 +01:00
b858c75a93 update solver Eqn's 2017-02-03 10:43:48 +01:00
f3b0502612 Mergeing feature/fines into cfdemSolverRhoPimpleChem 2017-02-03 10:35:46 +01:00
9e478e23a6 enable/disable some warnings
disable warnings about old-style casts, unused results and literal
suffix, since they are of little interest and mostly caused by external
libraries (mpi, c/c++ standard libraries);
enable 'uninitialized' warning for many2many lib since that one is
indeed important;
2017-01-25 12:57:32 +01:00
6eeb0a4f19 make dependency builder happy
remove whitespaces in include options so wdep will find header files
2017-01-25 12:39:06 +01:00
72dda78652 make dependency builder happy
The compiler seems to have no problem with the space in the include option, however the dependency builder doesn't find the files.
2017-01-24 19:33:08 +01:00
4f17c33b4d avoid warnings about unused variables from postProcess.H
move
volScalarField& T = thermo.T();
const volScalarField& psi = thermo.psi();
to createFieldRefs.H (and make T const)
2017-01-24 13:30:57 +01:00
a285248abd clean up whitespaces 2017-01-24 11:54:05 +01:00
849cede6fa fix Wreorder warning 2017-01-23 17:45:57 +01:00
c40c4ad6fb fix Wignored-qualifiers warnings 2017-01-23 17:22:43 +01:00
adcb9031ad fix OpenFOAM 4 issue in reactionHeat.C 2017-01-23 16:32:24 +01:00
afe55da77e remove cfdemSolverRhoPimpleChem from solver list 2017-01-23 16:29:13 +01:00
9ce3eb5d24 Added mesh generation for tutorial FinesColumn. 2017-01-23 09:36:43 +01:00
cccb78b4d3 Added missing file for cfdemSolverRhoPimple tutorial ErgunTestMPI. 2017-01-23 08:10:54 +01:00
912580a5c6 Deleted files related to cfdemSolverRhoPimpleChem. 2017-01-23 08:09:40 +01:00
4975656a94 added reactionHeat 2017-01-20 13:51:02 +01:00
59149ac886 Merge branch 'develop' into feature/fines 2017-01-20 08:34:44 +01:00
872f297dfb Some cleaning up. 2017-01-20 08:07:08 +01:00
0808a61cc2 Merge pull request #5 from ParticulateFlow/feature/OF4x
OpenFOAM 4.x
2017-01-19 12:47:15 +01:00
8862308d82 rename dimensionedScalar entries to refelct their value 2017-01-19 10:54:16 +01:00
3030f04be0 Merge branch 'feature/fines' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2017-01-17 11:25:38 +01:00
9ca32ce5f6 Tutorial case for fines transport and deposition. 2017-01-17 11:25:00 +01:00
aff47d3588 restore previous testcase settings
to make regression testing easier
2017-01-09 17:34:20 +01:00
a13960131c fix fillCylinder case for OpenFOAM 4.0 2016-12-14 09:39:47 +01:00
5b560c726b add dummy density field rho in cfdemPostproc
ported from CFDEMcoupling-PUBLIC
2016-12-14 09:35:38 +01:00
d59b7a7cff fix packedBedTemp case for OpenFOAM 4.0
fix turbulence properties
2016-12-13 17:37:10 +01:00
43f78101a2 fix twoSpheresGlowinskiMPI case for OpneFOAM 4.0 2016-12-13 17:02:57 +01:00
15b3f7016d fix cfdemSolverIB for OpenFOAM 4.0
see CFDEMcoupling-PUBLIC for reference
2016-12-13 16:59:23 +01:00
6e71533e60 fix post-processing of ErgunTest cases for OpenFOAM 4.0
fix number of headerlines expected in probe files for ErgunTestCG,
ErgunTestMPI_cgs and ErgunTestMPI_restart
2016-12-13 16:44:35 +01:00
e17e68abcb fix compilation of cfdemPostproc for OpenFOAM 4.0
update to OpenFOAM 4.0 turbulence model
2016-12-13 14:56:06 +01:00
0c6791ed28 delete old case 2016-12-12 13:42:23 +01:00
6fdae86988 some tweaks in tutorial case 2016-12-12 13:40:23 +01:00
2a5a9e863a fixed post, minor changes in init 2016-12-04 21:50:31 +01:00
e3799108fd Allow implicit heat transfer in energy equation. 2016-11-28 12:12:27 +01:00
e752445880 Some minor corrections for heat transfer. 2016-11-28 12:11:57 +01:00
5ba7f10a29 Fixed a logical error regarding averages with distributed particle weights. 2016-11-28 12:10:17 +01:00
246f6f08db Merge branch 'feature/fines' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2016-11-28 08:56:21 +01:00
a800b6c426 Fix Cp vs Cv issue in energy equation. 2016-11-28 08:55:30 +01:00
201cbe16fc Compute granular kinetic energy per cell. 2016-11-28 08:54:59 +01:00
55a7d967e0 updated tutorial case 2016-11-18 13:30:35 +01:00
3b352ef16a tutorial case for chem/shrink/core 2016-11-16 16:16:00 +01:00
1ff6217ae3 fixed error in scaling force submodel; output of average particle temperature 2016-11-16 13:40:59 +01:00
09d546cafd Merge branch 'feature/fines' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2016-11-15 08:21:30 +01:00
be4429f995 New force submodel to reduce force close to a plane, e.g. a boundary wall. 2016-11-15 08:20:57 +01:00
49c0bc63d7 Fix treatment of Sauter mean diameter. 2016-11-08 10:48:57 +01:00
0d6ed36cf3 Make sure voidfraction has meaningful values. 2016-11-02 16:10:23 +01:00
f1a448883a Put verbose part at right place. 2016-10-31 08:05:35 +01:00
4fc0edcfca Introduced own term addSource for additional sources in energy equation. 2016-10-18 15:34:45 +02:00
018d4a2eda Calculate and store Re and Nu. 2016-10-18 15:33:07 +02:00
00b5f4633d Allow for coarse graining and changes due to modified size distributions. 2016-10-18 15:31:17 +02:00
9c6d46b9ac changes in tutorial case 2016-09-20 08:33:11 +02:00
68eb34c7d9 fixed species transfer 2016-09-20 08:32:40 +02:00
01c1d60822 Update boundary conditions of wallQFactor. 2016-09-14 11:01:25 +02:00
82eaa3047c fix merge error 2016-09-12 13:55:14 +02:00
2477d40f7b working case reupload 2016-09-12 13:53:13 +02:00
9439089c05 latest working tutorial case 2016-09-12 13:49:52 +02:00
88f858a366 small changes 2016-09-06 15:34:10 +02:00
8e5c2df15d fix tutorial tses 2016-09-01 17:13:58 +02:00
cc88f66a48 added voidfraction into account 2016-09-01 17:13:18 +02:00
6835e86ab6 latest tutorial with multiple particles 2016-09-01 09:21:40 +02:00
5b7f59548c Removed old OF syntax. 2016-08-31 10:53:37 +02:00
591f5445ba Added debugging options for deposition mechanism. 2016-08-31 10:20:40 +02:00
e1db699f40 Calculate uDyn also at boundaries. 2016-08-29 10:52:15 +02:00
27cf909571 Parallel output for debugging. 2016-08-29 09:47:55 +02:00
ac6a1aac43 Fixed dimension problem. 2016-08-29 08:11:47 +02:00
f307a18f12 Changed mass flux field of fines. 2016-08-26 13:02:14 +02:00
356c1853cd Reformulation of forces and voidfraction calculation. 2016-08-24 16:40:26 +02:00
58cc670128 latest tutorial case 2016-08-23 15:56:08 +02:00
8a1d096c56 reactionHeat Model added to energyModels 2016-08-23 15:55:27 +02:00
0e6e35006b fixed concetnration change on Eu-field 2016-08-18 09:04:41 +02:00
889eb45f14 minor fixes 2016-08-11 15:36:04 +02:00
cfe4254674 memory allocation to consider particles 2016-08-11 08:47:37 +02:00
42eacb256c changed int value to length 2016-08-10 14:53:21 +02:00
bf50c9b91d latest working tutorial case 2016-08-10 14:47:29 +02:00
cc308f841d debugging 2016-08-10 14:44:32 +02:00
1d48ed1b5f fixed memory allocation 2016-08-10 14:43:44 +02:00
0b88a5596c latest working solver 2016-08-10 14:43:06 +02:00
fff2eb3f35 Added smooth pressure gradient force model 2016-08-10 13:49:15 +02:00
6726c32fc7 pisoTemp solve was missing 2016-08-10 13:44:41 +02:00
fc95fef1ba update tutorial 2016-08-05 12:05:33 +02:00
dd33dcec5f added smi to chem model 2016-08-05 12:05:07 +02:00
69c2673e58 changes in no chemsitry model 2016-08-05 12:04:26 +02:00
b409fdf57d added solver and library to compile lists 2016-08-04 16:38:46 +02:00
21af66f36c multiphase tutorials updated 2016-08-04 16:23:50 +02:00
c7a57d1169 surfaceTension force model added 2016-08-04 16:01:13 +02:00
7b06e4d3a2 multiphase solver reworked to OF4.x 2016-08-04 16:00:50 +02:00
91858c93aa Diffusion of dyn hold up. 2016-08-04 14:40:57 +02:00
39f6b20de9 latest fix for tutorial case 2016-08-04 14:34:31 +02:00
cf2f4094f9 fixed species mass fields with deltaT 2016-08-04 14:33:28 +02:00
49dbfaf33a Do not remove complete dyn hold up from cell. 2016-08-04 14:11:23 +02:00
490c0e6efb Add smoothing of dyn hold up. 2016-08-04 14:03:22 +02:00
ebcc951df3 Check on errors due to boundedness of fields. 2016-08-04 12:13:10 +02:00
1b7b190746 Move voidfraction update into own function. 2016-08-03 10:33:14 +02:00
011281d449 Merge branch 'feature/OF4x' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2016-08-02 14:35:50 +02:00
d5b2422bab Existence of required files increases likelihood of successful compilation drastically. 2016-08-02 14:29:35 +02:00
2c885c84d1 Change pressure boundary condition. 2016-08-02 13:16:40 +02:00
ff8db6374f Tutorial for cfdemSolverRhoPimple. 2016-08-02 13:00:33 +02:00
684eb53001 Updated to OF 4.x. 2016-08-02 12:59:26 +02:00
cf0d864c96 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/fines 2016-08-02 08:08:51 +02:00
cd614bf299 Updated tutorials. 2016-08-01 15:55:45 +02:00
308cdf27c4 Updated tutorials. 2016-08-01 15:51:59 +02:00
ec60bf8eee Updated Piso/ErgunTestMPI_cgs tutorial. 2016-08-01 15:48:27 +02:00
4ce5838238 Updated Piso/ErgunTestCG tutorial. 2016-08-01 15:43:33 +02:00
4c7b7c7f4e Delete output.mp4 2016-07-27 15:11:49 +02:00
61f633e3b2 shrink vid 2016-07-27 14:38:53 +02:00
b49a013474 shrinking tutorial case 2016-07-27 14:38:17 +02:00
30a057a87c changed modified spec names 2016-07-27 14:31:17 +02:00
09d567e963 Implicit heat transfer. Introduction of postFlow() to perform coupling operations after solution of fluid eqns. 2016-07-26 12:55:15 +02:00
5062acea1f Changes in pore size calculations. 2016-07-22 10:45:54 +02:00
d30f828fe5 Updating solvers to OF 4.x. 2016-07-21 12:16:55 +02:00
0a2f1c793a Cleaning up cfdemSolverPiso tutorial ErgunMPI. 2016-07-21 12:16:09 +02:00
5f05e074d1 fixes in tutorial-case 2016-07-20 17:16:52 +02:00
85b7e448c9 fixed names for data transfer with DEM 2016-07-20 17:15:28 +02:00
37c653945a added the execution of chem reactions to solver 2016-07-20 17:14:42 +02:00
8bb99ae9ce Adapted source code to OF 4.x. 2016-07-20 14:57:05 +02:00
1265463275 Update files and options lists. 2016-07-20 14:56:41 +02:00
3ad42f2326 New OF version. Not needed by code. 2016-07-20 14:55:55 +02:00
44d9b77f07 rmdepall changed to wrmdep -a. 2016-07-20 14:55:01 +02:00
9b3ed8eda6 CfdemSolverPiso tutorial adapted to OF 4.x. 2016-07-20 14:53:48 +02:00
4b31e2f36f Adapt solvers to OF 4.x. 2016-07-20 14:51:11 +02:00
cdc38e7323 latest semi-working tutorial case 2016-07-19 17:08:43 +02:00
618992c2cb error check 2016-07-19 15:15:26 +02:00
ea88de9808 seperated pisoTemp solver & changed cloud energy 2016-07-19 14:35:16 +02:00
270475cd17 Limit hold-ups. 2016-07-19 08:27:51 +02:00
403a79d1ac Added switch for reconstruction of U from Phi. 2016-07-19 08:27:27 +02:00
02e80d4406 Limit absolute value of explicit momentum exchange term. 2016-07-15 10:46:45 +02:00
a8796c85da Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-07-14 17:19:39 +02:00
da9dd28ee9 debug checks in cfdem 2016-07-14 17:19:07 +02:00
6a09f6ce9a Delete CFDEM.includes 2016-07-14 15:33:34 +02:00
41191dff77 Delete CFDEM.files 2016-07-14 15:33:24 +02:00
a8dc59cd7a Delete CFDEM.creator 2016-07-14 15:33:16 +02:00
50885dba56 Delete CFDEM.config 2016-07-14 15:33:09 +02:00
57b8abfbda execute species added to cfdem cloud energy & small changes 2016-07-14 15:30:07 +02:00
34a4282a1e New pressure boundary treatment. 2016-07-14 14:59:03 +02:00
45e11369df Correct limit for uDyn, boundary conditions. 2016-07-14 14:58:09 +02:00
0ca7b3a75c seperated RhoPimpleChem solver from RhoPimple 2016-07-14 10:47:22 +02:00
57e19765e0 Testing new boundary condition for pressure gradient. 2016-07-13 18:47:18 +02:00
32870ea73f Added testing functions. Will be removed again. 2016-07-13 18:06:02 +02:00
3ba3e19563 tutorial case for chem/shrink 2016-07-13 13:08:21 +02:00
4f7c2cbbab Use explicit momentum couple models only. 2016-07-13 08:34:44 +02:00
5b8749336f Explicit momentum couple model holds its own fields now. 2016-07-13 08:34:07 +02:00
cc8d3d7272 Clean up. 2016-07-13 08:33:19 +02:00
527d140b00 Moved fOther into UEqn. 2016-07-13 08:32:46 +02:00
3a80605540 Correct definition of Froude number. 2016-07-12 14:02:21 +02:00
b552c888ba Update drag coefficient. 2016-07-12 11:39:02 +02:00
740d366e59 Allow for additional body forces. 2016-07-07 15:43:44 +02:00
9fc8e046df Merge cfdemSolverRhoPimple into fines. 2016-07-07 13:45:44 +02:00
7abdad8394 Minor changes. 2016-07-07 13:38:18 +02:00
b94f0f4d28 Make sure boundary fields are updated. 2016-07-07 13:37:44 +02:00
bd8ec597f6 Minor changes. 2016-07-07 13:37:02 +02:00
d99019ee73 Update file lists. 2016-07-07 13:35:50 +02:00
0a6fc10fbc Not necessary anymore. gradPForce can take scaling field via new forceSubmodel. 2016-07-07 13:35:18 +02:00
29ec96de52 New forceSubModel to scale force with user-defined field. 2016-07-06 17:20:24 +02:00
561bdbc029 Made function virtual. 2016-07-06 17:19:54 +02:00
dada2f98fb Added relative contribution of static hold-up to solid fraction field. 2016-07-06 17:19:27 +02:00
39342e4631 Update file lists. 2016-07-06 17:18:55 +02:00
d9441091f5 FinesFields need no runtime selection mechanism for now. 2016-07-06 16:24:10 +02:00
9f45e97632 Removed non-existing member function from class declaration. 2016-07-06 16:23:09 +02:00
9a98108b02 OtherForces optional, need not be specified. 2016-07-06 16:21:30 +02:00
7b846237ec Cleaning up. 2016-07-05 15:36:28 +02:00
585dc68ff5 Fix sign error: Force on particles = - Force on fluid. 2016-07-05 14:59:31 +02:00
76fd1f1e02 Force models other than those for implicit particle-fluid interaction. 2016-07-05 14:53:37 +02:00
18c2a950a3 Cleaning up. 2016-07-05 14:52:11 +02:00
c4fc6d9229 Allow for other types of forces like external ones or explicit particle-fluid interaction. 2016-07-05 14:51:38 +02:00
fcd57a17f5 Update file list. 2016-07-05 14:50:23 +02:00
2da9631f20 Some cleaning up of fines models. 2016-07-05 10:27:41 +02:00
1be85551c1 Update file lists. 2016-07-05 10:26:03 +02:00
057b94ae89 Minor modifications. 2016-07-04 16:43:12 +02:00
4608b8f228 Added export functions for Froude number etc. 2016-07-01 17:26:20 +02:00
a70c21a77d Minor modifications. 2016-07-01 15:04:19 +02:00
c44bb87ea4 Calculation of Sauter mean diameter. 2016-07-01 09:08:47 +02:00
ca1263b6a6 Force model for dynamic hold-up. 2016-07-01 09:08:11 +02:00
8d495580ed Update file list. 2016-07-01 09:07:12 +02:00
686cc4122c Heat flux through walls can now be controlled via boundary field. 2016-06-09 12:23:28 +02:00
fc01f7a409 Allow for wall-film effects. 2016-06-08 20:38:42 +02:00
a6a2c0bd41 fixed tutorial case for chemistry coupling 2016-06-07 10:52:33 +02:00
4dd26fa5af Basic functionality for implicit heat transfer. 2016-06-03 13:52:44 +02:00
c9c0e49a0f changed tutorial case for test 2016-06-03 12:38:23 +02:00
9aba825507 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-06-03 10:38:23 +02:00
f814cece09 Calculate BCs for thermDiff instead of specifying them separately. 2016-06-03 10:37:44 +02:00
59eb7962f4 Removed comments for testing purposes. 2016-06-03 10:33:38 +02:00
7ef2dc93a3 fixed tutorial case 2016-05-31 13:47:23 +02:00
884d99fbb4 Make energy eqn. dimension-consistent. 2016-05-30 12:06:27 +02:00
3791e818f9 Update list of source files for compressible case. 2016-05-30 11:49:00 +02:00
a986592e0a Resolving merge issues 2016-05-17 09:37:20 +02:00
a731d14e72 Change of averaging procedure. 2016-05-17 08:21:27 +02:00
d4ccd008ba Fix dimensions problem. 2016-05-14 16:59:57 +02:00
d321fb5a2f Change weight argument in averaging and sum functions to const. 2016-05-14 16:59:23 +02:00
712b5b9617 Fix change of write options for IOObjects. 2016-05-13 19:19:48 +02:00
bdd8244e82 Hopefully fixing merge problems. 2016-05-13 19:01:59 +02:00
001225b5e4 Make tutorial case work. Needs thDiff initial condition. 2016-05-13 18:58:17 +02:00
8eb000e27b Towards particle temp. field. 2016-05-13 18:55:48 +02:00
8cbaa515e4 Add functionality to average particle temperatures. 2016-05-13 13:59:18 +02:00
6777c7b7dd dim change 2016-05-13 10:51:45 +02:00
920d6468d8 thermal diffusivity was missing 2016-05-13 10:50:38 +02:00
8b7e48ac36 fixed noThermCond model 2016-05-13 10:49:04 +02:00
d8689ee78d Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-05-12 17:24:09 +02:00
32331ab366 partial working test case 2016-05-12 16:52:35 +02:00
5458e4b7d5 minor changes 2016-05-12 16:51:59 +02:00
0530e6eed8 Some cleaning up. Material produced from reactions summed up and scaled by cell size. 2016-05-12 14:38:40 +02:00
9e9ca2f0a4 Little changes. 2016-05-12 14:24:32 +02:00
ac29491c96 Switch to Syamlal model. 2016-05-12 14:24:10 +02:00
b149954ec5 Needed to include div scheme. 2016-05-12 14:23:37 +02:00
11b8b27bae kf and Cp need to have dimensions. Cp != 0. 2016-05-12 14:03:28 +02:00
3071b8a26e Move thermal diff. function call outside laplacian. 2016-05-12 13:53:26 +02:00
f2974ddc0c Dimensional problem. 2016-05-12 13:52:21 +02:00
7391e297c6 Changes in species model. 2016-05-12 13:51:15 +02:00
3314125aab Update files to compile also for compressible case. 2016-05-12 13:18:28 +02:00
81550e5d46 Fix dimension problem. 2016-05-12 13:16:19 +02:00
574ffd3932 Tutorial case for cfdemSolverRhoPimpleChem 2016-05-11 18:47:28 +02:00
949fe61957 give and get data from Liggghts 2016-05-11 18:39:21 +02:00
e2ab9fb68d thermCondModel off is added 2016-05-11 18:38:22 +02:00
90cc4d789f created member functions 2016-05-04 14:53:43 +02:00
4c5ec2e420 Changed voidfraction,rho to rhoeps 2016-05-04 14:52:58 +02:00
e9783bb370 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-04-28 16:11:29 +02:00
41584c876d read from file 2016-04-28 16:11:00 +02:00
bb3f463352 Particle temperature field. 2016-04-28 12:15:15 +02:00
a86e7ee06d Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-04-28 12:00:38 +02:00
d28ecb867d Particle temperature field. 2016-04-28 11:59:58 +02:00
1000e08080 advances in species.c 2016-04-27 10:48:23 +02:00
3c166d62ea changes to species submodel 2016-04-22 14:51:23 +02:00
12043fdc30 Merge branch 'feature/cfdemSolverRhoPimple' of https://github.com/ParticulateFlow/CFDEMcoupling into feature/cfdemSolverRhoPimple 2016-04-20 12:01:59 +02:00
44ee6fd38d Changes to species 2016-04-20 12:01:16 +02:00
9fc0c932d9 Minor changes. 2016-04-14 16:18:14 +02:00
1447d847cf Rearrange T eqn. 2016-04-11 15:14:44 +02:00
0b120395d3 Minor changes. 2016-03-31 10:35:53 +02:00
cc4dcedd4c Changes of class structures, additional models. 2016-03-30 16:48:50 +02:00
7e6aefc052 Minor changes. 2016-03-30 16:46:19 +02:00
8bfe2901b8 New solver, explicitly handling chemistry. 2016-03-30 16:45:39 +02:00
fff5d45e4c Minor changes. 2016-03-30 16:44:28 +02:00
4cb96a17c4 Classes to exchange species concentrations. 2016-03-04 14:59:46 +01:00
43f0574a72 Minor changes. 2016-03-01 13:24:35 +01:00
221cc19233 Piso with passive temperature equation. 2016-02-29 17:21:29 +01:00
7242c84635 Minor modifications. 2016-02-29 17:18:59 +01:00
0a818fa98c Merge branch 'develop' into feature/cfdemSolverRhoPimple
Make new drag law available.
2016-02-29 09:35:36 +01:00
c0daf66680 Merge pull request #3 from ParticulateFlow/feature/BeetstraDrag
Feature/beetstra drag
2016-02-29 09:28:06 +01:00
e2a2cdc6ac Make Beetstra drag fit for coarse graining. 2016-02-29 09:27:10 +01:00
6675ec3868 Minor changes. 2016-02-28 19:41:27 +01:00
e6f51210c4 Minor changes. 2016-02-27 13:20:27 +01:00
46111bb4cb Energy models. 2016-02-27 13:20:09 +01:00
9a596eb4d2 Beetstra drag law, added citation. 2016-02-26 11:03:11 +01:00
434e3983f6 Basics for compressible, reacting flows. 2016-02-25 15:39:17 +01:00
9fc7dcf4f2 Moved heat transfer from force to energy models. 2015-08-24 10:15:59 +02:00
8a97305e85 Added energyModel to handle heat transfer etc. 2015-08-22 11:53:12 +02:00
2ec3a3efe7 Included heat transfer between particles and fluid, thermal conductivity of fluid; 2015-08-21 12:49:30 +02:00
993af3bea9 Removed some unnecessary files. 2015-08-04 14:28:58 +02:00
892afa5105 Compressible CFD-DEM solver based on rhoPimpleFoam. No energy transfer between gas and particle phase yet. 2015-08-04 14:15:43 +02:00
7e900b2bbc Fixed missing sign in drag coefficient. 2015-07-27 08:37:55 +02:00
c41e2966d5 Added Beetstra drag law (monodisperse case) 2015-07-21 14:41:54 +02:00
bd4a11de47 fix generation of satellite points on sphere surface
integer division caused irregular gap; off-by-one error caused first set
of xySplit points to be at the same position
2015-04-13 10:40:56 +02:00
eaa75ad0b3 dataExchangeModel: fix potential memory leaks 2015-04-02 13:25:17 +02:00
0c66e15979 fix my own stupidity 2015-04-02 10:58:50 +02:00
6c07ee75c0 re-allocation: revert to original behaviour
The problem with allocateArray is that the base class dataExchangeModel
actually allocates new memory disregarding already allocated (and
populated) memory while derived classes like twoWayMPI and
twoWayMany2Many ultimately use realloc
2015-04-02 09:41:22 +02:00
47772ea9d4 use correct data type 2015-04-01 16:44:39 +02:00
e255c3c28e width of this array has nothing to do with maxCellsPerParticle_
This is effectively a 1D array, but there's no method to automatically
create a 1D array with the length of nParticles as there is for the 2D
case ...
2015-04-01 16:35:16 +02:00
4c5d63e966 remove unused calls of MPI_Comm_rank 2015-04-01 15:35:15 +02:00
46ca306ada re-allocation of memory part 2
first destroy already allocated memory, then allocate new memory
2015-04-01 15:24:09 +02:00
077e0ff8aa clean up namespace 2015-04-01 11:45:24 +02:00
fd3a6362bf re-allocation of memory
first destroy already allocated memory, then allocate new memory
2015-04-01 10:53:01 +02:00
7161d6f15f use correct data type
converting back and forth between double and integer may cause issues
2015-03-31 17:18:05 +02:00
e2343661bb reflect what OpenFOAM expects 2015-03-31 16:35:05 +02:00
d387a2117f use const word& instead of word in parameter list
oops .. here as well
2015-03-31 16:31:36 +02:00
ededde9190 MPI: (rank < size) is always true 2015-03-31 15:48:16 +02:00
851deae90b use const word& instead of word in parameter list 2015-03-31 15:34:56 +02:00
6ad466dcea remove extra semicolons 2015-03-31 15:08:50 +02:00
f5c277b1c7 formatting 2015-03-31 15:02:51 +02:00
87536c03fd reduce divisions 2015-03-31 14:57:07 +02:00
5246a1ec66 integer division 2015-03-31 14:52:32 +02:00
e5dfd4b4eb Simplified twoWayMPI
The code seems to be derived from the LAMMPS COUPLE library. The original COUPLE code
allowed using a subset of the global processors for the coupled code. Some fractions
of that code remained, but on their own don't make sense anymore. Since no additional
colors are assigned to processors, MPI_Comm_split effectively just duplicates the
global communicator, which can be easily done using MPI_Comm_dup.

The second simplification is that the code tried to limit IO to MPI rank 0. The filename
of the input script was read in by one MPI rank and then broadcasted to all other ranks.
While from the outside this seems to make sense from an MPI programmer standpoint, it does
not take the OpenFOAM implementation into account. IODictionary is already multi-processor
aware. Reading operations are done only on the master processor. This means the dictionary
is already in memory for each MPI processor at this point in time and lookup() is an
in-memory operation.
2015-03-31 11:36:31 +02:00
1f0efcae7f make the value that is set useable ... 2015-03-30 15:46:18 +02:00
78918f8831 using predefined constant 2015-03-30 15:31:18 +02:00
11632e0539 improve readability 2015-03-30 14:20:26 +02:00
3ee0bf41de remove temp variables / simplify 2015-03-30 14:17:35 +02:00
3ca84c7dea accidentially removed parenthesis 2015-03-27 14:47:16 +01:00
d697c7afe0 white space clean up 2015-03-27 13:11:34 +01:00
981a8390c6 be generous with comment characters 2015-03-27 13:11:04 +01:00
d786f9680f use constants from math.h 2015-03-27 10:17:52 +01:00
3c1e7ca6a5 fun with OpenFOAM data types
OpenFOAM Switches default to false ...
2015-03-26 17:56:06 +01:00
142d87252b usage of OpenFoam::List 2015-03-26 17:30:20 +01:00
81b8c9cdad you've got to slow down, yeah, yeah, yeah, slow down
pow() used at its best
2015-03-26 16:52:31 +01:00
d3a0036acf don't use pow() for squaring 2015-03-26 16:25:49 +01:00
29cc6d9d74 inheritance is cool, pointers to local objects not so much 2015-03-26 16:09:44 +01:00
343d1cba5b use const std::string& instead of std::string as parameter 2015-03-26 15:06:05 +01:00
8566c7eaa4 convert tabs to spaces 2015-03-26 14:49:18 +01:00
acf0673e38 simplify string operations & initialization 2015-03-26 14:48:21 +01:00
c60bf9bf80 clean up twoWayMPI allocate/destroy functions
just the way LIGGGHTS is doing it ...
2015-03-25 17:42:04 +01:00
f4501938ff just mpi gather no need to sum up 2015-03-25 16:29:23 +01:00
69d18478fd remove extra semicolons 2015-03-25 14:24:14 +01:00
a1d8c61241 merge with CFDEMcoupling-PUBLIC 2.9.0 2015-03-25 14:23:49 +01:00
0f0ca849f6 remove extra semicolons 2015-03-25 11:01:56 +01:00
4c2d7531d4 zeroize pointers after freeing memory 2015-03-25 09:24:31 +01:00
3fbfa12318 no need to construct doubles from doubles ... 2015-03-24 14:09:23 +01:00
3bb89106cd the magic of const correctness 2015-03-24 13:20:38 +01:00
8b2292482f bad idea to return reference to local variable ... 2015-03-24 13:12:41 +01:00
c5e4f287dd just cleaning up whitespaces 2015-03-24 13:08:34 +01:00
84aa47ff72 OpenFoam lists have no such constructor... 2015-03-24 13:03:40 +01:00
99ea452db5 return sth. according to function declaration 2015-03-24 13:00:36 +01:00
667e806224 use static_cast instead of old-style casts 2015-03-24 12:58:33 +01:00
1307a0ef22 bug fixing by const correctness
also use static_cast instead of old-style casts!
2015-03-24 12:54:54 +01:00
0a8baeeeb3 zeroize pointers after destruction 2015-03-24 12:42:50 +01:00
54f00c6e53 integer division 2015-03-24 12:30:19 +01:00
5fcf7a7091 remove unused variables 2015-03-24 11:51:18 +01:00
2e72cfa774 remove extra semicolons 2015-03-24 11:47:10 +01:00
3d1bd01bc4 Merge remote-tracking branch 'origin/cmake_support' into bugfixing 2015-03-23 12:08:25 +01:00
ea0d7b0351 Changed to CMake compilation of LIGGGHTS
The cfdemCompLIG utility has been updated to use of CMake to compile LIGGGHTS.
This will generate a liggghts binary and libliggghts.so shared library which
can be used by CFDEMcoupling.

Users need to add the new environment variable CFDEM_LIGGGHTS_BIN_DIR into
their bashrc file, e.g.:

export CFDEM_LIGGGHTS_SRC_DIR=$PFM_DIR/LIGGGHTS/src
export CFDEM_LIGGGHTS_BIN_DIR=$PFM_DIR/LIGGGHTS/src-build

Other bash utilities in etc/functions.sh have also been updated, including
parDEMrun and parCFDEMrun.
2015-03-01 21:41:43 +01:00
59adfbe6ac Changes system header includes from "" to <> syntax
This avoids irritating warnings of wmake about it not finding certain headers
(e.g. system headers). Similar things were necessary in some headers of the
LIGGGHTS code. While these did not cause compilation errors, they messed up
the compilation output with hundrets of false alarms. Not very helpful if
you're trying to find out what went wrong.

One special case is the change from RASModel.H to turbulenceModel.H in
cfdemCloud.H. Between major OpenFOAM versions there was a change of how
turbulence models were implemented. While the CFDEMcoupling code uses
preprocessors to allow compatibility, the wmkdepend utility is too simple
to understand this. It does not evaluate #ifdef constructs and just looks
for #include lines. Therefore it tries to access RASModel.H in newer
versions of OpenFOAM, which no longer exists.

To circumvent this issue, both includes were changed from "" to <> syntax.
This suppresses the warning and compiles, since the OpenFOAM header is in
the include path anyway.
2015-03-01 20:25:17 +01:00
ee44d40c0e update utilities-list.txt 2015-01-05 13:56:45 +01:00
57d121a073 add finiteVolume/Make/files 2015-01-05 13:56:45 +01:00
fd44270f96 update Make/files 2015-01-05 13:56:45 +01:00
88743b79fd release on 2015-01-05_13-56-45 2015-01-05 13:56:45 +01:00
7fa304d58b Removed the '../DEM' reference from the liggghts init file 2014-12-12 10:34:35 +01:00
b4949ebd52 Solved merge conflict 2014-12-11 18:35:06 +01:00
fb3e8011d1 Cleanup + update for TH files 2014-12-11 18:33:49 +01:00
6d8e15561a update library-list.txt 2014-11-10 08:39:14 +01:00
30ad85f165 update solver-list.txt 2014-11-10 08:39:14 +01:00
8f38e3323c update tutorial-list.txt 2014-11-10 08:39:14 +01:00
5472fe1365 update Make/files 2014-11-10 08:39:14 +01:00
add7ade558 release on 2014-11-10_08-39-14 2014-11-10 08:39:14 +01:00
e1f10f705f Merge branch 'master' of github.com:CFDEMproject/CFDEMcoupling-PFM 2014-11-10 08:38:33 +01:00
270d1a9c51 update library-liggghts-list.txt 2014-11-10 08:33:26 +01:00
6b9b8c123e update library-list.txt 2014-11-10 08:33:26 +01:00
610cf500d3 update solver-list.txt 2014-11-10 08:33:26 +01:00
ded954c64b update tutorial-list.txt 2014-11-10 08:33:26 +01:00
c1f45f8477 update Make/files 2014-11-10 08:33:26 +01:00
ddb19070c5 release on 2014-11-10_08-33-26 2014-11-10 08:33:26 +01:00
f3e1d1428b update library-list.txt 2014-11-10 08:32:06 +01:00
aaaec21646 update solver-list.txt 2014-11-10 08:32:06 +01:00
dfea70fa96 update tutorial-list.txt 2014-11-10 08:32:06 +01:00
81282bbbc6 update Make/files 2014-11-10 08:32:06 +01:00
4426ba4085 release on 2014-11-10_08-32-06 2014-11-10 08:32:06 +01:00
c490123018 update library-liggghts-list.txt 2014-11-10 08:22:06 +01:00
7d43b2a63e update library-list.txt 2014-11-10 08:22:06 +01:00
87c12986cd update solver-list.txt 2014-11-10 08:22:06 +01:00
cabf5a36f9 update tutorial-list.txt 2014-11-10 08:22:06 +01:00
48f4f7508b update Make/files 2014-11-10 08:22:06 +01:00
c562f96f4a release on 2014-11-10_08-22-06 2014-11-10 08:22:06 +01:00
011ab2d3e2 update library-list.txt 2014-11-10 07:57:16 +01:00
fe05da2f16 update solver-list.txt 2014-11-10 07:57:16 +01:00
1c3d9b093c update tutorial-list.txt 2014-11-10 07:57:16 +01:00
a349923c3a update Make/files 2014-11-10 07:57:16 +01:00
409283acc3 release on 2014-11-10_07-57-15 2014-11-10 07:57:15 +01:00
eb6d45dd7b Fixes Compilation
Added missing object files back to lagrangian library. Otherwise solvers
won't compile. If this removal was intentional, it was not complete.
Reverting the change for now.
2014-11-09 18:53:26 +01:00
a8c8955d53 update library-liggghts-list.txt 2014-07-25 13:42:42 +02:00
43f460dc93 update library-list.txt 2014-07-25 13:42:42 +02:00
b4de650ed5 update solver-list.txt 2014-07-25 13:42:42 +02:00
8fb60fd045 update tutorial-list.txt 2014-07-25 13:42:41 +02:00
80030014a2 update Make/files 2014-07-25 13:42:41 +02:00
791bf252aa release on 2014-07-25_13-42-41 2014-07-25 13:42:41 +02:00
b16fb689e1 update library-list.txt 2014-07-17 16:27:28 +02:00
9e5a37168b update solver-list.txt 2014-07-17 16:27:28 +02:00
a2202729bc update tutorial-list.txt 2014-07-17 16:27:28 +02:00
bfafc1ec3b update Make/files 2014-07-17 16:27:28 +02:00
527be9e524 release on 2014-07-17_16-27-27 2014-07-17 16:27:28 +02:00
affb9e9720 update library-liggghts-list.txt 2014-07-17 15:58:49 +02:00
ff02919c99 update library-list.txt 2014-07-17 15:58:49 +02:00
83f8c89120 update solver-list.txt 2014-07-17 15:58:49 +02:00
e746c83f7d update tutorial-list.txt 2014-07-17 15:58:49 +02:00
70e274eb6c update Make/files 2014-07-17 15:58:49 +02:00
bcf54bf223 release on 2014-07-17_15-58-48 2014-07-17 15:58:49 +02:00
f035592c8e update library-list.txt 2014-07-17 11:24:53 +02:00
275bbed043 update solver-list.txt 2014-07-17 11:24:53 +02:00
6bb5e40c45 update tutorial-list.txt 2014-07-17 11:24:53 +02:00
5546d49a3f update Make/files 2014-07-17 11:24:53 +02:00
b0c9a14b8d release on 2014-07-17_11-24-52 2014-07-17 11:24:53 +02:00
8409a90179 update library-liggghts-list.txt 2014-07-17 10:14:56 +02:00
11fb74ce69 update library-list.txt 2014-07-17 10:14:56 +02:00
857f4499ca update solver-list.txt 2014-07-17 10:14:56 +02:00
db33ebfef4 update tutorial-list.txt 2014-07-17 10:14:56 +02:00
b20ea25fd4 update Make/files 2014-07-17 10:14:56 +02:00
cd4b4be8a2 release on 2014-07-17_10-14-56 2014-07-17 10:14:56 +02:00
32d614e017 update 2014-07-17 10:14:11 +02:00
867a60c965 update library-list.txt 2014-07-17 10:09:13 +02:00
9e5549b609 update solver-list.txt 2014-07-17 10:09:13 +02:00
3a1f1c1d9b update tutorial-list.txt 2014-07-17 10:09:13 +02:00
3fa5a83898 update Make/files 2014-07-17 10:09:13 +02:00
b969132b10 release on 2014-07-17_10-09-13 2014-07-17 10:09:13 +02:00
892ba4fef1 update library-liggghts-list.txt 2014-07-17 09:51:23 +02:00
dbec0a7a2c update library-list.txt 2014-07-17 09:51:23 +02:00
3bba346156 update solver-list.txt 2014-07-17 09:51:23 +02:00
b9bc51fca2 update tutorial-list.txt 2014-07-17 09:51:23 +02:00
cd1657e412 update Make/files 2014-07-17 09:51:23 +02:00
1d04b8c164 release on 2014-07-17_09-51-22 2014-07-17 09:51:22 +02:00
3b2dedf0fd update library-list.txt 2014-07-04 12:02:15 +02:00
a36d316891 update solver-list.txt 2014-07-04 12:02:15 +02:00
32ff1d83af update tutorial-list.txt 2014-07-04 12:02:15 +02:00
b378a79102 update Make/files 2014-07-04 12:02:15 +02:00
444b6f763e release on 2014-07-04_12-02-15 2014-07-04 12:02:15 +02:00
6888d13c52 update library-liggghts-list.txt 2014-07-04 11:58:55 +02:00
9ad186dabc update library-list.txt 2014-07-04 11:58:55 +02:00
6e48baf6bc update solver-list.txt 2014-07-04 11:58:55 +02:00
21fbdc17fc update tutorial-list.txt 2014-07-04 11:58:54 +02:00
92dbaab2c4 update Make/files 2014-07-04 11:58:54 +02:00
a26009c9b7 release on 2014-07-04_11-58-54 2014-07-04 11:58:54 +02:00
910adb37d0 update library-list.txt 2014-07-04 09:56:56 +02:00
cf56709426 update solver-list.txt 2014-07-04 09:56:56 +02:00
02ad97b3ed update tutorial-list.txt 2014-07-04 09:56:56 +02:00
27fbdf50f3 update Make/files 2014-07-04 09:56:56 +02:00
e3e93ccfd4 release on 2014-07-04_09-56-56 2014-07-04 09:56:56 +02:00
0460c28694 update library-liggghts-list.txt 2014-07-04 09:53:14 +02:00
db5984d24a update library-list.txt 2014-07-04 09:53:14 +02:00
d794e8cac0 update solver-list.txt 2014-07-04 09:53:14 +02:00
6bae5b44d6 update tutorial-list.txt 2014-07-04 09:53:14 +02:00
6d9b556231 update Make/files 2014-07-04 09:53:14 +02:00
e8514b10bc release on 2014-07-04_09-53-14 2014-07-04 09:53:14 +02:00
ef9d5ebff9 update library-list.txt 2014-07-04 09:43:11 +02:00
628368e97b update solver-list.txt 2014-07-04 09:43:11 +02:00
d3af4fd13a update tutorial-list.txt 2014-07-04 09:43:11 +02:00
2df88af289 update Make/files 2014-07-04 09:43:11 +02:00
b20860e826 release on 2014-07-04_09-43-11 2014-07-04 09:43:11 +02:00
09aa5c1efc update library-liggghts-list.txt 2014-07-04 09:37:38 +02:00
e9e45a2815 update library-list.txt 2014-07-04 09:37:38 +02:00
65b9902d8f update solver-list.txt 2014-07-04 09:37:38 +02:00
d23a5d4972 update tutorial-list.txt 2014-07-04 09:37:38 +02:00
b6550307f4 update Make/files 2014-07-04 09:37:38 +02:00
f891594815 release on 2014-07-04_09-37-38 2014-07-04 09:37:38 +02:00
2950eeed6f update library-list.txt 2014-07-04 08:57:39 +02:00
f20357eff5 update solver-list.txt 2014-07-04 08:57:39 +02:00
c09782151b update tutorial-list.txt 2014-07-04 08:57:39 +02:00
e1862dbbde update Make/files 2014-07-04 08:57:39 +02:00
89fa69ab8d release on 2014-07-04_08-57-37 2014-07-04 08:57:38 +02:00
46601ef6be update library-liggghts-list.txt 2014-06-12 21:37:57 +02:00
22e1d9d1cc update library-list.txt 2014-06-12 21:37:57 +02:00
286b03e644 update solver-list.txt 2014-06-12 21:37:57 +02:00
779dc76694 update tutorial-list.txt 2014-06-12 21:37:57 +02:00
806e505ae3 update Make/files 2014-06-12 21:37:57 +02:00
2eb3439691 release on 2014-06-12_21-37-56 2014-06-12 21:37:57 +02:00
eafb8c413f update library-list.txt 2014-06-02 18:53:40 +02:00
2558225dc1 update solver-list.txt 2014-06-02 18:53:40 +02:00
ff6189d1ad update tutorial-list.txt 2014-06-02 18:53:40 +02:00
9f07eafcda update Make/files 2014-06-02 18:53:40 +02:00
2a4845872c release on 2014-06-02_18-53-39 2014-06-02 18:53:40 +02:00
586cbb4b88 update library-liggghts-list.txt 2014-06-02 18:34:53 +02:00
fa70af51b5 update library-list.txt 2014-06-02 18:34:53 +02:00
ee26baa5bb update solver-list.txt 2014-06-02 18:34:53 +02:00
099d914425 update tutorial-list.txt 2014-06-02 18:34:53 +02:00
ee7034701b update Make/files 2014-06-02 18:34:53 +02:00
9c78ca97f7 release on 2014-06-02_18-34-52 2014-06-02 18:34:53 +02:00
c3bfe130c6 added gitignore file 2014-05-26 19:21:56 +02:00
5c9178ce4d update library-list.txt 2014-05-13 08:58:59 +02:00
64019057ee update solver-list.txt 2014-05-13 08:58:59 +02:00
fe57fac365 update tutorial-list.txt 2014-05-13 08:58:59 +02:00
bc7361faf4 update Make/files 2014-05-13 08:58:59 +02:00
1703 changed files with 135633 additions and 57658 deletions

12
.gitignore vendored Normal file
View File

@ -0,0 +1,12 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~
**/linux*Gcc*/
**/.vscode
lnInclude

33
README
View File

@ -5,7 +5,8 @@
www.cfdem.com
Christoph Goniva, christoph.goniva@cfdem.com
Copyright 2009-2012 JKU Linz
Copyright 2012- DCS Computing GmbH, Linz
Copyright 2012-2015 DCS Computing GmbH, Linz
Copyright 2015- JKU Linz
-------------------------------------------------------------------------------
License
This file is part of CFDEMcoupling.
@ -25,16 +26,17 @@ License
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).
This code provides models and solvers 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
CFDEM(R) coupling provides an open source parallel coupled CFD-DEM framework
combining the strengths of the LIGGGHTS(R) DEM code and the Open Source
CFD package OpenFOAM(R)(*). The CFDEM(R)coupling 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
code LIGGGHTS(R). 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.
@ -45,8 +47,6 @@ 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
@ -54,7 +54,7 @@ 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
- "doc" directory including the documentation of CFDEM(R)coupling
- "tutorials" directory including basic tutorial cases showing the functionality
@ -64,18 +64,17 @@ 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) -
CFDEM(R)coupling stands for Computational Fluid Dynamics (CFD) -
Discrete Element Method (DEM) coupling.
CFDEMcoupling is an open-source code, distributed freely under the terms of the
CFDEM(R)coupling is an open-source code, distributed freely under the terms of the
GNU Public License (GPL).
Core development of CFDEMcoupling is done by
Core development of CFDEM(R)coupling is done by
Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
\*---------------------------------------------------------------------------*/
(*) "OpenFOAM(R)"_of is a registered trade mark of the ESI Group.
This offering is not affiliated, approved or endorsed by ESI Group,
the producer of the OpenFOAM® software and owner of the OpenFOAM® trade mark.
/*---------------------------------------------------------------------------*\
(*) "OpenFOAM(R)" is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.
This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks.
\*---------------------------------------------------------------------------*/

7
applications/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
*.o
*.d
*.a
*.dep
log_*
log.*
*~

View File

@ -1,10 +1,14 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
@ -13,12 +17,16 @@ EXE_INC = \
-I$(LIB_SRC)/fvOptions/lnInclude
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\
-lincompressibleRASModels \
-lincompressibleLESModels \
-L$(CFDEM_LIB_DIR)\
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-lmeshTools \
-ldynamicFvMesh \
-ldynamicMesh \
-lfvOptions \
-l$(CFDEM_LIB_NAME)
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -39,7 +39,8 @@ Contributions
#include "fvCFD.H"
#include "singlePhaseTransportModel.H"
#include "turbulenceModel.H"
#include "turbulentTransportModel.H"
#include "pisoControl.H"
#include "cfdemCloudIB.H"
#include "implicitCouple.H"
@ -52,11 +53,6 @@ Contributions
#include "cellSet.H"
#if defined(version22)
#include "meshToMeshNew.H"
#include "fvIOoptionList.H"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
@ -67,14 +63,14 @@ int main(int argc, char *argv[])
#include "createDynamicFvMesh.H"
#include "createControl.H"
#include "createTimeControls.H"
#include "createFields.H"
#include "initContinuityErrs.H"
#if defined(version22)
#include "createFvOptions.H"
#endif
// create cfdemCloud
#include "readGravitationalAcceleration.H"
cfdemCloudIB particleCloud(mesh);
@ -91,8 +87,9 @@ int main(int argc, char *argv[])
interFace = mag(mesh.lookupObject<volScalarField>("voidfractionNext"));
mesh.update(); //dyM
#include "readPISOControls.H"
#include "readTimeControls.H"
#include "CourantNo.H"
#include "setDeltaT.H"
// do particle stuff
Info << "- evolve()" << endl;
@ -107,43 +104,29 @@ int main(int argc, char *argv[])
fvm::ddt(voidfraction,U)
+ fvm::div(phi, U)
+ turbulence->divDevReff(U)
#if defined(version22)
==
fvOptions(U)
#endif
);
UEqn.relax();
#if defined(version22)
fvOptions.constrain(UEqn);
#endif
if (momentumPredictor)
if (piso.momentumPredictor())
{
solve(UEqn == -fvc::grad(p));
}
// --- PISO loop
for (int corr=0; corr<nCorr; corr++)
while (piso.correct())
{
volScalarField rUA = 1.0/UEqn.A();
surfaceScalarField rUAf(fvc::interpolate(rUA));
U = rUA*UEqn.H();
#ifdef version23
phi = (fvc::interpolate(U) & mesh.Sf()); // there is a new version in 23x
#else
phi = (fvc::interpolate(U) & mesh.Sf())
+ fvc::ddtPhiCorr(rUA, U, phi);
#endif
+ rUAf*fvc::ddtCorr(U, phi);
adjustPhi(phi, U, p);
#if defined(version22)
fvOptions.relativeFlux(phi);
#endif
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
while (piso.correctNonOrthogonal())
{
// Pressure corrector
@ -154,20 +137,9 @@ int main(int argc, char *argv[])
pEqn.setReference(pRefCell, pRefValue);
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (nonOrth == nNonOrthCorr)
if (piso.finalNonOrthogonalIter())
{
phi -= pEqn.flux();
}
@ -186,10 +158,6 @@ int main(int argc, char *argv[])
volScalarField voidfractionNext=mesh.lookupObject<volScalarField>("voidfractionNext");
particleCloud.calcVelocityCorrection(p,U,phiIB,voidfractionNext);
#if defined(version22)
fvOptions.correct(U);
#endif
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"

View File

@ -0,0 +1,8 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
set -x
wclean libso multiphaseMixture
wclean
#------------------------------------------------------------------------------

View File

@ -0,0 +1,12 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
# Parse arguments for library compilation
targetType=libso
. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
set -x
wmake $targetType multiphaseMixture
wmake
#------------------------------------------------------------------------------

View File

@ -0,0 +1,3 @@
cfdemSolverMultiphase.C
EXE = $(CFDEM_APP_DIR)/cfdemSolverMultiphase

View File

@ -0,0 +1,30 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(CFDEM_OFVERSION_DIR) \
-ImultiphaseMixture/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(CFDEM_LIB_DIR)\
-lcfdemMultiphaseInterFoam \
-linterfaceProperties \
-lincompressibleTransportModels \
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lfiniteVolume \
-lfvOptions \
-lmeshTools \
-lsampling \
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -0,0 +1,61 @@
const surfaceScalarField& rhoPhi(mixture.rhoPhi());
volScalarField muEff = rho*(turbulence->nu() + turbulence->nut());
if (modelType == "A")
muEff *= voidfraction;
fvVectorMatrix UEqn
(
fvm::ddt(rhoEps, U) - fvm::Sp(fvc::ddt(rhoEps),U)
+ fvm::div(rhoPhi, U) - fvm::Sp(fvc::div(rhoPhi),U)
//+ particleCloud.divVoidfractionTau(U, voidfraction)
- fvm::laplacian(muEff, U) - fvc::div(muEff*dev2(fvc::grad(U)().T()))
==
fvOptions(rho, U)
- fvm::Sp(Ksl,U)
);
UEqn.relax();
fvOptions.constrain(UEqn);
if (pimple.momentumPredictor() && (modelType=="B" || modelType=="Bfull"))
{
solve
(
UEqn
==
fvc::reconstruct
(
(- ghf*fvc::snGrad(rho) - fvc::snGrad(p_rgh)) * mesh.magSf()
)
+
fvc::reconstruct
(
mixture.surfaceTensionForce() * mesh.magSf()
) * voidfraction
+ Ksl*Us
);
fvOptions.correct(U);
}
else if (pimple.momentumPredictor())
{
solve
(
UEqn
==
fvc::reconstruct
(
(
mixture.surfaceTensionForce()
- ghf*fvc::snGrad(rho)
- fvc::snGrad(p_rgh)
) * mesh.magSf()
) * voidfraction
+ Ksl*Us
);
fvOptions.correct(U);
}

View File

@ -0,0 +1,17 @@
// Additional solver-specific checks
// Useful if one wants to e.g. initialize floating particles using the Archimedes model
if (particleCloud.couplingProperties().found("unrestrictedForceModelSelection"))
{
Warning << "Using unrestrictedForceModelSelection, results may be incorrect!" << endl;
} else
{
#include "checkModelType.H"
}
word modelType = particleCloud.modelType();
if(!particleCloud.couplingProperties().found("useDDTvoidfraction"))
{
Warning << "Suppressing ddt(voidfraction) is not recommended with this solver as it may generate incorrect results!" << endl;
}

View File

@ -0,0 +1,21 @@
scalar alphaCoNum = 0.0;
scalar meanAlphaCoNum = 0.0;
if (mesh.nInternalFaces())
{
scalarField sumPhi
(
mixture.nearInterface()().primitiveField()
*fvc::surfaceSum(mag(phi))().primitiveField()
);
alphaCoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue();
meanAlphaCoNum =
0.5*(gSum(sumPhi)/gSum(mesh.V().field()))*runTime.deltaTValue();
}
Info<< "Interface Courant Number mean: " << meanAlphaCoNum
<< " max: " << alphaCoNum << endl;
// ************************************************************************* //

View File

@ -0,0 +1,148 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2018- Mathias Vångö, JKU Linz, Austria
Application
cfdemSolverMultiphase
Description
CFD-DEM solver for n incompressible fluids which captures the interfaces and
includes surface-tension and contact-angle effects for each phase. It is based
on the OpenFOAM(R)-4.x solver multiphaseInterFoam but extended to incorporate
DEM functionalities from the open-source DEM code LIGGGHTS.
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "multiphaseMixture.H"
#include "turbulentTransportModel.H"
#include "pimpleControl.H"
#include "fvOptions.H"
#include "CorrectPhi.H"
#include "cfdemCloud.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "postProcess.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "initContinuityErrs.H"
#include "createFields.H"
#include "createFvOptions.H"
#include "correctPhi.H"
#include "CourantNo.H"
turbulence->validate();
// create cfdemCloud
cfdemCloud particleCloud(mesh);
#include "additionalChecks.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.loop())
{
#include "CourantNo.H"
#include "alphaCourantNo.H"
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
particleCloud.clockM().start(2,"Coupling");
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField())).value();
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
if(particleCloud.solveFlow())
{
mixture.solve();
rho = mixture.rho();
rhoEps = rho * voidfraction;
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
#include "UEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
#include "pEqn.H"
}
if (pimple.turbCorr())
{
turbulence->correct();
}
}
}
else
{
Info << "skipping flow solution." << endl;
}
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
particleCloud.clockM().stop("Flow");
particleCloud.clockM().stop("Global");
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,11 @@
CorrectPhi
(
U,
phi,
p_rgh,
dimensionedScalar("rAUf", dimTime/rho.dimensions(), 1),
geometricZeroField(),
pimple
);
#include "continuityErrs.H"

View File

@ -0,0 +1,156 @@
//===============================
// particle interaction modelling
//===============================
Info<< "\nReading momentum exchange field Ksl\n" << endl;
volScalarField Ksl
(
IOobject
(
"Ksl",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
//dimensionedScalar("0", dimensionSet(1, -3, -1, 0, 0), 1.0)
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
IOobject
(
"voidfraction",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
voidfraction.oldTime();
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading field p_rgh\n" << endl;
volScalarField p_rgh
(
IOobject
(
"p_rgh",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(U*voidfraction) & mesh.Sf()
);
multiphaseMixture mixture(U, phi, voidfraction);
// Need to store rho for ddt(rho, U)
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mixture.rho()
);
rho.oldTime();
volScalarField rhoEps ("rhoEps", rho * voidfraction);
// Construct incompressible turbulence model
autoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, mixture)
);
#include "readGravitationalAcceleration.H"
#include "readhRef.H"
#include "gh.H"
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
p_rgh + rho*gh
);
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell
(
p,
p_rgh,
pimple.dict(),
pRefCell,
pRefValue
);
if (p_rgh.needReference())
{
p += dimensionedScalar
(
"p",
p.dimensions(),
pRefValue - getRefCellValue(p, pRefCell)
);
}
mesh.setFluxRequired(p_rgh.name());

View File

@ -0,0 +1,5 @@
phase/phase.C
alphaContactAngle/alphaContactAngleFvPatchScalarField.C
multiphaseMixture.C
LIB = $(CFDEM_LIB_DIR)/libcfdemMultiphaseInterFoam

View File

@ -0,0 +1,13 @@
EXE_INC = \
-IalphaContactAngle \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
LIB_LIBS = \
-linterfaceProperties \
-lincompressibleTransportModels \
-lfiniteVolume \
-lmeshTools

View File

@ -0,0 +1,146 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "alphaContactAngleFvPatchScalarField.H"
#include "addToRunTimeSelectionTable.H"
#include "fvPatchFieldMapper.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
alphaContactAngleFvPatchScalarField::interfaceThetaProps::interfaceThetaProps
(
Istream& is
)
:
theta0_(readScalar(is)),
uTheta_(readScalar(is)),
thetaA_(readScalar(is)),
thetaR_(readScalar(is))
{}
Istream& operator>>
(
Istream& is,
alphaContactAngleFvPatchScalarField::interfaceThetaProps& tp
)
{
is >> tp.theta0_ >> tp.uTheta_ >> tp.thetaA_ >> tp.thetaR_;
return is;
}
Ostream& operator<<
(
Ostream& os,
const alphaContactAngleFvPatchScalarField::interfaceThetaProps& tp
)
{
os << tp.theta0_ << token::SPACE
<< tp.uTheta_ << token::SPACE
<< tp.thetaA_ << token::SPACE
<< tp.thetaR_;
return os;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF
)
:
zeroGradientFvPatchScalarField(p, iF)
{}
alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
(
const alphaContactAngleFvPatchScalarField& gcpsf,
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
zeroGradientFvPatchScalarField(gcpsf, p, iF, mapper),
thetaProps_(gcpsf.thetaProps_)
{}
alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
(
const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF,
const dictionary& dict
)
:
zeroGradientFvPatchScalarField(p, iF),
thetaProps_(dict.lookup("thetaProperties"))
{
evaluate();
}
alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
(
const alphaContactAngleFvPatchScalarField& gcpsf,
const DimensionedField<scalar, volMesh>& iF
)
:
zeroGradientFvPatchScalarField(gcpsf, iF),
thetaProps_(gcpsf.thetaProps_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void alphaContactAngleFvPatchScalarField::write(Ostream& os) const
{
fvPatchScalarField::write(os);
os.writeKeyword("thetaProperties")
<< thetaProps_ << token::END_STATEMENT << nl;
writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField
(
fvPatchScalarField,
alphaContactAngleFvPatchScalarField
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,215 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::alphaContactAngleFvPatchScalarField
Description
Contact-angle boundary condition for multi-phase interface-capturing
simulations. Used in conjuction with multiphaseMixture.
SourceFiles
alphaContactAngleFvPatchScalarField.C
\*---------------------------------------------------------------------------*/
#ifndef alphaContactAngleFvPatchScalarField_H
#define alphaContactAngleFvPatchScalarField_H
#include "zeroGradientFvPatchFields.H"
#include "multiphaseMixture.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class alphaContactAngleFvPatch Declaration
\*---------------------------------------------------------------------------*/
class alphaContactAngleFvPatchScalarField
:
public zeroGradientFvPatchScalarField
{
public:
class interfaceThetaProps
{
//- Equilibrium contact angle
scalar theta0_;
//- Dynamic contact angle velocity scale
scalar uTheta_;
//- Limiting advancing contact angle
scalar thetaA_;
//- Limiting receeding contact angle
scalar thetaR_;
public:
// Constructors
interfaceThetaProps()
{}
interfaceThetaProps(Istream&);
// Member functions
//- Return the equilibrium contact angle theta0
scalar theta0(bool matched=true) const
{
if (matched) return theta0_;
else return 180.0 - theta0_;
}
//- Return the dynamic contact angle velocity scale
scalar uTheta() const
{
return uTheta_;
}
//- Return the limiting advancing contact angle
scalar thetaA(bool matched=true) const
{
if (matched) return thetaA_;
else return 180.0 - thetaA_;
}
//- Return the limiting receeding contact angle
scalar thetaR(bool matched=true) const
{
if (matched) return thetaR_;
else return 180.0 - thetaR_;
}
// IO functions
friend Istream& operator>>(Istream&, interfaceThetaProps&);
friend Ostream& operator<<(Ostream&, const interfaceThetaProps&);
};
typedef HashTable
<
interfaceThetaProps,
multiphaseMixture::interfacePair,
multiphaseMixture::interfacePair::hash
> thetaPropsTable;
private:
// Private data
thetaPropsTable thetaProps_;
public:
//- Runtime type information
TypeName("alphaContactAngle");
// Constructors
//- Construct from patch and internal field
alphaContactAngleFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&
);
//- Construct from patch, internal field and dictionary
alphaContactAngleFvPatchScalarField
(
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const dictionary&
);
//- Construct by mapping given alphaContactAngleFvPatchScalarField
// onto a new patch
alphaContactAngleFvPatchScalarField
(
const alphaContactAngleFvPatchScalarField&,
const fvPatch&,
const DimensionedField<scalar, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct and return a clone
virtual tmp<fvPatchScalarField> clone() const
{
return tmp<fvPatchScalarField>
(
new alphaContactAngleFvPatchScalarField(*this)
);
}
//- Construct as copy setting internal field reference
alphaContactAngleFvPatchScalarField
(
const alphaContactAngleFvPatchScalarField&,
const DimensionedField<scalar, volMesh>&
);
//- Construct and return a clone setting internal field reference
virtual tmp<fvPatchScalarField> clone
(
const DimensionedField<scalar, volMesh>& iF
) const
{
return tmp<fvPatchScalarField>
(
new alphaContactAngleFvPatchScalarField(*this, iF)
);
}
// Member functions
//- Return the contact angle properties
const thetaPropsTable& thetaProps() const
{
return thetaProps_;
}
//- Write
virtual void write(Ostream&) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,772 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2018- Mathias Vångö, JKU Linz, Austria
\*---------------------------------------------------------------------------*/
#include "multiphaseMixture.H"
#include "alphaContactAngleFvPatchScalarField.H"
#include "Time.H"
#include "subCycle.H"
#include "MULES.H"
#include "surfaceInterpolate.H"
#include "fvcGrad.H"
#include "fvcSnGrad.H"
#include "fvcDiv.H"
#include "fvcFlux.H"
// * * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * //
const Foam::scalar Foam::multiphaseMixture::convertToRad =
Foam::constant::mathematical::pi/180.0;
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::multiphaseMixture::calcAlphas()
{
scalar level = 0.0;
alphas_ == 0.0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
alphas_ += level*iter();
level += 1.0;
}
}
Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::calcNu() const
{
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<volScalarField> tnu = iter()*iter().nu();
volScalarField& nu = tnu.ref();
for (++iter; iter != phases_.end(); ++iter)
{
nu += iter()*iter().nu();
}
return tnu;
}
Foam::tmp<Foam::surfaceScalarField>
Foam::multiphaseMixture::calcStf() const
{
tmp<surfaceScalarField> tstf
(
new surfaceScalarField
(
IOobject
(
"stf",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar
(
"stf",
dimensionSet(1, -2, -2, 0, 0),
0.0
)
)
);
surfaceScalarField& stf = tstf.ref();
forAllConstIter(PtrDictionary<phase>, phases_, iter1)
{
const phase& alpha1 = iter1();
PtrDictionary<phase>::const_iterator iter2 = iter1;
++iter2;
for (; iter2 != phases_.end(); ++iter2)
{
const phase& alpha2 = iter2();
sigmaTable::const_iterator sigma =
sigmas_.find(interfacePair(alpha1, alpha2));
if (sigma == sigmas_.end())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)
<< " in list of sigma values"
<< exit(FatalError);
}
stf += dimensionedScalar("sigma", dimSigma_, sigma())
*fvc::interpolate(K(alpha1, alpha2))*
(
fvc::interpolate(alpha2)*fvc::snGrad(alpha1)
- fvc::interpolate(alpha1)*fvc::snGrad(alpha2)
);
}
}
return tstf;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::multiphaseMixture::multiphaseMixture
(
const volVectorField& U,
const surfaceScalarField& phi,
const volScalarField& voidfraction
)
:
IOdictionary
(
IOobject
(
"transportProperties",
U.time().constant(),
U.db(),
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
),
phases_(lookup("phases"), phase::iNew(U, phi)),
mesh_(U.mesh()),
U_(U),
phi_(phi),
voidfraction_(voidfraction),
rhoPhi_
(
IOobject
(
"rhoPhi",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh_,
dimensionedScalar("rhoPhi", dimMass/dimTime, 0.0)
),
surfaceTensionForce_
(
IOobject
(
"surfaceTensionForce",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh_,
dimensionedScalar("surfaceTensionForce", dimensionSet(1, -2, -2, 0, 0), 0.0)
),
alphas_
(
IOobject
(
"alphas",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh_,
dimensionedScalar("alphas", dimless, 0.0)
),
nu_
(
IOobject
(
"nu",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
calcNu()
),
sigmas_(lookup("sigmas")),
dimSigma_(1, 0, -2, 0, 0),
deltaN_
(
"deltaN",
1e-8/pow(average(mesh_.V()), 1.0/3.0)
)
{
calcAlphas();
alphas_.write();
surfaceTensionForce_ = calcStf();
}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::rho() const
{
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<volScalarField> trho = iter()*iter().rho();
volScalarField& rho = trho.ref();
for (++iter; iter != phases_.end(); ++iter)
{
rho += iter()*iter().rho();
}
return trho;
}
Foam::tmp<Foam::scalarField>
Foam::multiphaseMixture::rho(const label patchi) const
{
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<scalarField> trho = iter().boundaryField()[patchi]*iter().rho().value();
scalarField& rho = trho.ref();
for (++iter; iter != phases_.end(); ++iter)
{
rho += iter().boundaryField()[patchi]*iter().rho().value();
}
return trho;
}
Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::mu() const
{
return rho()*nu();
// PtrDictionary<phase>::const_iterator iter = phases_.begin();
// tmp<volScalarField> tmu = iter()*iter().rho()*iter().nu();
// volScalarField& mu = tmu.ref();
// for (++iter; iter != phases_.end(); ++iter)
// {
// mu += iter()*iter().rho()*iter().nu();
// }
// return tmu;
}
Foam::tmp<Foam::scalarField>
Foam::multiphaseMixture::mu(const label patchi) const
{
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<scalarField> tmu =
iter().boundaryField()[patchi]
*iter().rho().value()
*iter().nu(patchi);
scalarField& mu = tmu.ref();
for (++iter; iter != phases_.end(); ++iter)
{
mu +=
iter().boundaryField()[patchi]
*iter().rho().value()
*iter().nu(patchi);
}
return tmu;
}
Foam::tmp<Foam::surfaceScalarField>
Foam::multiphaseMixture::muf() const
{
return nuf()*fvc::interpolate(rho());
// PtrDictionary<phase>::const_iterator iter = phases_.begin();
// tmp<surfaceScalarField> tmuf =
// fvc::interpolate(iter())*iter().rho()*fvc::interpolate(iter().nu());
// surfaceScalarField& muf = tmuf.ref();
// for (++iter; iter != phases_.end(); ++iter)
// {
// muf +=
// fvc::interpolate(iter())*iter().rho()*fvc::interpolate(iter().nu());
// }
// return tmuf;
}
Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::nu() const
{
return nu_;
}
Foam::tmp<Foam::scalarField>
Foam::multiphaseMixture::nu(const label patchi) const
{
//return nu_.boundaryField()[patchi];
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<scalarField> tnu =
iter().boundaryField()[patchi]
*iter().nu(patchi);
scalarField& nu = tnu.ref();
for (++iter; iter != phases_.end(); ++iter)
{
nu +=
iter().boundaryField()[patchi]
*iter().nu(patchi);
}
return tnu;
}
Foam::tmp<Foam::surfaceScalarField>
Foam::multiphaseMixture::nuf() const
{
//return muf()/fvc::interpolate(rho());
PtrDictionary<phase>::const_iterator iter = phases_.begin();
tmp<surfaceScalarField> tnuf =
fvc::interpolate(iter())*fvc::interpolate(iter().nu());
surfaceScalarField& nuf = tnuf.ref();
for (++iter; iter != phases_.end(); ++iter)
{
nuf +=
fvc::interpolate(iter())*fvc::interpolate(iter().nu());
}
return tnuf;
}
void Foam::multiphaseMixture::solve()
{
correct();
const Time& runTime = mesh_.time();
volScalarField& alpha = phases_.first();
const dictionary& alphaControls = mesh_.solverDict("alpha");
label nAlphaSubCycles(readLabel(alphaControls.lookup("nAlphaSubCycles")));
scalar cAlpha(readScalar(alphaControls.lookup("cAlpha")));
if (nAlphaSubCycles > 1)
{
surfaceScalarField rhoPhiSum
(
IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh_
),
mesh_,
dimensionedScalar("0", rhoPhi_.dimensions(), 0)
);
dimensionedScalar totalDeltaT = runTime.deltaT();
for
(
subCycle<volScalarField> alphaSubCycle(alpha, nAlphaSubCycles);
!(++alphaSubCycle).end();
)
{
FatalError << "Sub-cycling of the alpha equation not yet implemented!!" << abort(FatalError);
solveAlphas(cAlpha);
rhoPhiSum += (runTime.deltaT()/totalDeltaT)*rhoPhi_;
}
rhoPhi_ = rhoPhiSum;
}
else
{
solveAlphas(cAlpha);
}
// Update the mixture kinematic viscosity
nu_ = calcNu();
surfaceTensionForce_ = calcStf();
}
void Foam::multiphaseMixture::correct()
{
forAllIter(PtrDictionary<phase>, phases_, iter)
{
iter().correct();
}
}
Foam::tmp<Foam::surfaceVectorField> Foam::multiphaseMixture::nHatfv
(
const volScalarField& alpha1,
const volScalarField& alpha2
) const
{
/*
// Cell gradient of alpha
volVectorField gradAlpha =
alpha2*fvc::grad(alpha1) - alpha1*fvc::grad(alpha2);
// Interpolated face-gradient of alpha
surfaceVectorField gradAlphaf = fvc::interpolate(gradAlpha);
*/
surfaceVectorField gradAlphaf
(
fvc::interpolate(alpha2)*fvc::interpolate(fvc::grad(alpha1))
- fvc::interpolate(alpha1)*fvc::interpolate(fvc::grad(alpha2))
);
// Face unit interface normal
return gradAlphaf/(mag(gradAlphaf) + deltaN_);
}
Foam::tmp<Foam::surfaceScalarField> Foam::multiphaseMixture::nHatf
(
const volScalarField& alpha1,
const volScalarField& alpha2
) const
{
// Face unit interface normal flux
return nHatfv(alpha1, alpha2) & mesh_.Sf();
}
// Correction for the boundary condition on the unit normal nHat on
// walls to produce the correct contact angle.
// The dynamic contact angle is calculated from the component of the
// velocity on the direction of the interface, parallel to the wall.
void Foam::multiphaseMixture::correctContactAngle
(
const phase& alpha1,
const phase& alpha2,
surfaceVectorField::Boundary& nHatb
) const
{
const volScalarField::Boundary& gbf
= alpha1.boundaryField();
const fvBoundaryMesh& boundary = mesh_.boundary();
forAll(boundary, patchi)
{
if (isA<alphaContactAngleFvPatchScalarField>(gbf[patchi]))
{
const alphaContactAngleFvPatchScalarField& acap =
refCast<const alphaContactAngleFvPatchScalarField>(gbf[patchi]);
vectorField& nHatPatch = nHatb[patchi];
vectorField AfHatPatch
(
mesh_.Sf().boundaryField()[patchi]
/mesh_.magSf().boundaryField()[patchi]
);
alphaContactAngleFvPatchScalarField::thetaPropsTable::
const_iterator tp =
acap.thetaProps().find(interfacePair(alpha1, alpha2));
if (tp == acap.thetaProps().end())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)
<< "\n in table of theta properties for patch "
<< acap.patch().name()
<< exit(FatalError);
}
bool matched = (tp.key().first() == alpha1.name());
scalar theta0 = convertToRad*tp().theta0(matched);
scalarField theta(boundary[patchi].size(), theta0);
scalar uTheta = tp().uTheta();
// Calculate the dynamic contact angle if required
if (uTheta > SMALL)
{
scalar thetaA = convertToRad*tp().thetaA(matched);
scalar thetaR = convertToRad*tp().thetaR(matched);
// Calculated the component of the velocity parallel to the wall
vectorField Uwall
(
U_.boundaryField()[patchi].patchInternalField()
- U_.boundaryField()[patchi]
);
Uwall -= (AfHatPatch & Uwall)*AfHatPatch;
// Find the direction of the interface parallel to the wall
vectorField nWall
(
nHatPatch - (AfHatPatch & nHatPatch)*AfHatPatch
);
// Normalise nWall
nWall /= (mag(nWall) + SMALL);
// Calculate Uwall resolved normal to the interface parallel to
// the interface
scalarField uwall(nWall & Uwall);
theta += (thetaA - thetaR)*tanh(uwall/uTheta);
}
// Reset nHatPatch to correspond to the contact angle
scalarField a12(nHatPatch & AfHatPatch);
scalarField b1(cos(theta));
scalarField b2(nHatPatch.size());
forAll(b2, facei)
{
b2[facei] = cos(acos(a12[facei]) - theta[facei]);
}
scalarField det(1.0 - a12*a12);
scalarField a((b1 - a12*b2)/det);
scalarField b((b2 - a12*b1)/det);
nHatPatch = a*AfHatPatch + b*nHatPatch;
nHatPatch /= (mag(nHatPatch) + deltaN_.value());
}
}
}
Foam::tmp<Foam::volScalarField> Foam::multiphaseMixture::K
(
const phase& alpha1,
const phase& alpha2
) const
{
tmp<surfaceVectorField> tnHatfv = nHatfv(alpha1, alpha2);
correctContactAngle(alpha1, alpha2, tnHatfv.ref().boundaryFieldRef());
// Simple expression for curvature
return -fvc::div(tnHatfv & mesh_.Sf());
}
Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::nearInterface() const
{
tmp<volScalarField> tnearInt
(
new volScalarField
(
IOobject
(
"nearInterface",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar("nearInterface", dimless, 0.0)
)
);
forAllConstIter(PtrDictionary<phase>, phases_, iter)
{
tnearInt.ref() = max(tnearInt(), pos(iter() - 0.01)*pos(0.99 - iter()));
}
return tnearInt;
}
void Foam::multiphaseMixture::solveAlphas
(
const scalar cAlpha
)
{
static label nSolves=-1;
nSolves++;
word alphaScheme("div(phi,alpha)");
word alpharScheme("div(phirb,alpha)");
surfaceScalarField phic(mag(phi_/mesh_.magSf()));
phic = min(cAlpha*phic, max(phic));
PtrList<surfaceScalarField> alphaPhiCorrs(phases_.size());
int phasei = 0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
phase& alpha = iter();
alphaPhiCorrs.set
(
phasei,
new surfaceScalarField
(
"phi" + alpha.name() + "Corr",
fvc::flux
(
phi_,
alpha,
alphaScheme
)
)
);
surfaceScalarField& alphaPhiCorr = alphaPhiCorrs[phasei];
forAllIter(PtrDictionary<phase>, phases_, iter2)
{
phase& alpha2 = iter2();
if (&alpha2 == &alpha) continue;
surfaceScalarField phir(phic*nHatf(alpha, alpha2));
alphaPhiCorr += fvc::flux
(
-fvc::flux(-phir, alpha2, alpharScheme),
alpha,
alpharScheme
);
}
MULES::limit
(
1.0/mesh_.time().deltaT().value(),
voidfraction_,
alpha,
phi_,
alphaPhiCorr,
zeroField(),
zeroField(),
1,
0,
true
);
phasei++;
}
MULES::limitSum(alphaPhiCorrs);
rhoPhi_ = dimensionedScalar("0", dimensionSet(1, 0, -1, 0, 0), 0);
volScalarField sumAlpha
(
IOobject
(
"sumAlpha",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar("sumAlpha", dimless, 0)
);
phasei = 0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
phase& alpha = iter();
surfaceScalarField& alphaPhi = alphaPhiCorrs[phasei];
alphaPhi += upwind<scalar>(mesh_, phi_).flux(alpha);
MULES::explicitSolve
(
voidfraction_,
alpha,
alphaPhi,
zeroField(),
zeroField()
);
rhoPhi_ += alphaPhi*alpha.rho();
Info<< alpha.name() << " volume fraction, min, max = "
<< alpha.weightedAverage(mesh_.V()).value()
<< ' ' << min(alpha).value()
<< ' ' << max(alpha).value()
<< endl;
sumAlpha += alpha;
phasei++;
}
Info<< "Phase-sum volume fraction, min, max = "
<< sumAlpha.weightedAverage(mesh_.V()).value()
<< ' ' << min(sumAlpha).value()
<< ' ' << max(sumAlpha).value()
<< endl;
calcAlphas();
}
bool Foam::multiphaseMixture::read()
{
if (transportModel::read())
{
bool readOK = true;
PtrList<entry> phaseData(lookup("phases"));
label phasei = 0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
readOK &= iter().read(phaseData[phasei++].dict());
}
lookup("sigmas") >> sigmas_;
return readOK;
}
else
{
return false;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,284 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2018- Mathias Vångö, JKU Linz, Austria
Class
multiphaseMixture
Description
This class is based on the OpenFOAM(R) Foam::multiphaseMixture class,
which is an incompressible multi-phase mixture with built in solution
for the phase fractions with interface compression for interface-capturing.
It has been extended to include the void fraction in the volume fraction
transport equations.
Derived from transportModel so that it can be unsed in conjunction with
the incompressible turbulence models.
Surface tension and contact-angle is handled for the interface
between each phase-pair.
SourceFiles
multiphaseMixture.C
\*---------------------------------------------------------------------------*/
#ifndef multiphaseMixture_H
#define multiphaseMixture_H
#include "incompressible/transportModel/transportModel.H"
#include "IOdictionary.H"
#include "phase.H"
#include "PtrDictionary.H"
#include "volFields.H"
#include "surfaceFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class multiphaseMixture Declaration
\*---------------------------------------------------------------------------*/
class multiphaseMixture
:
public IOdictionary,
public transportModel
{
public:
class interfacePair
:
public Pair<word>
{
public:
class hash
:
public Hash<interfacePair>
{
public:
hash()
{}
label operator()(const interfacePair& key) const
{
return word::hash()(key.first()) + word::hash()(key.second());
}
};
// Constructors
interfacePair()
{}
interfacePair(const word& alpha1Name, const word& alpha2Name)
:
Pair<word>(alpha1Name, alpha2Name)
{}
interfacePair(const phase& alpha1, const phase& alpha2)
:
Pair<word>(alpha1.name(), alpha2.name())
{}
// Friend Operators
friend bool operator==
(
const interfacePair& a,
const interfacePair& b
)
{
return
(
((a.first() == b.first()) && (a.second() == b.second()))
|| ((a.first() == b.second()) && (a.second() == b.first()))
);
}
friend bool operator!=
(
const interfacePair& a,
const interfacePair& b
)
{
return (!(a == b));
}
};
private:
// Private data
//- Dictionary of phases
PtrDictionary<phase> phases_;
const fvMesh& mesh_;
const volVectorField& U_;
const surfaceScalarField& phi_;
const volScalarField& voidfraction_;
surfaceScalarField rhoPhi_;
surfaceScalarField surfaceTensionForce_;
volScalarField alphas_;
volScalarField nu_;
typedef HashTable<scalar, interfacePair, interfacePair::hash>
sigmaTable;
sigmaTable sigmas_;
dimensionSet dimSigma_;
//- Stabilisation for normalisation of the interface normal
const dimensionedScalar deltaN_;
//- Conversion factor for degrees into radians
static const scalar convertToRad;
// Private member functions
void calcAlphas();
tmp<volScalarField> calcNu() const;
void solveAlphas(const scalar cAlpha);
tmp<surfaceVectorField> nHatfv
(
const volScalarField& alpha1,
const volScalarField& alpha2
) const;
tmp<surfaceScalarField> nHatf
(
const volScalarField& alpha1,
const volScalarField& alpha2
) const;
void correctContactAngle
(
const phase& alpha1,
const phase& alpha2,
surfaceVectorField::Boundary& nHatb
) const;
tmp<volScalarField> K(const phase& alpha1, const phase& alpha2) const;
tmp<surfaceScalarField> calcStf() const;
public:
// Constructors
//- Construct from components
multiphaseMixture
(
const volVectorField& U,
const surfaceScalarField& phi,
const volScalarField& voidfraction
);
//- Destructor
virtual ~multiphaseMixture()
{}
// Member Functions
//- Return the phases
const PtrDictionary<phase>& phases() const
{
return phases_;
}
//- Return the velocity
const volVectorField& U() const
{
return U_;
}
//- Return the volumetric flux
const surfaceScalarField& phi() const
{
return phi_;
}
const surfaceScalarField& rhoPhi() const
{
return rhoPhi_;
}
//- Return the mixture density
tmp<volScalarField> rho() const;
//- Return the mixture density for patch
tmp<scalarField> rho(const label patchi) const;
//- Return the dynamic laminar viscosity
tmp<volScalarField> mu() const;
//- Return the dynamic laminar viscosity for patch
tmp<scalarField> mu(const label patchi) const;
//- Return the face-interpolated dynamic laminar viscosity
tmp<surfaceScalarField> muf() const;
//- Return the kinematic laminar viscosity
tmp<volScalarField> nu() const;
//- Return the laminar viscosity for patch
tmp<scalarField> nu(const label patchi) const;
//- Return the face-interpolated dynamic laminar viscosity
tmp<surfaceScalarField> nuf() const;
tmp<surfaceScalarField> surfaceTensionForce() const
{
return surfaceTensionForce_;
}
//- Indicator of the proximity of the interface
// Field values are 1 near and 0 away for the interface.
tmp<volScalarField> nearInterface() const;
//- Solve for the mixture phase-fractions
void solve();
//- Correct the mixture properties
void correct();
//- Read base transportProperties dictionary
bool read();
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,98 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "phase.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::phase::phase
(
const word& phaseName,
const dictionary& phaseDict,
const volVectorField& U,
const surfaceScalarField& phi
)
:
volScalarField
(
IOobject
(
IOobject::groupName("alpha", phaseName),
U.mesh().time().timeName(),
U.mesh(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
U.mesh()
),
name_(phaseName),
phaseDict_(phaseDict),
nuModel_
(
viscosityModel::New
(
IOobject::groupName("nu", phaseName),
phaseDict_,
U,
phi
)
),
rho_("rho", dimDensity, phaseDict_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::autoPtr<Foam::phase> Foam::phase::clone() const
{
NotImplemented;
return autoPtr<phase>(NULL);
}
void Foam::phase::correct()
{
nuModel_->correct();
}
bool Foam::phase::read(const dictionary& phaseDict)
{
phaseDict_ = phaseDict;
if (nuModel_->read(phaseDict_))
{
phaseDict_.lookup("rho") >> rho_;
return true;
}
else
{
return false;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,163 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::phase
Description
Single incompressible phase derived from the phase-fraction.
Used as part of the multiPhaseMixture for interface-capturing multi-phase
simulations.
SourceFiles
phase.C
\*---------------------------------------------------------------------------*/
#ifndef phase_H
#define phase_H
#include "volFields.H"
#include "dictionaryEntry.H"
#include "incompressible/viscosityModels/viscosityModel/viscosityModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class phase Declaration
\*---------------------------------------------------------------------------*/
class phase
:
public volScalarField
{
// Private data
word name_;
dictionary phaseDict_;
autoPtr<viscosityModel> nuModel_;
dimensionedScalar rho_;
public:
// Constructors
//- Construct from components
phase
(
const word& name,
const dictionary& phaseDict,
const volVectorField& U,
const surfaceScalarField& phi
);
//- Return clone
autoPtr<phase> clone() const;
//- Return a pointer to a new phase created on freestore
// from Istream
class iNew
{
const volVectorField& U_;
const surfaceScalarField& phi_;
public:
iNew
(
const volVectorField& U,
const surfaceScalarField& phi
)
:
U_(U),
phi_(phi)
{}
autoPtr<phase> operator()(Istream& is) const
{
dictionaryEntry ent(dictionary::null, is);
return autoPtr<phase>(new phase(ent.keyword(), ent, U_, phi_));
}
};
// Member Functions
const word& name() const
{
return name_;
}
const word& keyword() const
{
return name();
}
//- Return const-access to phase1 viscosityModel
const viscosityModel& nuModel() const
{
return nuModel_();
}
//- Return the kinematic laminar viscosity
tmp<volScalarField> nu() const
{
return nuModel_->nu();
}
//- Return the laminar viscosity for patch
tmp<scalarField> nu(const label patchi) const
{
return nuModel_->nu(patchi);
}
//- Return const-access to phase1 density
const dimensionedScalar& rho() const
{
return rho_;
}
//- Correct the phase properties
void correct();
//-Inherit read from volScalarField
using volScalarField::read;
//- Read base transportProperties dictionary
bool read(const dictionary& phaseDict);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,73 @@
{
volScalarField rAU("rAU", 1.0/UEqn.A());
surfaceScalarField rAUepsf("rAUepsf", fvc::interpolate(rAU*voidfraction));
surfaceScalarField rAUepsSqf("rAUepsSqf", fvc::interpolate(rAU*voidfraction*voidfraction));
volVectorField Ueps("Ueps", U * voidfraction);
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p_rgh));
surfaceScalarField phiHbyA
(
"phiHbyA",
fvc::flux(HbyA*voidfraction)
+ fvc::interpolate(voidfraction*rho*rAU)*fvc::ddtCorr(U, phi)
);
adjustPhi(phiHbyA, U, p_rgh);
if (modelType == "A")
rAUepsf = rAUepsSqf;
surfaceScalarField phig (-ghf*fvc::snGrad(rho)*rAUepsf*mesh.magSf());
surfaceScalarField phiSt (mixture.surfaceTensionForce()*rAUepsSqf*mesh.magSf());
surfaceScalarField phiS (fvc::flux(voidfraction*Us*Ksl*rAU));
phiHbyA += phig + phiSt + phiS;
// Update the pressure BCs to ensure flux consistency
constrainPressure(p_rgh, Ueps, phiHbyA, rAUepsf);
while (pimple.correctNonOrthogonal())
{
fvScalarMatrix p_rghEqn
(
fvm::laplacian(rAUepsf, p_rgh) == particleCloud.ddtVoidfraction() + fvc::div(phiHbyA)
);
p_rghEqn.setReference(pRefCell, getRefCellValue(p_rgh, pRefCell));
p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi = phiHbyA - p_rghEqn.flux();
p_rgh.relax();
if (modelType == "A")
U = HbyA + voidfraction*rAU*fvc::reconstruct((phig-p_rghEqn.flux()+phiSt)/rAUepsf) + rAU*Us*Ksl;
else
U = HbyA + rAU*fvc::reconstruct((phig-p_rghEqn.flux()+phiSt)/rAUepsf) + rAU*Us*Ksl;
U.correctBoundaryConditions();
fvOptions.correct(U);
}
}
#include "continuityErrs.H"
p == p_rgh + rho*gh;
if (p_rgh.needReference())
{
p += dimensionedScalar
(
"p",
p.dimensions(),
pRefValue - getRefCellValue(p, pRefCell)
);
p_rgh = p - rho*gh;
}
}

View File

@ -1,15 +1,24 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\
-lincompressibleRASModels \
-lincompressibleLESModels \
-L$(CFDEM_LIB_DIR)\
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-l$(CFDEM_LIB_NAME)
-lmeshTools \
-lfvOptions \
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -0,0 +1,24 @@
fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U) - fvm::Sp(fvc::ddt(voidfraction),U)
+ fvm::div(phi,U) - fvm::Sp(fvc::div(phi),U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
==
fvOptions(U)
- fvm::Sp(Ksl/rho,U)
);
UEqn.relax();
fvOptions.constrain(UEqn);
if (piso.momentumPredictor() && (modelType=="B" || modelType=="Bfull"))
{
solve(UEqn == - fvc::grad(p) + Ksl/rho*Us);
fvOptions.correct(U);
}
else if (piso.momentumPredictor())
{
solve(UEqn == - voidfraction*fvc::grad(p) + Ksl/rho*Us);
fvOptions.correct(U);
}

View File

@ -36,12 +36,15 @@ Description
#include "fvCFD.H"
#include "singlePhaseTransportModel.H"
#include "turbulenceModel.H"
#include "turbulentTransportModel.H"
#include "pisoControl.H"
#include "fvOptions.H"
#include "cfdemCloud.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -50,7 +53,9 @@ int main(int argc, char *argv[])
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createFields.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
// create cfdemCloud
@ -59,26 +64,35 @@ int main(int argc, char *argv[])
#include "checkModelType.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.loop())
{
Info<< "\nStarting time loop\n" << endl;
particleCloud.clockM().start(1,"Global");
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
#include "readPISOControls.H"
#include "CourantNo.H"
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
particleCloud.evolve(voidfraction,Us,U);
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
particleCloud.smoothingM().smoothen(Ksl);
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField())).value();
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
@ -89,92 +103,19 @@ int main(int argc, char *argv[])
// Pressure-velocity PISO corrector
{
// Momentum predictor
fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U) + fvm::Sp(fvc::ddt(voidfraction),U)
+ fvm::div(phi,U) + fvm::Sp(fvc::div(phi),U)
// + turbulence->divDevReff(U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
==
- 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);
#include "UEqn.H"
// --- PISO loop
//for (int corr=0; corr<nCorr; corr++)
int nCorrSoph = nCorr + 5 * pow((1-particleCloud.dataExchangeM().timeStepFraction()),1);
for (int corr=0; corr<nCorrSoph; corr++)
while (piso.correct())
{
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(rUAvoidfraction, U, phi);
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
if (modelType=="A")
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
if (nonOrth == nNonOrthCorr)
{
phiGes -= pEqn.flux();
}
} // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H"
if (modelType=="B")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
U.correctBoundaryConditions();
} // end piso loop
#include "pEqn.H"
}
}
laminarTransport.correct();
turbulence->correct();
}// end solveFlow
}
else
{
Info << "skipping flow solution." << endl;
@ -191,7 +132,7 @@ int main(int argc, char *argv[])
}
Info<< "End\n" << endl;
return 0;
}

View File

@ -96,17 +96,17 @@
#define createPhi_H
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(U*voidfraction) & mesh.Sf()
);
),
linearInterpolate(U*voidfraction) & mesh.Sf()
);
#endif
@ -122,3 +122,5 @@ surfaceScalarField phi
(
incompressible::turbulenceModel::New(U, phi, laminarTransport)
);
#include "createMRF.H"

View File

@ -0,0 +1,58 @@
volScalarField rAU = 1.0/UEqn.A();
surfaceScalarField rAUf("(1|A(U))", fvc::interpolate(rAU));
volScalarField rAUvoidfraction("(voidfraction2|A(U))",rAU*voidfraction);
if (modelType=="A")
rAUvoidfraction *= voidfraction;
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiHbyA("phiHbyA", fvc::interpolate(voidfraction)*fvc::flux(HbyA) );
volVectorField Uvoidfraction("(Uvoidfraction)", U * voidfraction);
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
phi = phiHbyA + rAUf*(fvc::interpolate(Ksl/rho) * phiS);
// rotating frames of references not tested yet
MRF.makeRelative(phi);
// adjustment of phi (only in cases w.o. p boundary conditions) not tested yet
adjustPhi(phi, U, p);
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, Uvoidfraction, phiHbyA, rAUvoidfraction, MRF);
// Non-orthogonal pressure corrector loop
while (piso.correctNonOrthogonal())
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rAUvoidfraction, p) == fvc::div(phi) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter())
{
phi -= pEqn.flux();
}
}
#include "continuityErrorPhiPU.H"
if (modelType=="B" || modelType=="Bfull")
U = HbyA - rAU*fvc::grad(p) + Ksl/rho*Us*rAU;
else
U = HbyA - voidfraction*rAU*fvc::grad(p) + Ksl/rho*Us*rAU;
U.correctBoundaryConditions();
fvOptions.correct(U);

View File

@ -1,16 +1,24 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I ../cfdemSolverPiso \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I../cfdemSolverPiso \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\
-lincompressibleRASModels \
-lincompressibleLESModels \
-L$(CFDEM_LIB_DIR)\
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-l$(CFDEM_LIB_NAME)
-lmeshTools \
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -25,23 +25,26 @@ License
along with CFDEMcoupling. If not, see <http://www.gnu.org/licenses/>.
Application
cfdemSolverPisoMS
cfdemSolverPiso
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,
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 "turbulentTransportModel.H"
#include "pisoControl.H"
#include "fvOptions.H"
#include "cfdemCloudMS.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -50,7 +53,9 @@ int main(int argc, char *argv[])
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createFields.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
// create cfdemCloud
@ -59,118 +64,62 @@ int main(int argc, char *argv[])
#include "checkModelType.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.loop())
{
Info<< "\nStarting time loop\n" << endl;
particleCloud.clockM().start(1,"Global");
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
#include "readPISOControls.H"
#include "CourantNo.H"
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
particleCloud.evolve(voidfraction,Us,U);
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
particleCloud.smoothingM().smoothen(Ksl);
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField())).value();
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
// Pressure-velocity PISO corrector
if(particleCloud.solveFlow())
{
// Momentum predictor
fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U) //particleCloud.ddtVoidfractionU(U,voidfraction) //
+ fvm::div(phi, U)
// + turbulence->divDevReff(U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
==
- 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);
// --- PISO loop
//for (int corr=0; corr<nCorr; corr++)
int nCorrSoph = nCorr + 5 * pow((1-particleCloud.dataExchangeM().timeStepFraction()),1);
for (int corr=0; corr<nCorrSoph; corr++)
// Pressure-velocity PISO corrector
{
volScalarField rUA = 1.0/UEqn.A();
// Momentum predictor
#include "UEqn.H"
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
volScalarField rUAvoidfraction("(voidfraction2|A(U))",rUA*voidfraction);
// --- PISO loop
U = rUA*UEqn.H();
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);
if (modelType=="A")
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
while (piso.correct())
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
#include "pEqn.H"
}
}
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
if (nonOrth == nNonOrthCorr)
{
phiGes -= pEqn.flux();
}
} // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H"
if (modelType=="B")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
U.correctBoundaryConditions();
} // end piso loop
laminarTransport.correct();
turbulence->correct();
}
else
{
Info << "skipping flow solution." << endl;
}
turbulence->correct();
runTime.write();
@ -183,7 +132,7 @@ int main(int argc, char *argv[])
}
Info<< "End\n" << endl;
return 0;
}

View File

@ -1,15 +1,24 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I../cfdemSolverPiso \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\
-lincompressibleRASModels \
-lincompressibleLESModels \
-L$(CFDEM_LIB_DIR)\
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-l$(CFDEM_LIB_NAME)
-lmeshTools \
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -0,0 +1,15 @@
// get scalar source from DEM
particleCloud.forceM(1).manipulateScalarField(Tsource);
Tsource.correctBoundaryConditions();
// solve scalar transport equation
fvScalarMatrix TEqn
(
fvm::ddt(voidfraction,T) - fvm::Sp(fvc::ddt(voidfraction),T)
+ fvm::div(phi, T) - fvm::Sp(fvc::div(phi),T)
- fvm::laplacian(DT*voidfraction, T)
==
Tsource
);
TEqn.relax();
TEqn.solve();

View File

@ -30,169 +30,107 @@ Application
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,
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 "turbulentTransportModel.H"
#include "pisoControl.H"
#include "fvOptions.H"
#include "cfdemCloud.H"
#include "implicitCouple.H"
#include "forceModel.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createFields.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
// create cfdemCloud
#include "readGravitationalAcceleration.H"
cfdemCloud particleCloud(mesh);
#include "checkModelType.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.loop())
{
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
#include "readPISOControls.H"
#include "CourantNo.H"
// do particle stuff
Info << "- evolve()" << endl;
particleCloud.evolve(voidfraction,Us,U);
particleCloud.clockM().start(2,"Coupling");
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
Ksl.internalField() = particleCloud.momCoupleM(0).impMomSource();
particleCloud.smoothingM().smoothen(Ksl);
Ksl.correctBoundaryConditions();
#include "solverDebugInfo.H"
// get scalar source from DEM
particleCloud.forceM(1).manipulateScalarField(Tsource);
Tsource.correctBoundaryConditions();
// solve scalar transport equation
phi = fvc::interpolate(U*voidfraction) & mesh.Sf();
solve
(
fvm::ddt(voidfraction,T)
+ fvm::div(phi, T)
- fvm::laplacian(DT*voidfraction, T)
==
Tsource
);
// Pressure-velocity PISO corrector
if(hasEvolved)
{
// Momentum predictor
fvVectorMatrix UEqn
(
fvm::ddt(voidfraction,U)
+ fvm::div(phi, U)
+ turbulence->divDevReff(U)
==
- 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; corr<nCorr; corr++)
int nCorrSoph = nCorr + 5 * pow((1-particleCloud.dataExchangeM().timeStepFraction()),1);
for (int corr=0; corr<nCorrSoph; corr++)
{
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();
#ifdef version23
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() );
#else
phi = ( fvc::interpolate(U*voidfraction) & mesh.Sf() )
+ fvc::ddtPhiCorr(rUAvoidfraction, U, phi);
#endif
surfaceScalarField phiS(fvc::interpolate(Us*voidfraction) & mesh.Sf());
surfaceScalarField phiGes = phi + rUAf*(fvc::interpolate(Ksl/rho) * phiS);
if (modelType=="A")
rUAvoidfraction = volScalarField("(voidfraction2|A(U))",rUA*voidfraction*voidfraction);
// Non-orthogonal pressure corrector loop
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::laplacian(rUAvoidfraction, p) == fvc::div(phiGes) + particleCloud.ddtVoidfraction()
);
pEqn.setReference(pRefCell, pRefValue);
if
(
corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
{
pEqn.solve(mesh.solver("pFinal"));
}
else
{
pEqn.solve();
}
if (nonOrth == nNonOrthCorr)
{
phiGes -= pEqn.flux();
}
} // end non-orthogonal corrector loop
#include "continuityErrorPhiPU.H"
if (modelType=="B")
U -= rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
else
U -= voidfraction*rUA*fvc::grad(p) - Ksl/rho*Us*rUA;
U.correctBoundaryConditions();
} // end piso loop
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
turbulence->correct();
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.internalField()*(Us.internalField()-U.internalField())).value();
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
#include "TEqn.H"
if(particleCloud.solveFlow())
{
// Pressure-velocity PISO corrector
{
// Momentum predictor
#include "UEqn.H"
// --- PISO loop
while (piso.correct())
{
#include "pEqn.H"
}
}
laminarTransport.correct();
turbulence->correct();
}
else
{
Info << "skipping flow solution." << endl;
}
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
particleCloud.clockM().stop("Flow");
particleCloud.clockM().stop("Global");
}
Info<< "End\n" << endl;

View File

@ -1,36 +1,36 @@
Info<< "Reading field p\n" << endl;
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading physical velocity field U" << endl;
Info<< "Note: only if voidfraction at boundary is 1, U is superficial velocity!!!\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//========================
// drag law modelling
//========================
Info<< "Reading field p\n" << endl;
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading physical velocity field U" << endl;
Info<< "Note: only if voidfraction at boundary is 1, U is superficial velocity!!!\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//========================
// drag law modelling
//========================
Info<< "\nReading momentum exchange field Ksl\n" << endl;
volScalarField Ksl
(
@ -44,8 +44,8 @@
),
mesh
//dimensionedScalar("0", dimensionSet(0, 0, -1, 0, 0), 1.0)
);
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
@ -58,8 +58,8 @@
IOobject::AUTO_WRITE
),
mesh
);
);
Info<< "\nCreating density field rho\n" << endl;
volScalarField rho
(
@ -71,27 +71,27 @@
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
mesh,
dimensionedScalar("0", dimensionSet(1, -3, 0, 0, 0), 1.0)
);
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//========================
// scalar field modelling
//========================
);
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//========================
// scalar field modelling
//========================
Info<< "\nCreating dummy density field rho = 1\n" << endl;
volScalarField T
(
@ -103,10 +103,10 @@
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh//,
mesh//,
//dimensionedScalar("0", dimensionSet(0, 0, -1, 1, 0), 273.15)
);
);
Info<< "\nCreating fluid-particle heat flux field\n" << endl;
volScalarField Tsource
(
@ -118,57 +118,59 @@
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh//,
mesh//,
//dimensionedScalar("0", dimensionSet(0, 0, -1, 1, 0), 0.0)
);
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
dimensionedScalar DT
(
transportProperties.lookup("DT")
);
//========================
//# include "createPhi.H"
#ifndef createPhi_H
#define createPhi_H
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(U*voidfraction) & mesh.Sf()
);
#endif
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
singlePhaseTransportModel laminarTransport(U, phi);
autoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, laminarTransport)
);
);
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
dimensionedScalar DT
(
transportProperties.lookup("DT")
);
//========================
//# include "createPhi.H"
#ifndef createPhi_H
#define createPhi_H
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(U*voidfraction) & mesh.Sf()
);
#endif
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
singlePhaseTransportModel laminarTransport(U, phi);
autoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, laminarTransport)
);
#include "createMRF.H"

View File

@ -0,0 +1,62 @@
// contributions to internal energy equation can be found in
// Crowe et al.: "Multiphase flows with droplets and particles", CRC Press 1998
{
// dim he = J / kg
volScalarField& he = thermo.he();
particleCloud.energyContributions(Qsource);
particleCloud.energyCoefficients(QCoeff);
//thDiff=particleCloud.thermCondM().thermDiff();
thCond=particleCloud.thermCondM().thermCond();
addSource = fvc::ddt(rhoeps, K) + fvc::div(phi, K)
+ (
he.name() == "e"
? fvc::div
(
fvc::absolute(phi/fvc::interpolate(rho), voidfraction*U),
p,
"div(phiv,p)"
)
: -dpdt
);
Cpv = he.name() == "e" ? thermo.Cv() : thermo.Cp();
// correct source for the thermodynamic reference temperature
dimensionedScalar Tref("Tref", dimTemperature, T[0]-he[0]/(Cpv[0]+SMALL));
Qsource += QCoeff*Tref;
fvScalarMatrix EEqn
(
fvm::ddt(rhoeps, he) + fvm::div(phi, he)
+ addSource
// net heat transfer from particles to fluid
- Qsource
- fvm::Sp(QCoeff/Cpv, he)
// thermal conduction of the fluid with effective conductivity
// - fvm::laplacian(rhoeps*thDiff,he)
- fvm::laplacian(voidfraction*thCond/Cpv,he)
// + particle-fluid energy transfer due to work
// + fluid energy dissipation due to shearing
==
fvOptions(rho, he)
);
EEqn.relax();
fvOptions.constrain(EEqn);
EEqn.solve();
fvOptions.correct(he);
thermo.correct();
Info<< "T max/min : " << max(T).value() << " " << min(T).value() << endl;
particleCloud.clockM().start(31,"energySolve");
particleCloud.solve();
particleCloud.clockM().stop("energySolve");
}

View File

@ -0,0 +1,3 @@
cfdemSolverRhoPimple.C
EXE=$(CFDEM_APP_DIR)/cfdemSolverRhoPimple

View File

@ -0,0 +1,32 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
PFLAGS+= -Dcompre
EXE_INC = \
$(PFLAGS) \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(CFDEM_LIB_DIR)\
-lcompressibleTransportModels \
-lfluidThermophysicalModels \
-lspecie \
-lturbulenceModels \
-lcompressibleTurbulenceModels \
-lfiniteVolume \
-lmeshTools \
-lsampling \
-lfvOptions \
-l$(CFDEM_LIB_COMP_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -0,0 +1,33 @@
// Solve the Momentum equation
particleCloud.otherForces(fOther);
tmp<fvVectorMatrix> tUEqn
(
fvm::ddt(rhoeps, U)
+ fvm::div(phi, U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
+ fvm::Sp(Ksl,U)
- fOther
==
fvOptions(rho, U)
);
fvVectorMatrix& UEqn = tUEqn.ref();
UEqn.relax();
fvOptions.constrain(UEqn);
if (pimple.momentumPredictor() && (modelType=="B" || modelType=="Bfull"))
{
solve(UEqn == -fvc::grad(p)+ Ksl*Us);
fvOptions.correct(U);
K = 0.5*magSqr(U);
}
else if (pimple.momentumPredictor())
{
solve(UEqn == -voidfraction*fvc::grad(p)+ Ksl*Us);
fvOptions.correct(U);
K = 0.5*magSqr(U);
}

View File

@ -0,0 +1,163 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria
Application
cfdemSolverRhoPimple
Description
Transient solver for compressible flow using the flexible PIMPLE (PISO-SIMPLE)
algorithm.
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
The code is an evolution of the solver rhoPimpleFoam in OpenFOAM(R) 4.x,
where additional functionality for CFD-DEM coupling is added.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "psiThermo.H"
#include "turbulentFluidThermoModel.H"
#include "bound.H"
#include "pimpleControl.H"
#include "fvOptions.H"
#include "localEulerDdtScheme.H"
#include "fvcSmooth.H"
#include "cfdemCloudEnergy.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
#include "thermCondModel.H"
#include "energyModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "postProcess.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createTimeControls.H"
#include "createRDeltaT.H"
#include "initContinuityErrs.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "createFvOptions.H"
// create cfdemCloud
#include "readGravitationalAcceleration.H"
cfdemCloudEnergy particleCloud(mesh);
#include "checkModelType.H"
turbulence->validate();
//#include "compressibleCourantNo.H"
//#include "setInitialDeltaT.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.run())
{
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
runTime++;
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.primitiveFieldRef()*(Us.primitiveFieldRef()-U.primitiveFieldRef()));
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
if (pimple.nCorrPIMPLE() <= 1)
{
#include "rhoEqn.H"
}
volScalarField rhoeps("rhoeps",rho*voidfraction);
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
#include "UEqn.H"
#include "EEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
// besides this pEqn, OF offers a "pimple consistent"-option
#include "pEqn.H"
rhoeps=rho*voidfraction;
}
if (pimple.turbCorr())
{
turbulence->correct();
}
}
particleCloud.clockM().start(31,"postFlow");
particleCloud.postFlow();
particleCloud.clockM().stop("postFlow");
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
particleCloud.clockM().stop("Flow");
particleCloud.clockM().stop("Global");
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,2 @@
const volScalarField& T = thermo.T();
const volScalarField& psi = thermo.psi();

View File

@ -0,0 +1,253 @@
Info<< "Reading thermophysical properties\n" << endl;
autoPtr<psiThermo> pThermo
(
psiThermo::New(mesh)
);
psiThermo& thermo = pThermo();
thermo.validate(args.executable(), "h", "e");
volScalarField& p = thermo.p();
Info<< "Reading field rho\n" << endl;
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
thermo.rho()
);
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
IOobject
(
"voidfraction",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
volScalarField addSource
(
IOobject
(
"addSource",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nCreating fluid-particle heat flux field\n" << endl;
volScalarField Qsource
(
IOobject
(
"Qsource",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), 0.0)
);
Info<< "\nCreating fluid-particle heat flux coefficient field\n" << endl;
volScalarField QCoeff
(
IOobject
(
"QCoeff",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,-1,0,0,0), 0.0)
);
/* Info<< "\nCreating thermal diffusivity field\n" << endl;
volScalarField thDiff
(
IOobject
(
"thDiff",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(0,2,-1,0,0,0,0), 0.0)
);
*/
Info<< "\nCreating thermal conductivity field\n" << endl;
volScalarField thCond
(
IOobject
(
"thCond",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,1,-3,-1,0,0,0), 0.0)
);
Info<< "\nCreating heat capacity field\n" << endl;
volScalarField Cpv
(
IOobject
(
"Cpv",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(0,2,-2,-1,0,0,0), 0.0)
);
Info<< "\nCreating body force field\n" << endl;
volVectorField fOther
(
IOobject
(
"fOther",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedVector("zero", dimensionSet(1,-2,-2,0,0,0,0), vector::zero)
);
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(rho*U*voidfraction) & mesh.Sf()
);
dimensionedScalar rhoMax
(
dimensionedScalar::lookupOrDefault
(
"rhoMax",
pimple.dict(),
dimDensity,
GREAT
)
);
dimensionedScalar rhoMin
(
dimensionedScalar::lookupOrDefault
(
"rhoMin",
pimple.dict(),
dimDensity,
0
)
);
Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);
mesh.setFluxRequired(p.name());
Info<< "Creating field dpdt\n" << endl;
volScalarField dpdt
(
IOobject
(
"dpdt",
runTime.timeName(),
mesh
),
mesh,
dimensionedScalar("dpdt", p.dimensions()/dimTime, 0)
);
Info<< "Creating field kinetic energy K\n" << endl;
volScalarField K("K", 0.5*magSqr(U));
Info<< "\nReading momentum exchange field Ksl\n" << endl;
volScalarField Ksl
(
IOobject
(
"Ksl",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
//dimensionedScalar("0", dimensionSet(1, -3, -1, 0, 0), 1.0)
);
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//===============================

View File

@ -0,0 +1,92 @@
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rhoeps*rAU));
if (modelType=="A")
{
rhorAUf *= fvc::interpolate(voidfraction);
}
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiUs("phiUs", fvc::interpolate(rhoeps*rAU*Ksl*Us)& mesh.Sf());
if (pimple.nCorrPISO() <= 1)
{
tUEqn.clear();
}
if (pimple.transonic())
{
// transonic version not implemented yet
}
else
{
surfaceScalarField phiHbyA
(
"phiHbyA",
(
fvc::flux(rhoeps*HbyA)
// + rhorAUf*fvc::ddtCorr(rho, U, phi)
)
);
// flux without pressure gradient contribution
phi = phiHbyA + phiUs;
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, rhoeps, U, phi, rhorAUf);
while (pimple.correctNonOrthogonal())
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::ddt(psi*voidfraction, p)
+ fvc::div(phi)
- fvm::laplacian(rhorAUf, p)
==
fvOptions(psi, p, rho.name())
);
pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi += pEqn.flux();
}
}
}
#include "rhoEqn.H"
#include "compressibleContinuityErrsPU.H"
// Explicitly relax pressure for momentum corrector
p.relax();
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "rho max/min : " << max(rho).value()
<< " " << min(rho).value() << endl;
if (modelType=="A")
{
U = HbyA - rAU*(voidfraction*fvc::grad(p)-Ksl*Us);
}
else
{
U = HbyA - rAU*(fvc::grad(p)-Ksl*Us);
}
U.correctBoundaryConditions();
fvOptions.correct(U);
K = 0.5*magSqr(U);
if (thermo.dpdt())
{
dpdt = fvc::ddt(voidfraction,p);
}

View File

@ -0,0 +1,17 @@
{
fvScalarMatrix rhoEqn
(
fvm::ddt(voidfraction,rho)
+ fvc::div(phi)
==
fvOptions(rho)
);
fvOptions.constrain(rhoEqn);
rhoEqn.solve();
fvOptions.correct(rho);
}
// ************************************************************************* //

View File

@ -0,0 +1,55 @@
// contributions to internal energy equation can be found in
// Crowe et al.: "Multiphase flows with droplets and particles", CRC Press 1998
{
// dim he = J / kg
volScalarField& he = thermo.he();
particleCloud.energyContributions(Qsource);
particleCloud.energyCoefficients(QCoeff);
thCond=particleCloud.thermCondM().thermCond();
Cpv = he.name() == "e" ? thermo.Cv() : thermo.Cp();
// correct source for the thermodynamic reference temperature
dimensionedScalar Tref("Tref", dimTemperature, T[0]-he[0]/(Cpv[0]+SMALL));
Qsource += QCoeff*Tref;
fvScalarMatrix EEqn
(
fvm::ddt(rhoeps, he) + fvm::div(phi, he)
+ fvc::ddt(rhoeps, K) + fvc::div(phi, K)
+ (
he.name() == "e"
? fvc::div
(
fvc::absolute(phi/fvc::interpolate(rho), voidfraction*U),
p,
"div(phiv,p)"
)
: -dpdt
)
// net heat transfer from particles to fluid
- Qsource
- fvm::Sp(QCoeff/Cpv, he)
// thermal conduction of the fluid with effective conductivity
- fvm::laplacian(voidfraction*thCond/Cpv,he)
// + particle-fluid energy transfer due to work
// + fluid energy dissipation due to shearing
==
// + combustion->Sh()
fvOptions(rho, he)
);
EEqn.relax();
fvOptions.constrain(EEqn);
EEqn.solve();
fvOptions.correct(he);
thermo.correct();
Info<< "T max/min : " << max(T).value() << " " << min(T).value() << endl;
Info << "he min/max : " << max(he).value() << " " << min(he).value() << endl;
}

View File

@ -0,0 +1,3 @@
cfdemSolverRhoPimpleChem.C
EXE=$(CFDEM_APP_DIR)/cfdemSolverRhoPimpleChem

View File

@ -0,0 +1,60 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
PFLAGS+= -Dcompre
EXE_INC = \
$(PFLAGS) \
-I../. \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/fvOptions/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \
-I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
-I$(LIB_SRC)/ODE/lnInclude \
-I$(LIB_SRC)/combustionModels/lnInclude \
-I$(FOAM_SOLVERS)/combustion/reactingFoam \
EXE_LIBS = \
-L$(CFDEM_LIB_DIR) \
-lfiniteVolume \
-lmeshTools \
-lturbulenceModels \
-lcompressibleTurbulenceModels \
-lcompressibleTransportModels \
-lfluidThermophysicalModels \
-lspecie \
-lsampling \
-lfvOptions \
-l$(CFDEM_LIB_COMP_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS) \
-lliquidProperties \
-lliquidMixtureProperties \
-lthermophysicalFunctions \
-lreactionThermophysicalModels \
-lchemistryModel \
-lradiationModels \
-lregionModels \
-lsurfaceFilmModels \
-lODE \
-lcombustionModels

View File

@ -0,0 +1,31 @@
// Solve the Momentum equation
tmp<fvVectorMatrix> tUEqn
(
fvm::ddt(rhoeps,U) + fvm::div(phi, U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
+ fvm::Sp(Ksl,U)
==
fvOptions(rho, U)
);
fvVectorMatrix& UEqn = tUEqn.ref();
UEqn.relax();
fvOptions.constrain(UEqn);
if (pimple.momentumPredictor() && (modelType=="B" || modelType=="Bfull"))
{
solve(UEqn == -fvc::grad(p)+ Ksl*Us);
fvOptions.correct(U);
K = 0.5*magSqr(U);
}
else if (pimple.momentumPredictor())
{
solve(UEqn == -voidfraction*fvc::grad(p)+ Ksl*Us);
fvOptions.correct(U);
K = 0.5*magSqr(U);
}

View File

@ -0,0 +1,75 @@
particleCloud.clockM().start(29,"Y");
tmp<fv::convectionScheme<scalar> > mvConvection
(
fv::convectionScheme<scalar>::New
(
mesh,
fields,
phi,
mesh.divScheme("div(phi,Yi_h)")
)
);
{
combustion->correct();
dQ = combustion->dQ();
label inertIndex = -1;
volScalarField Yt(0.0*Y[0]);
forAll(Y, i)
{
if (Y[i].name() == inertSpecie) inertIndex = i;
if (Y[i].name() != inertSpecie || propagateInertSpecie)
{
volScalarField& Yi = Y[i];
fvScalarMatrix YiEqn
(
fvm::ddt(rhoeps, Yi)
+ mvConvection->fvmDiv(phi, Yi)
- fvm::laplacian(voidfraction*turbulence->muEff(), Yi)
==
combustion->R(Yi)
+ particleCloud.chemistryM(0).Smi(i)
+ fvOptions(rho, Yi)
);
YiEqn.relax();
fvOptions.constrain(YiEqn);
YiEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi);
Yi.max(0.0);
if (Y[i].name() != inertSpecie) Yt += Yi;
}
}
if (inertIndex!=-1)
{
Y[inertIndex].max(inertLowerBound);
Y[inertIndex].min(inertUpperBound);
}
if (propagateInertSpecie)
{
if (inertIndex!=-1) Yt /= (1-Y[inertIndex] + VSMALL);
forAll(Y,i)
{
if (i!=inertIndex)
{
volScalarField& Yi = Y[i];
Yi = Yi/(Yt+VSMALL);
}
}
}
else
{
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].max(0.0);
}
}
particleCloud.clockM().stop("Y");

View File

@ -0,0 +1,169 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria
Application
cfdemSolverRhoPimpleChem
Description
Transient solver for compressible flow using the flexible PIMPLE (PISO-SIMPLE)
algorithm.
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
The code is an evolution of the solver rhoPimpleFoam in OpenFOAM(R) 2.3,
where additional functionality for CFD-DEM coupling is added.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "turbulentFluidThermoModel.H"
#include "rhoCombustionModel.H"
#include "bound.H"
#include "pimpleControl.H"
#include "fvOptions.H"
#include "localEulerDdtScheme.H"
#include "fvcSmooth.H"
#include "cfdemCloudEnergy.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
#include "thermCondModel.H"
#include "energyModel.H"
#include "chemistryModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
// #include "postProcess.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createTimeControls.H"
#include "createRDeltaT.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
// create cfdemCloud
#include "readGravitationalAcceleration.H"
cfdemCloudEnergy particleCloud(mesh);
#include "checkModelType.H"
turbulence->validate();
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
scalar m(0.0);
scalar m0(0.0);
label counter(0);
while (runTime.run())
{
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
runTime++;
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.primitiveFieldRef()*(Us.primitiveFieldRef()-U.primitiveFieldRef()));
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
if (pimple.nCorrPIMPLE() <= 1)
{
#include "rhoEqn.H"
}
rhoeps = rho * voidfraction;
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
#include "UEqn.H"
#include "YEqn.H"
#include "EEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
#include "molConc.H"
#include "pEqn.H"
}
if (pimple.turbCorr())
{
turbulence->correct();
}
}
#include "monitorMass.H"
particleCloud.clockM().start(31,"postFlow");
particleCloud.postFlow();
particleCloud.clockM().stop("postFlow");
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
particleCloud.clockM().stop("Flow");
particleCloud.clockM().stop("Global");
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,2 @@
const volScalarField& T = thermo.T();
const volScalarField& psi = thermo.psi();

View File

@ -0,0 +1,290 @@
// thermodynamics, chemistry
Info<< "Creating combustion model\n" << endl;
autoPtr<combustionModels::rhoCombustionModel> combustion
(
combustionModels::rhoCombustionModel::New(mesh)
);
rhoReactionThermo& thermo = combustion->thermo();
thermo.validate(args.executable(), "h", "e");
basicSpecieMixture& composition = thermo.composition();
PtrList<volScalarField>& Y = composition.Y();
// read molecular weight
volScalarField W(composition.W());
bool propagateInertSpecie = true;
const word inertSpecie(thermo.lookup("inertSpecie"));
const scalar inertLowerBound(thermo.lookupOrDefault<scalar>("inertLowerBound",0.0));
const scalar inertUpperBound(thermo.lookupOrDefault<scalar>("inertUpperBound",1.0));
if (!composition.contains(inertSpecie))
{
FatalErrorIn(args.executable())
<< "Specified inert specie '" << inertSpecie << "' not found in "
<< "species list. Available species:" << composition.species()
<< exit(FatalError);
}
volScalarField& p = thermo.p();
multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
forAll(Y, i)
{
fields.add(Y[i]);
}
fields.add(thermo.he());
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
thermo.rho()
);
// kinematic fields
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
IOobject
(
"voidfraction",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
volScalarField rhoeps
(
IOobject
(
"rhoeps",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
rho*voidfraction
);
Info<< "\nCreating fluid-particle heat flux field\n" << endl;
volScalarField Qsource
(
IOobject
(
"Qsource",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), 0.0)
);
Info<< "\nCreating fluid-particle heat flux coefficient field\n" << endl;
volScalarField QCoeff
(
IOobject
(
"QCoeff",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,-1,0,0,0), 0.0)
);
Info<< "\nCreating thermal conductivity field\n" << endl;
volScalarField thCond
(
IOobject
(
"thCond",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,1,-3,-1,0,0,0), 0.0)
);
Info<< "\nCreating heat capacity field\n" << endl;
volScalarField Cpv
(
IOobject
(
"Cpv",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(0,2,-2,-1,0,0,0), 0.0)
);
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(rho*U*voidfraction) & mesh.Sf()
);
dimensionedScalar rhoMax
(
dimensionedScalar::lookupOrDefault
(
"rhoMax",
pimple.dict(),
dimDensity,
GREAT
)
);
dimensionedScalar rhoMin
(
dimensionedScalar::lookupOrDefault
(
"rhoMin",
pimple.dict(),
dimDensity,
0
)
);
Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);
Info<< "Creating field dpdt\n" << endl;
volScalarField dpdt
(
IOobject
(
"dpdt",
runTime.timeName(),
mesh
),
mesh,
dimensionedScalar("dpdt", p.dimensions()/dimTime, 0)
);
Info<< "Creating field kinetic energy K\n" << endl;
volScalarField K("K", 0.5*magSqr(U));
volScalarField dQ
(
IOobject
(
"dQ",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("dQ", dimEnergy/dimTime, 0.0)
);
Info<< "\nReading momentum exchange field Ksl\n" << endl;
volScalarField Ksl
(
IOobject
(
"Ksl",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
//dimensionedScalar("0", dimensionSet(1, -3, -1, 0, 0), 1.0)
);
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
volScalarField molarConc
(
IOobject
(
"molarConc",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero",dimensionSet(0, -3, 0, 0, 1),0)
);
//===============================
// singlePhaseTransportModel laminarTransport(U, phi);

View File

@ -0,0 +1,27 @@
{
volScalarField artMass = rhoeps;
scalar lowestValue(0.0);
label lVCell(-1);
forAll(Yi,cellI)
{
if(Yi[cellI] < 0.0)
{
artMass[cellI] *= Yi[cellI];
if(artMass[cellI] < lowestValue)
{
lowestValue=artMass[cellI];
lVCell = cellI;
}
}
else
{
artMass[cellI] *=0.0;
}
}
Info << "\nartificial mass of species " << Y[i].name() << " per time step: "<< fvc::domainIntegrate(artMass) << endl;
if(lVCell > -1)
{
Pout << Y[i].name() << ": time / lowest value " << runTime.timeName() << "\t" << lowestValue << "\n\tat cell " << lVCell << " with coordinates";
Pout << "\t" << mesh.C()[lVCell].component(0) << "\t" << mesh.C()[lVCell].component(1) << "\t" << mesh.C()[lVCell].component(2) << endl;
}
}

View File

@ -0,0 +1,12 @@
{
molarConc = 0.0 * molarConc;
forAll(Y, i)
{
volScalarField& Yi = Y[i];
dimensionedScalar mi("mi",dimensionSet(1, 0, 0, 0, -1),composition.W(i));
mi /= 1000.0; // g to kg
molarConc += rho * Yi / mi;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,7 @@
{
m=gSum(rhoeps*1.0*rhoeps.mesh().V());
if(counter==0) m0=m;
counter++;
Info << "\ncurrent gas mass = " << m << "\n" << endl;
Info << "\ncurrent added gas mass = " << m-m0 << "\n" << endl;
}

View File

@ -0,0 +1,97 @@
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rhoeps*rAU));
if (modelType=="A")
{
rhorAUf *= fvc::interpolate(voidfraction);
}
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiUs("phiUs", fvc::interpolate(rhoeps*rAU*Ksl*Us)& mesh.Sf());
if (pimple.nCorrPISO() <= 1)
{
tUEqn.clear();
}
if (pimple.transonic())
{
// transonic version not implemented yet
}
else
{
surfaceScalarField phiHbyA
(
"phiHbyA",
(
fvc::flux(rhoeps*HbyA)
// + rhorAUf*fvc::ddtCorr(rho, U, phi)
)
);
// flux without pressure gradient contribution
phi = phiHbyA + phiUs;
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, rhoeps, U, phi, rhorAUf);
volScalarField SmbyP(particleCloud.chemistryM(0).Sm() / p);
while (pimple.correctNonOrthogonal())
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvm::ddt(voidfraction, psi, p)
+ fvc::div(phi)
- fvm::laplacian(rhorAUf, p)
==
fvm::Sp(SmbyP, p)
+ fvOptions(psi, p, rho.name())
);
pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi += pEqn.flux();
}
}
}
#include "rhoEqn.H"
#include "compressibleContinuityErrsPU.H"
// Explicitly relax pressure for momentum corrector
p.relax();
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "rho max/min : " << max(rho).value()
<< " " << min(rho).value() << endl;
rhoeps = rho * voidfraction;
if (modelType=="A")
{
U = HbyA - rAU*(voidfraction*fvc::grad(p)-Ksl*Us);
}
else
{
U = HbyA - rAU*(fvc::grad(p)-Ksl*Us);
}
U.correctBoundaryConditions();
fvOptions.correct(U);
K = 0.5*magSqr(U);
if (thermo.dpdt())
{
dpdt = fvc::ddt(voidfraction,p);
}

View File

@ -0,0 +1,109 @@
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
rhoeps = rho * voidfraction;
// Thermodynamic density needs to be updated by psi*d(p) after the
// pressure solution - done in 2 parts. Part 1:
thermo.rho() -= psi*p;
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rhoeps*rAU));
if (modelType=="A")
{
rhorAUf *= fvc::interpolate(voidfraction);
}
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiUs("phiUs", fvc::interpolate(rhoeps*rAU*Ksl*Us)& mesh.Sf());
if (pimple.nCorrPISO() <= 1)
{
tUEqn.clear();
}
if (pimple.transonic())
{
// transonic version not implemented yet
}
else
{
surfaceScalarField phiHbyA
(
"phiHbyA",
(
fvc::flux(rhoeps*HbyA)
// + rhorAUf*fvc::ddtCorr(rho, U, phi)
)
);
// flux without pressure gradient contribution
phi = phiHbyA + phiUs;
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, rhoeps, U, phi, rhorAUf);
volScalarField SmbyP(particleCloud.chemistryM(0).Sm() / p);
while (pimple.correctNonOrthogonal())
{
// Pressure corrector
fvScalarMatrix pEqn
(
// fvm::ddt(psi*voidfraction, p)
fvc::ddt(rhoeps) + psi*correction(fvm::ddt(voidfraction,p))
+ fvc::div(phi)
- fvm::laplacian(rhorAUf, p)
==
// particleCloud.chemistryM(0).Sm()
fvm::Sp(SmbyP, p)
+ fvOptions(psi, p, rho.name())
);
pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi += pEqn.flux();
}
}
}
#include "rhoEqn.H"
#include "compressibleContinuityErrsPU.H"
// Explicitly relax pressure for momentum corrector
p.relax();
// Second part of thermodynamic density update
thermo.rho() += psi*p;
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
rhoeps = rho * voidfraction;
Info<< "rho max/min : " << max(rho).value()
<< " " << min(rho).value() << endl;
if (modelType=="A")
{
U = HbyA - rAU*(voidfraction*fvc::grad(p)-Ksl*Us);
}
else
{
U = HbyA - rAU*(fvc::grad(p)-Ksl*Us);
}
U.correctBoundaryConditions();
fvOptions.correct(U);
K = 0.5*magSqr(U);
if (thermo.dpdt())
{
dpdt = fvc::ddt(voidfraction,p);
}

View File

@ -0,0 +1,18 @@
{
fvScalarMatrix rhoEqn
(
fvm::ddt(voidfraction,rho)
+ fvc::div(phi)
==
particleCloud.chemistryM(0).Sm()
+ fvOptions(rho)
);
fvOptions.constrain(rhoEqn);
rhoEqn.solve();
fvOptions.correct(rho);
}
// ************************************************************************* //

View File

@ -0,0 +1,60 @@
// contributions to internal energy equation can be found in
// Crowe et al.: "Multiphase flows with droplets and particles", CRC Press 1998
{
// dim he = J / kg
volScalarField& he = thermo.he();
particleCloud.energyContributions(Qsource);
particleCloud.energyCoefficients(QCoeff);
//thDiff=particleCloud.thermCondM().thermDiff();
thCond=particleCloud.thermCondM().thermCond();
addSource =
(
he.name() == "e"
?
fvc::div(phi, K) +
fvc::div
(
fvc::absolute(phi/fvc::interpolate(rho), voidfraction*U),
p,
"div(phiv,p)"
)
: fvc::div(phi, K)
);
Cpv = he.name() == "e" ? thermo.Cv() : thermo.Cp();
// correct source for the thermodynamic reference temperature
dimensionedScalar Tref("Tref", dimTemperature, T[0]-he[0]/(Cpv[0]+SMALL));
Qsource += QCoeff*Tref;
fvScalarMatrix EEqn
(
fvm::div(phi, he)
+ addSource
- Qsource
- fvm::Sp(QCoeff/Cpv, he)
- fvm::laplacian(voidfraction*thCond/Cpv,he)
==
fvOptions(rho, he)
);
EEqn.relax();
fvOptions.constrain(EEqn);
EEqn.solve();
fvOptions.correct(he);
thermo.correct();
Info<< "T max/min : " << max(T).value() << " " << min(T).value() << endl;
particleCloud.clockM().start(31,"energySolve");
particleCloud.solve();
particleCloud.clockM().stop("energySolve");
}

View File

@ -0,0 +1,3 @@
cfdemSolverRhoSimple.C
EXE=$(CFDEM_APP_DIR)/cfdemSolverRhoSimple

View File

@ -0,0 +1,32 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
PFLAGS+= -Dcompre
EXE_INC = \
$(PFLAGS) \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/lnInclude \
-I$(CFDEM_SRC_DIR)/lagrangian/cfdemParticle/cfdTools \
EXE_LIBS = \
-L$(CFDEM_LIB_DIR)\
-lcompressibleTransportModels \
-lfluidThermophysicalModels \
-lspecie \
-lturbulenceModels \
-lcompressibleTurbulenceModels \
-lfiniteVolume \
-lmeshTools \
-lsampling \
-lfvOptions \
-l$(CFDEM_LIB_COMP_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -0,0 +1,30 @@
// Solve the Momentum equation
particleCloud.otherForces(fOther);
tmp<fvVectorMatrix> tUEqn
(
fvm::div(phi, U)
+ particleCloud.divVoidfractionTau(U, voidfraction)
+ fvm::Sp(Ksl,U)
- fOther
==
fvOptions(rho, U)
);
fvVectorMatrix& UEqn = tUEqn.ref();
UEqn.relax();
fvOptions.constrain(UEqn);
if (modelType=="B" || modelType=="Bfull")
{
solve(UEqn == -fvc::grad(p)+ Ksl*Us);
}
else
{
solve(UEqn == -voidfraction*fvc::grad(p)+ Ksl*Us);
}
fvOptions.correct(U);
K = 0.5*magSqr(U);

View File

@ -0,0 +1,140 @@
/*---------------------------------------------------------------------------*\
License
This 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.
This code 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 this code. If not, see <http://www.gnu.org/licenses/>.
Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria
Application
cfdemSolverRhoSimple
Description
Steady-state solver for turbulent flow of compressible fluids based on
rhoSimpleFoam where functionality for CFD-DEM coupling has been added.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "psiThermo.H"
#include "turbulentFluidThermoModel.H"
#include "bound.H"
#include "simpleControl.H"
#include "fvOptions.H"
#include "localEulerDdtScheme.H"
#include "fvcSmooth.H"
#include "cfdemCloudEnergy.H"
#include "implicitCouple.H"
#include "clockModel.H"
#include "smoothingModel.H"
#include "forceModel.H"
#include "thermCondModel.H"
#include "energyModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "postProcess.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createTimeControls.H"
#include "createRDeltaT.H"
#include "initContinuityErrs.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "createFvOptions.H"
// create cfdemCloud
#include "readGravitationalAcceleration.H"
cfdemCloudEnergy particleCloud(mesh);
#include "checkModelType.H"
turbulence->validate();
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (simple.loop())
{
particleCloud.clockM().start(1,"Global");
Info<< "Time = " << runTime.timeName() << nl << endl;
// do particle stuff
particleCloud.clockM().start(2,"Coupling");
bool hasEvolved = particleCloud.evolve(voidfraction,Us,U);
if(hasEvolved)
{
particleCloud.smoothingM().smoothen(particleCloud.forceM(0).impParticleForces());
}
Info << "update Ksl.internalField()" << endl;
Ksl = particleCloud.momCoupleM(0).impMomSource();
Ksl.correctBoundaryConditions();
//Force Checks
vector fTotal(0,0,0);
vector fImpTotal = sum(mesh.V()*Ksl.primitiveFieldRef()*(Us.primitiveFieldRef()-U.primitiveFieldRef()));
reduce(fImpTotal, sumOp<vector>());
Info << "TotalForceExp: " << fTotal << endl;
Info << "TotalForceImp: " << fImpTotal << endl;
#include "solverDebugInfo.H"
particleCloud.clockM().stop("Coupling");
particleCloud.clockM().start(26,"Flow");
volScalarField rhoeps("rhoeps",rho*voidfraction);
// Pressure-velocity SIMPLE corrector
#include "UEqn.H"
// besides this pEqn, OF offers a "simple consistent"-option
#include "pEqn.H"
rhoeps=rho*voidfraction;
#include "EEqn.H"
turbulence->correct();
particleCloud.clockM().start(32,"postFlow");
if(hasEvolved) particleCloud.postFlow();
particleCloud.clockM().stop("postFlow");
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
particleCloud.clockM().stop("Flow");
particleCloud.clockM().stop("Global");
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,2 @@
const volScalarField& T = thermo.T();
const volScalarField& psi = thermo.psi();

View File

@ -0,0 +1,242 @@
Info<< "Reading thermophysical properties\n" << endl;
autoPtr<psiThermo> pThermo
(
psiThermo::New(mesh)
);
psiThermo& thermo = pThermo();
thermo.validate(args.executable(), "h", "e");
volScalarField& p = thermo.p();
Info<< "Reading field rho\n" << endl;
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
thermo.rho()
);
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
IOobject
(
"voidfraction",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
volScalarField addSource
(
IOobject
(
"addSource",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nCreating fluid-particle heat flux field\n" << endl;
volScalarField Qsource
(
IOobject
(
"Qsource",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), 0.0)
);
Info<< "\nCreating fluid-particle heat flux coefficient field\n" << endl;
volScalarField QCoeff
(
IOobject
(
"QCoeff",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,-1,-3,-1,0,0,0), 0.0)
);
Info<< "\nCreating thermal conductivity field\n" << endl;
volScalarField thCond
(
IOobject
(
"thCond",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(1,1,-3,-1,0,0,0), 0.0)
);
Info<< "\nCreating heat capacity field\n" << endl;
volScalarField Cpv
(
IOobject
(
"Cpv",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("zero", dimensionSet(0,2,-2,-1,0,0,0), 0.0)
);
Info<< "\nCreating body force field\n" << endl;
volVectorField fOther
(
IOobject
(
"fOther",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedVector("zero", dimensionSet(1,-2,-2,0,0,0,0), vector::zero)
);
Info<< "Reading/calculating face flux field phi\n" << endl;
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
linearInterpolate(rho*U*voidfraction) & mesh.Sf()
);
dimensionedScalar rhoMax
(
dimensionedScalar::lookupOrDefault
(
"rhoMax",
simple.dict(),
dimDensity,
GREAT
)
);
dimensionedScalar rhoMin
(
dimensionedScalar::lookupOrDefault
(
"rhoMin",
simple.dict(),
dimDensity,
0
)
);
Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell(p, simple.dict(), pRefCell, pRefValue);
mesh.setFluxRequired(p.name());
Info<< "Creating field dpdt\n" << endl;
volScalarField dpdt
(
IOobject
(
"dpdt",
runTime.timeName(),
mesh
),
mesh,
dimensionedScalar("dpdt", p.dimensions()/dimTime, 0)
);
Info<< "Creating field kinetic energy K\n" << endl;
volScalarField K("K", 0.5*magSqr(U));
Info<< "\nReading momentum exchange field Ksl\n" << endl;
volScalarField Ksl
(
IOobject
(
"Ksl",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
//dimensionedScalar("0", dimensionSet(1, -3, -1, 0, 0), 1.0)
);
Info<< "Reading particle velocity field Us\n" << endl;
volVectorField Us
(
IOobject
(
"Us",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
//===============================

View File

@ -0,0 +1,81 @@
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rhoeps*rAU));
if (modelType=="A")
{
rhorAUf *= fvc::interpolate(voidfraction);
}
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiUs("phiUs", fvc::interpolate(rhoeps*rAU*Ksl*Us)& mesh.Sf());
if (simple.transonic())
{
// transonic version not implemented yet
}
else
{
surfaceScalarField phiHbyA
(
"phiHbyA",
(
fvc::flux(rhoeps*HbyA)
)
);
// flux without pressure gradient contribution
phi = phiHbyA + phiUs;
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, rhoeps, U, phi, rhorAUf);
while (simple.correctNonOrthogonal())
{
// Pressure corrector
fvScalarMatrix pEqn
(
fvc::div(phi)
- fvm::laplacian(rhorAUf, p)
==
fvOptions(psi, p, rho.name())
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
if (simple.finalNonOrthogonalIter())
{
phi += pEqn.flux();
}
}
}
// Explicitly relax pressure for momentum corrector
p.relax();
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "rho max/min : " << max(rho).value()
<< " " << min(rho).value() << endl;
if (modelType=="A")
{
U = HbyA - rAU*(voidfraction*fvc::grad(p)-Ksl*Us);
}
else
{
U = HbyA - rAU*(fvc::grad(p)-Ksl*Us);
}
U.correctBoundaryConditions();
fvOptions.correct(U);
K = 0.5*magSqr(U);

View File

@ -1,5 +1,9 @@
include $(CFDEM_ADD_LIBS_DIR)/additionalLibs
EXE_INC = \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(CFDEM_OFVERSION_DIR) \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
@ -8,10 +12,12 @@ EXE_INC = \
EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)\
-lincompressibleRASModels \
-lincompressibleLESModels \
-L$(CFDEM_LIB_DIR)\
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-l$(CFDEM_LIB_NAME) \
$(CFDEM_ADD_LIB_PATHS) \
$(CFDEM_ADD_LIBS)

View File

@ -33,7 +33,7 @@ Description
#include "fvCFD.H"
#include "singlePhaseTransportModel.H"
#include "turbulenceModel.H"
#include "turbulentTransportModel.H"
#include "cfdemCloud.H"
#include "dataExchangeModel.H"
@ -62,7 +62,7 @@ int main(int argc, char *argv[])
Info<< "\nStarting time loop\n" << endl;
int count=0;
int DEM_dump_Interval=1000;
int DEM_dump_Interval(particleCloud.couplingProperties().lookupOrDefault<int>("dumpInterval",1000));
particleCloud.reAllocArrays();
double **positions_;
@ -71,8 +71,9 @@ int main(int argc, char *argv[])
double **voidfractions_;
double **particleWeights_;
double **particleVolumes_;
double **cellIDs_;
double **particleV_;
int **cellIDs_;
particleCloud.dataExchangeM().allocateArray(positions_,0.,3);
particleCloud.dataExchangeM().allocateArray(velocities_,0.,3);
particleCloud.get_radii(radii_); // get ref to radii
@ -80,9 +81,10 @@ int main(int argc, char *argv[])
particleCloud.dataExchangeM().allocateArray(voidfractions_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleWeights_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleVolumes_,0.,1);
particleCloud.dataExchangeM().allocateArray(particleV_,0.,1);
particleCloud.get_cellIDs(cellIDs_); // get ref to cellIDs
//particleCloud.dataExchangeM().allocateArray(cellIDs_,0.,1);
while (runTime.loop())
{
@ -96,7 +98,7 @@ int main(int argc, char *argv[])
particleCloud.averagingM().resetWeightFields();
particleCloud.momCoupleM(0).resetMomSourceField();
particleCloud.dataExchangeM().couple();
particleCloud.dataExchangeM().couple(0);
particleCloud.dataExchangeM().getData("x","vector-atom",positions_,count);
particleCloud.dataExchangeM().getData("v","vector-atom",velocities_,count);
@ -105,9 +107,10 @@ int main(int argc, char *argv[])
particleCloud.locateM().findCell(NULL,positions_,cellIDs_,particleCloud.numberOfParticles());
particleCloud.setPos(positions_);
particleCloud.voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_);
particleCloud.voidFractionM().setvoidFraction(NULL,voidfractions_,particleWeights_,particleVolumes_,particleV_);
voidfraction.internalField() = particleCloud.voidFractionM().voidFractionInterp();
// make sure coupling interval = 1, otherwise update of voidfractionPrev and UsPrev necessary
voidfraction.ref() = particleCloud.voidFractionM().voidFractionInterp();
voidfraction.correctBoundaryConditions();
particleCloud.averagingM().setVectorAverage
@ -119,6 +122,9 @@ int main(int argc, char *argv[])
NULL
);
Us = particleCloud.averagingM().UsInterp();
Us.correctBoundaryConditions();
runTime.write();
particleCloud.IOM().dumpDEMdata();
@ -135,6 +141,7 @@ int main(int argc, char *argv[])
particleCloud.dataExchangeM().destroy(voidfractions_,1);
particleCloud.dataExchangeM().destroy(particleWeights_,1);
particleCloud.dataExchangeM().destroy(particleVolumes_,1);
particleCloud.dataExchangeM().destroy(particleV_,1);
//particleCloud.dataExchangeM().destroy(cellIDs_); // destroyed in cloud
Info<< "End\n" << endl;

View File

@ -10,7 +10,7 @@
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("0", dimensionSet(0, 2, -2, 0, 0), 1.0)
dimensionedScalar("1", dimensionSet(0, 2, -2, 0, 0), 1.0)
);
Info<< "Reading physical velocity field U" << endl;
@ -26,15 +26,29 @@
IOobject::NO_WRITE
),
mesh,
dimensionedVector("0", dimensionSet(0, 1, -1, 0, 0), vector::zero)
dimensionedVector("0", dimensionSet(0, 1, -1, 0, 0), Foam::vector::zero)
);
//========================
// drag law modelling
//========================
Info<< "Creating dummy density field rho\n" << endl;
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("1", dimensionSet(1, -3, 0, 0, 0), 1.0)
);
Info<< "\nReading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
Info<< "Reading voidfraction field voidfraction = (Vgas/Vparticle)\n" << endl;
volScalarField voidfraction
(
IOobject
@ -46,7 +60,7 @@
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar("0", dimensionSet(0, 0, 0, 0, 0), 1.)
dimensionedScalar("1", dimensionSet(0, 0, 0, 0, 0), 1.0)
);
@ -62,7 +76,7 @@
IOobject::AUTO_WRITE
),
mesh,
dimensionedVector("0", dimensionSet(0, 1, -1, 0, 0), vector::zero)
dimensionedVector("0", dimensionSet(0, 1, -1, 0, 0), Foam::vector::zero)
);
//========================

View File

@ -28,7 +28,7 @@ Application
writeUfluidwriteUfluid
Description
Writes the the cell center fluid velocity to particles in the lagrangian
Writes the the cell center fluid velocity to particles in the lagrangian
time directory.
\*---------------------------------------------------------------------------*/
@ -76,13 +76,13 @@ int nParticle=0;
{
volVectorField U(UHeader,mesh);
passiveParticleCloud myCloud(mesh, cloudName);
myCloud.write();
myCloud.write();
nParticle = myCloud.size();
IOField<vector> Ufluid(myCloud.fieldIOobject("Ufluid",IOobject::NO_READ),nParticle);
IOField<vector> Ufluid(myCloud.fieldIOobject("Ufluid",IOobject::NO_READ),nParticle);
label i = 0;
forAllConstIter(passiveParticleCloud, myCloud, iter)
{
Ufluid[i]=U[iter().cell()];
Ufluid[i]=U[iter().cell()];
i++;
}
Ufluid.write();

12
doc/.gitignore vendored Normal file
View File

@ -0,0 +1,12 @@
# ignore generated files and folders
*.html
*.rst
*.inv
*~
searchindex.js
_build
_sources
_static
_images

View File

@ -1,241 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A>
</CENTER>
<HR>
<H2><CENTER>CFDEMcoupling Documentation
</CENTER></H2>
<HR>
<CENTER><IMG SRC = "Portfolio_CFDEMcoupling.png">
</CENTER>
<HR>
<H3>1. Contents
</H3>
<P>The CFDEMcoupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEMcoupling documentation can be improved.
</P>
1.1 <A HREF = "#1_1">About CFDEMcoupling</A><BR>
1.2 <A HREF = "#1_2">Installation</A><BR>
1.3 <A HREF = "#1_3">Tutorials</A><BR>
1.4 <A HREF = "#1_4">couplingProperties dictionary</A><BR>
1.5 <A HREF = "#1_5">liggghtsCommands dictionary</A><BR>
1.6 <A HREF = "#cmd_5">Models and solvers</A> <BR>
<HR>
<A NAME = "1_1"></A><H4>1.1 About CFDEMcoupling
</H4>
<P>CFDEM coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of <A HREF = "http://www.cfdem.com">LIGGGHTS</A> DEM code and the Open Source CFD package <A HREF = "http://www.openfoam.com">OpenFOAM(R)(*)</A>. The CFDEMcoupling toolbox allows to expand standard CFD solvers of <A HREF = "http://www.openfoam.com">OpenFOAM(R)(*)</A> to include a coupling to the DEM code <A HREF = "http://www.cfdem.com">LIGGGHTS</A>. 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.
</P>
<P>The coupled solvers run fully parallel on distributed-memory clusters. Features are:
</P>
<UL><LI>its modular approach allows users to easily implement new models
<LI>its MPI parallelization enables to use it for large scale problems
<LI>the <A HREF = "http://www.cfdem.com">forum</A> on CFD-DEM gives the possibility to exchange with other users / developers
<LI>the use of GIT allows to easily update to the latest version
<LI>basic documentation is provided
</UL>
<P>The file structure:
</P>
<UL><LI><I>src</I> directory including the source files of the coupling toolbox and models
<LI><I>applications</I> directory including the solver files for coupled CFD-DEM simulations
<LI><I>doc</I> directory including the documentation of CFDEMcoupling
<LI><I>tutorials</I> directory including basic tutorial cases showing the functionality
</UL>
<P>Details on installation are given on the <A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> .
The functionality of this CFD-DEM framework is described via <A HREF = "#_1_2">tutorial cases</A> showing how to use different solvers and models.
</P>
<P>CFDEMcoupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.
</P>
<P>CFDEMcoupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).
</P>
<P>Core development of CFDEMcoupling is done by Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012
</P>
<P>This documentation was written by Christoph Goniva, DCS Computing GmbH, 2012
</P>
<HR>
<P>(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.
</P>
<HR>
<A NAME = "1_2"></A><H4>1.2 Installation
</H4>
<P>Please follow the installation routine provided at www.cfdem.com.
In order to get the latest code version, please use the git repository at http://github.com (<A HREF = "githubAccess_public.html">githubAccess</A>).
</P>
<HR>
<A NAME = "1_3"></A><H4>1.3 Tutorials
</H4>
<P><B>General:</B>
</P>
<P>Each solver of the CFDEMcoupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).
</P>
<P><B>Location:</B>
</P>
<P>The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials, which can be reached by typing "cfdemTut"
</P>
<P><B>Structure:</B>
</P>
<P>Each case is structured in a directory called "CFD" covering the CFD relevant settings and data, and a dirctory called "DEM" covering the DEM relevant settings and data. This allows to easily expand a pure CFD or DEM simulation case to a coupled case.
</P>
<P><B>Usage:</B>
</P>
<P>Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell script, executed by typing "./Allrun.sh". The successful run of the script might need some third party software (e.g. octave, evince, etc.).
</P>
<P><B>Settings:</B>
</P>
<P>The main settings of a simulation are done via dictionaries:
</P>
<P>The DEM setup of each case is defined by a <A HREF = "http://www.cfdem.com">LIGGGHTS</A> input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the <A HREF = "http://www.cfdem.com">LIGGGHTS</A> setup, please have a look at the <A HREF = "http://www.cfdem.com">LIGGGHTS</A> manual.
</P>
<P>Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). You can find more information on that in <A HREF = "http://www.openfoam.com">OpenFOAM(R)(*)</A> documentations (www.openFoam.com)(*).
</P>
<P>Settings of the coupling routines are defined in $caseDir/CFD/constant/<A HREF = "#1_3">couplingProperies</A> (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/<A HREF = "#1_3">liggghtsCommands</A> (allows to execute a LIGGGHTS command during a coupled simulation).
</P>
<HR>
<A NAME = "1_4"></A><H4>1.4 "couplingProperties" dictionary
</H4>
<P><B>General:</B>
</P>
<P>In the "couplingProperties" dictionary the setup of the coupling routines of the CFD-DEM simulation are defined.
</P>
<P><B>Location:</B> $caseDir/CFD/constant
</P>
<P><B>Structure:</B>
</P>
<P>The dictionary is divided into two parts, "sub-models & settings" and "sub-model properties".
</P>
<P>In "sub-models & settings" the following routines must be specified:
</P>
<UL><LI>modelType
<LI>couplingInterval
<LI>voidFractionModel
<LI>locateModel
<LI>meshMotionModel
<LI>regionModel
<LI>IOModel
<LI>dataExchangeModel
<LI>averagingModel
<LI>forceModels
<LI>momCoupleModels
<LI>turbulenceModelType
</UL>
<P>In "sub-model properties" sub-dictionaries might be defined to specify model specific parameters.
</P>
<P><B>Settings:</B>
</P>
<P>Reasonable example settings for the "couplingProperties" dictionary are given in the tutorial cases.
</P>
<PRE>modelType
</PRE>
<P>"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 applicability", JFM. "A" requires the use of the force models gradPForce and viscForce, whereas "B" requires the force model "Archimedes".
</P>
<PRE>couplingInterval
</PRE>
<P>The coupling interval determines the time passing between two CFD-DEM data exchanges.
</P>
<P>A useful procedure would be:
1) Set the DEM timestep in the in.xxx file 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 to or smaller than the coupling time, otherwise you will get the error: "Error - TS bigger than coupling interval!".
</P>
<P>Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s.
</P>
<HR>
<H4><A NAME = "1_5"></A>1.5 "liggghtsCommands" dictionary
</H4>
<P><B>General:</B>
</P>
<P>In the "liggghtsCommands" dictionary liggghts commands being executed during a coupled CFD-DEM simulation are specified.
</P>
<P><B>Location:</B> $caseDir/CFD/constant
</P>
<P><B>Structure:</B>
</P>
<P>The dictionary is divided into two parts, first a list of "liggghtsCommandModels" is defined, then the settings for each model must be specified.
</P>
<P><B>Settings:</B>
</P>
<P>Reasonable example settings for the "liggghtsCommands" dictionary are given in the tutorial cases.
</P>
<HR>
<H4><A NAME = "cmd_5"></A><A NAME = "comm"></A>1.6 Models/Solvers
</H4>
<P>This section lists all CFDEMcoupling sub-models and solvers alphabetically, with a separate
listing below of styles within certain commands.
</P>
<DIV ALIGN=center><TABLE BORDER=1 >
<TR ALIGN="center"><TD ><A HREF = "IOModel.html">IOModel</A></TD><TD ><A HREF = "IOModel_basicIO.html">IOModel_basicIO</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "IOModel_noIO.html">IOModel_noIO</A></TD><TD ><A HREF = "IOModel_sophIO.html">IOModel_sophIO</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "IOModel_trackIO.html">IOModel_trackIO</A></TD><TD ><A HREF = "averagingModel.html">averagingModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "averagingModel_dense.html">averagingModel_dense</A></TD><TD ><A HREF = "averagingModel_dilute.html">averagingModel_dilute</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "cfdemSolverIB.html">cfdemSolverIB</A></TD><TD ><A HREF = "cfdemSolverPiso.html">cfdemSolverPiso</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "cfdemSolverPisoScalar.html">cfdemSolverPisoScalar</A></TD><TD ><A HREF = "clockModel.html">clockModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "clockModel_noClock.html">clockModel_noClock</A></TD><TD ><A HREF = "clockModel_standardClock.html">clockModel_standardClock</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel.html">dataExchangeModel</A></TD><TD ><A HREF = "dataExchangeModel_noDataExchange.html">dataExchangeModel_noDataExchange</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_oneWayVTK.html">dataExchangeModel_oneWayVTK</A></TD><TD ><A HREF = "dataExchangeModel_twoWayFiles.html">dataExchangeModel_twoWayFiles</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "dataExchangeModel_twoWayM2M.html">dataExchangeModel_twoWayM2M</A></TD><TD ><A HREF = "dataExchangeModel_twoWayMPI.html">dataExchangeModel_twoWayMPI</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel.html">forceModel</A></TD><TD ><A HREF = "forceModel_Archimedes.html">forceModel_Archimedes</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_ArchimedesIB.html">forceModel_ArchimedesIB</A></TD><TD ><A HREF = "forceModel_DiFeliceDrag.html">forceModel_DiFeliceDrag</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_GidaspowDrag.html">forceModel_GidaspowDrag</A></TD><TD ><A HREF = "forceModel_KochHillDrag.html">forceModel_KochHillDrag</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_LaEuScalarTemp.html">forceModel_LaEuScalarTemp</A></TD><TD ><A HREF = "forceModel_MeiLift.html">forceModel_MeiLift</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_SchillerNaumannDrag.html">forceModel_SchillerNaumannDrag</A></TD><TD ><A HREF = "forceModel_ShirgaonkarIB.html">forceModel_ShirgaonkarIB</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_gradPForce.html">forceModel_gradPForce</A></TD><TD ><A HREF = "forceModel_noDrag.html">forceModel_noDrag</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_particleCellVolume.html">forceModel_particleCellVolume</A></TD><TD ><A HREF = "forceModel_virtualMassForce.html">forceModel_virtualMassForce</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "forceModel_viscForce.html">forceModel_viscForce</A></TD><TD ><A HREF = "liggghtsCommandModel.html">liggghtsCommandModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_execute.html">liggghtsCommandModel_execute</A></TD><TD ><A HREF = "liggghtsCommandModel_readLiggghtsData.html">liggghtsCommandModel_readLiggghtsData</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "liggghtsCommandModel_runLiggghts.html">liggghtsCommandModel_runLiggghts</A></TD><TD ><A HREF = "liggghtsCommandModel_writeLiggghts.html">liggghtsCommandModel_writeLiggghts</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel.html">locateModel</A></TD><TD ><A HREF = "locateModel_engineSearch.html">locateModel_engineSearch</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel_engineSearchIB.html">locateModel_engineSearchIB</A></TD><TD ><A HREF = "locateModel_standardSearch.html">locateModel_standardSearch</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "locateModel_turboEngineSearchM2M.html">locateModel_turboEngineM2MSearch</A></TD><TD ><A HREF = "locateModel_turboEngineSearch.html">locateModel_turboEngineSearch</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "meshMotionModel.html">meshMotionModel</A></TD><TD ><A HREF = "meshMotionModel_noMeshMotion.html">meshMotionModel_noMeshMotion</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel.html">momCoupleModel</A></TD><TD ><A HREF = "momCoupleModel_explicitCouple.html">momCoupleModel_explicitCouple</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "momCoupleModel_implicitCouple.html">momCoupleModel_implicitCouple</A></TD><TD ><A HREF = "momCoupleModel_noCouple.html">momCoupleModel_noCouple</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "probeModel.html">probeModel</A></TD><TD ><A HREF = "probeModel_noProbe.html">probeModel_noProbe</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "regionModel.html">regionModel</A></TD><TD ><A HREF = "regionModel_allRegion.html">regionModel_allRegion</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "smoothingModel.html">smoothingModel</A></TD><TD ><A HREF = "smoothingModel_constDiffSmoothing.html">smoothingModel_constDiffSmoothing</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "smoothingModel_noSmoothing.html">smoothingModel_noSmoothing</A></TD><TD ><A HREF = "voidFractionModel.html">voidfractionModel</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_GaussVoidFraction.html">voidfractionModel_GaussVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_IBVoidFraction.html">voidfractionModel_IBVoidFraction</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_bigParticleVoidFraction.html">voidfractionModel_bigParticleVoidFraction</A></TD><TD ><A HREF = "voidFractionModel_centreVoidFraction.html">voidfractionModel_centreVoidFraction</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "voidFractionModel_dividedVoidFraction.html">voidfractionModel_dividedVoidFraction</A>
</TD></TR></TABLE></DIV>
</HTML>

Binary file not shown.

View File

@ -1,299 +1,93 @@
"CFDEMproject WWW Site"_lws :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(of,http://www.openfoam.com)
:link(lig,http://www.cfdem.com)
"CFDEMproject Website"_lig :c
:line
CFDEMcoupling Documentation :h2,c
CFDEMcoupling Documentation :h1,c
<!-- HTML_ONLY -->
Academic version :c
<!-- END_HTML_ONLY -->
<!-- RST
|ProjectVersion|
END_RST -->
:line
:c,image(Portfolio_CFDEMcoupling.png)
:line
<!-- HTML_ONLY -->
NOTE:
This is an academic adaptation of the CFDEMcoupling software package, released by
the Department of Particulate Flow Modelling at "Johannes Kepler University
Linz"_http://www.jku.at, Austria.
This offering is not approved or endorsed by DCS Computing GmbH, the producer of
the LIGGGHTS&reg; and CFDEM&reg;coupling software and owner of the LIGGGHTS
and CFDEM&reg; trade marks.
<!-- END_HTML_ONLY -->
<!-- RST
.. note::
This is an academic adaptation of the CFDEMcoupling software package, released
by the Department of Particulate Flow Modelling at `Johannes Kepler University
Linz <http://www.jku.at>`_, Austria.
This offering is not approved or endorsed by DCS Computing GmbH, the producer
of the LIGGGHTS\ |reg| and CFDEM\ |reg|\ coupling software and owner of the
LIGGGHTS and CFDEM\ |reg| trade marks.
.. |reg| unicode:: U+000AE .. REGISTERED SIGN
END_RST -->
<!-- HTML_ONLY -->
1. Contents :h3
<!-- END_HTML_ONLY -->
The CFDEMcoupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEMcoupling documentation can be improved.
The CFDEMcoupling documentation is organized into the following sections. If you
find any errors or omissions in this manual or have suggestions for useful
information to add, please send an email to the developers so the CFDEMcoupling
documentation can be improved.
1.1 "About CFDEMcoupling"_#1_1
1.2 "Installation"_#1_2
1.3 "Tutorials"_#1_3
1.4 "couplingProperties dictionary"_#1_4
1.5 "liggghtsCommands dictionary"_#1_5
1.6 "Models and solvers"_#cmd_5 :all(b)
<!-- HTML_ONLY -->
"About CFDEMcoupling"_CFDEMcoupling_about.html :olb,l
"Installation"_CFDEMcoupling_install.html :l
"Tutorials"_CFDEMcoupling_tutorials.html :l
"Dictionaries"_CFDEMcoupling_dicts.html :l
4.1 "couplingProperties dictionary"_CFDEMcoupling_dicts.html#couplingProperties :ulb,b
4.2 "liggghtsCommands dictionary"_CFDEMcoupling_dicts.html#liggghtsCommands :ule,b
"Solvers"_CFDEMcoupling_solvers.html :l
"Models"_CFDEMcoupling_models.html :l
:ole
<!-- END_HTML_ONLY -->
:line
<!-- RST
1.1 About CFDEMcoupling :link(1_1),h4
.. toctree::
:maxdepth: 2
:numbered:
:caption: User Documentation
:name: userdoc
:includehidden:
CFDEM coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of "LIGGGHTS"_lig DEM code and the Open Source CFD package "OpenFOAM(R)(*)"_of. The CFDEMcoupling toolbox allows to expand standard CFD solvers of "OpenFOAM(R)(*)"_of to include a coupling to the DEM code "LIGGGHTS"_lig. 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.
CFDEMcoupling_about
CFDEMcoupling_install
CFDEMcoupling_tutorials
CFDEMcoupling_dicts
CFDEMcoupling_solvers
CFDEMcoupling_models
The coupled solvers run fully parallel on distributed-memory clusters. Features are:
Indices and tables
==================
its modular approach allows users to easily implement new models :ulb,l
its MPI parallelization enables to use it for large scale problems :l
the "forum"_lws on CFD-DEM gives the possibility to exchange with other users / developers :l
the use of GIT allows to easily update to the latest version :l
basic documentation is provided :l
:ule
* :ref:`genindex`
* :ref:`search`
The file structure:
END_RST -->
{src} directory including the source files of the coupling toolbox and models :ulb,l
{applications} directory including the solver files for coupled CFD-DEM simulations :l
{doc} directory including the documentation of CFDEMcoupling :l
{tutorials} directory including basic tutorial cases showing the functionality :l
:ule
:link(of,http://www.openfoam.org)
:link(lig,http://www.cfdem.com)
Details on installation are given on the "CFDEMproject WWW Site"_lws .
The functionality of this CFD-DEM framework is described via "tutorial cases"_#_1_2 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
This documentation was written by Christoph Goniva, DCS Computing GmbH, 2012
:line
(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. OPENFOAM® is a registered trade mark of OpenCFD Limited, a wholly owned subsidiary of the ESI Group.
:line
1.2 Installation :link(1_2),h4
Please follow the installation routine provided at www.cfdem.com.
In order to get the latest code version, please use the git repository at http://github.com ("githubAccess"_githubAccess_public.html).
:line
1.3 Tutorials :link(1_3),h4
[General:]
Each solver of the CFDEMcoupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).
[Location:]
The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials, which can be reached by typing "cfdemTut"
[Structure:]
Each case is structured in a directory called "CFD" covering the CFD relevant settings and data, and a dirctory called "DEM" covering the DEM relevant settings and data. This allows to easily expand a pure CFD or DEM simulation case to a coupled case.
[Usage:]
Provided that the installation is correct, the tutorials can be run via "Allrun.sh" shell script, executed by typing "./Allrun.sh". The successful run of the script might need some third party software (e.g. octave, evince, etc.).
[Settings:]
The main settings of a simulation are done via dictionaries:
The DEM setup of each case is defined by a "LIGGGHTS"_lig input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the "LIGGGHTS"_lig setup, please have a look at the "LIGGGHTS"_lig manual.
Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). You can find more information on that in "OpenFOAM(R)(*)"_of documentations (www.openFoam.com)(*).
Settings of the coupling routines are defined in $caseDir/CFD/constant/"couplingProperies"_#1_3 (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/"liggghtsCommands"_#1_3 (allows to execute a LIGGGHTS command during a coupled simulation).
:line
1.4 "couplingProperties" dictionary :link(1_4),h4
[General:]
In the "couplingProperties" dictionary the setup of the coupling routines of the CFD-DEM simulation are defined.
[Location:] $caseDir/CFD/constant
[Structure:]
The dictionary is divided into two parts, "sub-models & settings" and "sub-model properties".
In "sub-models & settings" the following routines must be specified:
modelType :ulb,l
couplingInterval :l
voidFractionModel :l
locateModel :l
meshMotionModel :l
regionModel :l
IOModel :l
dataExchangeModel :l
averagingModel :l
forceModels :l
momCoupleModels :l
turbulenceModelType :l
:ule
In "sub-model properties" sub-dictionaries might be defined to specify model specific parameters.
[Settings:]
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 applicability", JFM. "A" requires 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 timestep in the in.xxx file 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 to 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)
[General:]
In the "liggghtsCommands" dictionary liggghts commands being executed during a coupled CFD-DEM simulation are specified.
[Location:] $caseDir/CFD/constant
[Structure:]
The dictionary is divided into two parts, first a list of "liggghtsCommandModels" is defined, then the settings for each model must be specified.
[Settings:]
Reasonable example settings for the "liggghtsCommands" dictionary are given in the tutorial cases.
:line
1.6 Models/Solvers :h4,link(cmd_5),link(comm)
This section lists all CFDEMcoupling sub-models and solvers alphabetically, with a separate
listing below of styles within certain commands.
"IOModel"_IOModel.html,
"IOModel_basicIO"_IOModel_basicIO.html,
"IOModel_noIO"_IOModel_noIO.html,
"IOModel_sophIO"_IOModel_sophIO.html,
"IOModel_trackIO"_IOModel_trackIO.html,
"averagingModel"_averagingModel.html,
"averagingModel_dense"_averagingModel_dense.html,
"averagingModel_dilute"_averagingModel_dilute.html,
"cfdemSolverIB"_cfdemSolverIB.html,
"cfdemSolverPiso"_cfdemSolverPiso.html,
"cfdemSolverPisoScalar"_cfdemSolverPisoScalar.html,
"clockModel"_clockModel.html,
"clockModel_noClock"_clockModel_noClock.html,
"clockModel_standardClock"_clockModel_standardClock.html,
"dataExchangeModel"_dataExchangeModel.html,
"dataExchangeModel_noDataExchange"_dataExchangeModel_noDataExchange.html,
"dataExchangeModel_oneWayVTK"_dataExchangeModel_oneWayVTK.html,
"dataExchangeModel_twoWayFiles"_dataExchangeModel_twoWayFiles.html,
"dataExchangeModel_twoWayM2M"_dataExchangeModel_twoWayM2M.html,
"dataExchangeModel_twoWayMPI"_dataExchangeModel_twoWayMPI.html,
"forceModel"_forceModel.html,
"forceModel_Archimedes"_forceModel_Archimedes.html,
"forceModel_ArchimedesIB"_forceModel_ArchimedesIB.html,
"forceModel_DiFeliceDrag"_forceModel_DiFeliceDrag.html,
"forceModel_GidaspowDrag"_forceModel_GidaspowDrag.html,
"forceModel_KochHillDrag"_forceModel_KochHillDrag.html,
"forceModel_LaEuScalarTemp"_forceModel_LaEuScalarTemp.html,
"forceModel_MeiLift"_forceModel_MeiLift.html,
"forceModel_SchillerNaumannDrag"_forceModel_SchillerNaumannDrag.html,
"forceModel_ShirgaonkarIB"_forceModel_ShirgaonkarIB.html,
"forceModel_gradPForce"_forceModel_gradPForce.html,
"forceModel_noDrag"_forceModel_noDrag.html,
"forceModel_particleCellVolume"_forceModel_particleCellVolume.html,
"forceModel_virtualMassForce"_forceModel_virtualMassForce.html,
"forceModel_viscForce"_forceModel_viscForce.html,
"liggghtsCommandModel"_liggghtsCommandModel.html,
"liggghtsCommandModel_execute"_liggghtsCommandModel_execute.html,
"liggghtsCommandModel_readLiggghtsData"_liggghtsCommandModel_readLiggghtsData.html,
"liggghtsCommandModel_runLiggghts"_liggghtsCommandModel_runLiggghts.html,
"liggghtsCommandModel_writeLiggghts"_liggghtsCommandModel_writeLiggghts.html,
"locateModel"_locateModel.html,
"locateModel_engineSearch"_locateModel_engineSearch.html,
"locateModel_engineSearchIB"_locateModel_engineSearchIB.html,
"locateModel_standardSearch"_locateModel_standardSearch.html,
"locateModel_turboEngineM2MSearch"_locateModel_turboEngineSearchM2M.html,
"locateModel_turboEngineSearch"_locateModel_turboEngineSearch.html,
"meshMotionModel"_meshMotionModel.html,
"meshMotionModel_noMeshMotion"_meshMotionModel_noMeshMotion.html,
"momCoupleModel"_momCoupleModel.html,
"momCoupleModel_explicitCouple"_momCoupleModel_explicitCouple.html,
"momCoupleModel_implicitCouple"_momCoupleModel_implicitCouple.html,
"momCoupleModel_noCouple"_momCoupleModel_noCouple.html,
"probeModel"_probeModel.html,
"probeModel_noProbe"_probeModel_noProbe.html,
"regionModel"_regionModel.html,
"regionModel_allRegion"_regionModel_allRegion.html,
"smoothingModel"_smoothingModel.html,
"smoothingModel_constDiffSmoothing"_smoothingModel_constDiffSmoothing.html,
"smoothingModel_noSmoothing"_smoothingModel_noSmoothing.html,
"voidfractionModel"_voidFractionModel.html,
"voidfractionModel_GaussVoidFraction"_voidFractionModel_GaussVoidFraction.html,
"voidfractionModel_IBVoidFraction"_voidFractionModel_IBVoidFraction.html,
"voidfractionModel_bigParticleVoidFraction"_voidFractionModel_bigParticleVoidFraction.html,
"voidfractionModel_centreVoidFraction"_voidFractionModel_centreVoidFraction.html,
"voidfractionModel_dividedVoidFraction"_voidFractionModel_dividedVoidFraction.html :tb(c=2,ea=c)

View File

@ -0,0 +1,99 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
1. About CFDEMcoupling :link(1_1),h3
<!-- HTML_ONLY -->
CFDEMcoupling provides an open-source parallel coupled CFD-DEM framework
combining the strengths of the "LIGGGHTS"_lig DEM code and the open-source CFD
package "OpenFOAM&reg;"_of (*). The CFDEMcoupling toolbox allows to expand standard
CFD solvers of "OpenFOAM&reg;"_of (*) to include a coupling to the DEM code
"LIGGGHTS"_lig.
<!-- END_HTML_ONLY -->
<!-- RST
CFDEMcoupling provides an open-source parallel coupled CFD-DEM framework
combining the strengths of the `LIGGGHTS <http://www.cfdem.com>`_ DEM code and
the open-source CFD package OpenFOAM\ |reg|\ (*).
The CFDEMcoupling toolbox allows to expand standard CFD solvers of
OpenFOAM\ |reg|\ (*) to include a coupling to the DEM code
`LIGGGHTS <http://www.cfdem.com>`_.
.. |reg| unicode:: U+000AE .. REGISTERED SIGN
END_RST -->
In this toolbox the particle representation within the CFD
solver is organized by "cloud" classes. Key functionalities are organized 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 :ulb,l
its MPI parallelization enables to use it for large scale problems :l
the "forum"_lig on CFD-DEM gives the possibility to exchange with other users / developers :l
the use of Git allows to easily update to the latest version :l
basic documentation is provided :l
:ule
The file structure:
{src} directory including the source files of the coupling toolbox and models :ulb,l
{applications} directory including the solver files for coupled CFD-DEM simulations :l
{doc} directory including the documentation of CFDEMcoupling :l
{tutorials} directory including basic tutorial cases showing the functionality :l
:ule
Details on installation are given on the "CFDEMproject Website"_lig .
The functionality of this CFD-DEM framework is described via "tutorial
cases"_CFDEMcoupling_tutorials.html 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)"_https://www.gnu.org/licenses/gpl-3.0.en.html.
Core development of the public version of CFDEMcoupling is done by Christoph
Goniva and Christoph Kloss, both at DCS Computing GmbH.
The original version of this documentation was written by Christoph Goniva, DCS
Computing GmbH, 2012.
:line
<!-- HTML_ONLY -->
NOTE:
(*) This offering is not approved or endorsed by OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com, and owner of the
OPENFOAM&reg; and OpenCFD&reg; trade marks.
OPENFOAM&reg; is a registered trade mark of OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com.
<!-- END_HTML_ONLY -->
<!-- RST
.. note::
(*) This offering is not approved or endorsed by OpenCFD Limited, producer
and distributor of the OpenFOAM software via www.openfoam.com, and owner of
the OPENFOAM\ |reg| and OpenCFD\ |reg| trade marks.
OPENFOAM\ |reg| is a registered trade mark of OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com.
.. |reg| unicode:: U+000AE .. REGISTERED SIGN
END_RST -->
:link(of,http://www.openfoam.org)
:link(lig,http://www.cfdem.com)

105
doc/CFDEMcoupling_dicts.txt Normal file
View File

@ -0,0 +1,105 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
4. Dictionaries :link(1_4),h3
4.1 couplingProperties dictionary :link(couplingProperties),h4
[General:]
In the {couplingProperties} dictionary the setup of the coupling routines of the
CFD-DEM simulation are defined.
[Location:] $caseDir/CFD/constant
[Structure:]
The dictionary is divided into two parts, "sub-models & settings" and "sub-model
properties".
In "sub-models & settings" the following routines must be specified:
modelType :ulb,l
couplingInterval :l
voidFractionModel :l
locateModel :l
meshMotionModel :l
regionModel :l
IOModel :l
dataExchangeModel :l
averagingModel :l
forceModels :l
momCoupleModels :l
turbulenceModelType :l
:ule
In "sub-model properties" sub-dictionaries might be defined to specify model
specific parameters.
[Settings:]
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",
"B" or "Bfull", according to "Zhou et al. (2010)"_#Zhou2010. Model "A" requires
the use of the force models gradPForce and viscForce, whereas "B" requires the
force model "Archimedes". "Bfull" refers to model type I.
couplingInterval :pre
The coupling interval determines the time passing between two CFD-DEM data
exchanges.
A useful procedure would be:
Set the DEM time step in the LIGGGHTS input file according to the needs of the
pure DEM problem. :olb,l
Set the {couplingInterval}, which refers to the DEM time steps. Depending on the
problem you will need to have a close (small couplingInterval) or loose
coupling. :l
Choose the CFD time step in the controlDict. It must be equal to or smaller than
the coupling time, otherwise you will get the error: "Error - TS bigger than
coupling interval!". :l,ole
[Example:]
Choosing DEMts=0.00001s and couplingInterval=10 means that an exchange of data
(=coupling) will happen every 0.0001s.
:line
4.2 liggghtsCommands dictionary :link(liggghtsCommands),h4
[General:]
In the {liggghtsCommands} dictionary LIGGGHTS commands which are to be executed
during a coupled CFD-DEM simulation are specified.
[Location:] $caseDir/CFD/constant
[Structure:]
The dictionary is divided into two parts, first a list of
"liggghtsCommandModels"_CFDEMcoupling_models.html#lcm is defined, then the
settings for each model must be specified.
[Settings:]
Reasonable example settings for the {liggghtsCommands} dictionary are given in
the tutorial cases.
:line
:link(Zhou2010)
[(Zhou, 2010)]
"Discrete particle simulation of particle-fluid flow: model formulations and their applicability",
Zhou, Z. Y., Kuang, S. B., Chu, K. W. and Yu, A. B., J. Fluid Mech., 661, pp. 482-510 (2010)

View File

@ -0,0 +1,220 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
2. Installation :link(1_2),h3
In order to get the latest code version, please use the git repository at
"http://github.com"_https://github.com/ParticulateFlow.
2.1 Installing OpenFOAM :h4
2.1.1 Obtain a copy of the source code :h5
In the CFDEMcoupling repository take a look at the file
src/lagrangian/cfdemParticle/cfdTools/versionInfo.H :pre
to find out the latest tested version of LIGGGHTS and OpenFOAM that work with
CFDEMcoupling. As of this writing the version of OpenFOAM to be used is 4.x.
You can then basically follow the instructions at
"openfoam.org"_https://openfoam.org/download/source/, cloning OpenFOAM from the
git repository.
cd $HOME
mkdir OpenFOAM
cd OpenFOAM
git clone https://github.com/OpenFOAM/OpenFOAM-4.x.git :pre
Clone the corresponding third party packages to the OpenFOAM folder.
git clone https://github.com/OpenFOAM/ThirdParty-4.x.git :pre
Switch to root user with sudo
sudo su - :pre
Install dependent packages required for OpenFOAM on Ubuntu by executing the
following commands:
apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev
apt-get install qt4-dev-tools libqt4-dev libqt4-opengl-dev freeglut3-dev libqtwebkit-dev
apt-get install libcgal-dev :pre
2.1.2 Setup the environment :h5
Open your bash startup file
NOTE: Don't forget the dot before the file name of {.bashrc}
gedit ~/.bashrc :pre
and add the following lines:
source $HOME/OpenFOAM/OpenFOAM-4.x/etc/bashrc
export WM_NCOMPPROCS=4 :pre
Save the file and reload it:
source ~/.bashrc :pre
:line
[Additional check]
Open ~/OpenFOAM/OpenFOAM-4.x/etc/bashrc and make sure that {WM_MPLIB} is set
correctly:
export WM_MPLIB=SYSTEMOPENMPI :pre
This should be the default setting but if you encounter some problems regarding
MPI you might have to download the openmpi-1.10.2 source package to the third
party folder and change the setting to {OPENMPI}
:line
2.1.3 Compile ThirdParty packages :h5
cd $WM_THIRD_PARTY_DIR
./Allwmake :pre
[Compiling Paraview and the Paraview Reader Module]
Paraview is a third-party software provided for graphical post-processing in
OpenFOAM. Its compilation is automated using a script called makeParaView in the
ThirdParty-4.x directory.
Before installing Paraview, check the version of cmake that is installed on the
system. This can be done by typing
cmake --version :pre
If the system cmake is older than version 2.8.8, clone a newer version to the
Third Party folder and compile it by executing the following:
cd $WM_THIRD_PARTY_DIR
git clone https://github.com/Kitware/CMake.git cmake-3.2.1
cd cmake-3.2.1
git checkout tags/v3.2.1
cd ..
./makeCmake :pre
In makeParaView set the path to cmake:
CMAKE_PATH="$WM_THIRD_PARTY_DIR/platforms/linux64Gcc/cmake-3.2.1/bin" :pre
To install Paraview, execute the following
cd $WM_THIRD_PARTY_DIR
./makeParaView :pre
If you get the following error
VTK/ThirdParty/hdf5/vtkhdf5/src/H5detect.c:158:1: error: unknown type name sigjmp_buf
static H5JMP_BUF jbuf_g; :pre
in VTK/ThirdParty/hdf5/vtkhdf5/config/cmake/ConfigureChecks.cmake around line 445 change
set (HDF5_EXTRA_FLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE) :pre
to
set (HDF5_EXTRA_FLAGS -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_BSD_SOURCE) :pre
2.1.4 Compile OpenFOAM :h5
[Compiling the source code]
cd $WM_PROJECT_DIR
./Allwmake :pre
[Testing the installation]
Create a project directory within the $HOME/OpenFOAM directory
mkdir -p $FOAM_RUN :pre
Copy the tutorial examples directory in the OpenFOAM distribution to the run
directory. If the OpenFOAM environment variables are set correctly, then the
following command will be correct:
cp -r $FOAM_TUTORIALS $FOAM_RUN :pre
Run the first example case of incompressible laminar flow in a cavity:
cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity/cavity
blockMesh
icoFoam
paraFoam :pre
2.2 Installing CFDEMcoupling :h4
Make sure OpenFOAM is set up correctly and LIGGGHTS is installed as well. Clone
the CFDEMcoupling source from the repository:
cd $HOME
mkdir CFDEM
cd CFDEM
git clone https://github.com/ParticulateFlow/CFDEMcoupling.git :pre
Open the bashrc file of CFDEMcoupling
gedit ~/CFDEM/CFDEMcoupling/etc/bashrc & :pre
Edit the lines marked as {USER EDITABLE PART} to reflect your installation paths
correctly. Save the bashrc file and reload it:
source ~/CFDEM/CFDEMcoupling/etc/bashrc :pre
Entering $CFDEM_PROJECT_DIR in a the terminal should now give "... is a directory"
Check if everything is set up correctly:
cfdemSysTest :pre
Compile LIGGGHTS (as a library)
cfdemCompLIG :pre
If the compilation fails with a message like
No rule to make target '/usr/lib/libpython2.7.so' :pre
you probably need to create a symbolic link to the library in question.
Compile CFDEMcoupling (library, solvers and utilities) in one go
cfdemCompCFDEM :pre
or alternatively step by step
cfdemCompCFDEMsrc
cfdemCompCFDEMsol
cfdemCompCFDEMuti :pre
Find the log files of the compile process
cd ~/CFDEM/CFDEMcoupling/etc/log
ls :pre
If the file [log_compile_results_success] is present, compilation was successful.
Install Octave for post-processing some of the tutorial output.
sudo apt-get install octave :pre
To run all tutorial cases type in a terminal:
cfdemTestTUT :pre

View File

@ -0,0 +1,218 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
6. Models :h3,link(1_6),link(comm)
This section lists all CFDEMcoupling sub-models alphabetically, with
a separate listing below of styles within certain commands.
6.1 I/O models :h4
The "IOModel"_IOModel.html keyword entry specifies the model for writing output
data.
"basicIO"_IOModel_basicIO.html,
"off"_IOModel_noIO.html,
"sophIO"_IOModel_sophIO.html,
"trackIO"_IOModel_trackIO.html :tb(c=2,ea=c)
6.2 Averaging models :h4
The "averagingModel"_averagingModel.html keyword entry defines the model used to
map the Lagrangian data to Eulerian values.
"dense"_averagingModel_dense.html,
"dilute"_averagingModel_dilute.html :tb(c=2,ea=c)
6.3 Chemistry models :h4
The "chemistryModels"_chemistryModel.html keyword is used to specify a list of
models used for chemical reaction calculations.
"diffusionCoefficients"_chemistryModel_diffusionCoefficients.html,
"massTransferCoeff"_chemistryModel_massTransferCoeff.html,
"off"_chemistryModel_noChemistry.html,
"reactantPerParticle"_chemistryModel_reactantPerParticle.html,
"species"_chemistryModel_species.html :tb(c=2,ea=c)
6.4 Clock models :h4
The "clockModel"_clockModel.html keyword entry specifies the model used to
examine the CFDEMcoupling code with respect to runtime.
"off"_clockModel_noClock.html,
"standardClock"_clockModel_standardClock.html :tb(c=2,ea=c)
6.5 Data exchange models :h4
The "dataExchangeModel"_dataExchangeModel.html keyword entry specifies the model
that performs the data exchange between the DEM code and the CFD code.
"noDataExchange"_dataExchangeModel_noDataExchange.html,
"oneWayVTK"_dataExchangeModel_oneWayVTK.html,
"twoWayFiles"_dataExchangeModel_twoWayFiles.html,
"twoWayMPI"_dataExchangeModel_twoWayMPI.html,
"twoWayMany2Many"_dataExchangeModel_twoWayMany2Many.html,
"twoWayOne2One"_dataExchangeModel_twoWayOne2One.html :tb(c=2,ea=c)
6.6 Energy models :h4
The {energyModels} keyword specifies a list of energy models used for e.g.
compressible, reacting flows.
heatTransferGunn,
heatTransferGunnPartField,
reactionHeat :tb(c=2,ea=c)
6.7 Force models :h4
The "forceModels"_forceModel.html keyword specifies a list of models that exert
a force on each DEM particle.
"Archimedes"_forceModel_Archimedes.html,
"ArchimedesIB"_forceModel_ArchimedesIB.html,
"BeetstraDrag"_forceModel_BeetstraDrag.html,
BeetstraDragPoly,
"DiFeliceDrag"_forceModel_DiFeliceDrag.html,
"dSauter"_forceModel_dSauter.html,
Fines,
"GidaspowDrag"_forceModel_GidaspowDrag.html,
"KochHillDrag"_forceModel_KochHillDrag.html,
"LaEuScalarTemp"_forceModel_LaEuScalarTemp.html,
"MeiLift"_forceModel_MeiLift.html,
"SchillerNaumannDrag"_forceModel_SchillerNaumannDrag.html,
"ShirgaonkarIB"_forceModel_ShirgaonkarIB.html,
"fieldStore"_forceModel_fieldStore.html,
"fieldTimeAverage"_forceModel_fieldTimeAverage.html,
"gradPForce"_forceModel_gradPForce.html,
"gradPForceSmooth"_forceModel_gradPForceSmooth.html,
granKineticEnergy,
"interface"_forceModel_interface.html,
"noDrag"_forceModel_noDrag.html,
"particleCellVolume"_forceModel_particleCellVolume.html,
"pdCorrelation"_forceModel_pdCorrelation.html,
"surfaceTensionForce"_forceModel_surfaceTensionForce.html,
"virtualMassForce"_forceModel_virtualMassForce.html,
"viscForce"_forceModel_viscForce.html,
"volWeightedAverage"_forceModel_volWeightedAverage.html :tb(c=2,ea=c)
6.7.1 Force sub-models :h5
The "forceSubModels"_forceSubModel.html keyword specifies a list
of models that hold settings for a force model.
"ImEx"_forceSubModel_ImEx.html,
ScaleForce,
scaleForceBoundary :tb(c=2,ea=c)
6.8 LIGGGHTS command models :h4,link(lcm)
The "liggghtsCommandModels"_liggghtsCommandModel.html keyword specifies a list
of models that execute LIGGGHTS commands within a CFD run.
"execute"_liggghtsCommandModel_execute.html,
"readLiggghtsData"_liggghtsCommandModel_readLiggghtsData.html,
"runLiggghts"_liggghtsCommandModel_runLiggghts.html,
"writeLiggghts"_liggghtsCommandModel_writeLiggghts.html :tb(c=2,ea=c)
6.9 Locate models :h4
The "locateModel"_locateModel.html keyword entry specifies the model used to
search the CFD mesh for the CFD cell corresponding to a given position.
"engine"_locateModel_engineSearch.html,
"engineIB"_locateModel_engineSearchIB.html,
"engineSearchMany2Many"_locateModel_engineSearchMany2Many.html,
"standard"_locateModel_standardSearch.html,
"turboEngine"_locateModel_turboEngineSearch.html :tb(c=2,ea=c)
6.10 Mesh motion models :h4
The "meshMotionModel"_meshMotionModel.html keyword entry specifies the model
used to manipulate the CFD mesh according to the DEM mesh motion.
"noMeshMotion"_meshMotionModel_noMeshMotion.html :tb(c=2,ea=c)
6.11 Momentum coupling models :h4
The "momCoupleModels"_momCoupleModel.html keyword specifies a list of models
used for momentum exchange between DEM and CFD simulation
"explicitCouple"_momCoupleModel_explicitCouple.html,
"implicitCouple"_momCoupleModel_implicitCouple.html,
"off"_momCoupleModel_noCouple.html :tb(c=2,ea=c)
6.12 Other force models :h4
The {otherForceModels} keyword specifies a list of models that exert a force on
each DEM particle.
expParticleForces,
gravity,
weightSecondaryPhase :tb(c=2,ea=c)
6.13 Probe models :h4
The "probeModel"_probeModel.html keyword entry specifies the probing features in
CFDEMcoupling simulations.
"off"_probeModel_noProbe.html,
"particleProbe"_probeModel_particleProbe.html :tb(c=2,ea=c)
6.14 Region models :h4
The "regionModel"_regionModel.html keyword entry specifies the model used to
select a certain region for coupled simulations.
"allRegion"_regionModel_allRegion.html :tb(c=2,ea=c)
6.15 Smoothing models :h4
The "smoothingModel"_smoothingModel.html keyword entry specifies the model for
smoothing the exchange fields.
"constDiffSmoothing"_smoothingModel_constDiffSmoothing.html,
"off"_smoothingModel_noSmoothing.html,
"temporalSmoothing"_smoothingModel_temporalSmoothing.html :tb(c=2,ea=c)
6.16 Thermal conductivity models :h4
The {thermCondModel} keyword entry specifies the model for the thermal
conductivity of the fluid phase in the presence of particles.
SyamlalThermCond,
ZehnerSchluenderThermCond,
off :tb(c=2,ea=c)
6.17 Void fraction models :h4
The "voidFractionModel"_voidFractionModel.html keyword entry specifies the model
accounting for the volume of the particles in the CFD domain.
"Gauss"_voidFractionModel_GaussVoidFraction.html,
"IB"_voidFractionModel_IBVoidFraction.html,
"bigParticle"_voidFractionModel_bigParticleVoidFraction.html,
"centre"_voidFractionModel_centreVoidFraction.html,
"divided"_voidFractionModel_dividedVoidFraction.html :tb(c=2,ea=c)

View File

@ -0,0 +1,19 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
5. Solvers :h3,link(1_5)
This section lists all CFDEMcoupling solvers alphabetically.
"cfdemSolverIB"_cfdemSolverIB.html,
"cfdemSolverMultiphase"_cfdemSolverMultiphase.html,
"cfdemSolverPiso"_cfdemSolverPiso.html,
"cfdemSolverPisoScalar"_cfdemSolverPisoScalar.html,
"cfdemSolverRhoPimple"_cfdemSolverRhoPimple.html,
"cfdemSolverRhoPimpleChem"_cfdemSolverRhoPimpleChem.html,
"cfdemSolverRhoSimple"_cfdemSolverRhoSimple.html :tb(c=2,ea=c)

View File

@ -0,0 +1,95 @@
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(main,CFDEMcoupling_Manual.html)
:line
3. Tutorials :link(1_3),h3
[General:]
Each solver of CFDEMcoupling comes with at least one tutorial example, showing
its functionality and correct usage. Provided that the installation is correct,
the tutorials can be run via "Allrun.sh" shell scripts. These scripts perform
all necessary steps (pre-processing, run, post-processing, visualization).
[Location:]
The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials,
which can be reached by typing {cfdemTut} in a CLI terminal.
[Structure:]
Each case is structured in a directory called "CFD" covering the CFD relevant
settings and data, and a directory called "DEM" covering the DEM relevant
settings and data. This allows to easily expand a pure CFD or DEM simulation
case to a coupled case.
[Usage:]
Provided that the installation is correct, the tutorials can be run via
"Allrun.sh" shell script, executed by typing "./Allrun.sh". The successful run
of the script might need some third party software (e.g. octave, evince, etc.).
[Settings:]
The main settings of a simulation are done via dictionaries:
The DEM setup of each case is defined by a "LIGGGHTS"_lig input file located in
$caseDir/DEM (e.g. in.liggghts_init). For details on the LIGGGHTS setup,
please have a look at the LIGGGHTS manual.
<!-- HTML_ONLY -->
Standard CFD settings are defined in $caseDir/CFD/constant (e.g.
transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g.
fvSchemes, controlDict). You can find more information on that in
"OpenFOAM&reg;"_of (*) documentations.
:link(of,http://www.openfoam.org)
<!-- END_HTML_ONLY -->
<!-- RST
Standard CFD settings are defined in $caseDir/CFD/constant (e.g.
transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g.
fvSchemes, controlDict). You can find more information on that in
OpenFOAM\ |reg|\ (*) documentations.
.. |reg| unicode:: U+000AE .. REGISTERED SIGN
END_RST -->.
Settings of the coupling routines are defined in
$caseDir/CFD/constant/"couplingProperies"_CFDEMcoupling_dicts.html#couplingProperties
(e.g. force models, data exchange model, etc.) and
$caseDir/CFD/constant/"liggghtsCommands"_CFDEMcoupling_dicts.html#liggghtsCommands
(allows to execute a LIGGGHTS command during a coupled simulation).
<!-- HTML_ONLY -->
NOTE:
(*) This offering is not approved or endorsed by OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com, and owner of the
OPENFOAM&reg; and OpenCFD&reg; trade marks.
OPENFOAM&reg; is a registered trade mark of OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com.
<!-- END_HTML_ONLY -->
<!-- RST
.. note::
(*) This offering is not approved or endorsed by OpenCFD Limited, producer
and distributor of the OpenFOAM software via www.openfoam.com, and owner of
the OPENFOAM\ |reg| and OpenCFD\ |reg| trade marks.
OPENFOAM\ |reg| is a registered trade mark of OpenCFD Limited, producer and
distributor of the OpenFOAM software via www.openfoam.com.
.. |reg| unicode:: U+000AE .. REGISTERED SIGN
END_RST -->
:link(lig,http://www.cfdem.com)

BIN
doc/Eqs/d32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
doc/Eqs/pdCorrelation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,40 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>IOModel command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>IOModel "model";
</PRE>
<UL><LI>model = name of IO-model to be applied
</UL>
<P><B>Examples:</B>
</P>
<P>IOModel "off";
</P>
<P>Note: This examples list might not be complete - please look for other models (IOModel_XY) in this documentation.
</P>
<P><B>Description:</B>
</P>
<P>The IO-model is the base class to write data (e.g. particle properties) to files.
</P>
<P><B>Restrictions:</B>
</P>
<P>none.
</P>
<P><B>Related commands:</B>
</P>
<P>Note: This examples list may be incomplete - please look for other models (IOModel_XY) in this documentation.
</P>
<P><B>Default:</B> none.
</P>
</HTML>

View File

@ -1,7 +1,7 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(main,CFDEMcoupling_Manual.html)
:line
@ -9,28 +9,34 @@ IOModel command :h3
[Syntax:]
Defined in couplingProperties dictionary.
Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties
dictionary.
IOModel "model"; :pre
IOModel model; :pre
model = name of IO-model to be applied :ul
[Examples:]
IOModel "off";
IOModel off; :pre
Note: This examples list might not be complete - please look for other models (IOModel_XY) in this documentation.
NOTE: This examples list might not be complete - please look for other IO models
in this documentation.
[Description:]
The IO-model is the base class to write data (e.g. particle properties) to files.
{IOModel} is the base class to write data (e.g. particle properties) to files.
[Restrictions:]
none.
none
[Related commands:]
Note: This examples list may be incomplete - please look for other models (IOModel_XY) in this documentation.
"IOModel basicIO"_IOModel_basicIO.html, "IOModel off"_IOModel_noIO.html,
"IOModel sophIO"_IOModel_sophIO.html, "IOModel trackIO"_IOModel_trackIO.html
[Default:]
none
[Default:] none.

View File

@ -1,32 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>IOModel_basicIO command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>IOModel "basicIO";
</PRE>
<P><B>Examples:</B>
</P>
<PRE>IOModel "basicIO";
</PRE>
<P><B>Description:</B>
</P>
<P>The basic IO-model writes particle positions velocities and radii to files. The default output directory ($casePath/CFD/proc*/time/lagrangian). Using the keyword "serialOutput;" in couplingProperties the IO is serial to the directory ($casePath/CFD/lagrangian). In the latter case only the data on processor 0 is written! Data is written every write time of the CFD simulation.
</P>
<P><B>Restrictions:</B> None.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "IOModel.html">IOModel</A>
</P>
</HTML>

View File

@ -1,27 +1,39 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(main,CFDEMcoupling_Manual.html)
:line
IOModel_basicIO command :h3
IOModel basicIO command :h3
[Syntax:]
Defined in couplingProperties dictionary.
Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties
dictionary.
IOModel "basicIO"; :pre
IOModel basicIO; :pre
[Examples:]
IOModel "basicIO"; :pre
IOModel basicIO;
serialOutput; :pre
[Description:]
The basic IO-model writes particle positions velocities and radii to files. The default output directory ($casePath/CFD/proc*/time/lagrangian). Using the keyword "serialOutput;" in couplingProperties the IO is serial to the directory ($casePath/CFD/lagrangian). In the latter case only the data on processor 0 is written! Data is written every write time of the CFD simulation.
The {basicIO} model writes particle positions, velocities and radii to files.
The default output directory is {$casePath/CFD/proc*/time/lagrangian}.
[Restrictions:] None.
Using the keyword {serialOutput;} in the
"couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties dictionary,
the IO is serial to the directory {$casePath/CFD/lagrangian}. In this case
only the data on processor 0 is written!
Data is written every write time of the CFD simulation.
[Restrictions:]
none
[Related commands:]

View File

@ -1,32 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>IOModel_noIO command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>IOModel "off";
</PRE>
<P><B>Examples:</B>
</P>
<PRE>IOModel "off";
</PRE>
<P><B>Description:</B>
</P>
<P>The noIO-model is a dummy IO model.
</P>
<P><B>Restrictions:</B> None.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "IOModel.html">IOModel</A>
</P>
</HTML>

View File

@ -1,27 +1,30 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(main,CFDEMcoupling_Manual.html)
:line
IOModel_noIO command :h3
IOModel off command :h3
[Syntax:]
Defined in couplingProperties dictionary.
Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties
dictionary.
IOModel "off"; :pre
IOModel off; :pre
[Examples:]
IOModel "off"; :pre
IOModel off; :pre
[Description:]
The noIO-model is a dummy IO model.
This IOModel produces no output.
[Restrictions:] None.
[Restrictions:]
none
[Related commands:]

View File

@ -1,32 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>IOModel_sophIO command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>IOModel "sophIO";
</PRE>
<P><B>Examples:</B>
</P>
<PRE>IOModel "sophIO";
</PRE>
<P><B>Description:</B>
</P>
<P>The sophIO-model is based on basicIO model and additionally writes voidfraction, implicit forces, explicit forces. Data is written every write time of the CFD simulation.
</P>
<P><B>Restrictions:</B> None.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "IOModel.html">IOModel</A>
</P>
</HTML>

View File

@ -1,29 +1,35 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(main,CFDEMcoupling_Manual.html)
:line
IOModel_sophIO command :h3
IOModel sophIO command :h3
[Syntax:]
Defined in couplingProperties dictionary.
Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties
dictionary.
IOModel "sophIO"; :pre
IOModel sophIO; :pre
[Examples:]
IOModel "sophIO"; :pre
IOModel sophIO; :pre
[Description:]
The sophIO-model is based on basicIO model and additionally writes voidfraction, implicit forces, explicit forces. Data is written every write time of the CFD simulation.
The {sophIO} model is based on the "basicIO"_IOModel_basicIO.html model and
additionally writes void fraction, implicit forces and explicit forces.
[Restrictions:] None.
Data is written every write time of the CFD simulation.
[Restrictions:]
none
[Related commands:]
"IOModel"_IOModel.html
"IOModel"_IOModel.html, "IOModel basicIO"_IOModel_basicIO.html

View File

@ -1,32 +0,0 @@
<HTML>
<CENTER><A HREF = "http://www.cfdem.com">CFDEMproject WWW Site</A> - <A HREF = "CFDEMcoupling_Manual.html#comm">CFDEM Commands</A>
</CENTER>
<HR>
<H3>IOModel_trackIO command
</H3>
<P><B>Syntax:</B>
</P>
<P>Defined in couplingProperties dictionary.
</P>
<PRE>IOModel "trackIO";
</PRE>
<P><B>Examples:</B>
</P>
<PRE>IOModel "trackIO";
</PRE>
<P><B>Description:</B>
</P>
<P>The trackIO-model is based on sophIO model and additionally writes fields necessary to use the particleTracks utility (which needs a particleTrackProperties file in the constant dir). The particleTracks utility generates tracks of the particles and writes them to a vtk file.
</P>
<P><B>Restrictions:</B> None.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "IOModel.html">IOModel</A>
</P>
</HTML>

View File

@ -1,29 +1,35 @@
"CFDEMproject WWW Site"_lws - "CFDEM Commands"_lc :c
"CFDEMproject Website"_lws - "Main Page"_main :c
:link(lws,http://www.cfdem.com)
:link(lc,CFDEMcoupling_Manual.html#comm)
:link(main,CFDEMcoupling_Manual.html)
:line
IOModel_trackIO command :h3
IOModel trackIO command :h3
[Syntax:]
Defined in couplingProperties dictionary.
Defined in "couplingProperties"_CFDEMcoupling_dicts.html#couplingProperties
dictionary.
IOModel "trackIO"; :pre
IOModel trackIO; :pre
[Examples:]
IOModel "trackIO"; :pre
IOModel trackIO; :pre
[Description:]
The trackIO-model is based on sophIO model and additionally writes fields necessary to use the particleTracks utility (which needs a particleTrackProperties file in the constant dir). The particleTracks utility generates tracks of the particles and writes them to a vtk file.
The {trackIO} model is based on the "sophIO"_IOModel_sophIO.html model and
additionally writes fields necessary to use the particleTracks utility (which
needs a particleTrackProperties file in the constant dir). The particleTracks
utility generates tracks of the particles and writes them to a VTK file.
[Restrictions:] None.
[Restrictions:]
none
[Related commands:]
"IOModel"_IOModel.html
"IOModel"_IOModel.html, "IOModel sophIO"_IOModel_sophIO.html

189
doc/Makefile Normal file
View File

@ -0,0 +1,189 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
#SPHINXBUILD = /usr/share/sphinx/scripts/python3/sphinx-build
PAPER =
BUILDDIR = _build
TXT2RST = txt2rst
SOURCES=$(wildcard *.txt)
OBJECTS=$(SOURCES:%.txt=%.rst)
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html: $(OBJECTS)
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
cp -r $(BUILDDIR)/html/* .
@echo "Copied files back to current folder"
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/LIGGGHTS.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/LIGGGHTS.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/LIGGGHTS"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/LIGGGHTS"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
%.rst : %.txt
$(TXT2RST) $< > $@
rst: $(OBJECTS) ;

View File

@ -1,4 +0,0 @@
1.6 Models/Solvers :h4,link(cmd_5),link(comm)
This section lists all CFDEMcoupling sub-models and solvers alphabetically, with a separate
listing below of styles within certain commands.

Some files were not shown because too many files have changed in this diff Show More