1. 31 Oct, 2019 1 commit
  2. 01 May, 2019 1 commit
    • Mark Olesen's avatar
      ENH: ensure that content changes in coded objects are noticed (#1293) · a85c55bb
      Mark Olesen authored
      - for codedFunctionObject and CodedSource the main code snippets
        were not included in the SHA1 calculation, which meant that many
        changes would not be noticed and no new library would be compiled.
      
        As a workaround, a dummy 'code' entry could be used solely for the
        purposes of generating a SHA1, but this is easily forgotten.
      
        We now allow tracking of the dynamicCodeContext for the coded
        objects and append to the SHA1 hasher with specific entries.
        This should solve the previous misbehaviour.
      
        We additionally add information about the ordering of the code
        sections. Suppose we have a coded function object (all code
        segments are optional) with the following:
      
            codeExecute "";
            codeWrite   #{ Info<< "Called\n"; #};
      
        which we subsequently change to this:
      
            codeExecute #{ Info<< "Called\n"; #};
            codeWrite   "";
      
        If the code strings are simply concatenated together, the SHA1 hashes
        will be identical. We thus 'salt' with their semantic locations,
        choosing tags that are unlikely to occur within the code strings
        themselves.
      
      - simplify the coded templates with constexpr for the SHA1sum
        information.
      
      - Correct the CodedSource to use 'codeConstrain' instead of
        'codeSetValue' for consistency with the underlying functions.
      a85c55bb
  3. 15 Apr, 2019 1 commit
  4. 12 Apr, 2019 1 commit
  5. 23 May, 2019 1 commit
  6. 06 Feb, 2019 1 commit
  7. 15 Dec, 2018 1 commit
    • Mark Olesen's avatar
      ENH: provide argList::envGlobalPath() static method · 9076f5b2
      Mark Olesen authored
      - this is identical to either of these solutions:
      
           * getEnv("FOAM_CASE")
           * stringOps::expand("<case>")
      
        but with a closer resemblance to argList or Time globalPath(),
        which makes the intent clearer.
        Avoids using raw strings in the caller, which improves compile-time checks.
      
        Used in situations where a class has no derivation path or other
        access to a time registry or command args.
      9076f5b2
  8. 12 Dec, 2018 1 commit
  9. 02 Dec, 2018 1 commit
    • Mark Olesen's avatar
      ENH: update handling of versioning and make control (issue #1010) · 6c68c34e
      Mark Olesen authored
      - Use the OPENFOAM define (eg, 1806, 1812), which normally corresponds
        to a major release, to define an API level. This remains consistent
        within a release cycle and means that it is possible to manage
        several sub-versions and continue to have a consistent lookup.
      
        The current API value is updated automatically during the build
        and cached as meta data for later use, even when the wmake/ directory
        is missing or OpenFOAM has not yet be initialized.
      
        The version information reported on program start or with -help
        usage adjusted to reflect this. The build tag from git now also
        carries the date as being more meaningful to trace than a hash
        value.
      
      - Update etc/bashrc and etc/cshrc to obtain the project directory
        directly instead of via its prefix directory. The value obtained
        corresponds to an absolute path, from which the prefix directory
        can be obtained.
      
        The combination of these changes removes the reliance on any
        particular directory naming convention.
        For example,
      
           With an 1812 version (API level):
      
           WM_PROJECT_VERSION=myVersion
      
           installed as /some/path/somewhere/openfoam-mySandbox
      
        This makes the -prefix, -foamInstall, -projectVersion, -version
        values of foamEtcFiles, and similar entries for foamConfigurePaths
        superfluous.
      
        WM_PROJECT_INST_DIR is no longer required or used
      
      ENH: improve handling and discovery of ThirdParty
      
      - improve the flexibility and reusability of ThirdParty packs to cover
        various standard use cases:
      
          1. Unpacking initial release tar files with two parallel directories
             - OpenFOAM-v1812/
             - ThirdParty-v1812/
      
          2. With an adjusted OpenFOAM directory name, for whatever reason
             - OpenFOAM-v1812-myCustom/
             - openfoam-1812-other-info/
      
          3. Operating with/without ThirdParty directory
      
        To handle these use cases, the following discovery is used.
      
        Note PROJECT = the OpenFOAM directory `$WM_PROJECT_DIR`
             PREFIX = the parent directory
             VERSION = `$WM_PROJECT_VERSION`
             API = `$WM_PROJECT_API`, as per `foamEtcFiles -show-api`
      
         0. PROJECT/ThirdParty
            - for single-directory installations
      
         1. PREFIX/ThirdParty-VERSION
            - this corresponds to the traditional approach
      
         2. PREFIX/ThirdParty-vAPI
            - allows for an updated value of VERSION (eg, v1812-myCustom)
              without requiring a renamed ThirdParty. The API value
              would still be '1812' and the original ThirdParty-v1812/
              would be found.
      
         3. PREFIX/ThirdParty-API
            - this is the same as the previous example, but using an unadorned
              API value. This also makes sense if the chosen version name also
              uses the unadorned API value in its naming
              (eg, 1812-patch190131, 1812.19W03)
      
         4. PREFIX/ThirdParty-common
            - permits maximum reuse for various versions, but only for
              experienced user who are aware of potential version
              incompatibilities
      
         Directory existence is checked as is the presence of an Allwmake file
         or a platforms/ directory. This reduces the potential of false positive
         matches and limits the selection to directories that are either
         with sources (has the Allwmake file), or pre-compiled binaries (has
         the platforms/ directory).
      
         If none of the explored directories are found to be suitable,
         it reverts to using a PROJECT/ThirdParty dummy location since
         this is within the project source tree and can be trusted to
         have no negative side-effects.
      
      ENH: add csh support to foamConfigurePaths
      
      - this removes the previously experienced inconsistence in config file
        contents.
      
      REMOVED: foamExec
      
      - was previously used when switching versions and before the
        bashrc/cshrc discovery logic was added. It is now obsolete.
      6c68c34e
  10. 29 Nov, 2018 1 commit
  11. 23 Nov, 2018 1 commit
  12. 06 Nov, 2018 1 commit
  13. 16 Oct, 2018 1 commit
  14. 15 Oct, 2018 2 commits
    • Mark Olesen's avatar
    • Mark Olesen's avatar
      ENH: rationalize dictionary access methods · c6520033
      Mark Olesen authored
      - use keyType::option enum to consolidate searching options.
        These enumeration names should be more intuitive to use
        and improve code readability.
      
          Eg,   lookupEntry(key, keyType::REGEX);
          vs    lookupEntry(key, false, true);
      
        or
      
          Eg,   lookupEntry(key, keyType::LITERAL_RECURSIVE);
          vs    lookupEntry(key, true, false);
      
      - new findEntry(), findDict(), findScoped() methods with consolidated
        search options for shorter naming and access names more closely
        aligned with other components. Behave simliarly to the
        methods lookupEntryPtr(), subDictPtr(), lookupScopedEntryPtr(),
        respectively. Default search parameters consistent with lookupEntry().
      
          Eg, const entry* e = dict.findEntry(key);
          vs  const entry* e = dict.lookupEntryPtr(key, false, true);
      
      - added '*' and '->' dereference operators to dictionary searchers.
      c6520033
  15. 22 Jun, 2018 2 commits
  16. 01 Jun, 2018 1 commit
  17. 30 May, 2018 1 commit
  18. 09 Apr, 2018 1 commit
  19. 22 Sep, 2017 1 commit
  20. 07 Jul, 2017 1 commit
    • 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 (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.
      d8d6030a
  21. 10 Mar, 2017 3 commits
  22. 12 Dec, 2016 1 commit
  23. 28 Nov, 2016 1 commit
  24. 16 Aug, 2016 1 commit
  25. 05 Aug, 2016 1 commit
  26. 18 Jul, 2016 2 commits
  27. 09 Jun, 2016 1 commit
  28. 28 May, 2016 1 commit
    • Henry Weller's avatar
      postProcessing: Replaced 'foamCalc' and the 'postCalc' utilities · e4dc50dc
      Henry Weller authored
      with the more general and flexible 'postProcess' utility and '-postProcess' solver option
      
      Rationale
      ---------
      
      Both the 'postProcess' utility and '-postProcess' solver option use the
      same extensive set of functionObjects available for data-processing
      during the run avoiding the substantial code duplication necessary for
      the 'foamCalc' and 'postCalc' utilities and simplifying maintenance.
      Additionally consistency is guaranteed between solver data processing
      and post-processing.
      
      The functionObjects have been substantially re-written and generalized
      to simplify development and encourage contribution.
      
      Configuration
      -------------
      
      An extensive set of simple functionObject configuration files are
      provided in
      
      OpenFOAM-dev/etc/caseDicts/postProcessing
      
      and more will be added in the future.  These can either be copied into
      '<case>/system' directory and included into the 'controlDict.functions'
      sub-dictionary or included directly from 'etc/caseDicts/postProcessing'
      using the '#includeEtc' directive or the new and more convenient
      '#includeFunc' directive which searches the
      '<etc>/caseDicts/postProcessing' directories for the selected
      functionObject, e.g.
      
      functions
      {
          #includeFunc Q
          #includeFunc Lambda2
      }
      
      '#includeFunc' first searches the '<case>/system' directory in case
      there is a local configuration.
      
      Description of #includeFunc
      ---------------------------
      
          Specify a functionObject dictionary file to include, expects the
          functionObject name to follow (without quotes).
      
          Search for functionObject dictionary file in
          user/group/shipped directories.
          The search scheme allows for version-specific and
          version-independent files using the following hierarchy:
          - \b user settings:
            - ~/.OpenFOAM/\<VERSION\>/caseDicts/postProcessing
            - ~/.OpenFOAM/caseDicts/postProcessing
          - \b group (site) settings (when $WM_PROJECT_SITE is set):
            - $WM_PROJECT_SITE/\<VERSION\>/caseDicts/postProcessing
            - $WM_PROJECT_SITE/caseDicts/postProcessing
          - \b group (site) settings (when $WM_PROJECT_SITE is not set):
            - $WM_PROJECT_INST_DIR/site/\<VERSION\>/caseDicts/postProcessing
            - $WM_PROJECT_INST_DIR/site/caseDicts/postProcessing
          - \b other (shipped) settings:
            - $WM_PROJECT_DIR/etc/caseDicts/postProcessing
      
          An example of the \c \#includeFunc directive:
          \verbatim
              #includeFunc <funcName>
          \endverbatim
      
      postProcess
      -----------
      
      The 'postProcess' utility and '-postProcess' solver option provide the
      same set of controls to execute functionObjects after the run either by
      reading a specified set of fields to process in the case of
      'postProcess' or by reading all fields and models required to start the
      run in the case of '-postProcess' for each selected time:
      
      postProcess -help
      
      Usage: postProcess [OPTIONS]
      options:
        -case <dir>       specify alternate case directory, default is the cwd
        -constant         include the 'constant/' dir in the times list
        -dict <file>      read control dictionary from specified location
        -field <name>     specify the name of the field to be processed, e.g. U
        -fields <list>    specify a list of fields to be processed, e.g. '(U T p)' -
                          regular expressions not currently supported
        -func <name>      specify the name of the functionObject to execute, e.g. Q
        -funcs <list>     specify the names of the functionObjects to execute, e.g.
                          '(Q div(U))'
        -latestTime       select the latest time
        -newTimes         select the new times
        -noFunctionObjects
                          do not execute functionObjects
        -noZero           exclude the '0/' dir from the times list, has precedence
                          over the -withZero option
        -parallel         run in parallel
        -region <name>    specify alternative mesh region
        -roots <(dir1 .. dirN)>
                          slave root directories for distributed running
        -time <ranges>    comma-separated time ranges - eg, ':10,20,40:70,1000:'
        -srcDoc           display source code in browser
        -doc              display application documentation in browser
        -help             print the usage
      
       pimpleFoam -postProcess -help
      
      Usage: pimpleFoam [OPTIONS]
      options:
        -case <dir>       specify alternate case directory, default is the cwd
        -constant         include the 'constant/' dir in the times list
        -dict <file>      read control dictionary from specified location
        -field <name>     specify the name of the field to be processed, e.g. U
        -fields <list>    specify a list of fields to be processed, e.g. '(U T p)' -
                          regular expressions not currently supported
        -func <name>      specify the name of the functionObject to execute, e.g. Q
        -funcs <list>     specify the names of the functionObjects to execute, e.g.
                          '(Q div(U))'
        -latestTime       select the latest time
        -newTimes         select the new times
        -noFunctionObjects
                          do not execute functionObjects
        -noZero           exclude the '0/' dir from the times list, has precedence
                          over the -withZero option
        -parallel         run in parallel
        -postProcess      Execute functionObjects only
        -region <name>    specify alternative mesh region
        -roots <(dir1 .. dirN)>
                          slave root directories for distributed running
        -time <ranges>    comma-separated time ranges - eg, ':10,20,40:70,1000:'
        -srcDoc           display source code in browser
        -doc              display application documentation in browser
        -help             print the usage
      
      The functionObjects to execute may be specified on the command-line
      using the '-func' option for a single functionObject or '-funcs' for a
      list, e.g.
      
      postProcess -func Q
      postProcess -funcs '(div(U) div(phi))'
      
      In the case of 'Q' the default field to process is 'U' which is
      specified in and read from the configuration file but this may be
      overridden thus:
      
      postProcess -func 'Q(Ua)'
      
      as is done in the example above to calculate the two forms of the divergence of
      the velocity field.  Additional fields which the functionObjects may depend on
      can be specified using the '-field' or '-fields' options.
      
      The 'postProcess' utility can only be used to execute functionObjects which
      process fields present in the time directories.  However, functionObjects which
      depend on fields obtained from models, e.g. properties derived from turbulence
      models can be executed using the '-postProcess' of the appropriate solver, e.g.
      
      pisoFoam -postProcess -func PecletNo
      
      or
      
      sonicFoam -postProcess -func MachNo
      
      In this case all required fields will have already been read so the '-field' or
      '-fields' options are not be needed.
      
      Henry G. Weller
      CFD Direct Ltd.
      e4dc50dc
  29. 21 May, 2016 1 commit
  30. 19 May, 2016 2 commits
  31. 18 May, 2016 2 commits
  32. 29 Feb, 2016 1 commit
  33. 20 Jan, 2016 1 commit