Commit Graph

5560 Commits

Author SHA1 Message Date
Mark Olesen
f73b5b629f ENH: added HashTable 'lookup' and 'retain' methods
- lookup(): with a default value (const access)
  For example,
      Map<label> something;
      value = something.lookup(key, -1);

    being equivalent to the following:

      Map<label> something;
      value = -1;  // bad value
      if (something.found(key))
      {
          value = something[key];
      }

    except that lookup also makes it convenient to handle const references.
    Eg,

      const labelList& ids = someHash.lookup(key, labelList());

- For consistency, provide a two parameter HashTable '()' operator.
  The lookup() method is, however, normally preferable when
  const-only access is to be ensured.

- retain(): the counterpart to erase(), it only retains entries
  corresponding to the listed keys.

  For example,
      HashTable<someType> largeCache;
      wordHashSet preserve = ...;

      largeCache.retain(preserve);

    being roughly equivalent to the following two-stage process,
    but with reduced overhead and typing, and fewer potential mistakes.

      HashTable<someType> largeCache;
      wordHashSet preserve = ...;

      {
          wordHashSet cull(largeCache.toc()); // all keys
          cull.erase(preserve);               // except those to preserve
          largeCache.erase(cull);             //
      }

  The HashSet &= operator and retain() are functionally equivalent,
  but retain() also works with dissimilar value types.
2017-05-11 12:25:35 +02:00
Mark Olesen
8728e8353f STYLE: avoid explicit use of 'word' as HashTable template parameter
- less clutter and typing to use the default template parameter when
  the key is 'word' anyhow.

- use EdgeMap instead of the longhand HashTable version where
  appropriate
2017-05-10 13:44:27 +02:00
mattijs
134f7abd57 ENH: checkMesh: output vol fields of mesh quality. Fixes #466. 2017-05-08 10:50:59 +01:00
Mark Olesen
03d180724b ENH: improve HashTable iterator access and management
- provide key_iterator/const_key_iterator for all hashes,
  reuse directly for HashSet as iterator/const_iterator, respectively.

- additional keys() method for HashTable that returns a wrapped to
  a pair of begin/end const_iterators with additional size/empty
  information that allows these to be used directly by anything else
  expecting things with begin/end/size. Unfortunately does not yet
  work with std::distance().

  Example,
     for (auto& k : labelHashTable.keys())
     {
        ...
     }
2017-05-04 10:17:18 +02:00
Mark Olesen
e105e30bfb STYLE: add edge(labelPair) constructor, debug info etc. 2017-05-04 02:42:50 +02:00
Mark Olesen
45c29be341 COMP: avoid clang compiler warnings 2017-05-02 13:33:40 +02:00
Mark Olesen
f8c58bdd5c ENH: HashSet iterators operator* now return Key.
- much more useful than returning nil. Can now use with a for range:

    for (auto i : myLabelHashSet)
    {
        ...
    }
2017-05-02 01:58:38 +02:00
Mark Olesen
8f75bfbed5 ENH: add HashTable::writeKeys and HashSet::writeList
- can use the hash-set writeList in combination with FlatOutput:

  Eg, flatOutput(myHashSet);
2017-05-02 00:51:04 +02:00
Mark Olesen
c0a50dc621 ENH: improve overall consistency of the HashTable and its iterators
- previously had a mismash of const/non-const attributes on iterators
  that were confused with the attributes of the object being accessed.

- use the iterator keys() and object() methods consistently for all
  internal access of the HashTable iterators. This makes the intention
  clearer, the code easier to maintain, and protects against any
  possible changes in the definition of the operators.

- 'operator*': The standard form expected by STL libraries.
  However, for the std::map, this dereferences to a <key,value> pair,
  whereas OpenFOAM dereferences simply to <value>.

- 'operator()': OpenFOAM treats this like the 'operator*'

- adjusted the values of end() and cend() to reinterpret from nullObject
  instead of returning a static iteratorEnd() object.
  This means that C++ templates can now correctly deduce and match
  the return types from begin() and end() consistently.
  So that range-based now works.

  Eg,
      HashTable<label> table1 = ...;
      for (auto i : table1)
      {
          Info<< i << endl;
      }

  Since the 'operator*' returns hash table values, this prints all the
  values in the table.
