1. 30 Apr, 2018 4 commits
  2. 27 Apr, 2018 8 commits
    • Mark OLESEN's avatar
      ENH: revert regionSplit to older algorithm (issue #805) · 413a6618
      Mark OLESEN authored
      - the algorithm was last used in OpenFOAM-2.4, after which it was
        replaced with a FaceCellWave version.
        Whereas the original (2.4.x) version exhibited performance
        degradation on very large meshes (with explicit constraints), the
        FaceCellWave version exhibited performance issues with large numbers
        of blocked faces.
        With large numbers of blocked faces, the FaceCellWave regionSplit
        could take between 10 to 100 times longer due to the slow
        propagation speed through blocked faces.
        The 2.4 regionSplit has been revamped to avoid local memory
        allocations, which appears to have been the source of the original
        performance issues on large meshes.
        For additional performance, intermediate renumbering is also avoided
        during the consolidation of regions over processor domains.
    • Mark OLESEN's avatar
      ENH: improve memory allocations for explicit connections (issue #805) · 3aaaae09
      Mark OLESEN authored
      STYLE: change access methods names in mesh wave algorithms
      - nUnvisitedCells(), nUnvisitedFaces() etc instead of
        getUnsetCells(), getUnsetFaces()
      - simplify some coding with range-for
    • Mark OLESEN's avatar
      ENH: change findCell mode in meshRefinement (issue #805) · cebec5cf
      Mark OLESEN authored
      - in 2.4.x the general default for polyMesh::findCell was FACE_DIAG_TRIS,
        but this was changed to CELL_TETS for better handling of concave
      - in snappyHexMesh meshRefinement, findCell is used to define
        locations in mesh and cells for closer refinement. Using CELL_TETS
        causes an octree rebuild when the mesh has changed and this adds
        considerable overhead. For this operation, the faster FACE_DIAG_TRIS
        mode can be used instead.
    • Mark OLESEN's avatar
      ENH: make format of ExecutionTime = ... output configurable (issue #788) · b77e4888
      Mark OLESEN authored
      - controlled by the the 'printExecutionFormat' InfoSwitch in
            // Style for "ExecutionTime = " output
            // - 0 = seconds (with trailing 's')
            // - 1 = day-hh:mm:ss
         ExecutionTime = 112135.2 s  ClockTime = 113017 s
         ExecutionTime = 1-07:08:55.20  ClockTime = 1-07:23:37
      - Callable via the new Time::printExecutionTime() method,
        which also helps to reduce clutter in the applications.
           Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
               << "  ClockTime = " << runTime.elapsedClockTime() << " s"
               << nl << endl;
      ENH: return elapsedClockTime() and clockTimeIncrement as double
      - previously returned as time_t, which is less portable.
    • Mark OLESEN's avatar
      STYLE: minor cleanup in decompositionMethod · 8474f9e7
      Mark OLESEN authored
      - reduce cell looping. Avoid initial looping over blockFace.
      - make early return (no processor sets, connections, or blocked faces)
        more apparent.
    • Mark OLESEN's avatar
      STYLE: remove old/dead decompositionMethod::calcCellCells code · 00810aee
      Mark OLESEN authored
      - alternative calcCellCells that handled explicitConnections was
        deactivated (2014 or earlier) and finally removed APR-2018.
    • Mark OLESEN's avatar
      ENH: ListOp::inplaceMapValue using a Map<label> for the mapping. · 468062c1
      Mark OLESEN authored
      For example, with some HashTable or Map container of models
          { model0 => 1, model1 => 4, model2 => 5, model3 => 12, model4 => 15, }
      specify the remapping
          Map<label> mapper({{1, 3}, {2, 6}, {3, 12}, {5, 8}});
      inplaceMapValue(mapper, models) then yields
          { model0 => 3, model1 => 4, model2 => 8, model3 => 12, model4 => 15, }
      ENH: extend bitSet::count() to optionally count unset bits instead.
      ENH: BitOps compatibility methods for boolList.
      - These ease coding that uses a boolList instead of bitSet and use
        short-circuit logic when possible.
        Eg, when 'bitset' and 'bools' contain the same information
            bitset.count()  <->  BitOps::count(bools)
            bitset.all()    <->  BitOps::all(bools)
            bitset.any()    <->  BitOps::any(bools)
            bitset.none()   <->  BitOps::none(bools)
        These methods can then be used directly in parameters or in logic.
            returnReduce(bitset.any(), orOp<bool>());
            returnReduce(BitOps::any(bools), orOp<bool>());
            if (BitOps::any(bools)) ...
    • Mark OLESEN's avatar
      STYLE: consistent '// End namespace' markers · dd8605dd
      Mark OLESEN authored
  3. 26 Apr, 2018 6 commits
  4. 25 Apr, 2018 9 commits
  5. 24 Apr, 2018 6 commits
    • Mark OLESEN's avatar
      ENH: new bitSet class and improved PackedList class (closes #751) · 430d0f62
      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
        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
                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,
            if (isA<processorPolyPatch>(pp))
                forAll(pp, i)
            if (isA<processorPolyPatch>(pp))
    • Mark OLESEN's avatar
      CONFIG: remove WM_LINK_LANGUAGE env variable (always c++) · b011b298
      Mark OLESEN authored
      - was somewhat redundant in wmake/rules/General/general anyhow
    • Mark OLESEN's avatar
      ENH: improve handling of ThirdParty packages · d4cbed29
      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
                wmake metisDecomp
        As well as reducing clutter in the corresponding Make/options:
            EXE_INC = \
                -I$(METIS_INC_DIR) \
            LIB_LIBS = \
                -L$(METIS_LIB_DIR) -lmetis
        Any additional modifications (platform-specific or for an external build
        system) can now be made centrally.
    • Mark OLESEN's avatar
    • Mark OLESEN's avatar
      COMP: sinclude platform-specific CGAL rules · 29dd6999
      Mark OLESEN authored
      - permits platform-specific override of the general CGAL rules
    • Mark OLESEN's avatar
      ENH: error handling for Ragel STL parsing · f96f446d
      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.
  6. 20 Apr, 2018 3 commits
  7. 19 Apr, 2018 4 commits