Commit Graph

50 Commits

Author SHA1 Message Date
1d85fecf4d ENH: use Zero when zero-initializing types
- makes the intent clearer and avoids the need for additional
  constructor casting. Eg,

      labelList(10, Zero)    vs.  labelList(10, 0)
      scalarField(10, Zero)  vs.  scalarField(10, scalar(0))
      vectorField(10, Zero)  vs.  vectorField(10, vector::zero)
2018-12-11 23:50:15 +01:00
989ee54bb1 ENH: checkMesh: output volume of cellZone. Fixes #727. 2018-07-04 12:08:24 +01:00
bac943e6fc ENH: new bitSet class and improved PackedList class (closes #751)
- 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());
      }
2018-03-07 11:21:48 +01:00
55d9eb206d STYLE: missing space in checkMesh (fixes #767) 2018-04-03 09:40:04 +02:00
660f3e5492 ENH: cleanup autoPtr class (issue #639)
Improve alignment of its behaviour with std::unique_ptr

  - element_type typedef
  - release() method - identical to ptr() method
  - get() method to get the pointer without checking and without releasing it.
  - operator*() for dereferencing

Method name changes

  - renamed rawPtr() to get()
  - renamed rawRef() to ref(), removed unused const version.

Removed methods/operators

  - assignment from a raw pointer was deleted (was rarely used).
    Can be convenient, but uncontrolled and potentially unsafe.
    Do allow assignment from a literal nullptr though, since this
    can never leak (and also corresponds to the unique_ptr API).

Additional methods

  - clone() method: forwards to the clone() method of the underlying
    data object with argument forwarding.

  - reset(autoPtr&&) as an alternative to operator=(autoPtr&&)

STYLE: avoid implicit conversion from autoPtr to object type in many places

- existing implementation has the following:

     operator const T&() const { return operator*(); }

  which means that the following code works:

       autoPtr<mapPolyMesh> map = ...;
       updateMesh(*map);    // OK: explicit dereferencing
       updateMesh(map());   // OK: explicit dereferencing
       updateMesh(map);     // OK: implicit dereferencing

  for clarity it may preferable to avoid the implicit dereferencing

- prefer operator* to operator() when deferenced a return value
  so it is clearer that a pointer is involve and not a function call
  etc    Eg,   return *meshPtr_;  vs.  return meshPtr_();
2018-02-26 12:00:00 +01:00
5713efede3 STYLE: use range-for in checkTopology.C
- remove odd spaces in checkMesh output
2017-12-19 12:44:10 +01:00
c9211b6170 BUG: incorrect cellZone boundBox reported by checkMesh (closes #663)
- also incorrect number of points per zone
2017-12-19 12:24:47 +01:00
74b557d5f2 STYLE: indentation: trailing whitespace 2017-12-08 12:26:16 +00:00
b5f96306ea ENH: checkMesh: output information about zones 2017-08-31 17:41:50 +05:30
82a18e4cd9 ENH: Print info on zones only if present 2017-08-28 10:21:47 +05:30
81d4292855 ENH: Adds basic information for faceZone and cellZones during checkMesh
fixes #560
2017-08-18 17:04:51 +05:30
722d23f59c ENH: additional methods/operators for boundBox (related to #196)
- Constructor for bounding box of a single point.

- add(boundBox), add(point) ...
  -> Extend box to enclose the second box or point(s).

  Eg,
      bb.add(pt);
  vs.
      bb.min() = Foam::min(bb.min(), pt);
      bb.max() = Foam::max(bb.max(), pt);

Also works with other bounding boxes.
  Eg,
      bb.add(bb2);
      // OR
      bb += bb2;
  vs.
      bb.min() = Foam::min(bb.min(), bb2.min());
      bb.max() = Foam::max(bb.max(), bb2.max());

'+=' operator allows the reduction to be used in parallel
gather/scatter operations.

A global '+' operator is not currently needed.

Note: may be useful in the future to have a 'clear()' method
that resets to a zero-sized (inverted) box.

STYLE: make many bounding box constructors explicit
2017-01-25 19:26:50 +01:00
17d76e6261 ENH: boundBox 'reduce' method (related to #196)
reduce()
- parallel reduction of min/max values.
  Reduces coding for the callers.

  Eg,
      bb.reduce();

  instead of the previous method:
      reduce(bb.min(), minOp<point>());
      reduce(bb.max(), maxOp<point>());

STYLE:

- use initializer list for creating static content
- use point::min/point::max when defining standard boxes
2017-01-25 18:52:37 +01:00
b9940cbbb1 COMP: Multiple changes - first clean build after latest merge - UNTESTED 2016-09-23 15:36:53 +01:00
9fbd612672 GIT: Initial state after latest Foundation merge 2016-09-20 14:49:08 +01:00
aa30d0e7d5 checkMesh: Added option to write sets
- the checking for point-connected multiple-regions now also writes the
    conflicting points to a pointSet
  - with the -writeSets option it now also reconstructs & writes pointSets
2016-07-22 16:53:49 +01:00
e2336fefd3 checkMesh: Added writing of faceSets and cellSets containing errors
In parallel the sets are reconstructed. e.g.

mpirun -np 6 checkMesh -parallel -allGeometry -allTopology -writeSets vtk

will create a postProcessing/ folder with the vtk files of the
(reconstructed) faceSets and cellSets.

Also improved analysis of disconnected regions now also checks for point
connectivity with is useful for detecting if AMI regions have duplicate
points.

Patch contributed by Mattijs Janssens
2016-06-12 20:51:07 +01:00
fd9d801e2d GIT: Initial commit after latest foundation merge 2016-04-25 11:40:48 +01:00
43beb06018 Standardized cell, patch and face loop index names 2016-04-25 10:28:32 +01:00
2d5ff31649 boundaryField() -> boundaryFieldRef() 2016-04-24 22:07:37 +01:00
75cf86b769 Correct formatting: "forAll (" -> "forAll("
Resolves bug-report http://www.openfoam.org/mantisbt/view.php?id=1967
2016-01-09 23:10:16 +00:00
61dd625227 ENH: checkMesh: have -writeSets option
- checkMesh has option to write faceSets or (outside of) cellSets as
sampledSurface format. It automatically reconstructs the set on the master
and writes it to the postProcessing folder (as any sampledSurface). E.g.

    mpirun -np 6 checkMesh -allTopology -allGeometry -writeSets vtk -parallel

- fixed order writing of symmTensor in Ensight writers
2015-11-23 15:24:33 +00:00
79d8403f8f ENH: checkMesh - updated writing of disconnected regions 2013-10-11 09:17:53 +01:00
a787c35c48 ENH: checkMesh - write split regions to cellSets 2013-10-10 11:01:13 +01:00
f941955fc6 STYLE: Code cleanup 2012-12-11 17:12:58 +00:00
267d6fa42c ENH: checkMesh: parallel sizes printing for patches 2012-10-03 16:54:10 +01:00
3c6c675081 STYLE: Remove trailing whitespace 2012-03-30 08:53:47 +01:00
cfc8d7a190 ENH: checkMesh: output faceSet from faceFaces check (partially duplicate faces) 2011-10-25 10:25:17 +01:00
d25d4d28ce ENH: checkMesh: zero cell meshes 2011-10-17 18:27:47 +01:00
7ca505ce1b ENH: checkTopology: illegal cells checking 2011-07-21 14:02:49 +01:00
ce5db60a94 ENH: checkTopology: improved message 2011-07-19 22:08:22 +01:00
a44a993d27 ENH: emptyFvPatchField: moved check to checkMesh
It now handles multiple empty patches
2011-04-20 10:51:48 +01:00
6594b254b5 STYLE: chckTopology: wrong message. 2011-04-11 13:36:33 +01:00
95bc057204 BUG: (one|two)InternalFaceCells should be cellSets. 2010-11-24 18:36:48 +00:00
d5acd22a63 STYLE: use labelUList typedef instead of UList<label> or unallocLabelList 2010-11-02 09:32:32 +01:00
6548c1dd27 ENH: checkMesh : moved parallel checks into zones 2010-09-16 18:28:10 +01:00
1a633da3e6 ENH: checkMesh : move parallel checking into Zones. 2010-09-16 18:27:07 +01:00
7bcdbfc33a ENH: do not print boundinb box for zero-sized patches 2010-08-05 15:21:34 +01:00
96a3de7a43 ENH: work with processors with 0 cells. polyMesh::directions, checkMesh. 2010-06-01 14:35:55 +01:00
18eb2d7099 STYLE: Typo in warning message 2010-03-04 13:47:51 +00:00
e931525a0f BUG: sets relating to geometry (most mesh errors) should be written to
pointsInstance.

For now also dump topology related sets to pointsInstance since otherwise
paraFoam cannot see them (only looks at first 'sets' directory when searching
back)
2010-01-28 12:19:17 +00:00
4c13ef589b faceZone checking. wip 2009-07-09 11:57:21 +01:00
e28256477a checks on zones 2009-06-30 22:16:01 +01:00
00328814d9 disconnected cell check 2009-03-06 13:34:35 +00:00
95dcb6ded7 Simplify checking of container (List/HashTable, strings) sizes
- can use 'XX.empty()' instead of 'XX.size() == 0', 'XX.size() < 1' or
  'XX.size() <= 0' or for simpler coding.
  It also has the same number of characters as '!XX.size()' and /might/ be
  more readable

- many size checking had 'XX.size() > 0', 'XX.size() != 0', or 'XX.size() >= 1'
  when a simple 'XX.size()' suffices
2009-01-10 20:28:06 +01:00
d6b247a3b1 added static data boundBox::greatBox and boundBox::invertedBox
- boundBox::invertedBox is useful for initializing our own calculations
- NOTE treeBoundBox::greatBox is still in place, since it uses GREAT
  instead of VGREAT. If this is only historical, we can drop it.
2008-11-22 11:15:20 +01:00
0bbc8fd2c4 parallel checkMesh 2008-10-07 18:24:56 +01:00
4b5809ea7b Printing of bounding box of patches 2008-05-16 14:00:22 +01:00
e1938c7a0c Edge alignment check for 2D cases 2008-05-08 23:42:20 +01:00
3170c7c0c9 Creation of OpenFOAM-dev repository 15/04/2008 2008-04-15 18:56:58 +01:00