2017-05-02 00:15:12 +02:00
Mark Olesen
0298c02b2d ENH: ensure nullObject is large enough for reinterpret
- previously occupied 1 byte. Now occupies enough to hold a pointer,
  which helps if using reinterpret_cast to something that has some
  member content.
2017-05-01 22:39:36 +02:00
Mark Olesen
805b76d4b9 ENH: support UList[labelRange] and SubList construction with labelRange
This uses a concept similar to what std::valarray and std::slice do.
A labelRange provides a convenient container for holding start/size
and lends itself to addressing 'sliced' views of lists.
For safety, the operations and constructors restricts the given input range
to a valid addressible region of the underlying list, while the labelRange
itself precludes negative sizes.

The SubList version is useful for patches or other things that have a
SubList as its parameter. Otherwise the UList [] operator will be the
more natural solution. The slices can be done with a labelRange, or
a {start,size} pair.

Examples,
     labelList list1 = identity(20);

     list1[labelRange(18,10)]  = -1;
     list1[{-20,25}] = -2;
     list1[{1000,5}] = -3;

     const labelList list2 = identity(20);
     list2[{5,10}] = -3;  // ERROR: cannot assign to const!
2017-05-01 14:01:09 +02:00
Mark Olesen
75ef6f4e50 ENH: add labelRange comparison operators and subset methods
- improve interface consistency.
2017-04-30 21:29:24 +02:00
Mark Olesen
7b427c382e ENH: add Tuple2 comparison operators, typedefs 2017-04-30 13:05:49 +02:00
Mark Olesen
c65e2e580d ENH: add some standard templates and macros into stdFoam.H
- some functionality similar to what the standary library <iterator>
  provides.

  * stdFoam::begin() and stdFoam::end() do type deduction,
    which means that many cases it is possible to manage these types
    of changes.

    For example, when managing a number of indices:
       Map<labelHashSet> lookup;

    1) Longhand:

        for
        (
            Map<labelHashSet>::const_iterator iter = lookup.begin();
            iter != lookup.end();
            ++iter
        )
        { .... }

    1b) The same, but wrapped via a macro:

        forAllConstIter(Map<labelHashSet>, lookup, iter)
        { .... }

    2) Using stdFoam begin/end templates directly

        for
        (
            auto iter = stdFoam::begin(lookup);
            iter != stdFoam::end(lookup);
            ++iter
        )
        { .... }

    2b) The same, but wrapped via a macro:

        forAllConstIters(lookup, iter)
        { .... }

Note that in many cases it is possible to simply use a range-based for.
Eg,
     labelList myList;

     for (auto val : myList)
     { ... }

     for (const auto& val : myList)
     { ... }

These however will not work with any of the OpenFOAM hash-tables,
since the standard C++ concept of an iterator would return a key,value
pair when deferencing the *iter.

The deduction methods also exhibits some slightly odd behaviour with
some PtrLists (needs some more investigation).
2017-04-29 22:28:16 +02:00
Mark Olesen
6a5ea9a2bf ENH: improve HashSet construction and assignment
- make construct from UList explicit and provide corresponding
  assignment operator.

- add construct,insert,set,assignment from FixedList.
  This is convenient when dealing with things like edges or triFaces.
2017-04-29 15:19:47 +02:00
Mark Olesen
ded105c539 STYLE: HashTable documentation
- explicitly mention the value-initialized status for the operator().
  This means that the following code will properly use an initialized
  zero.

      HashTable<label> regionCount;

      if (...)
         regionCount("region1")++;

      ... and also this;

      if (regionCount("something") > 0)
      {
          ...
      }

  Note that the OpenFOAM HashTable uses operator[] to provide read and
  write access to *existing* entries and will provoke a FatalError if
  the entry does not exist.

  The operator() provides write access to *existing* entries or will
  create the new entry as required.
  The STL hashes use operator[] for this purpose.
2017-04-29 12:27:11 +02:00
Mark Olesen
1d9b311b82 ENH: further refinement to edge methods
- more hash-like methods.
  Eg, insert/erase via lists, clear(), empty(),...

- minVertex(), maxVertex() to return the smallest/largest label used

