Skip to content
Snippets Groups Projects
  1. Mar 17, 2021
  2. Mar 16, 2021
    • Mark OLESEN's avatar
      ENH: more consistent use of IOstreamOption · e8cf2a2c
      Mark OLESEN authored and Andrew Heather's avatar Andrew Heather committed
      - improves interface and data consistency.
        Older signatures are still active (via the Foam_IOstream_extras
        define).
      
      - refine internals for IOstreamOption streamFormat, versionNumber
      
      ENH: improve data alignment for IOstream and IOobject
      
      - fit sizeof label/scalar into unsigned char
      
      STYLE: remove dead code
      e8cf2a2c
  3. Feb 19, 2020
  4. Feb 18, 2020
  5. Oct 31, 2019
  6. Sep 24, 2019
  7. Feb 06, 2019
  8. Sep 11, 2018
  9. Jun 27, 2018
    • Will Bainbridge's avatar
      fileHandler: Added flush method · 2ae4bf73
      Will Bainbridge authored
      This method waits until all the threads have completed IO operations and
      then clears any cached information about the files on disk. This
      replaces the deactivation of threading by means of zeroing the buffer
      size when writing and reading of a file happen in sequence. It also
      allows paraFoam to update the list of available times.
      
      Patch contributed by Mattijs Janssens
      Resolves bug report https://bugs.openfoam.org/view.php?id=2962
      2ae4bf73
  10. Dec 13, 2017
  11. Mar 28, 2018
  12. Nov 08, 2017
  13. Jul 19, 2018
  14. Mar 21, 2018
    • Henry Weller's avatar
      ENH: Improvements to the fileHandler and collated IO · 8959b8e0
      Henry Weller authored
      Improvements to existing functionality
      --------------------------------------
        - MPI is initialised without thread support if it is not needed e.g. uncollated
        - Use native c++11 threading; avoids problem with static destruction order.
        - etc/cellModels now only read if needed.
        - etc/controlDict can now be read from the environment variable FOAM_CONTROLDICT
        - Uniform files (e.g. '0/uniform/time') are now read only once on the master only
          (with the masterUncollated or collated file handlers)
        - collated format writes to 'processorsNNN' instead of 'processors'.  The file
          format is unchanged.
        - Thread buffer and file buffer size are no longer limited to 2Gb.
      
      The global controlDict file contains parameters for file handling.  Under some
      circumstances, e.g. running in parallel on a system without NFS, the user may
      need to set some parameters, e.g. fileHandler, before the global controlDict
      file is read from file.  To support this, OpenFOAM now allows the global
      controlDict to be read as a string set to the FOAM_CONTROLDICT environment
      variable.
      
      The FOAM_CONTROLDICT environment variable can be set to the content the global
      controlDict file, e.g. from a sh/bash shell:
      
          export FOAM_CONTROLDICT=$(foamDictionary $FOAM_ETC/controlDict)
      
      FOAM_CONTROLDICT can then be passed to mpirun using the -x option, e.g.:
      
          mpirun -np 2 -x FOAM_CONTROLDICT simpleFoam -parallel
      
      Note that while this avoids the need for NFS to read the OpenFOAM configuration
      the executable still needs to load shared libraries which must either be copied
      locally or available via NFS or equivalent.
      
      New: Multiple IO ranks
      ----------------------
      The masterUncollated and collated fileHandlers can now use multiple ranks for
      writing e.g.:
      
          mpirun -np 6 simpleFoam -parallel -ioRanks '(0 3)'
      
      In this example ranks 0 ('processor0') and 3 ('processor3') now handle all the
      I/O.  Rank 0 handles 0,1,2 and rank 3 handles 3,4,5.  The set of IO ranks should always
      include 0 as first element and be sorted in increasing order.
      
      The collated fileHandler uses the directory naming processorsNNN_XXX-YYY where
      NNN is the total number of processors and XXX and YYY are first and last
      processor in the rank, e.g. in above example the directories would be
      
          processors6_0-2
          processors6_3-5
      
      and each of the collated files in these contains data of the local ranks
      only. The same naming also applies when e.g. running decomposePar:
      
      decomposePar -fileHandler collated -ioRanks '(0 3)'
      
      New: Distributed data
      ---------------------
      
      The individual root directories can be placed on different hosts with different
      paths if necessary.  In the current framework it is necessary to specify the
      root per slave process but this has been simplified with the option of specifying
      the root per host with the -hostRoots command line option:
      
          mpirun -np 6 simpleFoam -parallel -ioRanks '(0 3)' \
              -hostRoots '("machineA" "/tmp/" "machineB" "/tmp")'
      
      The hostRoots option is followed by a list of machine name + root directory, the
      machine name can contain regular expressions.
      
      New: hostCollated
      -----------------
      
      The new hostCollated fileHandler automatically sets the 'ioRanks' according to
      the host name with the lowest rank e.g. to run simpleFoam on 6 processors with
      ranks 0-2 on machineA and ranks 3-5 on machineB with the machines specified in
      the hostfile:
      
          mpirun -np 6 --hostfile hostfile simpleFoam -parallel -fileHandler hostCollated
      
      This is equivalent to
      
          mpirun -np 6 --hostfile hostfile simpleFoam -parallel -fileHandler collated -ioRanks '(0 3)'
      
      This example will write directories:
      
          processors6_0-2/
          processors6_3-5/
      
      A typical example would use distributed data e.g. no two nodes, machineA and
      machineB, each with three processes:
      
          decomposePar -fileHandler collated -case cavity
      
          # Copy case (constant/*, system/*, processors6/) to master:
          rsync -a cavity machineA:/tmp/
      
          # Create root on slave:
          ssh machineB mkdir -p /tmp/cavity
      
          # Run
          mpirun --hostfile hostfile icoFoam \
              -case /tmp/cavity -parallel -fileHandler hostCollated \
              -hostRoots '("machineA" "/tmp" "machineB" "/tmp")'
      
      Contributed by Mattijs Janssens
      8959b8e0
  15. Sep 06, 2017
  16. Jul 07, 2017
    • Andrew Heather's avatar
      INT: Integration of Mattijs' collocated parallel IO additions · d8d6030a
      Andrew Heather authored
      Original commit message:
      ------------------------
      
      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 (Ne...
      d8d6030a