OpenFOAM-5.x/applications/test
Henry Weller 7c301dbff4 Parallel IO: New collated file format
When an OpenFOAM simulation runs in parallel, the data for decomposed fields and
mesh(es) has historically been stored in multiple files within separate
directories for each processor.  Processor directories are named 'processorN',
where N is the processor number.

This commit introduces an alternative "collated" file format where the data for
each decomposed field (and mesh) is collated into a single file, which is
written and read on the master processor.  The files are stored in a single
directory named 'processors'.

The new format produces significantly fewer files - one per field, instead of N
per field.  For large parallel cases, this avoids the restriction on the number
of open files imposed by the operating system limits.

The file writing can be threaded allowing the simulation to continue running
while the data is being written to file.  NFS (Network File System) is not
needed when using the the collated format and additionally, there is an option
to run without NFS with the original uncollated approach, known as
"masterUncollated".

The controls for the file handling are in the OptimisationSwitches of
etc/controlDict:

OptimisationSwitches
{
    ...

    //- Parallel IO file handler
    //  uncollated (default), collated or masterUncollated
    fileHandler uncollated;

    //- collated: thread buffer size for queued file writes.
    //  If set to 0 or not sufficient for the file size threading is not used.
    //  Default: 2e9
    maxThreadFileBufferSize 2e9;

    //- masterUncollated: non-blocking buffer size.
    //  If the file exceeds this buffer size scheduled transfer is used.
    //  Default: 2e9
    maxMasterFileBufferSize 2e9;
}

When using the collated file handling, memory is allocated for the data in the
thread.  maxThreadFileBufferSize sets the maximum size of memory in bytes that
is allocated.  If the data exceeds this size, the write does not use threading.

When using the masterUncollated file handling, non-blocking MPI communication
requires a sufficiently large memory buffer on the master node.
maxMasterFileBufferSize sets the maximum size in bytes of the buffer.  If the
data exceeds this size, the system uses scheduled communication.

The installation defaults for the fileHandler choice, maxThreadFileBufferSize
and maxMasterFileBufferSize (set in etc/controlDict) can be over-ridden within
the case controlDict file, like other parameters.  Additionally the fileHandler
can be set by:
- the "-fileHandler" command line argument;
- a FOAM_FILEHANDLER environment variable.

A foamFormatConvert utility allows users to convert files between the collated
and uncollated formats, e.g.
    mpirun -np 2 foamFormatConvert -parallel -fileHandler uncollated

An example case demonstrating the file handling methods is provided in:
$FOAM_TUTORIALS/IO/fileHandling

