1. 07 Mar, 2018 1 commit
    • Mark OLESEN's avatar
      ENH: new bitSet class and improved PackedList class (closes #751) · bac943e6
      Mark OLESEN authored
      - The bitSet class replaces the old PackedBoolList class.
        The redesign provides better block-wise access and reduced method
        calls. This helps both in cases where the bitSet may be relatively
        sparse, and in cases where advantage of contiguous operations can be
        made. This makes it easier to work with a bitSet as top-level object.
      
        In addition to the previously available count() method to determine
        if a bitSet is being used, now have simpler queries:
      
          - all()  - true if all bits in the addressable range are empty
          - any()  - true if any bits are set at all.
          - none() - true if no bits are set.
      
        These are faster than count() and allow early termination.
      
        The new test() method tests the value of a single bit position and
        returns a bool without any ambiguity caused by the return type
        (like the get() method), nor the const/non-const access (like
        operator[] has). The name corresponds to what std::bitset uses.
      
        The new find_first(), find_last(), find_next() methods provide a faster
        means of searching for bits that are set.
      
        This can be especially useful when using a bitSet to control an
        conditional:
      
        OLD (with macro):
      
            forAll(selected, celli)
            {
                if (selected[celli])
                {
                    sumVol += mesh_.cellVolumes()[celli];
                }
            }
      
        NEW (with const_iterator):
      
            for (const label celli : selected)
            {
                sumVol += mesh_.cellVolumes()[celli];
            }
      
            or manually
      
            for
            (
                label celli = selected.find_first();
                celli != -1;
                celli = selected.find_next()
            )
            {
                sumVol += mesh_.cellVolumes()[celli];
            }
      
      - When marking up contiguous parts of a bitset, an interval can be
        represented more efficiently as a labelRange of start/size.
        For example,
      
        OLD:
      
            if (isA<processorPolyPatch>(pp))
            {
                forAll(pp, i)
                {
                    ignoreFaces.set(i);
                }
            }
      
        NEW:
      
            if (isA<processorPolyPatch>(pp))
            {
                ignoreFaces.set(pp.range());
            }
      bac943e6
  2. 24 Apr, 2018 3 commits
    • Mark OLESEN's avatar
      ENH: improve handling of ThirdParty packages · b4d38ab4
      Mark OLESEN authored
      - generalize some of the library extensions (.so vs .dylib).
        Provide as wmake 'sysFunctions'
      
      - added note about unsupported/incomplete system support
      
      - centralize detection of ThirdParty packages into wmake/ subdirectory
        by providing a series of scripts in the spirit of GNU autoconfig.
        For example,
      
            have_boost, have_readline, have_scotch, ...
      
        Each of the `have_<package>` scripts will generally provide the
        following type of functions:
      
            have_<package>          # detection
            no_<package>            # reset
            echo_<package>          # echoing
      
        and the following type of variables:
      
            HAVE_<package>          # unset or 'true'
            <package>_ARCH_PATH     # root for <package>
            <package>_INC_DIR       # include directory for <package>
            <package>_LIB_DIR       # library directory for <package>
      
        This simplifies the calling scripts:
      
            if have_metis
            then
                wmake metisDecomp
            fi
      
        As well as reducing clutter in the corresponding Make/options:
      
            EXE_INC = \
                -I$(METIS_INC_DIR) \
                -I../decompositionMethods/lnInclude
      
            LIB_LIBS = \
                -L$(METIS_LIB_DIR) -lmetis
      
        Any additional modifications (platform-specific or for an external build
        system) can now be made centrally.
      b4d38ab4
    • Mark OLESEN's avatar
      672f0574
    • Mark OLESEN's avatar
      ENH: error handling for Ragel STL parsing · 5af5bfa1
      Mark OLESEN authored
      - also simplify parsing by accepting any case on keywords.
        This implies that something like "sOlId", "SoLiD" will also
        be accepted. Although nobody should really count on this rather
        generous behaviour, it does simplfy the state machine even further.
      5af5bfa1
  3. 20 Apr, 2018 1 commit
  4. 19 Apr, 2018 1 commit
  5. 05 Apr, 2018 1 commit
  6. 04 Apr, 2018 1 commit
  7. 19 Apr, 2018 1 commit
  8. 18 Apr, 2018 3 commits
  9. 17 Apr, 2018 1 commit
  10. 13 Apr, 2018 1 commit
  11. 12 Apr, 2018 1 commit
    • Mark OLESEN's avatar
      STYLE: reorder/refactor stream format options · 4cf932b2
      Mark OLESEN authored
      - IOstreamOption class to encapsulate format, compression, version.
        This is ordered to avoid internal padding in the structure, which
        reduces several bytes of memory overhead for stream objects
        and other things using this combination of data.
      
        Byte-sizes:
            old  IOstream:48  PstreamBuffers:88  Time:928
            new  IOstream:24  PstreamBuffers:72  Time:904
      
      ====
      
      STYLE: remove support for deprecated uncompressed/compressed selectors
      
      In older versions, the system/controlDict used these types of
      specifications:
      
          writeCompression uncompressed;
          writeCompression compressed;
      
      As of DEC-2009, these were deprecated in favour of using normal switch
      names:
      
          writeCompression true;
          writeCompression false;
          writeCompression on;
          writeCompression off;
      
      Now removed these deprecated names and treat like any other unknown
      input and issue a warning. Eg,
      
         Unknown compression specifier 'compressed', assuming no compression
      
      ====
      
      STYLE: provide Enum of stream format names (ascii, binary)
      
      ====
      
      COMP: fixed incorrect IFstream construct in FIREMeshReader
      
      - spurious bool argument (presumably meant as uncompressed) was being
        implicitly converted to a versionNumber. Now caught by making
        IOstreamOption::versionNumber constructor explicit.
      
      - bad version specifier in changeDictionary
      4cf932b2
  12. 28 Mar, 2018 1 commit
  13. 27 Mar, 2018 2 commits
  14. 22 Mar, 2018 1 commit
  15. 16 Apr, 2018 1 commit
    • Mark OLESEN's avatar
      ENH: add alternative STL ASCII parsers · ea71484e
      Mark OLESEN authored
      - In addition to the traditional Flex-based parser, added a Ragel-based
        parser and a handwritten one.
      
        Some representative timings for reading 5874387 points (1958129 tris):
      
            Flex   Ragel   Manual
            5.2s   4.8s    6.7s         total reading time
            3.8s   3.4s    5.3s         without point merging
      ea71484e
  16. 13 Apr, 2018 1 commit
  17. 12 Apr, 2018 1 commit
  18. 11 Apr, 2018 3 commits
  19. 09 Apr, 2018 1 commit
  20. 12 Apr, 2018 1 commit
  21. 11 Apr, 2018 1 commit
  22. 10 Apr, 2018 1 commit
    • Mark OLESEN's avatar
      ENH: additional text expansion shortcuts (issue #792) · a9741cea
      Mark OLESEN authored
      Support the following expansions when they occur at the start of a
      string:
      
          Short-form       Equivalent
          =========       ===========
            <etc>/          ~OpenFOAM/   (as per foamEtcFile)
            <case>/         $FOAM_CASE/
            <constant>/     $FOAM_CASE/constant/
            <system>/       $FOAM_CASE/system/
      
      These can be used in fileName expansions to improve clarity and reduce
      some typing
      
           "<constant>/reactions"   vs  "$FOAM_CASE/constant/reactions"
      a9741cea
  23. 09 Apr, 2018 1 commit
    • Mark OLESEN's avatar
      ENH: provide Rand48 as generator in the expected C++11 form · b85d0b5c
      Mark OLESEN authored
      - this removes an OS-specific dependency (eg, drand48_r is not POSIX)
        and allows easier use of other random number generators.
      
        The Rand48 generator has identical behaviour and period as the
        lrand48() library routine, but holds its own seed and state
        (which makes it re-entrant) and can be combined with other
        random distributions.
      
        However, when using the modified form to obtain scalar values
        they will not be identical to what drand48() yields.
      
        This is because drand48() uses the raw 48-bit values to directly
        set the mantissa of an IEEE double where as the newer distribution
        normalizes based on the 32-bit value.
      
      STYLE: simplify code in Random::shuffle and use Swap
      b85d0b5c
  24. 11 Apr, 2018 2 commits
  25. 06 Apr, 2018 1 commit
  26. 05 Apr, 2018 1 commit
  27. 03 Apr, 2018 6 commits