- improved documentation, more clarification about where/how negative
  point labels are treated.
2017-04-29 12:14:46 +02:00
Andrew Heather
c9df5f9249 Merge branch 'dict-lookup' into 'develop'
Dict lookup

See merge request !105
2017-05-02 16:37:57 +01:00
Andrew Heather
a8e3482591 Merge branch 'edge-labelPair-containers' into 'develop'
Use updated edge and labelPair containers

See merge request !106
2017-05-02 16:35:54 +01:00
Andrew Heather
1a24be6e54 Merge branch 'feature-random-numbers' into 'develop'
Updated random numbers

See merge request !107
2017-04-28 10:11:18 +01:00
Andrew Heather
7f0cc0045d ENH: Random numbers - updated dependent code from change cachedRandom->Random class 2017-04-28 09:15:52 +01:00
Mark Olesen
633e4c9c7f ENH: Use edgeHashes.H and labelPairHashes.H
- avoids some duplicate code.
2017-04-27 10:15:56 +02:00
Mark Olesen
5514471c15 BUG: FixedList '<' operator using a template parameter (fixes #458)
- cannot use comparison of list sizes. Okay for UList, but not here.

STYLE:
- don't need two iterators for the '<' comparison, can just access
  internal storage directly
2017-04-27 01:30:50 +02:00
Andrew Heather
4ce77f6843 Merge branch 'master' into develop 2017-04-25 12:31:22 +01:00
Mark Olesen
ffe3e0e425 ENH: allow '^' as anchor for dictionary scoping (issue #429)
- The existing ':' anchor works for rvalue substitutions
  (Eg, ${:subdict.name}), but fails for lvalues, since it is
  a punctuation token and parse stops there.
2017-04-25 11:57:21 +02:00
Mark Olesen
32a6c1d988 ENH: relocate randomPointInPlane as plane::somePointInPlane
- makes more sense to bundle it with plane.
2017-04-24 20:23:31 +02:00
Mark Olesen
f2304f7c0b ENH: various enhancements for edge.
- support edge-ordering on construction, and additional methods:
  - sort(), sorted(), unitVec(), collapse()

- null constructor initializes with -1, for consistency with face,
  triFace and since it is generally much more useful that way.

- add some methods that allow edges to used somewhat more like hashes.
  - count(), found(), insert(), erase()

  Here is possible way to use that:

      edge someEdge;  // initializes with '-1' for both entries

      if (someEdge.insert(pt1))
      {
         // added a new point label
      }

      ... later

      // unmark point on edge
      someEdge.erase(pt2);

--

STYLE:

- use UList<point> instead of pointField for edge methods for flexibility.

  The pointField include is retained, however, since many other routines
  may be relying on it being included via edge.H
2017-04-23 19:25:35 +02:00
Mark Olesen
89f2eff565 STYLE: improve usage notes for transformPoints, surfaceTransformPoints 2017-04-20 16:27:44 +02:00
Mark Olesen
d4c7d8c6e5 ENH: add possibility to enable/disable profiling globally (issue #441)
- use InfoSwitch to disable, or via static method.

- respect the state of the argList banner when deciding to emit
  initialization information. Can otherwise end up with unwanted
  output rubbish on things like foamDictionary and foamListTimes.
2017-04-19 17:04:37 +02:00
Andrew Heather
c072f911c9 BUG: Corrected compilation errors 2017-04-19 13:44:54 +01:00
mattijs
f95dbc2049 ENH: refineWallLayer: enable parallel operation. Fixes #454. 2017-04-13 16:30:46 +01:00
mattijs
dbc1e37a62 BUG: shm: layerSets gets removed. Fixes #453. 2017-04-13 11:26:35 +01:00
Mark Olesen
f2e3c1c422 ENH: provide HashTable::iterator::found() method
- This can be used as a convenient alternative to comparing against end().
  Eg,

    dictionaryConstructorTable::iterator cstrIter =
        dictionaryConstructorTablePtr_->find(methodType);

    if (cstrIter.found())
    {
        ...
    }
  vs.
    if (cstrIter != dictionaryConstructorTablePtr_->end())
    {
        ...
    }
2017-04-11 09:55:54 +02:00
Mark Olesen
140c5110fe STYLE: remove tabs from files and shorten line-length. 2017-04-10 16:11:33 +02:00
Mark Olesen
b257e80d9a Merge remote-tracking branch 'origin/master' into develop 2017-04-07 09:28:26 +02:00
Mark Olesen
30a49678d1 STYLE: add help to some thermophysical utilities and remove useless options 2017-04-07 08:32:36 +02:00
Mark Olesen
e1f64efdb1 STYLE: remove stray log files 2017-04-07 08:32:13 +02:00
Mark Olesen
5d15a13247 STYLE: use FOAM_UTILITIES in Make/options
- consistent with use of FOAM_SOLVERS, and reduces reliance on the FOAM_APP
  env variable
2017-04-07 08:17:43 +02:00
Mark Olesen
96fd3c9367 STYLE: consistent use of LIB_SRC in Make/options
- had occasional remnant use of FOAM_SRC
2017-04-06 23:56:23 +02:00
sergio
982c28d545 BUG: Gitlab issue 442. Resetting allLambda for phases in the alphaEqns.H for interMixingFoam 2017-04-05 13:58:45 -07:00
Mark Olesen
1bdb57985f COMP: drop FOAM_EXT_LIBBIN dependency for VTK-related items
- they don't use scotch/metis anyhow, which are the only things
  placed in FOAM_EXT_LIBBIN
2017-04-04 16:22:12 +02:00
Mark Olesen
dd78e042fe ENH: reduce reliance on FOAM_EXT_LIBBIN during builds
- just check WM_PROJECT_DIR instead.

- provide a fallback value when FOAM_EXT_LIBBIN might actually be needed.

Only strictly need FOAM_EXT_LIBBIN for scotch/metis decomposition, and
when these are actually supplied by ThirdParty.
All other ThirdParty dependencies are referenced by BOOST_ARCH_PATH etc.

Can therefore drop the FOAM_EXT_LIBBIN dependency for VTK-related
things, which do not use scotch/metis anyhow.
2017-04-04 15:28:42 +02:00
Mark Olesen
7d048c71be Merge remote-tracking branch 'origin/master' into develop 2017-04-04 16:15:10 +02:00
Mark Olesen
638aded7cc BUG: bad shell construct for building optional component 2017-04-04 14:13:55 +02:00
Mark Olesen
af49eaf625 ENH: default jobControl now under the '~/.OpenFOAM/jobControl' directory
- this implies that jobControl is a user-resource for OpenFOAM.
  It was previously located under $WM_PROJECT_INST_DIR/jobControl,
  but few users will have write access there.

- an unset FOAM_JOB_DIR variable is treated as "~/.OpenFOAM/jobControl",
  which can partially reduce environment clutter.

- provide argList::noJobInfo() to conveniently suppress job-info on an
  individual basis for short-running utilities (eg, foamListTimes) to
  avoid unneeded clutter.
2017-04-03 08:28:15 +02:00
Mark Olesen
836d04ffc1 ENH: various general improvments to the POSIX functions
- ensure proper and sensible handling of empty names.
  Eg, isDir(""), isFile("") are no-ops, and avoid file-stat

- rmDir:
  * optional 'silent' option to suppress messages.
  * removes all possible sub-entries, instead of just giving up on
    the first problem encountered.

- reduced code duplication in etcFiles

ENH: provide WM_USER_RESOURCE_DIRNAME define (in foamVersion.H)

- this is still a hard-coded value, but at least centrally available
2017-03-30 11:45:25 +02:00
Mark Olesen
07ce0a547a COMP: try harder to find/use zoltan library 2017-03-28 10:57:37 +02:00
Mark Olesen
215349aa69 BUG: in wordRe::operator=(const keyType&)
- the regex was not being unset on assignment.
- drop unused recompile() method as being dubious
2017-03-10 13:05:35 +01:00
Mark Olesen
f05be160e2 BUG: dictionary entries not being properly merged/overwritten (closes #418)
STYLE: update dictionary documentation
2017-03-03 11:36:24 +01:00
Mark Olesen
5fc6c3ca34 ENH: provide FOAM_EXECUTABLE as environment variable in argList
- can be used directly from within an application or function-object.
  Makes it available for dictionaries.
2017-02-24 17:48:13 +01:00