1. 14 Jul, 2020 2 commits
    • Mark Olesen's avatar
      ENH: mutable libs() access in Time and other classes (#1737) · 1e7c6ea2
      Mark Olesen authored
      - This reflects the pre-existing coding situation where const_cast was
        used throughout to effect the same.
      
      STYLE: fix private/protected access
      
      - CodedField, codedMixedFvPatchField
      1e7c6ea2
    • Mark Olesen's avatar
      ENH: various dlLibraryTable improvements/refinements (#1737) · 41d3e6f1
      Mark Olesen authored
      - libs() singleton method for global library handling
      
      - explicit handling of empty filename for dlLibraryTable open/close.
        Largely worked before, but now be more explicit about its behaviour.
      
      - add (key, dict) constructor and open() methods.
        More similarity to dimensionedType, Enum etc, and there is no
        ambiguity with the templated open().
      
      - construct or open from initializer_list of names
      
      - optional verbosity when opening with auxiliary table,
        avoid duplicate messages or spurious messages for these.
      
      - basename and fullname methods (migrated from dynamicCode).
      
      - centralise low-level load/unload hooks
      
      - adjust close to also dlclose() aliased library names.
      41d3e6f1
  2. 31 Oct, 2019 1 commit
  3. 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
  4. 15 Apr, 2019 1 commit
  5. 12 Apr, 2019 1 commit
  6. 23 May, 2019 1 commit
  7. 06 Feb, 2019 1 commit
  8. 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
  9. 12 Dec, 2018 1 commit
  10. 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
  11. 29 Nov, 2018 1 commit
  12. 23 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. 09 Apr, 2018 1 commit
  17. 22 Sep, 2017 1 commit
  18. 10 Mar, 2017 3 commits
  19. 18 Jul, 2016 1 commit
  20. 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
  21. 19 May, 2016 2 commits
  22. 18 May, 2016 1 commit
    • Henry Weller's avatar
      dynamicCode: the "code" entry is now optional · 354bc8bd
      Henry Weller authored
      codedFunctionObject: Added the "codeWrite" entry
          for the "write" function for consistency.
          The previous method of using the "code" entry for the "write"
          function was inconsistent and very confusing.
      354bc8bd
  23. 08 Nov, 2015 1 commit
  24. 31 Aug, 2012 1 commit
  25. 12 Jul, 2012 1 commit
  26. 22 Jun, 2012 1 commit
  27. 06 Jun, 2012 2 commits
  28. 14 Aug, 2011 1 commit
  29. 21 Jun, 2011 1 commit
  30. 26 May, 2011 1 commit
  31. 11 May, 2011 1 commit
  32. 13 Apr, 2011 1 commit
  33. 25 Mar, 2011 1 commit