The work was undertaken by Mattijs Janssens, in collaboration with Henry Weller.
2017-07-07 11:39:56 +01:00
..
alloc Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
BinSum Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
callback applications/test: Updated include and link options 2015-07-16 14:37:19 +01:00
Circulator Rename circulators to be consistent with the standard OpenFOAM class naming convention 2015-08-06 16:54:47 +01:00
codeStream Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
CompactIOList Parallel IO: New collated file format 2017-07-07 11:39:56 +01:00
CompactListList UList: Rationalize assignment (shallow-copy vs deep-copy) 2016-04-03 10:26:05 +01:00
cubicEqn Added robust primitive cubic/quadratic/linear equation solutions. 2017-03-22 15:11:54 +00:00
cyclic applications/test: Updated include and link options 2015-07-16 14:37:19 +01:00
decomposedBlockData Parallel IO: New collated file format 2017-07-07 11:39:56 +01:00
delete Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
Dictionary Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
dictionary Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
dimensionedType Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
Distribution Update code to use the simpler C++11 template syntax 2016-01-10 19:20:16 +00:00
DLList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
DynamicField Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
dynamicIndexedOctree Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
DynamicList Update code to use the simpler C++11 template syntax removing spaces between closing ">"s 2016-01-10 22:41:16 +00:00
ensightFoamReader Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
error Completed update ...ErrorIn -> ...ErrorInFunction 2015-11-11 09:03:39 +00:00
extendedStencil Standardized cell, patch and face loop index names 2016-04-25 10:28:32 +01:00
Field Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
fieldDependency Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
fieldMapping GeometricField: Renamed internalField() -> primitiveField() and dimensionedInternalField() -> internalField() 2016-04-30 21:40:09 +01:00
fileName Test-fileName: Added recent etcFiles.H 2016-08-05 17:25:56 +01:00
fileNameClean Rationalized the keyword to specify a file name in a dictionary to 'file' 2017-01-07 09:38:54 +00:00
findCell-octree Rationalize position searching and add cell->tet decomposition as the default cell-search algorithm 2015-02-25 10:57:06 +00:00
findSphereFeatureEdges-octree Merged the edgeMesh library into the meshTools library 2017-04-21 10:38:53 +01:00
findTimes Formatting: Rationalized the indentation of #include 2015-02-10 20:35:50 +00:00
FixedList Updated UPstream::commsTypes to use the C++11 enum class 2017-03-10 19:54:55 +00:00
foamVersion Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
Function1 thermophysicalProperties: New base-class for liquidProperties and in the future gasProperties 2017-02-18 21:53:20 +00:00
fvc applications/test: Updated include and link options 2015-07-16 14:37:19 +01:00
fvSolutionCombine Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
GAMGAgglomeration GeometricField: Renamed internalField() -> primitiveField() and dimensionedInternalField() -> internalField() 2016-04-30 21:40:09 +01:00
globalIndex Standardized cell, patch, face and processor loop index names 2016-04-25 12:00:53 +01:00
globalMeshData Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
graph Removed trailing blank lines 2017-01-19 20:17:47 +00:00
graphXi Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
Hashing Update code to use the simpler C++11 template syntax 2016-01-10 19:20:16 +00:00
HashingSpeed C++11: Replaced the C NULL with the safer C++11 nullptr 2016-08-05 17:19:38 +01:00
HashPtrTable Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
HashSet Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
HashTable HashTable: Added void operator=(std::initializer_list<Tuple2<Key, T>>) 2016-08-11 21:41:55 +01:00
HashTable2 HashTable: Added C++11 initializer_list constructor 2016-08-05 22:30:26 +01:00
HashTable3 Update code to use the simpler C++11 template syntax removing spaces between closing ">"s 2016-01-10 22:41:16 +00:00
hexRef8 GeometricField: Renamed internalField() -> primitiveField() and dimensionedInternalField() -> internalField() 2016-04-30 21:40:09 +01:00
IndirectList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
io Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
IOField Parallel IO: New collated file format 2017-07-07 11:39:56 +01:00
ISLList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
IStringStream Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
labelRanges Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
liquid applications/test/liquid, applications/test/tensor: Updated 2017-05-19 08:28:00 +01:00
List List: Added void operator=(std::initializer_list<T>) 2016-08-09 20:36:32 +01:00
ListOps pplications/test/ListOps/Make/options: Removed extraneous backslash 2016-02-08 16:33:56 +00:00
Map Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
mappedPatch GeometricField: Renamed internalField() -> primitiveField() and dimensionedInternalField() -> internalField() 2016-04-30 21:40:09 +01:00
Matrix LUscalarMatrix: Added processor-local matrix inverse function 2016-07-17 14:44:50 +01:00
maxMem Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
memInfo Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
mesh boundaryField() -> boundaryFieldRef() 2016-04-24 22:07:37 +01:00
mkdir Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
momentOfInertia primitiveShapes: Generalised tetrahedron and triangle cutting. Cuts are 2017-05-22 12:23:22 +01:00
mvBak Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
NamedEnum Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
nullObject Resolve issues relating to compilation with clang-3.5.0 2014-12-15 22:38:10 +00:00
ODE Matrix: Added (i, j) addressing to allow support for addressing blocks of the matrix 2016-03-20 19:44:29 +00:00
OStringStream Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
PackedList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
PackedList1 Test-PackedList1: Removed chained assigments 2016-02-08 16:30:00 +00:00
PackedList2 Update code to use the simpler C++11 template syntax removing spaces between closing ">"s 2016-01-10 22:41:16 +00:00
PackedList3 Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
PackedList4 Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
parallel Updated UPstream::commsTypes to use the C++11 enum class 2017-03-10 19:54:55 +00:00
parallel-communicators Updated UPstream::commsTypes to use the C++11 enum class 2017-03-10 19:54:55 +00:00
parallel-nonBlocking Updated UPstream::commsTypes to use the C++11 enum class 2017-03-10 19:54:55 +00:00
passiveParticle vector::zero -> Zero 2016-04-16 18:34:41 +01:00
PatchEdgeFaceWave Standardized cell, patch and face loop index names 2016-04-25 10:28:32 +01:00
patchRegion Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
PatchTools Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
PointEdgeWave Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
pointField vector::zero -> Zero 2016-04-16 18:34:41 +01:00
Polynomial Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
POSIX Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
prefixOSstream Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
primitivePatch Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
pTraits Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
PtrList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
PtrListDictionary PtrListDictionary: New form of Dictionary in which the list type is PtrList rather than a linked-list 2015-09-16 21:26:26 +01:00
quaternion quaternion/septernion: Added multi- quaternion/septernion averaging 2016-04-16 15:59:05 +01:00
reconstruct applications/test: Updated include and link options 2015-07-16 14:37:19 +01:00
regex C++11: Replaced the C NULL with the safer C++11 nullptr 2016-08-05 17:19:38 +01:00
rigidBodyDynamics applications/test/rigidBodyDynamics/pendulumAndSpring: Another slightly more complex test 2016-04-17 15:47:03 +01:00
router Updated UPstream::commsTypes to use the C++11 enum class 2017-03-10 19:54:55 +00:00
sha1 Updated headers 2015-02-04 16:33:02 +00:00
simpleMatrix Matrix: Added (i, j) addressing to allow support for addressing blocks of the matrix 2016-03-20 19:44:29 +00:00
sizeof Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
slicedField applications/test: Updated include and link options 2015-07-16 14:37:19 +01:00
SLList LList, SLList: Added construction from and assignment to initializer_list 2016-08-12 10:01:41 +01:00
sort Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
speed Removed use of the deprecated "register" keyword 2015-06-30 10:26:44 +01:00
sphericalTensorField Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
spline Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
StaticHashTable Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
string Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
stringList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
symmTensorField Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
syncTools Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
tensor applications/test/liquid, applications/test/tensor: Updated 2017-05-19 08:28:00 +01:00
tensor2D Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
tetTetOverlap primitiveShapes: Generalised tetrahedron and triangle cutting. Cuts are 2017-05-22 12:23:22 +01:00
thermoMixture thermophysicalModels: Changed specie thermodynamics from mole to mass basis 2017-02-17 11:22:14 +00:00
tmpField Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
tokenize Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
triTet Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
Tuple2 Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
UDictionary Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
UIndirectList Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
UniformField Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
vector Add the OpenFOAM source tree 2014-12-10 22:40:10 +00:00
vectorTools applications/test: Updated to compile with Clang-3.5 2015-02-04 16:32:36 +00:00
volField GeometricField, volFields: Added experimental member function ".v()" and perfix operator "~" 2016-04-26 20:45:53 +01:00
volPointInterpolation boundaryField() -> boundaryFieldRef() 2016-04-24 22:07:37 +01:00
wallDist Further standardization of loop index naming: pointI -> pointi, patchI -> patchi 2016-05-18 21:20:42 +01:00
wordRe Update code to use the simpler C++11 template syntax removing spaces between closing ">"s 2016-01-10 22:41:16 +00:00
xfer Update code to use the simpler C++11 template syntax removing spaces between closing ">"s 2016-01-10 22:41:16 +00:00